Compare commits
289 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
+7
-2
@@ -4,10 +4,15 @@ Makefile.in.in
|
|||||||
configure
|
configure
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
config/
|
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
autom4te.cache/
|
autom4te.cache/
|
||||||
m4/
|
po/gnome-shell-extensions.pot
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/stamp-it
|
po/stamp-it
|
||||||
staging/
|
staging/
|
||||||
|
|
||||||
|
*~
|
||||||
|
*.gmo
|
||||||
|
metadata.json
|
||||||
|
*.gschema.xml
|
||||||
|
*.gschema.valid
|
||||||
|
|||||||
@@ -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.
|
||||||
+26
@@ -1,3 +1,29 @@
|
|||||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
SUBDIRS = extensions po
|
SUBDIRS = extensions po
|
||||||
|
|
||||||
|
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 $(builddir)/_build; \
|
||||||
|
mkdir $(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 "$(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
|
||||||
|
|||||||
@@ -0,0 +1,115 @@
|
|||||||
|
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
|
||||||
+44
-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.3.90],[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,41 @@ 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
|
dnl keep this in alphabetic order
|
||||||
ALL_EXTENSIONS="example alternate-tab xrandr-indicator windowsNavigator"
|
dnl by default, install only extensions that do not change completely the shell experience,
|
||||||
|
dnl that don't require GSettings and that don't require external packages for typelibs
|
||||||
|
dnl (so basically only menus, status icons, search providers, overview tabs, message tray sources, etc.)
|
||||||
|
DEFAULT_EXTENSIONS="alternative-status-menu apps-menu dock drive-menu gajim places-menu windowsNavigator workspace-indicator"
|
||||||
|
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS alternate-tab auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
|
||||||
|
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 all extensions that can be installed in the home directory and have no external depedencies.
|
||||||
|
Use "all" to enable all available extensions.])],
|
||||||
[],
|
[],
|
||||||
[enable_extensions=$ALL_EXTENSIONS]
|
[enable_extensions=$DEFAULT_EXTENSIONS]
|
||||||
)
|
)
|
||||||
|
if test x$enable_extensions = xall; then
|
||||||
|
enable_extensions="$ALL_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|dock|drive-menu|example|gajim|native-window-placement|places-menu|user-theme|windowsNavigator|workspace-indicator)
|
||||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -42,20 +60,25 @@ 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
|
|
||||||
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/dock/Makefile
|
||||||
|
extensions/drive-menu/Makefile
|
||||||
|
extensions/example/Makefile
|
||||||
|
extensions/gajim/Makefile
|
||||||
|
extensions/native-window-placement/Makefile
|
||||||
|
extensions/places-menu/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
|
||||||
|
|||||||
+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@|$(PACKAGE_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,6 @@
|
|||||||
EXTENSION_ID = alternate-tab
|
EXTENSION_ID = alternate-tab
|
||||||
|
|
||||||
|
EXTRA_MODULES = prefs.js
|
||||||
|
|
||||||
include ../../extension.mk
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|||||||
@@ -1,22 +1,288 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
/* most of the code is borrowed from
|
||||||
|
* > js/ui/altTab.js <
|
||||||
|
* of the gnome-shell source code
|
||||||
|
*/
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Shell= imports.gi.Shell;
|
const Meta = imports.gi.Meta;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
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 ModalDialog = imports.ui.modalDialog;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const WindowManager = imports.ui.windowManager;
|
const WindowManager = imports.ui.windowManager;
|
||||||
|
|
||||||
function AltTabPopup2() {
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
this._init();
|
const _ = Gettext.gettext;
|
||||||
}
|
const N_ = function(e) { return e };
|
||||||
|
|
||||||
AltTabPopup2.prototype = {
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
__proto__ : AltTab.AltTabPopup.prototype,
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
let settings;
|
||||||
|
|
||||||
|
const POPUP_DELAY_TIMEOUT = 150; // milliseconds
|
||||||
|
|
||||||
|
const SETTINGS_BEHAVIOUR_KEY = 'behaviour';
|
||||||
|
const SETTINGS_HIGHLIGHT_SELECTED_KEY = 'highlight-selected';
|
||||||
|
|
||||||
|
const AltTabPopupWorkspaceIcons = new Lang.Class({
|
||||||
|
Name: 'AlternateTab.AltTabPopupWorkspaceIcons',
|
||||||
|
Extends: AltTab.AltTabPopup,
|
||||||
|
|
||||||
|
_windowActivated : function(thumbnailList, n) { },
|
||||||
|
|
||||||
|
show : function(backward, binding, mask) {
|
||||||
|
let appSys = Shell.AppSystem.get_default();
|
||||||
|
let apps = appSys.get_running ();
|
||||||
|
|
||||||
|
if (!apps.length)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!Main.pushModal(this.actor)) {
|
||||||
|
// Probably someone else has a pointer grab, try again with keyboard only
|
||||||
|
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._haveModal = true;
|
||||||
|
this._modifierMask = AltTab.primaryModifier(mask);
|
||||||
|
|
||||||
|
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 WindowSwitcher(apps, this);
|
||||||
|
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 = this._appSwitcher.icons;
|
||||||
|
|
||||||
|
// Need to force an allocation so we can figure out whether we
|
||||||
|
// need to scroll when selecting
|
||||||
|
this.actor.opacity = 0;
|
||||||
|
this.actor.show();
|
||||||
|
this.actor.get_allocation_box();
|
||||||
|
|
||||||
|
this._highlight_selected = settings.get_boolean(SETTINGS_HIGHLIGHT_SELECTED_KEY);
|
||||||
|
|
||||||
|
// Make the initial selection
|
||||||
|
if (binding == 'switch_group') {
|
||||||
|
//see AltTab.AltTabPopup.show function
|
||||||
|
//cached windows are always of length one, so select first app and the window
|
||||||
|
//the direction doesn't matter, so ignore backward
|
||||||
|
this._select(0, 0);
|
||||||
|
} else if (binding == 'switch_group_backward') {
|
||||||
|
this._select(0, 0);
|
||||||
|
} else if (binding == 'switch_windows_backward') {
|
||||||
|
this._select(this._appIcons.length - 1);
|
||||||
|
} else if (this._appIcons.length == 1) {
|
||||||
|
this._select(0);
|
||||||
|
} else if (backward) {
|
||||||
|
this._select(this._appIcons.length - 1);
|
||||||
|
} else {
|
||||||
|
this._select(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// There's a race condition; if the user released Alt before
|
||||||
|
// we got the grab, then we won't be notified. (See
|
||||||
|
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
|
||||||
|
// details.) So we check now. (Have to do this after updating
|
||||||
|
// selection.)
|
||||||
|
let [x, y, mods] = global.get_pointer();
|
||||||
|
if (!(mods & this._modifierMask)) {
|
||||||
|
this._finish();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We delay showing the popup so that fast Alt+Tab users aren't
|
||||||
|
// disturbed by the popup briefly flashing.
|
||||||
|
this._initialDelayTimeoutId = Mainloop.timeout_add(POPUP_DELAY_TIMEOUT,
|
||||||
|
Lang.bind(this, function () {
|
||||||
|
this.actor.opacity = 255;
|
||||||
|
this._initialDelayTimeoutId = 0;
|
||||||
|
}));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_select : function(app, window, forceAppFocus) {
|
||||||
|
if (app != this._currentApp || window == null) {
|
||||||
|
if (this._thumbnails)
|
||||||
|
this._destroyThumbnails();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._thumbnailTimeoutId != 0) {
|
||||||
|
Mainloop.source_remove(this._thumbnailTimeoutId);
|
||||||
|
this._thumbnailTimeoutId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._thumbnailsFocused = (window != null) && !forceAppFocus;
|
||||||
|
|
||||||
|
this._currentApp = app;
|
||||||
|
this._currentWindow = window ? window : -1;
|
||||||
|
this._appSwitcher.highlight(app, this._thumbnailsFocused);
|
||||||
|
|
||||||
|
if (window != null) {
|
||||||
|
if (!this._thumbnails)
|
||||||
|
this._createThumbnails();
|
||||||
|
this._currentWindow = window;
|
||||||
|
this._thumbnails.highlight(window, forceAppFocus);
|
||||||
|
} else if (this._appIcons[this._currentApp].cachedWindows.length > 1 &&
|
||||||
|
!forceAppFocus) {
|
||||||
|
this._thumbnailTimeoutId = Mainloop.timeout_add (
|
||||||
|
THUMBNAIL_POPUP_TIME,
|
||||||
|
Lang.bind(this, this._timeoutPopupThumbnails));
|
||||||
|
}
|
||||||
|
if (this._highlight_selected) {
|
||||||
|
let current_app = this._appIcons[this._currentApp];
|
||||||
|
Main.activateWindow(current_app.cachedWindows[0]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_finish : function() {
|
||||||
|
let app = this._appIcons[this._currentApp];
|
||||||
|
if (!app)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We've to restore the original Z-depth and order of all windows.
|
||||||
|
*
|
||||||
|
* Gnome-shell doesn't give an option to change Z-depth without
|
||||||
|
* messing the window's user_time.
|
||||||
|
*
|
||||||
|
* Pointless if the popup wasn't showed.
|
||||||
|
*/
|
||||||
|
if (this._highlight_selected && this.actor.opacity == 255) {
|
||||||
|
for (let i = this._appIcons.length - 2; i >= 0; i--) {
|
||||||
|
let app_walker = this._appIcons[i];
|
||||||
|
Main.activateWindow(app_walker.cachedWindows[0], global.get_current_time() - i - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.activateWindow(app.cachedWindows[0]);
|
||||||
|
this.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const AppIcon = new Lang.Class({
|
||||||
|
Name: 'AlternateTab.AppIcon',
|
||||||
|
Extends: AltTab.AppIcon,
|
||||||
|
|
||||||
|
_init: function(app, window) {
|
||||||
|
this.app = app;
|
||||||
|
|
||||||
|
this.cachedWindows = [];
|
||||||
|
this.cachedWindows.push(window);
|
||||||
|
|
||||||
|
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
|
||||||
|
vertical: true });
|
||||||
|
this.icon = null;
|
||||||
|
this._iconBin = new St.Bin({ x_fill: true, y_fill: true });
|
||||||
|
|
||||||
|
this.actor.add(this._iconBin, { x_fill: false, y_fill: false } );
|
||||||
|
|
||||||
|
let title = window.get_title();
|
||||||
|
if (title) {
|
||||||
|
this.label = new St.Label({ text: title });
|
||||||
|
let bin = new St.Bin({ x_align: St.Align.MIDDLE });
|
||||||
|
bin.add_actor(this.label);
|
||||||
|
this.actor.add(bin);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.label = new St.Label({ text: this.app.get_name() });
|
||||||
|
this.actor.add(this.label, { x_fill: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const WindowSwitcher = new Lang.Class({
|
||||||
|
Name: 'AlternateTab.WindowSwitcher',
|
||||||
|
Extends: AltTab.AppSwitcher,
|
||||||
|
|
||||||
|
_init : function(apps, altTabPopup) {
|
||||||
|
// Horrible HACK!
|
||||||
|
// We inherit from AltTab.AppSwitcher, but only chain up to
|
||||||
|
// AltTab.SwitcherList._init, to bypass AltTab.AppSwitcher._init
|
||||||
|
AltTab.SwitcherList.prototype._init.call(this, true);
|
||||||
|
|
||||||
|
// Construct the AppIcons, sort by time, add to the popup
|
||||||
|
let activeWorkspace = global.screen.get_active_workspace();
|
||||||
|
let workspaceIcons = [];
|
||||||
|
let otherIcons = [];
|
||||||
|
for (let i = 0; i < apps.length; i++) {
|
||||||
|
// Cache the window list now; we don't handle dynamic changes here,
|
||||||
|
// and we don't want to be continually retrieving it
|
||||||
|
let windows = apps[i].get_windows();
|
||||||
|
|
||||||
|
for(let j = 0; j < windows.length; j++) {
|
||||||
|
let appIcon = new AppIcon(apps[i], windows[j]);
|
||||||
|
if (this._isWindowOnWorkspace(windows[j], activeWorkspace)) {
|
||||||
|
workspaceIcons.push(appIcon);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
otherIcons.push(appIcon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
workspaceIcons.sort(Lang.bind(this, this._sortAppIcon));
|
||||||
|
otherIcons.sort(Lang.bind(this, this._sortAppIcon));
|
||||||
|
|
||||||
|
if(otherIcons.length > 0) {
|
||||||
|
let mostRecentOtherIcon = otherIcons[0];
|
||||||
|
otherIcons = [];
|
||||||
|
otherIcons.push(mostRecentOtherIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.icons = [];
|
||||||
|
this._arrows = [];
|
||||||
|
for (let i = 0; i < workspaceIcons.length; i++)
|
||||||
|
this._addIcon(workspaceIcons[i]);
|
||||||
|
if (workspaceIcons.length > 0 && otherIcons.length > 0)
|
||||||
|
this.addSeparator();
|
||||||
|
for (let i = 0; i < otherIcons.length; i++)
|
||||||
|
this._addIcon(otherIcons[i]);
|
||||||
|
|
||||||
|
this._curApp = -1;
|
||||||
|
this._iconSize = 0;
|
||||||
|
this._altTabPopup = altTabPopup;
|
||||||
|
this._mouseTimeOutId = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
_isWindowOnWorkspace: function(w, workspace) {
|
||||||
|
if (w.get_workspace() == workspace)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_sortAppIcon : function(appIcon1, appIcon2) {
|
||||||
|
let t1 = appIcon1.cachedWindows[0].get_user_time();
|
||||||
|
let t2 = appIcon2.cachedWindows[0].get_user_time();
|
||||||
|
if (t2 > t1) return 1;
|
||||||
|
else return -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const AltTabPopupAllThumbnails = new Lang.Class({
|
||||||
|
Name: 'AlternateTab.AltTabPopup.AllThumbnails',
|
||||||
|
Extends: AltTab.AltTabPopup,
|
||||||
|
|
||||||
_init : function() {
|
_init : function() {
|
||||||
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
|
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
|
||||||
@@ -35,28 +301,28 @@ AltTabPopup2.prototype = {
|
|||||||
this._thumbnailTimeoutId = 0;
|
this._thumbnailTimeoutId = 0;
|
||||||
this._motionTimeoutId = 0;
|
this._motionTimeoutId = 0;
|
||||||
|
|
||||||
|
|
||||||
// Initially disable hover so we ignore the enter-event if
|
// Initially disable hover so we ignore the enter-event if
|
||||||
// the switcher appears underneath the current pointer location
|
// the switcher appears underneath the current pointer location
|
||||||
this._disableHover();
|
this._disableHover();
|
||||||
|
|
||||||
this.show();
|
//this.show();
|
||||||
Main.uiGroup.add_actor(this.actor);
|
Main.uiGroup.add_actor(this.actor);
|
||||||
|
//this._select(0);
|
||||||
},
|
},
|
||||||
|
|
||||||
show : function(backward) {
|
show : function(backward, binding, mask) {
|
||||||
let windows = global.get_window_actors();
|
let windows = global.get_window_actors();
|
||||||
|
|
||||||
let list = '';
|
let list = '';
|
||||||
let normal_windows= [];
|
let normal_windows= [];
|
||||||
let appIcons = [];
|
let appIcons = [];
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let appSys = Shell.AppSystem.get_default();
|
||||||
let apps = tracker.get_running_apps ('');
|
let apps = appSys.get_running();
|
||||||
|
|
||||||
for (let w = windows.length-1; w >= 0; w--) {
|
for (let w = windows.length-1; w >= 0; w--) {
|
||||||
let win = windows[w].get_meta_window();
|
let win = windows[w].get_meta_window();
|
||||||
if (win.window_type == 0) {
|
|
||||||
normal_windows.push(win);
|
normal_windows.push(win);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
normal_windows.sort(Lang.bind(this, this._sortWindows));
|
normal_windows.sort(Lang.bind(this, this._sortWindows));
|
||||||
|
|
||||||
@@ -74,16 +340,25 @@ AltTabPopup2.prototype = {
|
|||||||
ap1 = new AltTab.AppIcon(apps[i]);
|
ap1 = new AltTab.AppIcon(apps[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ap1.cachedWindows = [win];
|
if (ap1 != null) {
|
||||||
appIcons.push(ap1);
|
ap1.cachedWindows = [win];
|
||||||
|
appIcons.push(ap1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!windows.length)
|
if (!windows.length) {
|
||||||
|
this.destroy();
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Main.pushModal(this.actor))
|
if (!Main.pushModal(this.actor)) {
|
||||||
return false;
|
// Probably someone else has a pointer grab, try again with keyboard only
|
||||||
|
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
this._haveModal = true;
|
this._haveModal = true;
|
||||||
|
this._modifierMask = AltTab.primaryModifier(mask);
|
||||||
|
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
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('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||||
@@ -92,60 +367,42 @@ AltTabPopup2.prototype = {
|
|||||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||||
|
|
||||||
this._appSwitcher = new WindowList(windows);
|
this._appSwitcher = new WindowList(windows);
|
||||||
this._appSwitcher.highlight(0,false);
|
this._appSwitcher._altTabPopup=this;
|
||||||
this.actor.add_actor(this._appSwitcher.actor);
|
this.actor.add_actor(this._appSwitcher.actor);
|
||||||
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
|
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
|
||||||
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
|
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
|
||||||
|
|
||||||
this._appIcons = appIcons;
|
this._appIcons = appIcons;
|
||||||
|
|
||||||
return true
|
// make the initial selection
|
||||||
},
|
if (backward)
|
||||||
|
this._select(windows.length - 2);
|
||||||
|
else
|
||||||
|
this._select(0);
|
||||||
|
|
||||||
_keyPressEvent : function(actor, event) {
|
this.actor.opacity = 0;
|
||||||
let keysym = event.get_key_symbol();
|
this.actor.show();
|
||||||
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();
|
// There's a race condition; if the user released Alt before
|
||||||
|
// we got the grab, then we won't be notified. (See
|
||||||
if (keysym == Clutter.grave)
|
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
|
||||||
this._select(this._currentApp, this._nextWindow());
|
// details.) So we check now. (Have to do this after updating
|
||||||
else if (keysym == Clutter.asciitilde)
|
// selection.)
|
||||||
this._select(this._currentApp, this._previousWindow());
|
let [x, y, mods] = global.get_pointer();
|
||||||
else if (keysym == Clutter.Escape)
|
if (!(mods & this._modifierMask)) {
|
||||||
this.destroy();
|
this._finish();
|
||||||
else if (this._thumbnailsFocused) {
|
return false;
|
||||||
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 {
|
|
||||||
if (keysym == Clutter.Tab)
|
|
||||||
this._select(this._nextApp());
|
|
||||||
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)
|
|
||||||
this._select(this._nextApp());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
// We delay showing the popup so that fast Alt+Tab users aren't
|
||||||
|
// disturbed by the popup briefly flashing.
|
||||||
|
this._initialDelayTimeoutId = Mainloop.timeout_add(AltTab.POPUP_DELAY_TIMEOUT,
|
||||||
|
Lang.bind(this, function () {
|
||||||
|
this.actor.opacity = 255;
|
||||||
|
this._initialDelayTimeoutId = 0;
|
||||||
|
}));
|
||||||
|
|
||||||
|
return true
|
||||||
},
|
},
|
||||||
|
|
||||||
_sortWindows : function(win1,win2) {
|
_sortWindows : function(win1,win2) {
|
||||||
@@ -166,25 +423,22 @@ AltTabPopup2.prototype = {
|
|||||||
Main.activateWindow(app.cachedWindows[0]);
|
Main.activateWindow(app.cachedWindows[0]);
|
||||||
this.destroy();
|
this.destroy();
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
function WindowList(windows) {
|
const WindowList = new Lang.Class({
|
||||||
this._init(windows);
|
Name: 'AlternateTab.WindowList',
|
||||||
}
|
Extends: AltTab.SwitcherList,
|
||||||
|
|
||||||
WindowList.prototype = {
|
|
||||||
__proto__ : AltTab.AppSwitcher.prototype,
|
|
||||||
|
|
||||||
_init : function(windows) {
|
_init : function(windows) {
|
||||||
AltTab.AppSwitcher.prototype._init.call(this, []);
|
this.parent(true);
|
||||||
|
|
||||||
let activeWorkspace = global.screen.get_active_workspace();
|
let activeWorkspace = global.screen.get_active_workspace();
|
||||||
this._labels = new Array();
|
this._labels = new Array();
|
||||||
this._thumbnailBins = new Array();
|
this._thumbnailBins = new Array();
|
||||||
this._clones = new Array();
|
this._clones = new Array();
|
||||||
this._windows = windows;
|
this._windows = windows;
|
||||||
this._arrows= new Array();
|
this._arrows = new Array();
|
||||||
this.icons= new Array();
|
this.icons = new Array();
|
||||||
for (let w = 0; w < windows.length; w++) {
|
for (let w = 0; w < windows.length; w++) {
|
||||||
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
|
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
|
||||||
arrow.connect('repaint', Lang.bind(this, function (area) {
|
arrow.connect('repaint', Lang.bind(this, function (area) {
|
||||||
@@ -197,8 +451,8 @@ WindowList.prototype = {
|
|||||||
|
|
||||||
let win=windows[w];
|
let win=windows[w];
|
||||||
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let appSys = Shell.AppSystem.get_default();
|
||||||
let apps = tracker.get_running_apps ('');
|
let apps = appSys.get_running();
|
||||||
let ap1 = null;
|
let ap1 = null;
|
||||||
for (let i = 0; i < apps.length; i++) {
|
for (let i = 0; i < apps.length; i++) {
|
||||||
let app_wins = apps[i].get_windows();
|
let app_wins = apps[i].get_windows();
|
||||||
@@ -213,24 +467,64 @@ WindowList.prototype = {
|
|||||||
let clone = new Clutter.Clone ({ source: windowTexture, reactive: true, width: width * scale, height: height * scale });
|
let clone = new Clutter.Clone ({ source: windowTexture, reactive: true, width: width * scale, height: height * scale });
|
||||||
ap1.icon = ap1.app.create_icon_texture(128);
|
ap1.icon = ap1.app.create_icon_texture(128);
|
||||||
ap1._iconBin.set_size(128,128);
|
ap1._iconBin.set_size(128,128);
|
||||||
ap1._iconBin.child=clone;
|
ap1._iconBin.child = clone;
|
||||||
|
|
||||||
ap1.label.text=win.get_title();
|
ap1.label.text = win.get_title();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ap1.cachedWindows = [win];
|
if (ap1 != null) {
|
||||||
this._addIcon(ap1);
|
ap1.cachedWindows = [win];
|
||||||
|
this.addItem(ap1.actor, ap1.label);
|
||||||
|
this.icons.push(ap1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
addSeparator: function () {
|
addSeparator: function () {
|
||||||
this._separator=null;
|
this._separator=null;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const MODES = {
|
||||||
|
all_thumbnails: AltTabPopupAllThumbnails,
|
||||||
|
workspace_icons: AltTabPopupWorkspaceIcons,
|
||||||
};
|
};
|
||||||
|
|
||||||
function main() {
|
function doAltTab(display, screen, window, binding) {
|
||||||
Main.wm.setKeybindingHandler('switch_windows', function() {
|
let behaviour = settings.get_string(SETTINGS_BEHAVIOUR_KEY);
|
||||||
let alpopup = new AltTabPopup2();
|
|
||||||
});
|
// alt-tab having no effect is unexpected, even with wrong settings
|
||||||
|
if (!(behaviour in MODES))
|
||||||
|
behaviour = 'all_thumbnails';
|
||||||
|
|
||||||
|
if (Main.wm._workspaceSwitcherPopup)
|
||||||
|
Main.wm._workspaceSwitcherPopup.actor.hide();
|
||||||
|
|
||||||
|
let modifiers = binding.get_modifiers()
|
||||||
|
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
||||||
|
|
||||||
|
let constructor = MODES[behaviour];
|
||||||
|
let popup = new constructor();
|
||||||
|
if (!popup.show(backwards, binding.get_name(), binding.get_mask()))
|
||||||
|
popup.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
function init(metadata) {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
settings = Convenience.getSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
Meta.keybindings_set_custom_handler('switch-windows', doAltTab);
|
||||||
|
Meta.keybindings_set_custom_handler('switch-group', doAltTab);
|
||||||
|
Meta.keybindings_set_custom_handler('switch-windows-backward', doAltTab);
|
||||||
|
Meta.keybindings_set_custom_handler('switch-group-backward', doAltTab);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
Meta.keybindings_set_custom_handler('switch-windows', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
Meta.keybindings_set_custom_handler('switch-group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
Meta.keybindings_set_custom_handler('switch-windows-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
Meta.keybindings_set_custom_handler('switch-group-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,19 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<enum id="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
|
||||||
|
<value value="1" nick="all_thumbnails"/>
|
||||||
|
<value value="2" nick="workspace_icons"/>
|
||||||
|
</enum>
|
||||||
|
<schema id="org.gnome.shell.extensions.alternate-tab" path="/org/gnome/shell/extensions/alternate-tab/">
|
||||||
|
<key name="behaviour" enum="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
|
||||||
|
<default>'all_thumbnails'</default>
|
||||||
|
<_summary>The alt tab behaviour.</_summary>
|
||||||
|
<_description>Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and workspace_icons.
|
||||||
|
See the configuration dialogs for details.</_description>
|
||||||
|
</key>
|
||||||
|
<key type="b" name="highlight-selected">
|
||||||
|
<default>false</default>
|
||||||
|
<summary>Bring each selected window to the front.</summary>
|
||||||
|
<description>Bring each window to the front in turn as Alt+Tab is pressed.</description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
/* most of the code is borrowed from
|
||||||
|
* > js/ui/altTab.js <
|
||||||
|
* of the gnome-shell source code
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
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_BEHAVIOUR_KEY = 'behaviour';
|
||||||
|
const SETTINGS_HIGHLIGHT_KEY = 'highlight-selected';
|
||||||
|
|
||||||
|
const MODES = {
|
||||||
|
all_thumbnails: {
|
||||||
|
name: N_("All & Thumbnails"),
|
||||||
|
description: 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 \
|
||||||
|
thumbnails resembling the window itself."),
|
||||||
|
extra_widgets: [ ]
|
||||||
|
},
|
||||||
|
workspace_icons: {
|
||||||
|
name: N_("Workspace & Icons"),
|
||||||
|
description: N_("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."),
|
||||||
|
extra_widgets: [
|
||||||
|
{ label: N_("Move current selection to front before closing the popup"), key: SETTINGS_HIGHLIGHT_KEY }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const AltTabSettingsWidget = new GObject.Class({
|
||||||
|
Name: 'AlternateTab.Prefs.AltTabSettingsWidget',
|
||||||
|
GTypeName: 'AltTabSettingsWidget',
|
||||||
|
Extends: Gtk.Grid,
|
||||||
|
|
||||||
|
_init : function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.column_spacing = 10;
|
||||||
|
this.margin = 10;
|
||||||
|
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
|
||||||
|
let introLabel = _("The Alternate Tab can be used in different modes, that \
|
||||||
|
affect the way windows are chosen and presented.");
|
||||||
|
|
||||||
|
this.attach(new Gtk.Label({ label: introLabel, wrap: true, sensitive: true,
|
||||||
|
margin_bottom: 10, margin_top: 5 }),
|
||||||
|
0, 0, 2, 1);
|
||||||
|
|
||||||
|
let top = 1;
|
||||||
|
let radio = null;
|
||||||
|
let currentMode = this._settings.get_string(SETTINGS_BEHAVIOUR_KEY);
|
||||||
|
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 obj = MODES[mode];
|
||||||
|
let name = Gettext.gettext(obj.name);
|
||||||
|
let description = Gettext.gettext(obj.description);
|
||||||
|
let nextra = obj.extra_widgets.length;
|
||||||
|
|
||||||
|
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_BEHAVIOUR_KEY, modeCapture);
|
||||||
|
this._updateSensitivity(widget, widget.active);
|
||||||
|
}));
|
||||||
|
this.attach(radio, 0, top, 1, nextra + 1);
|
||||||
|
|
||||||
|
let descriptionLabel = new Gtk.Label({ label: description, wrap: true, sensitive: true,
|
||||||
|
xalign: 0.0, justify: Gtk.Justification.FILL });
|
||||||
|
this.attach(descriptionLabel, 1, top, 1, 1);
|
||||||
|
|
||||||
|
radio._extra = [];
|
||||||
|
for (let i = 0; i < nextra; i++) {
|
||||||
|
let key = obj.extra_widgets[i].key;
|
||||||
|
let label = Gettext.gettext(obj.extra_widgets[i].label);
|
||||||
|
|
||||||
|
let extra = new Gtk.CheckButton({ label: label });
|
||||||
|
this._settings.bind(key, extra, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
|
||||||
|
radio._extra.push(extra);
|
||||||
|
this.attach(extra, 1, top + i + 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode == currentMode)
|
||||||
|
radio.active = true;
|
||||||
|
this._updateSensitivity(radio, radio.active);
|
||||||
|
|
||||||
|
top += nextra + 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateSensitivity: function(widget, active) {
|
||||||
|
for (let i = 0; i < widget._extra.length; i++)
|
||||||
|
widget._extra[i].sensitive = active;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPrefsWidget() {
|
||||||
|
let widget = new AltTabSettingsWidget();
|
||||||
|
widget.show_all();
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = alternative-status-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
/* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
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;
|
||||||
|
|
||||||
|
let suspend_item = null;
|
||||||
|
let hibernate_item = null;
|
||||||
|
let poweroff_item = null;
|
||||||
|
let suspend_signal_id = 0, hibernate_signal_id = 0;
|
||||||
|
|
||||||
|
function updateSuspend(object, pspec, item) {
|
||||||
|
item.actor.visible = object.get_can_suspend();
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateHibernate(object, pspec, item) {
|
||||||
|
item.actor.visible = object.get_can_hibernate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSuspendActivate(item) {
|
||||||
|
Main.overview.hide();
|
||||||
|
|
||||||
|
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
||||||
|
this._upClient.suspend_sync(null);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function onHibernateActivate(item) {
|
||||||
|
Main.overview.hide();
|
||||||
|
|
||||||
|
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
||||||
|
this._upClient.hibernate_sync(null);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put your extension initialization code here
|
||||||
|
function init(metadata) {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
let statusMenu = Main.panel._statusArea.userMenu;
|
||||||
|
|
||||||
|
let children = statusMenu.menu._getMenuItems();
|
||||||
|
let index = children.length;
|
||||||
|
|
||||||
|
/* find and destroy the old entry */
|
||||||
|
for (let i = children.length - 1; i >= 0; i--) {
|
||||||
|
if (children[i] == statusMenu._suspendOrPowerOffItem) {
|
||||||
|
children[i].destroy();
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the new entries */
|
||||||
|
suspend_item = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||||
|
suspend_item.connect('activate', Lang.bind(statusMenu, onSuspendActivate));
|
||||||
|
suspend_signal_id = statusMenu._upClient.connect('notify::can-suspend', Lang.bind(statusMenu, updateSuspend, suspend_item));
|
||||||
|
updateSuspend(statusMenu._upClient, null, suspend_item);
|
||||||
|
|
||||||
|
hibernate_item = new PopupMenu.PopupMenuItem(_("Hibernate"));
|
||||||
|
hibernate_item.connect('activate', Lang.bind(statusMenu, onHibernateActivate));
|
||||||
|
hibernate_signal_id = statusMenu._upClient.connect('notify::can-hibernate', Lang.bind(statusMenu, updateHibernate, hibernate_item));
|
||||||
|
updateHibernate(statusMenu._upClient, null, hibernate_item);
|
||||||
|
|
||||||
|
poweroff_item = new PopupMenu.PopupMenuItem(_("Power Off..."), { style_class: 'popup-alternating-menu-item' });
|
||||||
|
poweroff_item.actor.add_style_pseudo_class('alternate');
|
||||||
|
poweroff_item.connect('activate', Lang.bind(statusMenu, function() {
|
||||||
|
this._session.ShutdownRemote();
|
||||||
|
}));
|
||||||
|
|
||||||
|
/* insert the entries at the found position */
|
||||||
|
statusMenu.menu.addMenuItem(suspend_item, index);
|
||||||
|
statusMenu.menu.addMenuItem(hibernate_item, index + 1);
|
||||||
|
statusMenu.menu.addMenuItem(poweroff_item, index + 2);
|
||||||
|
|
||||||
|
// clear out this to avoid criticals (we don't mess with
|
||||||
|
// updateSuspendOrPowerOff)
|
||||||
|
statusMenu._suspendOrPowerOffItem = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
let statusMenu = Main.panel._statusArea.userMenu;
|
||||||
|
|
||||||
|
let children = statusMenu.menu._getMenuItems();
|
||||||
|
let index = children.length;
|
||||||
|
|
||||||
|
/* find the index for the previously created suspend entry */
|
||||||
|
for (let i = children.length - 1; i >= 0; i--) {
|
||||||
|
if (children[i] == suspend_item) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disconnect signals */
|
||||||
|
statusMenu._upClient.disconnect(suspend_signal_id);
|
||||||
|
statusMenu._upClient.disconnect(hibernate_signal_id);
|
||||||
|
suspend_signal_id = hibernate_signal_id = 0;
|
||||||
|
|
||||||
|
/* destroy the entries we had created */
|
||||||
|
suspend_item.destroy();
|
||||||
|
hibernate_item.destroy();
|
||||||
|
poweroff_item.destroy();
|
||||||
|
|
||||||
|
/* create a new suspend/poweroff entry */
|
||||||
|
/* empty strings are fine for the labels, since we immediately call updateSuspendOrPowerOff */
|
||||||
|
let item = new PopupMenu.PopupAlternatingMenuItem("", "");
|
||||||
|
/* restore the userMenu field */
|
||||||
|
statusMenu._suspendOrPowerOffItem = item;
|
||||||
|
statusMenu.menu.addMenuItem(item, index);
|
||||||
|
item.connect('activate', Lang.bind(statusMenu, statusMenu._onSuspendOrPowerOffActivate));
|
||||||
|
statusMenu._updateSuspendOrPowerOff();
|
||||||
|
}
|
||||||
@@ -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@"
|
||||||
|
}
|
||||||
@@ -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,113 @@
|
|||||||
|
/* -*- 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');
|
||||||
|
|
||||||
|
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._leftBox.insert_child_at_index(appsMenuButton.actor, 1);
|
||||||
|
Main.panel._leftBox.child_set(appsMenuButton.actor, { y_fill : true } );
|
||||||
|
Main.panel._menus.addMenu(appsMenuButton.menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
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,166 @@
|
|||||||
|
// -*- 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 enable() {
|
||||||
|
prevCheckWorkspaces = Main._checkWorkspaces;
|
||||||
|
Main._checkWorkspaces = function() {
|
||||||
|
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;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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,253 @@
|
|||||||
|
// -*- 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);
|
||||||
|
for (let i = 0; i < currentItems.length; i++) {
|
||||||
|
let [id, index] = currentItems[i].split(':');
|
||||||
|
let appInfo = Gio.DesktopAppInfo.new(id);
|
||||||
|
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_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,5 @@
|
|||||||
|
EXTENSION_ID = dock
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|
||||||
@@ -0,0 +1,880 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
|
const AppFavorites = imports.ui.appFavorites;
|
||||||
|
const DND = imports.ui.dnd;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Overview = imports.ui.overview;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Search = imports.ui.search;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
const Workspace = imports.ui.workspace;
|
||||||
|
const AppDisplay = imports.ui.appDisplay;
|
||||||
|
const AltTab = imports.ui.altTab;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
// Settings
|
||||||
|
const DOCK_POSITION_KEY = 'position';
|
||||||
|
const DOCK_SIZE_KEY = 'size';
|
||||||
|
const DOCK_HIDE_KEY = 'autohide';
|
||||||
|
const DOCK_EFFECTHIDE_KEY = 'hide-effect';
|
||||||
|
const DOCK_AUTOHIDE_ANIMATION_TIME_KEY = 'hide-effect-duration';
|
||||||
|
|
||||||
|
// Keep enums in sync with GSettings schemas
|
||||||
|
const PositionMode = {
|
||||||
|
LEFT: 0,
|
||||||
|
RIGHT: 1
|
||||||
|
};
|
||||||
|
|
||||||
|
const AutoHideEffect = {
|
||||||
|
RESIZE: 0,
|
||||||
|
RESCALE: 1,
|
||||||
|
MOVE: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
const DND_RAISE_APP_TIMEOUT = 500;
|
||||||
|
|
||||||
|
/*************************************************************************************/
|
||||||
|
/**** start resize's Dock functions *****************/
|
||||||
|
/*************************************************************************************/
|
||||||
|
function hideDock_size () {
|
||||||
|
if (!this._hideable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor
|
||||||
|
let position_x = monitor.x;
|
||||||
|
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
Tweener.addTween(this, {
|
||||||
|
_item_size: 1,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onUpdate: function () {
|
||||||
|
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
width = this._item_size + 4*this._spacing;
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
position_x=monitor.x-2*this._spacing;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
position_x = monitor.x + (monitor.width-1-this._item_size-2*this._spacing);
|
||||||
|
}
|
||||||
|
this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
|
||||||
|
this.actor.set_size(width,height);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDock_size () {
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
let position_x = monitor.x;
|
||||||
|
|
||||||
|
Tweener.addTween(this, {
|
||||||
|
_item_size: this._settings.get_int(DOCK_SIZE_KEY),
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onUpdate: function () {
|
||||||
|
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
width = this._item_size + 4*this._spacing;
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
position_x=monitor.x-2*this._spacing;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
|
||||||
|
}
|
||||||
|
this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
|
||||||
|
this.actor.set_size(width,height);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showEffectAddItem_size () {
|
||||||
|
let primary = Main.layoutManager.primaryMonitor;
|
||||||
|
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor, {
|
||||||
|
y: primary.y + (primary.height-height)/2,
|
||||||
|
height: height,
|
||||||
|
width: width,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************************/
|
||||||
|
/**** start rescale's Dock functions *****************/
|
||||||
|
/**************************************************************************************/
|
||||||
|
function hideDock_scale () {
|
||||||
|
if (!this._hideable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let cornerX = 0;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
cornerX=monitor.x;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
cornerX = monitor.x + monitor.width-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor,{
|
||||||
|
y: monitor.y + (monitor.height-height)/2,
|
||||||
|
x: cornerX,
|
||||||
|
height:height,
|
||||||
|
width: width,
|
||||||
|
scale_x: 0.025,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDock_scale () {
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let position_x = monitor.x;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
position_x=monitor.x-2*this._spacing;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
|
||||||
|
}
|
||||||
|
Tweener.addTween(this.actor, {
|
||||||
|
y: monitor.y + (monitor.height-height)/2,
|
||||||
|
x: monitor.x + position_x,
|
||||||
|
height: height,
|
||||||
|
width: width,
|
||||||
|
scale_x: 1,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showEffectAddItem_scale () {
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor, {
|
||||||
|
y: monitor.y + (monitor.height-height)/2,
|
||||||
|
height: height,
|
||||||
|
width: width,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************************/
|
||||||
|
/**** start move Dock functions *****************/
|
||||||
|
/**************************************************************************************/
|
||||||
|
function hideDock_move () {
|
||||||
|
if (!this._hideable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let cornerX = 0;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
cornerX= monitor.x - width + this._spacing;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
cornerX = monitor.x + monitor.width - this._spacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor,{
|
||||||
|
x: cornerX,
|
||||||
|
y: monitor.y + (monitor.height - height)/2,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDock_move () {
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let position_x = monitor.x;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
switch (this._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
position_x=monitor.x - 2*this._spacing;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
|
||||||
|
}
|
||||||
|
Tweener.addTween(this.actor, {
|
||||||
|
x: position_x,
|
||||||
|
y: monitor.y + (monitor.height - height)/2,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
|
||||||
|
this._hidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showEffectAddItem_move () {
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor, {
|
||||||
|
y: monitor.y + (monitor.height-height)/2,
|
||||||
|
height: height,
|
||||||
|
width: width,
|
||||||
|
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const Dock = new Lang.Class({
|
||||||
|
Name: 'Dock.Dock',
|
||||||
|
|
||||||
|
_init : function() {
|
||||||
|
this._placeholderText = null;
|
||||||
|
this._menus = [];
|
||||||
|
this._menuDisplays = [];
|
||||||
|
|
||||||
|
this._favorites = [];
|
||||||
|
|
||||||
|
// Load Settings
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
this._hidden = false;
|
||||||
|
this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
|
||||||
|
|
||||||
|
this._spacing = 4;
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
this._nicons = 0;
|
||||||
|
this._selectEffectFunctions(this._settings.get_enum(DOCK_EFFECTHIDE_KEY));
|
||||||
|
|
||||||
|
this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true });
|
||||||
|
|
||||||
|
this._grid = new Shell.GenericContainer();
|
||||||
|
this.actor.add(this._grid, { expand: true, y_align: St.Align.START });
|
||||||
|
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||||
|
|
||||||
|
this._grid.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||||
|
this._grid.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||||
|
this._grid.connect('allocate', Lang.bind(this, this._allocate));
|
||||||
|
|
||||||
|
this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
|
||||||
|
|
||||||
|
this._tracker = Shell.WindowTracker.get_default();
|
||||||
|
this._appSystem = Shell.AppSystem.get_default();
|
||||||
|
|
||||||
|
this._installedChangedId = this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
|
||||||
|
this._appFavoritesChangedId = AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
|
||||||
|
this._appStateChangedId = this._appSystem.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
|
||||||
|
|
||||||
|
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, function() {
|
||||||
|
this.actor.hide();
|
||||||
|
}));
|
||||||
|
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this, function() {
|
||||||
|
this.actor.show();
|
||||||
|
}));
|
||||||
|
Main.layoutManager.addChrome(this.actor,
|
||||||
|
{ affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
|
||||||
|
|
||||||
|
//hidden
|
||||||
|
this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, this._redisplay));
|
||||||
|
this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, this._redisplay));
|
||||||
|
|
||||||
|
this._settings.connect('changed::'+DOCK_HIDE_KEY, Lang.bind(this, function (){
|
||||||
|
Main.layoutManager.removeChrome(this.actor);
|
||||||
|
Main.layoutManager.addChrome(this.actor,
|
||||||
|
{ affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
|
||||||
|
|
||||||
|
this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
|
||||||
|
if (this._hideable)
|
||||||
|
this._hideDock();
|
||||||
|
else
|
||||||
|
this._showDock();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._settings.connect('changed::' + DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () {
|
||||||
|
let hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
|
||||||
|
|
||||||
|
// restore the effects of the other functions
|
||||||
|
switch (hideEffect) {
|
||||||
|
case AutoHideEffect.RESCALE:
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
break;
|
||||||
|
case AutoHideEffect.RESIZE:
|
||||||
|
this.actor.set_scale(1, 1);
|
||||||
|
break;
|
||||||
|
case AutoHideEffect.MOVE:
|
||||||
|
this.actor.set_scale(1, 1);
|
||||||
|
this._item_size = this._settings.get_int(DOCK_SIZE_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actor.disconnect(this._leave_event);
|
||||||
|
this.actor.disconnect(this._enter_event);
|
||||||
|
|
||||||
|
this._selectEffectFunctions(hideEffect);
|
||||||
|
|
||||||
|
this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
|
||||||
|
this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
|
||||||
|
this._redisplay();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
|
||||||
|
this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
|
||||||
|
|
||||||
|
this._hideDock();
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
if (this._installedChangedId) {
|
||||||
|
this._appSystem.disconnect(this._installedChangedId);
|
||||||
|
this._installedChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._appFavoritesChangedId) {
|
||||||
|
AppFavorites.getAppFavorites().disconnect(this._appFavoritesChangedId);
|
||||||
|
this._appFavoritesChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._appStateChangedId) {
|
||||||
|
this._appSystem.disconnect(this._appStateChangedId);
|
||||||
|
this._appStateChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._overviewShowingId) {
|
||||||
|
Main.overview.disconnect(this._overviewShowingId);
|
||||||
|
this._overviewShowingId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._overviewHiddenId) {
|
||||||
|
Main.overview.disconnect(this._overviewHiddenId);
|
||||||
|
this._overviewHiddenId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actor.destroy();
|
||||||
|
|
||||||
|
// Break reference cycles
|
||||||
|
this._settings.run_dispose();
|
||||||
|
this._settings = null;
|
||||||
|
this._appSystem = null;
|
||||||
|
this._tracker = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
// fuctions hide
|
||||||
|
_restoreHideDock: function() {
|
||||||
|
this._hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
|
||||||
|
},
|
||||||
|
|
||||||
|
_disableHideDock: function() {
|
||||||
|
this._hideable = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_selectEffectFunctions: function(hideEffect) {
|
||||||
|
switch (hideEffect) {
|
||||||
|
case AutoHideEffect.RESCALE:
|
||||||
|
this._hideDock = hideDock_scale;
|
||||||
|
this._showDock = showDock_scale;
|
||||||
|
this._showEffectAddItem = showEffectAddItem_scale;
|
||||||
|
break;
|
||||||
|
case AutoHideEffect.MOVE:
|
||||||
|
this._hideDock = hideDock_move;
|
||||||
|
this._showDock = showDock_move;
|
||||||
|
this._showEffectAddItem = showEffectAddItem_move;
|
||||||
|
break;
|
||||||
|
case AutoHideEffect.RESIZE:
|
||||||
|
default:
|
||||||
|
this._hideDock = hideDock_size;
|
||||||
|
this._showDock = showDock_size;
|
||||||
|
this._showEffectAddItem = showEffectAddItem_size;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_appIdListToHash: function(apps) {
|
||||||
|
let ids = {};
|
||||||
|
for (let i = 0; i < apps.length; i++)
|
||||||
|
ids[apps[i].get_id()] = apps[i];
|
||||||
|
return ids;
|
||||||
|
},
|
||||||
|
|
||||||
|
_queueRedisplay: function () {
|
||||||
|
Main.queueDeferredWork(this._workId);
|
||||||
|
},
|
||||||
|
|
||||||
|
_redisplay: function () {
|
||||||
|
this.removeAll();
|
||||||
|
|
||||||
|
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
||||||
|
|
||||||
|
let running = this._appSystem.get_running();
|
||||||
|
let runningIds = this._appIdListToHash(running);
|
||||||
|
|
||||||
|
let icons = 0;
|
||||||
|
|
||||||
|
let nFavorites = 0;
|
||||||
|
for (let id in favorites) {
|
||||||
|
let app = favorites[id];
|
||||||
|
let display = new DockIcon(app,this);
|
||||||
|
this.addItem(display.actor);
|
||||||
|
nFavorites++;
|
||||||
|
icons++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < running.length; i++) {
|
||||||
|
let app = running[i];
|
||||||
|
if (app.get_id() in favorites)
|
||||||
|
continue;
|
||||||
|
let display = new DockIcon(app,this);
|
||||||
|
icons++;
|
||||||
|
this.addItem(display.actor);
|
||||||
|
}
|
||||||
|
this._nicons=icons;
|
||||||
|
|
||||||
|
if (this._placeholderText) {
|
||||||
|
this._placeholderText.destroy();
|
||||||
|
this._placeholderText = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (running.length == 0 && nFavorites == 0) {
|
||||||
|
this._placeholderText = new St.Label({ text: _("Drag here to add favorites") });
|
||||||
|
this.actor.add_actor(this._placeholderText);
|
||||||
|
}
|
||||||
|
|
||||||
|
let primary = Main.layoutManager.primaryMonitor;
|
||||||
|
let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
|
||||||
|
let width = this._item_size + 4*this._spacing;
|
||||||
|
|
||||||
|
if (this._hideable && this._hidden) {
|
||||||
|
this._hideDock();
|
||||||
|
} else {
|
||||||
|
if (this._settings.get_int(DOCK_SIZE_KEY) == this._item_size) {
|
||||||
|
// only add/delete icon
|
||||||
|
this._showEffectAddItem ();
|
||||||
|
} else {
|
||||||
|
// change size icon
|
||||||
|
this._showDock ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPreferredWidth: function (grid, forHeight, alloc) {
|
||||||
|
alloc.min_size = this._item_size;
|
||||||
|
alloc.natural_size = this._item_size + this._spacing;
|
||||||
|
},
|
||||||
|
|
||||||
|
_getPreferredHeight: function (grid, forWidth, alloc) {
|
||||||
|
let children = this._grid.get_children();
|
||||||
|
let nRows = children.length;
|
||||||
|
let totalSpacing = Math.max(0, nRows - 1) * this._spacing;
|
||||||
|
let height = nRows * this._item_size + totalSpacing;
|
||||||
|
alloc.min_size = height;
|
||||||
|
alloc.natural_size = height;
|
||||||
|
},
|
||||||
|
|
||||||
|
_allocate: function (grid, box, flags) {
|
||||||
|
let children = this._grid.get_children();
|
||||||
|
|
||||||
|
let x = box.x1 + this._spacing;
|
||||||
|
if (this._settings.get_enum(DOCK_POSITION_KEY) == PositionMode.LEFT)
|
||||||
|
x = box.x1 + 2*this._spacing;
|
||||||
|
let y = box.y1 + this._spacing;
|
||||||
|
|
||||||
|
for (let i = 0; i < children.length; i++) {
|
||||||
|
let childBox = new Clutter.ActorBox();
|
||||||
|
childBox.x1 = x;
|
||||||
|
childBox.y1 = y;
|
||||||
|
childBox.x2 = childBox.x1 + this._item_size;
|
||||||
|
childBox.y2 = childBox.y1 + this._item_size;
|
||||||
|
children[i].allocate(childBox, flags);
|
||||||
|
y += this._item_size + this._spacing;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
_onStyleChanged: function() {
|
||||||
|
let themeNode = this.actor.get_theme_node();
|
||||||
|
let [success, len] = themeNode.get_length('spacing', false);
|
||||||
|
if (success)
|
||||||
|
this._spacing = len;
|
||||||
|
[success, len] = themeNode.get_length('-shell-grid-item-size', false);
|
||||||
|
if (success)
|
||||||
|
this._item_size = len;
|
||||||
|
this._grid.queue_relayout();
|
||||||
|
},
|
||||||
|
|
||||||
|
removeAll: function () {
|
||||||
|
this._grid.get_children().forEach(Lang.bind(this, function (child) {
|
||||||
|
child.destroy();
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
addItem: function(actor) {
|
||||||
|
this._grid.add_actor(actor);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(Dock.prototype);
|
||||||
|
|
||||||
|
const DockIcon = new Lang.Class({
|
||||||
|
Name: 'Dock.DockIcon',
|
||||||
|
|
||||||
|
_init : function(app, dock) {
|
||||||
|
this._dock = dock;
|
||||||
|
this._settings = dock._settings;
|
||||||
|
|
||||||
|
|
||||||
|
this.app = app;
|
||||||
|
this.actor = new St.Button({ style_class: 'app-well-app',
|
||||||
|
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
|
||||||
|
reactive: true,
|
||||||
|
x_fill: true,
|
||||||
|
y_fill: true });
|
||||||
|
this.actor._delegate = this;
|
||||||
|
|
||||||
|
this._icon = new AppDisplay.AppIcon(app, { setSizeManually: true,
|
||||||
|
showLabel: false });
|
||||||
|
this.actor.set_child(this._icon.actor);
|
||||||
|
this._icon.setIconSize(this._settings.get_int(DOCK_SIZE_KEY));
|
||||||
|
|
||||||
|
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||||
|
|
||||||
|
this._menu = null;
|
||||||
|
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
|
|
||||||
|
this._has_focus = false;
|
||||||
|
|
||||||
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
|
tracker.connect('notify::focus-app', Lang.bind(this, this._onStateChanged));
|
||||||
|
|
||||||
|
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||||
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
this.actor.connect('notify::hover', Lang.bind(this, this._hoverChanged));
|
||||||
|
|
||||||
|
this._menuTimeoutId = 0;
|
||||||
|
this._stateChangedId = this.app.connect('notify::state',
|
||||||
|
Lang.bind(this, this._onStateChanged));
|
||||||
|
this._onStateChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDestroy: function() {
|
||||||
|
if (this._stateChangedId > 0)
|
||||||
|
this.app.disconnect(this._stateChangedId);
|
||||||
|
this._stateChangedId = 0;
|
||||||
|
this._removeMenuTimeout();
|
||||||
|
},
|
||||||
|
|
||||||
|
_removeMenuTimeout: function() {
|
||||||
|
if (this._menuTimeoutId > 0) {
|
||||||
|
Mainloop.source_remove(this._menuTimeoutId);
|
||||||
|
this._menuTimeoutId = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_hoverChanged: function(actor) {
|
||||||
|
if (actor != this.actor)
|
||||||
|
this._has_focus = false;
|
||||||
|
else
|
||||||
|
this._has_focus = true;
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onStateChanged: function() {
|
||||||
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
|
let focusedApp = tracker.focus_app;
|
||||||
|
if (this.app.state != Shell.AppState.STOPPED) {
|
||||||
|
this.actor.add_style_class_name('running');
|
||||||
|
if (this.app == focusedApp) {
|
||||||
|
this.actor.add_style_class_name('focused');
|
||||||
|
} else {
|
||||||
|
this.actor.remove_style_class_name('focused');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.actor.remove_style_class_name('focused');
|
||||||
|
this.actor.remove_style_class_name('running');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onButtonPress: function(actor, event) {
|
||||||
|
let button = event.get_button();
|
||||||
|
if (button == 1) {
|
||||||
|
this._removeMenuTimeout();
|
||||||
|
this._menuTimeoutId = Mainloop.timeout_add(AppDisplay.MENU_POPUP_TIMEOUT, Lang.bind(this, function() {
|
||||||
|
this.popupMenu();
|
||||||
|
}));
|
||||||
|
} else if (button == 3) {
|
||||||
|
this.popupMenu();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onClicked: function(actor, button) {
|
||||||
|
this._removeMenuTimeout();
|
||||||
|
|
||||||
|
if (button == 1) {
|
||||||
|
this._onActivate(Clutter.get_current_event());
|
||||||
|
} else if (button == 2) {
|
||||||
|
// Last workspace is always empty
|
||||||
|
let launchWorkspace = global.screen.get_workspace_by_index(global.screen.n_workspaces - 1);
|
||||||
|
launchWorkspace.activate(global.get_current_time());
|
||||||
|
this.emit('launching');
|
||||||
|
this.app.open_new_window(-1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
getId: function() {
|
||||||
|
return this.app.get_id();
|
||||||
|
},
|
||||||
|
|
||||||
|
popupMenu: function() {
|
||||||
|
this._removeMenuTimeout();
|
||||||
|
this.actor.fake_release();
|
||||||
|
|
||||||
|
this._dock._disableHideDock();
|
||||||
|
|
||||||
|
if (!this._menu) {
|
||||||
|
this._menu = new DockIconMenu(this);
|
||||||
|
this._menu.connect('activate-window', Lang.bind(this, function (menu, window) {
|
||||||
|
this.activateWindow(window);
|
||||||
|
}));
|
||||||
|
this._menu.connect('open-state-changed', Lang.bind(this, function (menu, isPoppedUp) {
|
||||||
|
if (!isPoppedUp){
|
||||||
|
//Restore value of autohidedock
|
||||||
|
this._dock._restoreHideDock();
|
||||||
|
this._dock._hideDock();
|
||||||
|
|
||||||
|
this._onMenuPoppedDown();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._menuManager.addMenu(this._menu, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._menu.redisplay();
|
||||||
|
this._menu.open();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
activateWindow: function(metaWindow) {
|
||||||
|
if (metaWindow) {
|
||||||
|
this._didActivateWindow = true;
|
||||||
|
Main.activateWindow(metaWindow);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setSelected: function (isSelected) {
|
||||||
|
this._selected = isSelected;
|
||||||
|
if (this._selected)
|
||||||
|
this.actor.add_style_class_name('selected');
|
||||||
|
else
|
||||||
|
this.actor.remove_style_class_name('selected');
|
||||||
|
},
|
||||||
|
|
||||||
|
_onMenuPoppedDown: function() {
|
||||||
|
this.actor.sync_hover();
|
||||||
|
},
|
||||||
|
|
||||||
|
_getRunning: function() {
|
||||||
|
return this.app.state != Shell.AppState.STOPPED;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onActivate: function (event) {
|
||||||
|
this.emit('launching');
|
||||||
|
let modifiers = Shell.get_event_state(event);
|
||||||
|
|
||||||
|
if (modifiers & Clutter.ModifierType.CONTROL_MASK
|
||||||
|
&& this.app.state == Shell.AppState.RUNNING) {
|
||||||
|
let current_workspace = global.screen.get_active_workspace().index();
|
||||||
|
this.app.open_new_window(current_workspace);
|
||||||
|
} else {
|
||||||
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
|
let focusedApp = tracker.focus_app;
|
||||||
|
|
||||||
|
if (this.app == focusedApp) {
|
||||||
|
let windows = this.app.get_windows();
|
||||||
|
let current_workspace = global.screen.get_active_workspace();
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
let w = windows[i];
|
||||||
|
if (w.get_workspace() == current_workspace)
|
||||||
|
w.minimize();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.app.activate(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Main.overview.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(DockIcon.prototype);
|
||||||
|
|
||||||
|
const DockIconMenu = new Lang.Class({
|
||||||
|
Name: 'Dock.DockIconMenu',
|
||||||
|
Extends: PopupMenu.PopupMenu,
|
||||||
|
|
||||||
|
_init: function(source) {
|
||||||
|
let side;
|
||||||
|
switch (source._settings.get_enum(DOCK_POSITION_KEY)) {
|
||||||
|
case PositionMode.LEFT:
|
||||||
|
side = St.Side.LEFT;
|
||||||
|
break;
|
||||||
|
case PositionMode.RIGHT:
|
||||||
|
default:
|
||||||
|
side = St.Side.RIGHT;
|
||||||
|
}
|
||||||
|
this.parent(source.actor, 0.5, side);
|
||||||
|
|
||||||
|
this._source = source;
|
||||||
|
|
||||||
|
this.connect('activate', Lang.bind(this, this._onActivate));
|
||||||
|
|
||||||
|
this.actor.add_style_class_name('dock-menu');
|
||||||
|
|
||||||
|
// Chain our visibility and lifecycle to that of the source
|
||||||
|
source.actor.connect('notify::mapped', Lang.bind(this, function () {
|
||||||
|
if (!source.actor.mapped)
|
||||||
|
this.close();
|
||||||
|
}));
|
||||||
|
source.actor.connect('destroy', Lang.bind(this, function () { this.destroy(); }));
|
||||||
|
|
||||||
|
Main.layoutManager.addChrome(this.actor);
|
||||||
|
},
|
||||||
|
|
||||||
|
redisplay: function() {
|
||||||
|
this.removeAll();
|
||||||
|
|
||||||
|
let windows = this._source.app.get_windows();
|
||||||
|
|
||||||
|
// Display the app windows menu items and the separator between windows
|
||||||
|
// of the current desktop and other windows.
|
||||||
|
let activeWorkspace = global.screen.get_active_workspace();
|
||||||
|
let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace;
|
||||||
|
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
if (!separatorShown && windows[i].get_workspace() != activeWorkspace) {
|
||||||
|
this._appendSeparator();
|
||||||
|
separatorShown = true;
|
||||||
|
}
|
||||||
|
let item = this._appendMenuItem(windows[i].title);
|
||||||
|
item._window = windows[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windows.length > 0)
|
||||||
|
this._appendSeparator();
|
||||||
|
|
||||||
|
let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id());
|
||||||
|
|
||||||
|
this._newWindowMenuItem = windows.length > 0 ? this._appendMenuItem(_("New Window")) : null;
|
||||||
|
|
||||||
|
this._quitAppMenuItem = windows.length >0 ? this._appendMenuItem(_("Quit Application")) : null;
|
||||||
|
|
||||||
|
if (windows.length > 0)
|
||||||
|
this._appendSeparator();
|
||||||
|
this._toggleFavoriteMenuItem = this._appendMenuItem(isFavorite ?
|
||||||
|
_("Remove from Favorites")
|
||||||
|
: _("Add to Favorites"));
|
||||||
|
|
||||||
|
this._highlightedItem = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
_appendSeparator: function () {
|
||||||
|
let separator = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
|
this.addMenuItem(separator);
|
||||||
|
},
|
||||||
|
|
||||||
|
_appendMenuItem: function(labelText) {
|
||||||
|
// FIXME: app-well-menu-item style
|
||||||
|
let item = new PopupMenu.PopupMenuItem(labelText);
|
||||||
|
this.addMenuItem(item);
|
||||||
|
return item;
|
||||||
|
},
|
||||||
|
|
||||||
|
popup: function(activatingButton) {
|
||||||
|
this._redisplay();
|
||||||
|
this.open();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onActivate: function (actor, child) {
|
||||||
|
if (child._window) {
|
||||||
|
let metaWindow = child._window;
|
||||||
|
this.emit('activate-window', metaWindow);
|
||||||
|
} else if (child == this._newWindowMenuItem) {
|
||||||
|
let current_workspace = global.screen.get_active_workspace().index();
|
||||||
|
this._source.app.open_new_window(current_workspace);
|
||||||
|
this.emit('activate-window', null);
|
||||||
|
} else if (child == this._quitAppMenuItem) {
|
||||||
|
this._source.app.request_quit();
|
||||||
|
} else if (child == this._toggleFavoriteMenuItem) {
|
||||||
|
let favs = AppFavorites.getAppFavorites();
|
||||||
|
let isFavorite = favs.isFavorite(this._source.app.get_id());
|
||||||
|
if (isFavorite)
|
||||||
|
favs.removeFavorite(this._source.app.get_id());
|
||||||
|
else
|
||||||
|
favs.addFavorite(this._source.app.get_id());
|
||||||
|
}
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let dock;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
dock = new Dock();
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
dock.destroy();
|
||||||
|
dock = null;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Dock",
|
||||||
|
"description": "A dock for the GNOME Shell -- displays favorite and running applications",
|
||||||
|
"original-author": "tclaesson@gmail.com",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<enum id='org.gnome.shell.extensions.dock.PositionMode'>
|
||||||
|
<value nick='left' value='0'/>
|
||||||
|
<value nick='right' value='1'/>
|
||||||
|
</enum>
|
||||||
|
<enum id='org.gnome.shell.extensions.dock.AutoHideEffect'>
|
||||||
|
<value nick='resize' value='0'/>
|
||||||
|
<value nick='rescale' value='1'/>
|
||||||
|
<value nick='move' value='2'/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<schema id="org.gnome.shell.extensions.dock" path="/org/gnome/shell/extensions/dock/">
|
||||||
|
<key name="position" enum="org.gnome.shell.extensions.dock.PositionMode">
|
||||||
|
<default>'right'</default>
|
||||||
|
<_summary>Position of the dock</_summary>
|
||||||
|
<_description>Sets the position of the dock in the screen. Allowed values are 'right' or 'left'</_description>
|
||||||
|
</key>
|
||||||
|
<key name="size" type="i">
|
||||||
|
<default>48</default>
|
||||||
|
<_summary>Icon size</_summary>
|
||||||
|
<_description>Sets icon size of the dock.</_description>
|
||||||
|
</key>
|
||||||
|
<key name="autohide" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<_summary>Enable/disable autohide</_summary>
|
||||||
|
</key>
|
||||||
|
<key name="hide-effect" enum="org.gnome.shell.extensions.dock.AutoHideEffect">
|
||||||
|
<default>'move'</default>
|
||||||
|
<_summary>Autohide effect</_summary>
|
||||||
|
<_description>Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and 'move'</_description>
|
||||||
|
</key>
|
||||||
|
<key name="hide-effect-duration" type="d">
|
||||||
|
<default>0.3</default>
|
||||||
|
<_summary>Autohide duration</_summary>
|
||||||
|
<_description>Sets the time duration of the autohide effect.</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#dock {
|
||||||
|
border-radius: 9px;
|
||||||
|
background-color: rgba(0,0,0,0.9);
|
||||||
|
border-width: 2px;
|
||||||
|
border-color: #5f5f5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dock-menu {
|
||||||
|
font-size: 12px
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = drive-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
// 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 ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const DriveMenuItem = new Lang.Class({
|
||||||
|
Name: 'DriveMenu.DriveMenuItem',
|
||||||
|
Extends: PopupMenu.PopupBaseMenuItem,
|
||||||
|
|
||||||
|
_init: function(place) {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.place = place;
|
||||||
|
|
||||||
|
this.label = new St.Label({ text: place.name });
|
||||||
|
this.addActor(this.label);
|
||||||
|
|
||||||
|
let ejectIcon = new St.Icon({ icon_name: 'media-eject',
|
||||||
|
icon_type: St.IconType.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() {
|
||||||
|
this.place.remove();
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function(event) {
|
||||||
|
this.place.launch({ timestamp: event.get_time() });
|
||||||
|
|
||||||
|
this.parent(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const DriveMenu = new Lang.Class({
|
||||||
|
Name: 'DriveMenu.DriveMenu',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('media-eject');
|
||||||
|
|
||||||
|
this._manager = Main.placesManager;
|
||||||
|
this._updatedId = this._manager.connect('mounts-updated', Lang.bind(this, this._update));
|
||||||
|
|
||||||
|
this._contentSection = new PopupMenu.PopupMenuSection();
|
||||||
|
this.menu.addMenuItem(this._contentSection);
|
||||||
|
|
||||||
|
this._update();
|
||||||
|
|
||||||
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
this.menu.addAction(_("Open file manager"), function(event) {
|
||||||
|
let appSystem = Shell.AppSystem.get_default();
|
||||||
|
let app = appSystem.lookup_app('nautilus.desktop');
|
||||||
|
app.activate_full(-1, event.get_time());
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_update: function() {
|
||||||
|
this._contentSection.removeAll();
|
||||||
|
|
||||||
|
let mounts = this._manager.getMounts();
|
||||||
|
let any = false;
|
||||||
|
for (let i = 0; i < mounts.length; i++) {
|
||||||
|
if (mounts[i].isRemovable()) {
|
||||||
|
this._contentSection.addMenuItem(new DriveMenuItem(mounts[i]));
|
||||||
|
any = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actor.visible = any;
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
this._manager.disconnect(this._updatedId);
|
||||||
|
|
||||||
|
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,3 @@
|
|||||||
|
EXTENSION_ID = gajim
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,340 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const DBus = imports.dbus;
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Tp = imports.gi.TelepathyGLib;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const TelepathyClient = imports.ui.telepathyClient;
|
||||||
|
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
// http://ntt.cc/ext/base64-Encoding-Decoding.html
|
||||||
|
const keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||||
|
|
||||||
|
function decode64(input) {
|
||||||
|
let output = "";
|
||||||
|
let chr1, chr2, chr3;
|
||||||
|
let enc1, enc2, enc3, enc4;
|
||||||
|
let i = 0;
|
||||||
|
|
||||||
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||||||
|
|
||||||
|
do {
|
||||||
|
enc1 = keyStr.indexOf(input.charAt(i++));
|
||||||
|
enc2 = keyStr.indexOf(input.charAt(i++));
|
||||||
|
enc3 = keyStr.indexOf(input.charAt(i++));
|
||||||
|
enc4 = keyStr.indexOf(input.charAt(i++));
|
||||||
|
|
||||||
|
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||||
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||||
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
||||||
|
|
||||||
|
output = output + String.fromCharCode(chr1);
|
||||||
|
|
||||||
|
if (enc3 != 64) {
|
||||||
|
output = output + String.fromCharCode(chr2);
|
||||||
|
}
|
||||||
|
if (enc4 != 64) {
|
||||||
|
output = output + String.fromCharCode(chr3);
|
||||||
|
}
|
||||||
|
|
||||||
|
chr1 = chr2 = chr3 = "";
|
||||||
|
enc1 = enc2 = enc3 = enc4 = "";
|
||||||
|
|
||||||
|
} while (i < input.length);
|
||||||
|
|
||||||
|
return unescape(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
function wrappedText(text, sender, timestamp, direction) {
|
||||||
|
if (!timestamp)
|
||||||
|
timestamp = (Date.now() / 1000);
|
||||||
|
return {
|
||||||
|
messageType: Tp.ChannelTextMessageType.NORMAL,
|
||||||
|
text: text,
|
||||||
|
sender: sender,
|
||||||
|
timestamp: timestamp,
|
||||||
|
direction: direction
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function Source(gajimClient, accountName, author, initialMessage) {
|
||||||
|
this._init(gajimClient, accountName, author, initialMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
Source.prototype = {
|
||||||
|
__proto__: MessageTray.Source.prototype,
|
||||||
|
|
||||||
|
_init: function(gajimClient, accountName, author, initialMessage) {
|
||||||
|
MessageTray.Source.prototype._init.call(this, author);
|
||||||
|
this.isChat = true;
|
||||||
|
this._author = author;
|
||||||
|
this._gajimClient = gajimClient;
|
||||||
|
this._accountName = accountName;
|
||||||
|
this._initialMessage = initialMessage;
|
||||||
|
this._iconUri = null;
|
||||||
|
this._presence = "online";
|
||||||
|
|
||||||
|
this._notification = new TelepathyClient.ChatNotification(this);
|
||||||
|
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||||
|
|
||||||
|
let jid = author.split('/')[0];
|
||||||
|
let proxy = this._gajimClient.proxy();
|
||||||
|
proxy.contact_infoRemote(jid, Lang.bind(this, this._gotContactInfos));
|
||||||
|
this._statusChangeId = proxy.connect('ContactStatus',
|
||||||
|
Lang.bind(this, this._onStatusChange));
|
||||||
|
this._contactAbsenceId = proxy.connect('ContactAbsence',
|
||||||
|
Lang.bind(this, this._onStatusChange));
|
||||||
|
this._chatStateId = proxy.connect('ChatState',
|
||||||
|
Lang.bind(this, this._onChatState));
|
||||||
|
this._messageSentId = proxy.connect('MessageSent',
|
||||||
|
Lang.bind(this, this._messageSent));
|
||||||
|
this._newMessageId = proxy.connect('NewMessage',
|
||||||
|
Lang.bind(this, this._messageReceived));
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
let proxy = this._gajimClient.proxy();
|
||||||
|
proxy.disconnect(this._statusChangeId);
|
||||||
|
proxy.disconnect(this._contactAbsenceId);
|
||||||
|
proxy.disconnect(this._chatStateId);
|
||||||
|
proxy.disconnect(this._messageSentId);
|
||||||
|
proxy.disconnect(this._newMessageId);
|
||||||
|
MessageTray.Source.prototype.destroy.call(this);
|
||||||
|
},
|
||||||
|
|
||||||
|
_gotContactInfos: function(result, excp) {
|
||||||
|
this.title = result['FN'];
|
||||||
|
|
||||||
|
let avatarUri = null;
|
||||||
|
if (result['PHOTO']) {
|
||||||
|
let mimeType = result['PHOTO']['TYPE'];
|
||||||
|
let avatarData = decode64(result['PHOTO']['BINVAL']);
|
||||||
|
let sha = result['PHOTO']['SHA'];
|
||||||
|
avatarUri = this._gajimClient.cacheAvatar(mimeType, sha, avatarData);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._iconUri = avatarUri;
|
||||||
|
this._setSummaryIcon(this.createNotificationIcon());
|
||||||
|
|
||||||
|
let message = wrappedText(this._initialMessage, this._author, null, TelepathyClient.NotificationDirection.RECEIVED);
|
||||||
|
this._notification.appendMessage(message, false);
|
||||||
|
|
||||||
|
if (!Main.messageTray.contains(this))
|
||||||
|
Main.messageTray.add(this);
|
||||||
|
|
||||||
|
this.notify(this._notification);
|
||||||
|
},
|
||||||
|
|
||||||
|
createNotificationIcon: function() {
|
||||||
|
let iconBox = new St.Bin({ style_class: 'avatar-box' });
|
||||||
|
iconBox._size = this.ICON_SIZE;
|
||||||
|
|
||||||
|
if (!this._iconUri) {
|
||||||
|
iconBox.child = new St.Icon({ icon_name: 'avatar-default',
|
||||||
|
icon_type: St.IconType.FULLCOLOR,
|
||||||
|
icon_size: iconBox._size });
|
||||||
|
} else {
|
||||||
|
let textureCache = St.TextureCache.get_default();
|
||||||
|
iconBox.child = textureCache.load_uri_async(this._iconUri, iconBox._size, iconBox._size);
|
||||||
|
}
|
||||||
|
return iconBox;
|
||||||
|
},
|
||||||
|
|
||||||
|
open: function(notification) {
|
||||||
|
// Lookup for the messages window and display it. In the case where it's not o
|
||||||
|
// opened yet fallback to the roster window.
|
||||||
|
let windows = global.get_window_actors();
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
let metaWindow = windows[i].metaWindow;
|
||||||
|
if (metaWindow.get_wm_class_instance() == "gajim" &&
|
||||||
|
metaWindow.get_role() == "messages") {
|
||||||
|
Main.activateWindow(metaWindow);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let app = Shell.AppSystem.get_default().lookup_app('gajim.desktop');
|
||||||
|
app.activate(-1);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onChatState: function(emitter, data) {
|
||||||
|
let chatstate = data[1][5];
|
||||||
|
if (chatstate == 'gone')
|
||||||
|
this.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
|
setChatState: function(state) {
|
||||||
|
// Gajim DBUS API doesn't support sending chatstate yet.
|
||||||
|
},
|
||||||
|
|
||||||
|
_messageReceived: function(emitter, data) {
|
||||||
|
let author = data[1][0];
|
||||||
|
let text = data[1][1];
|
||||||
|
if (text && (author == this._author)) {
|
||||||
|
let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.RECEIVED);
|
||||||
|
this._notification.appendMessage(message, false);
|
||||||
|
this.notify(this._notification);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_messageSent: function(emitter, data) {
|
||||||
|
let recipient = data[1][0];
|
||||||
|
let text = data[1][1];
|
||||||
|
let chatstate = data[1][3];
|
||||||
|
|
||||||
|
if (text && (recipient == this._author)) {
|
||||||
|
let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.SENT);
|
||||||
|
this._notification.appendMessage(message, false);
|
||||||
|
} else if (chatstate == 'gone')
|
||||||
|
this.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
|
notify: function() {
|
||||||
|
|
||||||
|
MessageTray.Source.prototype.notify.call(this, this._notification);
|
||||||
|
},
|
||||||
|
|
||||||
|
respond: function(text) {
|
||||||
|
let jid = this._author;
|
||||||
|
let keyID = ""; // unencrypted.
|
||||||
|
this._gajimClient.proxy().send_chat_messageRemote(jid, text, keyID, this._accountName);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onStatusChange: function(emitter, data) {
|
||||||
|
if (!this.title)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let jid = data[1][0];
|
||||||
|
let presence = data[1][1];
|
||||||
|
let message = data[1][2];
|
||||||
|
|
||||||
|
if (jid != this._author.split('/')[0])
|
||||||
|
return;
|
||||||
|
|
||||||
|
let presenceMessage, shouldNotify, title;
|
||||||
|
title = GLib.markup_escape_text(this.title, -1);
|
||||||
|
if (presence == "away") {
|
||||||
|
presenceMessage = _("%s is away.").format(title);
|
||||||
|
shouldNotify = false;
|
||||||
|
} else if (presence == "offline") {
|
||||||
|
presenceMessage = _("%s is offline.").format(title);
|
||||||
|
shouldNotify = (this._presence != "offline");
|
||||||
|
} else if (presence == "online") {
|
||||||
|
presenceMessage = _("%s is online.").format(title);
|
||||||
|
shouldNotify = (this._presence == "offline");
|
||||||
|
} else if (presence == "dnd") {
|
||||||
|
presenceMessage = _("%s is busy.").format(title);
|
||||||
|
shouldNotify = false;
|
||||||
|
} else
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._presence = presence;
|
||||||
|
|
||||||
|
if (message)
|
||||||
|
presenceMessage += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||||
|
|
||||||
|
this._notification.appendPresence(presenceMessage, shouldNotify);
|
||||||
|
if (shouldNotify)
|
||||||
|
this.notify(this._notification);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const GajimIface = {
|
||||||
|
name: 'org.gajim.dbus.RemoteInterface',
|
||||||
|
properties: [],
|
||||||
|
methods: [{ name: 'send_chat_message', inSignature: 'ssss', outSignature: 'b'},
|
||||||
|
{ name: 'contact_info', inSignature: 's', outSignature: 'a{sv}'}],
|
||||||
|
signals: [{ name: 'NewMessage', inSignature: 'av' },
|
||||||
|
{ name: 'ChatState', inSignature: 'av' },
|
||||||
|
{ name: 'ContactStatus', inSignature: 'av' },
|
||||||
|
{ name: 'ContactAbsence', inSignature: 'av' },
|
||||||
|
{ name: 'MessageSent', inSignature: 'av' }]
|
||||||
|
};
|
||||||
|
|
||||||
|
let Gajim = DBus.makeProxyClass(GajimIface);
|
||||||
|
|
||||||
|
function GajimClient() {
|
||||||
|
this._init();
|
||||||
|
}
|
||||||
|
|
||||||
|
GajimClient.prototype = {
|
||||||
|
_init: function() {
|
||||||
|
this._sources = {};
|
||||||
|
},
|
||||||
|
|
||||||
|
proxy : function() {
|
||||||
|
return this._proxy;
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
this._cacheDir = GLib.get_user_cache_dir() + '/gnome-shell/gajim-avatars';
|
||||||
|
let dir = Gio.file_new_for_path(this._cacheDir);
|
||||||
|
if (!dir.query_exists(null)) {
|
||||||
|
GLib.mkdir_with_parents(this._cacheDir, 0x1c0); // 0x1c0 = octal 0700
|
||||||
|
}
|
||||||
|
|
||||||
|
this._proxy = new Gajim(DBus.session, 'org.gajim.dbus', '/org/gajim/dbus/RemoteObject');
|
||||||
|
this._newMessageId = this._proxy.connect('NewMessage', Lang.bind(this, this._messageReceived));
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
if (this._newMessageId) {
|
||||||
|
this._proxy.disconnect(this._newMessageId);
|
||||||
|
this._newMessageId = 0;
|
||||||
|
}
|
||||||
|
this._proxy = null;
|
||||||
|
|
||||||
|
for (let id in this._sources)
|
||||||
|
this._sources[id].destroy();
|
||||||
|
|
||||||
|
this._sources = { };
|
||||||
|
},
|
||||||
|
|
||||||
|
_messageReceived : function(emitter, data) {
|
||||||
|
let author = data[1][0];
|
||||||
|
let message = data[1][1];
|
||||||
|
let account = data[0];
|
||||||
|
let source = this._sources[author];
|
||||||
|
if (!source) {
|
||||||
|
source = new Source(this, account, author, message);
|
||||||
|
source.connect('destroy', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
delete this._sources[author];
|
||||||
|
}));
|
||||||
|
this._sources[author] = source;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
cacheAvatar : function(mimeType, sha, avatarData) {
|
||||||
|
let ext = mimeType.split('/')[1];
|
||||||
|
let file = this._cacheDir + '/' + sha + '.' + ext;
|
||||||
|
let uri = GLib.filename_to_uri(file, null);
|
||||||
|
|
||||||
|
if (GLib.file_test(file, GLib.FileTest.EXISTS))
|
||||||
|
return uri;
|
||||||
|
|
||||||
|
let success = false;
|
||||||
|
try {
|
||||||
|
success = GLib.file_set_contents(file, avatarData, avatarData.length);
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'Error caching avatar data');
|
||||||
|
}
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
return new GajimClient();
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Gajim IM integration",
|
||||||
|
"description": "Display Gajim incoming chats as notifications in the Shell message tray.",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "http://base-art.net"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* none used */
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EXTENSION_ID = native-window-placement
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|
||||||
@@ -0,0 +1,509 @@
|
|||||||
|
// -*- 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 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 WORKSPACE_BORDER_GAP = 10; // gap between the workspace area and the workspace selector
|
||||||
|
|
||||||
|
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');
|
||||||
|
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 x_gap = WORKSPACE_BORDER_GAP;
|
||||||
|
let y_gap = WORKSPACE_BORDER_GAP * this._height / this._width
|
||||||
|
let area = new Rect(this._x, this._y, this._width - x_gap, this._height - y_gap);
|
||||||
|
|
||||||
|
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 + this._x;
|
||||||
|
rects[i].y = rects[i].y * scale + this._y;
|
||||||
|
|
||||||
|
targets[i] = [rects[i].x, rects[i].y, scale];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [clones, targets];
|
||||||
|
}
|
||||||
|
workspaceInjections['_calculateWindowTransformationsNatural'] = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* positionWindows:
|
||||||
|
* @flags:
|
||||||
|
* INITIAL - this is the initial positioning of the windows.
|
||||||
|
* ANIMATE - Indicates that we need animate changing position.
|
||||||
|
*/
|
||||||
|
workspaceInjections['positionWindows'] = Workspace.Workspace.prototype.positionWindows;
|
||||||
|
Workspace.Workspace.prototype.positionWindows = 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 (settings.get_boolean('window-captions-on-top')) {
|
||||||
|
winInjections['_init'] = Workspace.WindowOverlay.prototype._init;
|
||||||
|
Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) {
|
||||||
|
let metaWindow = windowClone.metaWindow;
|
||||||
|
|
||||||
|
this._windowClone = windowClone;
|
||||||
|
this._parentActor = parentActor;
|
||||||
|
this._hidden = false;
|
||||||
|
|
||||||
|
let title = new St.Label({ style_class: 'window-caption',
|
||||||
|
text: metaWindow.title });
|
||||||
|
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||||
|
title._spacing = 0;
|
||||||
|
title._overlap = 0;
|
||||||
|
|
||||||
|
this._updateCaptionId = metaWindow.connect('notify::title', Lang.bind(this, function(w) {
|
||||||
|
this.title.text = w.title;
|
||||||
|
}));
|
||||||
|
|
||||||
|
let button = new St.Button({ style_class: 'window-close' });
|
||||||
|
button._overlap = 0;
|
||||||
|
|
||||||
|
this._idleToggleCloseId = 0;
|
||||||
|
button.connect('clicked', Lang.bind(this, this._closeWindow));
|
||||||
|
|
||||||
|
windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
windowClone.actor.connect('enter-event', Lang.bind(this, this._onEnter));
|
||||||
|
windowClone.actor.connect('leave-event', Lang.bind(this, this._onLeave));
|
||||||
|
|
||||||
|
this._windowAddedId = 0;
|
||||||
|
windowClone.connect('zoom-start', Lang.bind(this, this.hide));
|
||||||
|
windowClone.connect('zoom-end', Lang.bind(this, this.show));
|
||||||
|
|
||||||
|
button.hide();
|
||||||
|
|
||||||
|
this.title = title;
|
||||||
|
this.closeButton = button;
|
||||||
|
|
||||||
|
parentActor.add_actor(this.title);
|
||||||
|
parentActor.add_actor(this.closeButton);
|
||||||
|
title.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||||
|
button.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||||
|
|
||||||
|
// force a style change if we are already on a stage - otherwise
|
||||||
|
// the signal will be emitted normally when we are added
|
||||||
|
if (parentActor.get_stage())
|
||||||
|
this._onStyleChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
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 = St.Widget.get_default_direction() == St.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._overlap;
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
winInjections['_onStyleChanged'] = Workspace.WindowOverlay.prototype._onStyleChanged;
|
||||||
|
Workspace.WindowOverlay.prototype._onStyleChanged = function() {
|
||||||
|
let titleNode = this.title.get_theme_node();
|
||||||
|
this.title._spacing = titleNode.get_length('-shell-caption-spacing');
|
||||||
|
this.title._overlap = titleNode.get_length('-shell-caption-overlap');
|
||||||
|
|
||||||
|
let closeNode = this.closeButton.get_theme_node();
|
||||||
|
this.closeButton._overlap = closeNode.get_length('-shell-close-overlap');
|
||||||
|
|
||||||
|
this._parentActor.queue_relayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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-overlap: 10px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = places-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
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 ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const PLACE_ICON_SIZE = 22;
|
||||||
|
|
||||||
|
const PlacesMenu = new Lang.Class({
|
||||||
|
Name: 'PlacesMenu.PlacesMenu',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('folder');
|
||||||
|
|
||||||
|
this.defaultItems = [];
|
||||||
|
this.bookmarkItems = [];
|
||||||
|
this.deviceItems = [];
|
||||||
|
this._createDefaultPlaces();
|
||||||
|
this._bookmarksSection = new PopupMenu.PopupMenuSection();
|
||||||
|
this.menu.addMenuItem(this._bookmarksSection);
|
||||||
|
this._createBookmarks();
|
||||||
|
this._devicesMenuItem = new PopupMenu.PopupSubMenuMenuItem(_("Removable Devices"));
|
||||||
|
this.menu.addMenuItem(this._devicesMenuItem);
|
||||||
|
this._createDevices();
|
||||||
|
|
||||||
|
this._bookmarksId = Main.placesManager.connect('bookmarks-updated',Lang.bind(this,this._redisplayBookmarks));
|
||||||
|
this._mountsId = Main.placesManager.connect('mounts-updated',Lang.bind(this,this._redisplayDevices));
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
Main.placesManager.disconnect(this._bookmarksId);
|
||||||
|
Main.placesManager.disconnect(this._mountsId);
|
||||||
|
|
||||||
|
this.parent();
|
||||||
|
},
|
||||||
|
|
||||||
|
_redisplayBookmarks: function(){
|
||||||
|
this._clearBookmarks();
|
||||||
|
this._createBookmarks();
|
||||||
|
},
|
||||||
|
|
||||||
|
_redisplayDevices: function(){
|
||||||
|
this._clearDevices();
|
||||||
|
this._createDevices();
|
||||||
|
},
|
||||||
|
|
||||||
|
_createDefaultPlaces : function() {
|
||||||
|
this.defaultPlaces = Main.placesManager.getDefaultPlaces();
|
||||||
|
|
||||||
|
for (let placeid = 0; placeid < this.defaultPlaces.length; placeid++) {
|
||||||
|
this.defaultItems[placeid] = new PopupMenu.PopupMenuItem(this.defaultPlaces[placeid].name);
|
||||||
|
let icon = this.defaultPlaces[placeid].iconFactory(PLACE_ICON_SIZE);
|
||||||
|
this.defaultItems[placeid].addActor(icon, { align: St.Align.END });
|
||||||
|
this.defaultItems[placeid].place = this.defaultPlaces[placeid];
|
||||||
|
this.menu.addMenuItem(this.defaultItems[placeid]);
|
||||||
|
this.defaultItems[placeid].connect('activate', function(actor,event) {
|
||||||
|
actor.place.launch();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_createBookmarks : function() {
|
||||||
|
this.bookmarks = Main.placesManager.getBookmarks();
|
||||||
|
|
||||||
|
for (let bookmarkid = 0; bookmarkid < this.bookmarks.length; bookmarkid++) {
|
||||||
|
this.bookmarkItems[bookmarkid] = new PopupMenu.PopupMenuItem(this.bookmarks[bookmarkid].name);
|
||||||
|
let icon = this.bookmarks[bookmarkid].iconFactory(PLACE_ICON_SIZE);
|
||||||
|
this.bookmarkItems[bookmarkid].addActor(icon, { align: St.Align.END });
|
||||||
|
this.bookmarkItems[bookmarkid].place = this.bookmarks[bookmarkid];
|
||||||
|
this._bookmarksSection.addMenuItem(this.bookmarkItems[bookmarkid]);
|
||||||
|
this.bookmarkItems[bookmarkid].connect('activate', function(actor,event) {
|
||||||
|
actor.place.launch();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_createDevices : function() {
|
||||||
|
this.devices = Main.placesManager.getMounts();
|
||||||
|
|
||||||
|
for (let devid = 0; devid < this.devices.length; devid++) {
|
||||||
|
this.deviceItems[devid] = new PopupMenu.PopupMenuItem(this.devices[devid].name);
|
||||||
|
let icon = this.devices[devid].iconFactory(PLACE_ICON_SIZE);
|
||||||
|
this.deviceItems[devid].addActor(icon, { align: St.Align.END });
|
||||||
|
this.deviceItems[devid].place = this.devices[devid];
|
||||||
|
this._devicesMenuItem.menu.addMenuItem(this.deviceItems[devid]);
|
||||||
|
this.deviceItems[devid].connect('activate', function(actor,event) {
|
||||||
|
actor.place.launch();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.devices.length == 0)
|
||||||
|
this._devicesMenuItem.actor.hide();
|
||||||
|
else
|
||||||
|
this._devicesMenuItem.actor.show();
|
||||||
|
},
|
||||||
|
|
||||||
|
_clearBookmarks : function(){
|
||||||
|
this._bookmarksSection.removeAll();
|
||||||
|
this.bookmarkItems = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
_clearDevices : function(){
|
||||||
|
this._devicesMenuItem.menu.removeAll();
|
||||||
|
this.deviceItems = [];
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_indicator = new PlacesMenu;
|
||||||
|
Main.panel.addToStatusArea('places-menu', _indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 @@
|
|||||||
|
/* none used*/
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = systemMonitor
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,244 @@
|
|||||||
|
/* -*- 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 INDICATOR_UPDATE_INTERVAL = 500;
|
||||||
|
const INDICATOR_NUM_GRID_LINES = 3;
|
||||||
|
|
||||||
|
let _cpuIndicator;
|
||||||
|
let _memIndicator;
|
||||||
|
let _box;
|
||||||
|
|
||||||
|
const Indicator = new Lang.Class({
|
||||||
|
Name: 'SystemMonitor.Indicator',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._initValues();
|
||||||
|
this.drawing_area = new St.DrawingArea({ reactive: true });
|
||||||
|
this.drawing_area.width = 100; this.drawing_area.height = 100;
|
||||||
|
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});
|
||||||
|
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;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
Mainloop.source_remove(this._timeout);
|
||||||
|
|
||||||
|
this.actor.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];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_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];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
// nothing to do here
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_cpuIndicator = new CpuIndicator();
|
||||||
|
_memIndicator = new MemoryIndicator();
|
||||||
|
_box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' });
|
||||||
|
_box.add(_cpuIndicator.actor);
|
||||||
|
_box.add(_memIndicator.actor);
|
||||||
|
Main.messageTray.actor.add_actor(_box);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
_cpuIndicator.destroy();
|
||||||
|
_cpuIndicator = null;
|
||||||
|
_memIndicator.destroy();
|
||||||
|
_memIndicator = null;
|
||||||
|
_box.destroy();
|
||||||
|
}
|
||||||
@@ -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,23 @@
|
|||||||
|
.extension-systemMonitor-container {
|
||||||
|
spacing: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-bottom: 1px;
|
||||||
|
padding-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extension-systemMonitor-indicator-area {
|
||||||
|
border: 1px solid #8d8d8d;
|
||||||
|
border-radius: 3px;
|
||||||
|
width: 100px;
|
||||||
|
height: 30px;
|
||||||
|
-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;
|
||||||
|
}
|
||||||
@@ -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,9 +17,22 @@ 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;
|
||||||
|
|
||||||
|
function resetState() {
|
||||||
|
winInjections = { };
|
||||||
|
workspaceInjections = { };
|
||||||
|
workViewInjections = { };
|
||||||
|
createdActors = [ ];
|
||||||
|
connectedSignals = [ ];
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
resetState();
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.setId = function(id) {
|
Workspace.WindowOverlay.prototype.setId = function(id) {
|
||||||
if (this._text.visible && id == null)
|
if (this._text.visible && id == null)
|
||||||
this._text.hide();
|
this._text.hide();
|
||||||
@@ -27,9 +40,13 @@ function main() {
|
|||||||
if (id != null)
|
if (id != null)
|
||||||
this._text.text = this._id.toString();
|
this._text.text = this._id.toString();
|
||||||
}
|
}
|
||||||
|
winInjections['setId'] = undefined;
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.getId = function() {
|
Workspace.WindowOverlay.prototype.getId = function() {
|
||||||
return this._id;
|
return this._id;
|
||||||
}
|
}
|
||||||
|
winInjections['getId'] = undefined;
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.showTooltip = function() {
|
Workspace.WindowOverlay.prototype.showTooltip = function() {
|
||||||
if (this._id === null)
|
if (this._id === null)
|
||||||
return;
|
return;
|
||||||
@@ -37,26 +54,34 @@ function main() {
|
|||||||
this._text.show();
|
this._text.show();
|
||||||
this._text.text = this._id.toString();
|
this._text.text = this._id.toString();
|
||||||
}
|
}
|
||||||
|
winInjections['showTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.hideTooltip = function() {
|
Workspace.WindowOverlay.prototype.hideTooltip = function() {
|
||||||
if (this._text.visible)
|
if (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 in this._windowOverlays) {
|
||||||
if (this._windowOverlays[i] == null)
|
if (this._windowOverlays[i] == null)
|
||||||
@@ -66,25 +91,32 @@ function main() {
|
|||||||
}
|
}
|
||||||
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 +124,24 @@ 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 ((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 +149,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,61 +163,87 @@ 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();
|
workspaceInjections['positionWindows'] = injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
|
||||||
|
let visibleClones = this._windows.slice();
|
||||||
if (this._reservedSlot)
|
if (this._reservedSlot)
|
||||||
visibleClones.push(this._reservedSlot);
|
visibleClones.push(this._reservedSlot);
|
||||||
|
|
||||||
@@ -190,14 +259,46 @@ function main() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
|
workViewInjections['_init'] = 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,144 @@
|
|||||||
|
// -*- 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.menu.actor.add_style_class_name('workspace-indicator-shorter');
|
||||||
|
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,217 @@
|
|||||||
|
// -*- 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;
|
||||||
|
|
||||||
|
print('reloading from settings');
|
||||||
|
|
||||||
|
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]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printerr('three');
|
||||||
|
|
||||||
|
this._preventChanges = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onRowChanged: function(self, path, iter) {
|
||||||
|
if (this._preventChanges)
|
||||||
|
return;
|
||||||
|
this._preventChanges = true;
|
||||||
|
|
||||||
|
print('on_row_changed: ' + path.to_string());
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
print('on_row_inserted: ' + path.to_string());
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
print('on_row_deleted: ' + path.to_string());
|
||||||
|
|
||||||
|
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,9 @@
|
|||||||
|
.workspace-indicator-shorter {
|
||||||
|
min-width: 25px;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
.panel-workspace-indicator {
|
||||||
|
padding: 0 8px;
|
||||||
|
background-color: rgba(200, 200, 200, .5);
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
}
|
||||||
@@ -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,10 +27,10 @@ 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 = {
|
||||||
@@ -58,7 +63,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,7 +75,7 @@ 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());
|
||||||
@@ -87,21 +92,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -130,6 +140,17 @@ Indicator.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function main() {
|
function init(metadata) {
|
||||||
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_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,68 @@
|
|||||||
|
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
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 });
|
||||||
|
}
|
||||||
|
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
extensionbase=~/.local/share/gnome-shell/extensions
|
||||||
|
|
||||||
|
for i in zip-files/*; do
|
||||||
|
zip_file=`pwd`/$i;
|
||||||
|
uuid=`basename $i | sed -e "s/.shell-extension.zip//"`;
|
||||||
|
if [ -d $extensionbase/$uuid ]; then
|
||||||
|
rm -fR $extensionbase/$uuid;
|
||||||
|
fi
|
||||||
|
mkdir $extensionbase/$uuid;
|
||||||
|
(cd $extensionbase/$uuid;
|
||||||
|
unzip -q $zip_file;
|
||||||
|
);
|
||||||
|
done
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
intltool.m4
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
ca
|
||||||
|
cs
|
||||||
|
da
|
||||||
|
de
|
||||||
|
el
|
||||||
|
en_GB
|
||||||
|
eo
|
||||||
|
es
|
||||||
|
eu
|
||||||
|
fa
|
||||||
|
fi
|
||||||
|
fr
|
||||||
|
gl
|
||||||
|
he
|
||||||
|
hu
|
||||||
|
it
|
||||||
|
ja
|
||||||
|
lv
|
||||||
|
lt
|
||||||
|
nb
|
||||||
|
pa
|
||||||
|
pt
|
||||||
|
pt_BR
|
||||||
|
pl
|
||||||
|
ru
|
||||||
|
sk
|
||||||
|
sl
|
||||||
|
sr
|
||||||
|
sr@latin
|
||||||
|
sv
|
||||||
|
te
|
||||||
|
vi
|
||||||
|
uk
|
||||||
|
zh_CN
|
||||||
|
zh_HK
|
||||||
|
zh_TW
|
||||||
+24
-3
@@ -1,4 +1,25 @@
|
|||||||
extensions/example/extension.js
|
|
||||||
extensions/windowsNavigator/extension.js
|
|
||||||
extensions/xrandr-indicator/extension.js
|
|
||||||
extensions/alternate-tab/extension.js
|
extensions/alternate-tab/extension.js
|
||||||
|
extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in
|
||||||
|
extensions/alternate-tab/prefs.js
|
||||||
|
extensions/alternative-status-menu/extension.js
|
||||||
|
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/dock/extension.js
|
||||||
|
extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in
|
||||||
|
extensions/drive-menu/extension.js
|
||||||
|
extensions/example/extension.js
|
||||||
|
extensions/example/org.gnome.shell.extensions.example.gschema.xml.in
|
||||||
|
extensions/example/prefs.js
|
||||||
|
extensions/gajim/extension.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/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/workspace-indicator/extension.js
|
||||||
|
extensions/workspace-indicator/prefs.js
|
||||||
|
extensions/xrandr-indicator/extension.js
|
||||||
|
|||||||
@@ -0,0 +1,322 @@
|
|||||||
|
# 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.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-08-19 23:28+0200\n"
|
||||||
|
"PO-Revision-Date: 2011-08-02 07:30+0200\n"
|
||||||
|
"Last-Translator: jmas@softcatala.org\n"
|
||||||
|
"Language-Team: ca_ES <tradgnome@softcatala.net>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:39
|
||||||
|
msgid "Available"
|
||||||
|
msgstr "Disponible"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Busy"
|
||||||
|
msgstr "Ocupat"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "My Account"
|
||||||
|
msgstr "El meu compte"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Paràmetres de l'ordinador"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "Bloca la pantalla"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:67
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Canvia d'usuari"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:72
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "Surt..."
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:79
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Atura temporalment"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:85
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hiberna"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:91
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Apaga..."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:269
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Comportament de l'«Alternate Tab»"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:285
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Totes i miniatures"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:292
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Espai de treball i icones"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:299
|
||||||
|
msgid "Native"
|
||||||
|
msgstr "Nadiu"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:306
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancel·la"
|
||||||
|
|
||||||
|
#: ../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 "Si és «true» (cert) pregunta a l'usuari pel comportament per defecte."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr "Indica si s'acaba d'instal·lar l'«Alternate Tab»"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Defineix el comportament de l'«Alternate Tab». Els valors possibles són: "
|
||||||
|
"«native» (nadiu), «all_thumbnails» (totes i miniatures) i "
|
||||||
|
"«workspace_icons» (espai de treball i icones)."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Comportament de l'«Alternate Tab»"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Aplicació i llista d'espais de treball"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:437
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Arrossegueu aquí per afegir als preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:771
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Finestra nova"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:773
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Surt de l'aplicació"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:778
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Suprimeix dels preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:779
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Afegeix als preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Duració de l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efecte de l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Habilita/Inhabilita l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Mida de la icona"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Posició de l'acoblador"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
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:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
|
||||||
|
msgstr ""
|
||||||
|
"Defineix l'efecte de l'acoblador amagat. Els valors permesos són "
|
||||||
|
"«resize» (amplia) o «rescale» (escala)"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Defineix la durada en temps de l'efecte d'ocultació automàtica."
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hola, món!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:219
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s està absent."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:222
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s està fora de línia."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:225
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s està en línia."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:228
|
||||||
|
#, 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 ""
|
||||||
|
"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/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
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: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 ""
|
||||||
|
"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."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:5
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Utilitza més pantalla per les finestres"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
|
||||||
|
msgid "Window placement strategy"
|
||||||
|
msgstr "Estratègia de posicionament de la finestra"
|
||||||
|
|
||||||
|
#: ../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 "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Nom del tema"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Esquerra"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Dreta"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Capgira"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Configura els paràmetres de visualització..."
|
||||||
@@ -0,0 +1,282 @@
|
|||||||
|
# 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-01-07 10:46+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-01-16 10:51+0100\n"
|
||||||
|
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||||
|
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: cs\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Uspat do paměti"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Uspat na disk"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Vypnout…"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Právě jste poprvé použili rozšíření Alternate Tab.\n"
|
||||||
|
"Vyberte si vámi upřednostňované chování:\n"
|
||||||
|
"\n"
|
||||||
|
"Vše a náhledy:\n"
|
||||||
|
" Tento režim předkládá všechny aplikace ze všech pracovních ploch\n"
|
||||||
|
" v jediném výběrovém seznamu. Místo ikon aplikací pro každé z oken\n"
|
||||||
|
" používá malé náhledy vytvořené přímo podle oken.\n"
|
||||||
|
"\n"
|
||||||
|
"Pracovní plocha a ikony:\n"
|
||||||
|
" Tento režim vám umožňuje přepínat mezi aplikacemi vaší aktuální "
|
||||||
|
"pracovní\n"
|
||||||
|
" plochy a poskytuje vám navíc možnost přepnout se na naposledy použitou\n"
|
||||||
|
" aplikaci vaší předchozí pracovní plochy. Jde vždy o poslední symbol v "
|
||||||
|
"seznamu\n"
|
||||||
|
" a pokud je k dispozici, je oddělen oddělovačem/svislou čárou. Každé z "
|
||||||
|
"oken\n"
|
||||||
|
" je prezentováno ikonou příslušné aplikace.\n"
|
||||||
|
"\n"
|
||||||
|
"Jestliže si přejete vrátit výchozí chování přepínače Alt-Tab, jednoduše "
|
||||||
|
"rozšíření\n"
|
||||||
|
"zakažte v extensions.gnome.org nebo v aplikaci Pokročilá nastavení."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:295
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Chování Alt Tab"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:311
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Vše a náhledy"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:318
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Pracovní plocha a ikony"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:325
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Zrušit"
|
||||||
|
|
||||||
|
#: ../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 "Když je zapnuto, dotázat se uživatele na výchozí chování."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr "Signalizuje, když je rozšíření Alternate Tab nově nainstalováno"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Nastavuje chování klávesové zkratky Alt-Tab. Možné hodnoty jsou: native "
|
||||||
|
"(přirozené), all_thumbnails (vše a náhledy) a workspace_icons (pracovní "
|
||||||
|
"plocha a ikony)."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Chování klávesové zkratky alt tab."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Seznam aplikací a pracovních ploch"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:561
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Přetažením sem přidáte do oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:896
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nové okno"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:898
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Ukončit aplikaci"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:903
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Odebrat z oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:904
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Přidat do oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Čas automatického skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efekt automatického skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Zapnout/vypnout automatické skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Velikost ikony"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Poloha doku"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Nastavuje velikost ikon v doku."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Nastavuje čas trvání efektu automatického skrývání."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:69
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Otevřít správce souborů"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Ahoj světe!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s je pryč."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s je odpojen."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s je připojen."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, 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 ""
|
||||||
|
"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/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
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: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 ""
|
||||||
|
"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:4
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Použít větší část obrazovky pro okna"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:36
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr "Výměnná zařízení"
|
||||||
|
|
||||||
|
#: ../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 "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Název motivu"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normální"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Doleva"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Doprava"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Vzhůru nohama"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Upravit nastavení zobrazení…"
|
||||||
@@ -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,292 @@
|
|||||||
|
# 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.
|
||||||
|
# Christian Kirbach <Christian.Kirbach@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-27 14:30+0000\n"
|
||||||
|
"PO-Revision-Date: 2011-12-28 11:14+0100\n"
|
||||||
|
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
|
||||||
|
"Language-Team: Deutsch <gnome-de@gnome.org>\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"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Bereitschaft"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Ruhezustand"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Ausschalten …"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Sie verwenden die Erweiterung »Alt-Tab« das erste Mal. \n"
|
||||||
|
"Bitte wählen Sie das gewünschte Verhalten:\n"
|
||||||
|
"\n"
|
||||||
|
"Alle und Vorschaubilder:\n"
|
||||||
|
" Dieser Modus stellt alle Anwendungen aus allen Arbeitsflächen in einer\n"
|
||||||
|
" Auswahlliste dar. Anstelle des Anwendungssymbols jedes Fensters werden\n"
|
||||||
|
" kleine Vorschaubilder dargestellt, die dem Fenster ähnlich sind. \n"
|
||||||
|
"\n"
|
||||||
|
"Arbeitsfläche und Symbole:\n"
|
||||||
|
" Dieser Modus ermöglicht den Wechsel zwischen Anwendungen auf Ihrer \n"
|
||||||
|
" aktuellen Arbeitsfläche und ermöglicht weiterhin, auf die zuletzt "
|
||||||
|
"verwendete\n"
|
||||||
|
" Anwendung der letzten Arbeitsfläche zu wechseln. Sie ist immer das letzte "
|
||||||
|
"Symbol\n"
|
||||||
|
" der Liste und ist durch einen Trenner (vertikale Linie) getrennt. \n"
|
||||||
|
" Jedes Fenster wird durch das entsprechende Anwendungssymbol "
|
||||||
|
"repräsentiert.\n"
|
||||||
|
"\n"
|
||||||
|
"Falls Sie zum Standardverhalten der Alt-Tab-Umschaltung zurückkehren wollen,\n"
|
||||||
|
"deaktivieren Sie diese Erweiterung in extensions.gnome.org oder verwenden "
|
||||||
|
"Sie\n"
|
||||||
|
"die »Erweiterten Einstellungen«."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:295
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Verhalten bei Alt-Tab"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:311
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Alle und Vorschaubilder"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:318
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Arbeitsbereich und Symbole"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:325
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Falls wahr, so wird der Benutzer nach dem voreinzustellendem Verhalten "
|
||||||
|
"gefragt."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr "Gibt an, ob die Erweiterung »Alt-Tab« neu installiert wurde"
|
||||||
|
|
||||||
|
# Oder müssen die Werte doch übersetzt werden? -ck
|
||||||
|
# Nein, dconf verhält sich hier nicht anders als gconf. Keinesfalls übersetzen! -mb
|
||||||
|
#: ../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 ""
|
||||||
|
"Legt das Verhalten bei Drücken von Alt-Tab fest. Mögliche Werte sind: "
|
||||||
|
"»native«, »all_thumbnails« und »workspace_icons«."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Das Verhalten bei Eingabe von Alt-Tab."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Anwendungs- und Arbeitsflächenliste"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:561
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:896
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Neues Fenster"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:898
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Anwendung beenden"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:903
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Aus Favoriten entfernen"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:904
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Zu Favoriten hinzufügen"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Dauer automatisch verbergen"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Effekt automatisch verbergen"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Automatisches Verbergen aktivieren/deaktivieren"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Symbolgröße"
|
||||||
|
|
||||||
|
# Dock = das Dock ? -ck
|
||||||
|
# Sofern es sich nicht um das Original-Dash handelt, ja. -mb
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Position des Docks"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Legt die Symbolgröße für das Dock fest"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Legt den Effekt für das versteckte Dock fest. Mögliche Werte sind »resize«, "
|
||||||
|
"»rescale« und »move«"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Legt die Position des Docks auf dem Bildschirm fest. Mögliche Werte sind "
|
||||||
|
"»right« und »left«"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Legt die Effektdauer für automatisches Verbergen fest."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:69
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Dateiverwaltung öffnen"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hallo, Welt!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s ist abwesend."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s ist abgemeldet."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s ist angemeldet."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s ist beschäftigt."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
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: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 ""
|
||||||
|
"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:4
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:36
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr "Wechseldatenträger"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
|
||||||
|
"soll"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Themenname"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Links"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Rechts"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Kopfüber"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Bildschirmeinstellungen festlegen …"
|
||||||
@@ -0,0 +1,323 @@
|
|||||||
|
# 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: 2011-09-17 15:20+0000\n"
|
||||||
|
"PO-Revision-Date: 2011-09-18 14:34+0300\n"
|
||||||
|
"Last-Translator: Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>\n"
|
||||||
|
"Language-Team: Greek <team@gnome.gr>\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/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr "Ειδοποιήσεις"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "Online Accounts"
|
||||||
|
msgstr "Λογαριασμοί διαδικτύου"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Ρυθμίσεις συστήματος"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "Κλείδωμα οθόνης"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Αλλαγή χρήστη"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "Αποσύνδεση…"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:81
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Αναστολή"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:87
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Αδρανοποίηση"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:93
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Σβήσιμο…"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Αυτή είναι η πρώτη φορά που χρησιμοποιήσατε την εναλλακτική επέκταση "
|
||||||
|
"στηλοθέτη. \n"
|
||||||
|
"Παρακαλούμε επιλέξτε την συμπεριφορά που επιθυμείτε εσείς:\n"
|
||||||
|
"\n"
|
||||||
|
"Όλα & μικρογραφίες:\n"
|
||||||
|
" Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές από όλους τους χώρους "
|
||||||
|
"εργασίας σε μια επιλογή \n"
|
||||||
|
" λίστα. Αντί να χρησιμοποιεί το εικονίδιο της εφαρμογής από κάθε "
|
||||||
|
"παράθυρο, χρησιμοποιεί μικρές \n"
|
||||||
|
" μικρογραφίες που μοιάζουν με το ίδιο το παράθυρο. \n"
|
||||||
|
"\n"
|
||||||
|
"Χώρος εργασίας & εικονίδια:\n"
|
||||||
|
" Αυτή η λειτουργία σας επιτρέπει να κάνετε εναλλαγή μεταξύ των εφαρμογών "
|
||||||
|
"του τρέχοντος \n"
|
||||||
|
" χώρου εργασίας σας και σας δίνει επιπλέον τη δυνατότητα να μεταβείτε "
|
||||||
|
"στην τελευταία χρησιμοποιημένη \n"
|
||||||
|
" εφαρμογή του προηγούμενου χώρου εργασίας σας. Αυτό είναι πάντα το "
|
||||||
|
"τελευταίο σύμβολο στη \n"
|
||||||
|
" λίστα και είναι απομονωμένο από ένα διαχωριστικό/κάθετη γραμμή, εάν "
|
||||||
|
"υπάρχει. \n"
|
||||||
|
" Κάθε παράθυρο αντιπροσωπεύεται από εικονίδιο της εφαρμογής της. \n"
|
||||||
|
"\n"
|
||||||
|
"Μητρική:\n"
|
||||||
|
" Αυτή η λειτουργία είναι η μητρική συμπεριφορά του GNOME 3 ή με άλλα "
|
||||||
|
"λόγια: Αν κάνετε κλικ \n"
|
||||||
|
" στο μητρική θέτει εκτός λειτουργίας την εναλλακτική επέκταση "
|
||||||
|
"στηλοθέτη. \n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:269
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Συμπεριφορά Alt Tab"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Ρυθμίζει την συμπεριφορά του Alt Tab. Πιθανές τιμές είναι οι εξής: μητρική, "
|
||||||
|
"όλες_μικρογραφίες και εικονίδια_χώρου εργασίας."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Η συμπεριφορά alt tab."
|
||||||
|
|
||||||
|
#: ../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:486
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Σύρετε εδώ για να προσθέσετε αγαπημένα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:820
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Νέο παράθυρο"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:822
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Εγκατάλειψη εφαρμογής"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:827
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Απομάκρυνση από τα αγαπημένα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:828
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Προσθήκη στα αγαπημένα"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Ρυθμίζειτην επίδραση κρυψίματος του υποδοχέα. Επιτρεπόμενες τιμές είναι "
|
||||||
|
"resize («αλλαγή μεγέθους») ή rescale («αλλαγή κλίμακας»)"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Ρυθμίζει τη θέση του υποδοχέα στην οθόνη. Επιτρεπόμενες τιμές είναι right («δεξιά») "
|
||||||
|
"ή right («αριστερά»)"
|
||||||
|
|
||||||
|
#: ../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 "Καλημέρα, Κόσμε!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s είναι εκτός."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s είναι εκτός σύνδεσης."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s είναι σε σύνδεση."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, 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 ""
|
||||||
|
"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 ""
|
||||||
|
"Ο αλγόριθμος που χρησιμοποιείται για την διάταξη μικρογραφιών στην "
|
||||||
|
"επισκόπηση. grid («πλέγμα») να χρησιμοποιήσει τον αλγόριθμο που βασίζετε στο "
|
||||||
|
"προεπιλεγμένο πλέγμα, natural («φυσικό») να χρησιμοποιήσει ένα άλλο που αντανακλά "
|
||||||
|
"περισσότερο τη θέση και το μέγεθος της πραγματικού παράθυρου"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Το όνομα του θέματος, για να φορτωθεί από το αρχείο ~ / .themes / name / "
|
||||||
|
"gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Όνομα θέματος"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Κανονικό"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Αριστερά"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Δεξιά"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Αναποδογυρισμένο"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Διαμορφώστε τις ρυθμίσεις της οθόνης…"
|
||||||
+309
@@ -0,0 +1,309 @@
|
|||||||
|
# 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.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-09-08 16:00+0100\n"
|
||||||
|
"PO-Revision-Date: 2011-09-08 16:04+0100\n"
|
||||||
|
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
|
||||||
|
"Language-Team: British English <en@li.org>\n"
|
||||||
|
"Language: en_GB\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Virtaal 0.7.1-beta1\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Do Not Disturb"
|
||||||
|
msgstr "Do Not Disturb"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "Online Accounts"
|
||||||
|
msgstr "Online Accounts"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "System Settings"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "Lock Screen"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Switch User"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "Log Out…"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:81
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Suspend"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:87
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernate"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:93
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Power Off…"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:269
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Alt Tab Behaviour"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:285
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "All & Thumbnails"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:292
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Workspace & Icons"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:299
|
||||||
|
msgid "Native"
|
||||||
|
msgstr "Native"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:306
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancel"
|
||||||
|
|
||||||
|
#: ../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 "Ask the user for a default behaviour if true."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr "Indicates if Alternate Tab is newly installed"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
|
||||||
|
"workspace_icons."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "The alt tab behaviour."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Application and workspace list"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:486
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Drag here to add favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:820
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "New Window"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:822
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Quit Application"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:827
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Remove from Favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:828
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Add to Favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Autohide duration"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Autohide effect"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Enable/disable autohide"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Icon size"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Position of the dock"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
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:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
|
||||||
|
msgstr ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Sets the time duration of the autohide effect."
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hello, world!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s is away."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s is offline."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s is online."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, 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 ""
|
||||||
|
"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/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
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: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 ""
|
||||||
|
"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"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:5
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Use more screen for windows"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
|
||||||
|
msgid "Window placement strategy"
|
||||||
|
msgstr "Window placement strategy"
|
||||||
|
|
||||||
|
#: ../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 "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Theme name"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Left"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Right"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Upside-down"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
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,424 @@
|
|||||||
|
# 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-02-13 22:07+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-02-17 10:48+0100\n"
|
||||||
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
|
"Language-Team: Español <gnome-es-list@gnome.org>\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 alt tab behaviour."
|
||||||
|
msgstr "El comportamiento de Alt+Tab."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
#| 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 ""
|
||||||
|
"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 "
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Todo y miniaturas"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
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."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:34
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Espacio de trabajo e iconos"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:35
|
||||||
|
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 ""
|
||||||
|
"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."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:41
|
||||||
|
msgid "Move current selection to front before closing the popup"
|
||||||
|
msgstr ""
|
||||||
|
"Mover la selección actual al frente antes de cerrar la ventana emergente"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:58
|
||||||
|
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."
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:64
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Suspender"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:69
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernar"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:74
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Apagar…"
|
||||||
|
|
||||||
|
#: ../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 espacios 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 espacio de "
|
||||||
|
"trabajo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
#| msgid "Quit Application"
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Aplicación"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
#| msgid "Workspace & Icons"
|
||||||
|
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/dock/extension.js:489
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Arrastrar aquí para añadir a favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:815
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Ventana nueva"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:817
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Salir de la aplicación"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:822
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Quitar de favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:823
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Añadir a favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Posición del tablero"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Configura la posición del tablero en la pantalla. Los valores permitidos son "
|
||||||
|
"«right» (derecha) o «left» (izquierda)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Tamaño del icono"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Configura el tamaño de los íconos del tablero."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Activar/desactivar ocultación automática"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efecto de ocultación 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 ""
|
||||||
|
"Establece el efecto de ocultación del tablero. Los valores permitidos son "
|
||||||
|
"«resize» (redimensionar) y «rescale» (re-escalar) y «move» (mover)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Duración de la ocultación automática"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Configura la duración del efecto de ocultación automática."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:66
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Abrir el gestor de archivos"
|
||||||
|
|
||||||
|
#: ../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/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s no está disponible."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s está desconectado."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s está conectado."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s está ocupado."
|
||||||
|
|
||||||
|
#: ../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:37
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr "Dispositivos extraíbles"
|
||||||
|
|
||||||
|
#: ../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:24
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Indicador de espacio de trabajo"
|
||||||
|
|
||||||
|
#: ../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:82
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Configurar las opciones de pantalla…"
|
||||||
|
|
||||||
|
#~ 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 "System Settings"
|
||||||
|
#~ msgstr "Configuración del sistema"
|
||||||
|
|
||||||
|
#~ 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 "Native"
|
||||||
|
#~ msgstr "Nativo"
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Disponible"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
|
#~ msgstr "Ocupado"
|
||||||
@@ -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"
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
# Persian translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 Iranian Free Software Users Group (IFSUG.org) translation team.
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Arash Mousavi <mousavi.arash@gmail.com>, 2011.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions gnome-3-0\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-05-21 14:17+0000\n"
|
||||||
|
"PO-Revision-Date: 2011-05-23 22:28+0330\n"
|
||||||
|
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
|
||||||
|
"Language-Team: Persian <translate@ifsug.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Poedit-Language: Persian\n"
|
||||||
|
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||||
|
"X-Poedit-SourceCharset: utf-8\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:23
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:27
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:93
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "خوابزمستانی"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:26
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:92
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "تعلیق"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "Available"
|
||||||
|
msgstr "موجود"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:57
|
||||||
|
msgid "Busy"
|
||||||
|
msgstr "مشغول"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:65
|
||||||
|
msgid "My Account"
|
||||||
|
msgstr "حساب من"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:69
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "تنظیمات سیستم"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:76
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "قفلکردن صفحهنمایش"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:80
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "تعویض کاربر"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:85
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "خروج از سیستم..."
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:100
|
||||||
|
msgid "Power Off..."
|
||||||
|
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:116
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "به اینجا بکشید تا به علاقهمندیها اضافه شود"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:417
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "پنجره جدید"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:419
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "خروج از برنامه"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:424
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "حذف از علاقهمندیها"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:425
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "اضافه کردن به علاقهمندیها"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "سلام دنیا!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:219
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s غائب است."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:222
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s برونخط است."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:225
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s برخط است."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:228
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s مشغول است."
|
||||||
|
|
||||||
|
#: ../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 "نام تم، جهت بارگیری از شاخه themes/name/gnome-shell./~"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "نام تم"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "عادی"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "چپ"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "راست"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "برعکس"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "پیکربندی تنظیمات نمایش..."
|
||||||
|
|
||||||
@@ -0,0 +1,264 @@
|
|||||||
|
# Finnish translation of gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 Ville-Pekka Vainio
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Ville-Pekka Vainio <vpvainio@iki.fi>, 2011.
|
||||||
|
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2012-01-07 12:45+0200\n"
|
||||||
|
"PO-Revision-Date: 2012-01-05 20:37+0200\n"
|
||||||
|
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
|
||||||
|
"Language-Team: Finnish <>\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 1.4\n"
|
||||||
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Valmiustila"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Lepotila"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Sammuta…"
|
||||||
|
|
||||||
|
#: ../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 "Työtila ja kuvakkeet"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:325
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Peru"
|
||||||
|
|
||||||
|
#: ../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 "Raahaa tähän lisätäksesi suosikkeihin"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:896
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Uusi ikkuna"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:898
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Lopeta ohjelma"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:903
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Poista suosikeista"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:904
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Lisää suosikkeihin"
|
||||||
|
|
||||||
|
#: ../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 "Hei, maailma!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s on poissa."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s on poissa linjoilta."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s on linjoilla."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s on kiireinen."
|
||||||
|
|
||||||
|
#: ../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 "Teeman nimi, ladataan sijainnista ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Teeman nimi"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Tavallinen"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Vasen"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Oikea"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Ylösalaisin"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Määritä näytön asetukset…"
|
||||||
|
|
||||||
|
#~ msgid "Notifications"
|
||||||
|
#~ msgstr "Ilmoitukset"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Verkkotilit"
|
||||||
|
|
||||||
|
#~ msgid "System Settings"
|
||||||
|
#~ msgstr "Järjestelmän asetukset"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Lukitse näyttö"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Vaihda käyttäjää"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Kirjaudu ulos…"
|
||||||
@@ -0,0 +1,321 @@
|
|||||||
|
# French translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 Listed translators
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Claude Paroz <claude@2xlibre.net>, 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-10-03 16:37+0000\n"
|
||||||
|
"PO-Revision-Date: 2011-09-14 21:51+0200\n"
|
||||||
|
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||||
|
"Language-Team: GNOME French Team <gnomefr@traduc.org>\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/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr "Notifications"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "Online Accounts"
|
||||||
|
msgstr "Comptes en ligne"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Paramètres système"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "Verrouiller l'écran"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Changer d'utilisateur"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "Fermer la session..."
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:81
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Mettre en veille"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:87
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hiberner"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:93
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Éteindre..."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"C'est la première fois que vous utilisez l'extension Alt Tab.\n"
|
||||||
|
"Choisissez votre comportement préféré :\n"
|
||||||
|
"\n"
|
||||||
|
"Tous et vignettes :\n"
|
||||||
|
" Ce mode présente toutes les applications de tous les espaces de travail "
|
||||||
|
"dans une\n"
|
||||||
|
" seule liste à choix. Au lieu d'utiliser l'icône de l'application de "
|
||||||
|
"chaque fenêtre,\n"
|
||||||
|
" il montre de petites vignettes ressemblant à la fenêtre.\n"
|
||||||
|
"\n"
|
||||||
|
"Espace de travail et icônes :\n"
|
||||||
|
" Ce mode vous permet de permuter entre les applications de l'espace de "
|
||||||
|
"travail\n"
|
||||||
|
" actuel et donne en plus la possibilité de revenir à la dernière "
|
||||||
|
"application\n"
|
||||||
|
" utilisée dans l'espace de travail précédent. Celle-ci est toujours en "
|
||||||
|
"fin de liste\n"
|
||||||
|
" après une ligne de séparation. Chaque fenêtre est identifiée par l'icône "
|
||||||
|
"de son application.\n"
|
||||||
|
"\n"
|
||||||
|
"Natif :\n"
|
||||||
|
" Ce mode est le comportement initial de GNOME 3. En d'autres termes, ce "
|
||||||
|
"choix revient à désactiver l'extension Alt Tab.\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:269
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Comportement Alt Tab"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:285
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Tous et vignettes"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:292
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Espace de travail et icônes"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:299
|
||||||
|
msgid "Native"
|
||||||
|
msgstr "Natif"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:306
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Annuler"
|
||||||
|
|
||||||
|
#: ../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 "Si vrai, demander le comportement par défaut à l'utilisateur."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr "Indique si Alternate Tab vient d'être installé"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Définit le comportement Alt Tab. Les valeurs possibles sont : native, "
|
||||||
|
"all_thumbnails et workspace_icons."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Le comportement Alt Tab."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Une liste de chaînes, contenant chacune un identifiant d'application (nom de "
|
||||||
|
"fichier desktop), suivi par un deux-points et le numéro de l'espace de "
|
||||||
|
"travail"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Liste d'applications et d'espaces de travail"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:483
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Déposez ici pour ajouter aux favoris"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:817
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nouvelle fenêtre"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:819
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Quitter l'application"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:824
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Enlever des favoris"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:825
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Ajouter aux favoris"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Durée du masquage automatique"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Effet de masquage automatique"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Activer/désactiver le masquage automatique"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Taille d'icône"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Position du bandeau"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Définit la taille des icônes du bandeau."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Définit l'effet de masquage du bandeau. Les valeurs possibles sont : resize "
|
||||||
|
"et rescale"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Définit la position du bandeau sur l'écran. Les valeurs possibles sont : "
|
||||||
|
"right et left."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Définit la durée de l'effet de masquage automatique."
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Bonjour le monde !"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s est absent(e)."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s n'est pas en ligne."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s est en ligne."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s est occupé(e)."
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Si vrai, place les titres des fenêtres au-dessus de la vignette "
|
||||||
|
"correspondante, ce qui remplace le comportement par défaut qui les place au-"
|
||||||
|
"dessous. Pour que ce paramètre soit pris en compte, il faut redémarrer le "
|
||||||
|
"shell."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Placer les titres des fenêtres au-dessus"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.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 ""
|
||||||
|
"L'algorithme utilisé pour disposer les vignettes dans l'aperçu. « grid » "
|
||||||
|
"utilise l'algorithme initial de grille, « natural » est une alternative qui "
|
||||||
|
"reflète mieux la position et la taille de la fenêtre réelle"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Essaye d'utiliser plus d'espace écran pour placer les vignettes des fenêtres "
|
||||||
|
"en s'adaptant aux proportions de l'écran et en les consolidant davantage "
|
||||||
|
"pour réduire la zone englobante. Ce paramètre ne s'applique qu'en utilisant "
|
||||||
|
"la stratégie de placement « natural »."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Utiliser plus d'écran pour les fenêtres"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
|
||||||
|
msgid "Window placement strategy"
|
||||||
|
msgstr "Stratégie de placement des fenêtres"
|
||||||
|
|
||||||
|
#: ../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 "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Nom du thème"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Gauche"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Droite"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Renversé"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Configurer les paramètres d'affichage..."
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Disponible"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
|
#~ msgstr "Occupé"
|
||||||
@@ -0,0 +1,423 @@
|
|||||||
|
# Galician 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.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
# Fran Diéguez <frandieguez@gnome.org>, 2011.
|
||||||
|
# Fran Dieguez <frandieguez@gnome.org>, 2011, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2012-02-26 16:15+0100\n"
|
||||||
|
"PO-Revision-Date: 2012-02-26 16:21+0100\n"
|
||||||
|
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||||
|
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||||
|
"Language: gl\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 alt tab behaviour."
|
||||||
|
msgstr "O comportamento de Alt+Tab"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
|
||||||
|
"workspace_icons. See the configuration dialogs for details."
|
||||||
|
msgstr ""
|
||||||
|
"Estabelece o comportamento do Alt+Tab. Os valores posíbeis son: "
|
||||||
|
"«native» (nativo), «all_thumbnails» (todo e miniaturas) e "
|
||||||
|
"«worspace_icons» (iconas de áreas de traballo). Para obter información máis "
|
||||||
|
"detallada, consulte a configuración dos diálogos."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Todo e miniaturas"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
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 todos os aplicativos de todas as áreas de traballo nunha "
|
||||||
|
"lista de selección. No lugar de usar a icona de aplicativo de cada xanela, "
|
||||||
|
"usa pequenas miniaturas que se asemellan á propia xanela."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:34
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Espazos de traballo e iconas"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:35
|
||||||
|
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 ""
|
||||||
|
"Este modo permítelle alternar entre os aplicativos da súa área de traballo "
|
||||||
|
"actual e dalle a opción de cambiar ao último aplicativo empregada da súa "
|
||||||
|
"área de traballo anterior. Este sempre é o último símbolo da lista e está "
|
||||||
|
"separado por un separador/liña vertical se está dispoñíbel.\n"
|
||||||
|
"Cada xanela está representada pola súa icona de aplicativo."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:41
|
||||||
|
msgid "Move current selection to front before closing the popup"
|
||||||
|
msgstr "Mover a selección actual ao frente antes de pechar a xanela emerxente"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:58
|
||||||
|
msgid ""
|
||||||
|
"The Alternate Tab can be used in different modes, that affect the way "
|
||||||
|
"windows are chosen and presented."
|
||||||
|
msgstr ""
|
||||||
|
"A combinación de teclas Alt+TAb pódese usar en diferentes modos, que afectan "
|
||||||
|
"á maneira na que se elixen e presentan as xanelas."
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:64
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Suspender"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:69
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernar"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:74
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Apagar…"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Lista de aplicativos e espazos de traballo"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Unha lista de cadeas, cada unha das cales contén un id de aplicativo (nome "
|
||||||
|
"de ficheiro desktop), seguido por unha coma e o número do espazo de traballo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Aplicativo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Área de traballo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Engadir regra"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Crear regra de coincidencia nova"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Engadir"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:489
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Arrastre aquí para engadir aos favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:815
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nova xanela"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:817
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Saír do aplicativo"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:822
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Eliminar dos favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:823
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Engadir aos favoritos"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Posición da doca"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Estabelece a posición da doca na pantalla. Os valores permitidos son «right» "
|
||||||
|
"e «left»"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Tamaño da icona"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Estabelece o tamaño das iconas na doca."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Activar/desactivar autoagochado"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efecto de autoagochado"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Estabelece o efecto de agochado da doca. Os valores permitidos son "
|
||||||
|
"«resize» (redimensionar( e «rescale» (re-escalar) e «move» (mover)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Duración do autoagochado"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Estabelece a duración do efecto de autoagochado."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:66
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Abrir o xestor de ficheiros"
|
||||||
|
|
||||||
|
#: ../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 benvida 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 ""
|
||||||
|
"Se non está baleiro, contén o texto que se despregará ao premer sobre o 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» ten por exemplo mostrar como construir extensións de bo "
|
||||||
|
"comportamento para a Shell e por iso ten pouca funcionalidade por si só.\n"
|
||||||
|
"Porén, é posíbel personalizar a mensaxe de benvida."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Mensaxe:"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s está ausente."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s está desconectado."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s está conectado."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s está ocupado."
|
||||||
|
|
||||||
|
#: ../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áis pantalla para as xanelas"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Tente usar máis pantalla para dispor as miniaturas das xanelas adaptándose á "
|
||||||
|
"taxa de aspecto da pantalla e consolidalas para reducir a caixa saltante. "
|
||||||
|
"Esta configuración aplícase só para a estratexia de disposició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 "Pór a xanela sempre na parte superior"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"Se é verdadeiro, dispor os títulos das xanelas enriba da miniatura "
|
||||||
|
"respectiva, omitindo a disposición inferior por omisión do shell. Se cambia "
|
||||||
|
"esta configuración deberá reiniciar o shell para que se apliquen os cambios."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:37
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr "Dispositivos extraíbeis"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Nome do 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 "O nome do tema, a cargar desde ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Indicador de espazo de traballo"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:151
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Nomes dos espazos de traballo:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:162
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nome"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:196
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Espazos de traballo %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Esquerda"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Dereita"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Co de arriba cara abaixo"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:82
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Configurar as configuracións de pantalla…"
|
||||||
|
|
||||||
|
#~ msgid "Notifications"
|
||||||
|
#~ msgstr "Notificacións"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Contas en liña"
|
||||||
|
|
||||||
|
#~ msgid "System Settings"
|
||||||
|
#~ msgstr "Configuracións do sistema"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Bloquear Pantaia"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Trocar de Usario"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Sair da sesión"
|
||||||
|
|
||||||
|
#~ 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 ""
|
||||||
|
#~ "É a primeira vez que usa a extensión de Tab alternativo.\n"
|
||||||
|
#~ "Seleccione o comportamento prefirido:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Todo e miniaturas:\n"
|
||||||
|
#~ " Este modo mostra tódolos aplicativos de tódolos espazos de traballa "
|
||||||
|
#~ "nunha\n"
|
||||||
|
#~ " lista de selección. No lugar de usar as iconas de aplicativos para "
|
||||||
|
#~ "cada\n"
|
||||||
|
#~ " xanela, usa miniaturas pequenas que representan as xanelas.\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Espazos de traballo e iconas:\n"
|
||||||
|
#~ " Este modo permítelle cambiar entre os aplicativos do seu espazo de "
|
||||||
|
#~ "traballo \n"
|
||||||
|
#~ " actual e permítelle engadir a opción de cambiar entre o último "
|
||||||
|
#~ "aplicativo\n"
|
||||||
|
#~ " usado do seu espazo de traballo anterior. Sempre é o último símbolo "
|
||||||
|
#~ "na\n"
|
||||||
|
#~ " lista e está separado por unha liña separador/vertical se está "
|
||||||
|
#~ "dispoñíbel.\n"
|
||||||
|
#~ " Cada xanela está representada pola icona do aplicativo.\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Nativo:\n"
|
||||||
|
#~ " Este modo é o comportamento nativo de GNOME 3 ou noutras palabras: "
|
||||||
|
#~ "ao \n"
|
||||||
|
#~ " seleccionar nativo desactiva a extensión Tab alternativo.\n"
|
||||||
|
|
||||||
|
#~ msgid "Alt Tab Behaviour"
|
||||||
|
#~ msgstr "Comportamento do Alt Tab"
|
||||||
|
|
||||||
|
#~ msgid "Native"
|
||||||
|
#~ msgstr "Nativa"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancelar"
|
||||||
|
|
||||||
|
#~ msgid "Ask the user for a default behaviour if true."
|
||||||
|
#~ msgstr "Preguntarlle o comportamento predeterminado ao usuario se é certo."
|
||||||
|
|
||||||
|
#~ msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
#~ msgstr "Indica se o Tab alternativo está instalado recentemente"
|
||||||
|
|
||||||
|
#~ 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 ""
|
||||||
|
#~ "O algoritmo usado pola disposición de miniaturas na vista previa. «grid» "
|
||||||
|
#~ "para usar o algoritmo predeterminado baseado na grella, «natural» para "
|
||||||
|
#~ "usar outro que reflexa máis a posición e tamaño da xanela actual"
|
||||||
|
|
||||||
|
#~ msgid "Window placement strategy"
|
||||||
|
#~ msgstr "Estratexia de disposición de xanelas"
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Dispoñible"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
|
#~ msgstr "Ocupado"
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
# Hebrew translations for PACKAGE package.
|
||||||
|
# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Yaron Shahrabani <sh.yaron@gmail.com>, 2011.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-05-13 13:11+0300\n"
|
||||||
|
"PO-Revision-Date: 2011-05-13 13:15+0200\n"
|
||||||
|
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||||
|
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
|
||||||
|
"Language: he\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: Hebrew\n"
|
||||||
|
"X-Poedit-Country: ISRAEL\n"
|
||||||
|
"X-Poedit-SourceCharset: UTF-8\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:39
|
||||||
|
msgid "Available"
|
||||||
|
msgstr "פנוי"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Busy"
|
||||||
|
msgstr "עסוק"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
msgid "My Account"
|
||||||
|
msgstr "החשבון שלי"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "הגדרות המערכת"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "נעילת המסך"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:67
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "החלפת משתמש"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:72
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "יציאה..."
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:79
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "השהיה"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:85
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "תרדמת"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:91
|
||||||
|
msgid "Power Off..."
|
||||||
|
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 ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Application and workspace list"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:116
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "יש לגרור לכאן כדי להוסיף למועדפים"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:417
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "חלון חדש"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:419
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "יציאה מהיישום"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:424
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "הסרה מהמועדפים"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:425
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "הוספה למועדפים"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "שלום, עולם!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:219
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s הופיע/ה כמרוחק/ת."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:222
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s התנתק/ה."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:225
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s פנוי/ה."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:228
|
||||||
|
#, 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 ""
|
||||||
|
"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/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
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: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 ""
|
||||||
|
"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"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
"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:5
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Use more screen for windows"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
|
||||||
|
msgid "Window placement strategy"
|
||||||
|
msgstr "Window placement strategy"
|
||||||
|
|
||||||
|
#: ../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 "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Theme name"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "רגיל"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "שמאל"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "ימין"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "הפוך"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "הגדרת תצורת התצוגה..."
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user