File tecla-46.0.obscpio of Package tecla-keyboard-layout-viewer
07070100000000000081A400000000000000000000000165F6170D00000003000000000000000000000000000000000000001600000000tecla-46.0/.gitignore*~
07070100000001000081A400000000000000000000000165F6170D000046AD000000000000000000000000000000000000001300000000tecla-46.0/LICENSE GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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 Lesser 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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
Public License instead of this License.
07070100000002000081A400000000000000000000000165F6170D0000032A000000000000000000000000000000000000001000000000tecla-46.0/NEWSNEW in 46.0
===========
- Translation updates
NEW in 46.rc
============
- Translation updates
NEW in 46.beta
==============
- Translation updates
NEW in 46.alpha
===============
- Add --version command line option
- Fix blurry keys
- Fix crash on unknown keymap
- Translation updates
NEW in 45.0
===========
- Added shortcuts to exit the dialog
- Fix UI in RTL environments
- Fix a11y initialization
- Translation updates
NEW in 45.rc
============
- Handle 105 key layouts
- Handle keymap variants in commandline arguments
- Fix overeager keymap listener overriding commandline
arguments.
- Build fixes for NixOS
- Add .pc file for build-time detection
- Fix included license
- Translation updates
NEW in 45.beta
===============
- Translation updates
NEW in 45.alpha
===============
- Initial release
07070100000003000081A400000000000000000000000165F6170D00000132000000000000000000000000000000000000001500000000tecla-46.0/README.md# Tecla
Tecla is a keyboard layout viewer.
Tecla uses GTK/Libadwaita for UI, and libxkbcommon to deal with keyboard maps.
## How to report bugs
If you found a problem or have a feature suggestion, please report the
issue to the GNOME [bug tracking system](https://gitlab.gnome.org/GNOME/tecla/issues).
07070100000004000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000001000000000tecla-46.0/data07070100000005000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000001600000000tecla-46.0/data/icons07070100000006000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000001E00000000tecla-46.0/data/icons/hicolor07070100000007000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000002700000000tecla-46.0/data/icons/hicolor/scalable07070100000008000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000002C00000000tecla-46.0/data/icons/hicolor/scalable/apps07070100000009000081A400000000000000000000000165F6170D0000721D000000000000000000000000000000000000004600000000tecla-46.0/data/icons/hicolor/scalable/apps/org.gnome.Tecla.Devel.svg<?xml version="1.0" encoding="UTF-8"?>
<svg height="128px" viewBox="0 0 128 128" width="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<linearGradient id="a" gradientUnits="userSpaceOnUse" x1="9.197266" x2="119.482384" y1="112.655273" y2="112.655273">
<stop offset="0" stop-color="#5e5c64"/>
<stop offset="0.0378502" stop-color="#77767b"/>
<stop offset="0.0732786" stop-color="#3d3846"/>
<stop offset="0.92921" stop-color="#241f31"/>
<stop offset="0.97104" stop-color="#5e5c64"/>
<stop offset="1" stop-color="#5e5c64"/>
</linearGradient>
<linearGradient id="b" gradientUnits="userSpaceOnUse" x1="70.51045090805" x2="120.43254953971" y1="113.86664367826" y2="113.86664367826">
<stop offset="0" stop-color="#5e5c64"/>
<stop offset="0.0378502" stop-color="#77767b"/>
<stop offset="0.0732786" stop-color="#3d3846"/>
<stop offset="0.791488" stop-color="#241f31"/>
<stop offset="0.916595" stop-color="#5e5c64"/>
<stop offset="1" stop-color="#5e5c64"/>
</linearGradient>
<clipPath id="c">
<rect height="128" width="128"/>
</clipPath>
<clipPath id="d">
<rect height="128" width="128"/>
</clipPath>
<filter id="e" height="100%" width="100%" x="0%" y="0%">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
</filter>
<mask id="f">
<g clip-path="url(#d)" filter="url(#e)">
<g clip-path="url(#c)">
<path d="m 16.9375 34 h 94.125 c 4.9375 0 8.9375 4 8.9375 8.9375 v 64.125 c 0 4.9375 -4 8.9375 -8.9375 8.9375 h -94.125 c -4.9375 0 -8.9375 -4 -8.9375 -8.9375 v -64.125 c 0 -4.9375 4 -8.9375 8.9375 -8.9375 z m 0 0" fill="url(#a)"/>
<path d="m 16.34375 28 h 95.3125 c 4.609375 0 8.34375 3.734375 8.34375 8.34375 v 67.3125 c 0 4.609375 -3.734375 8.34375 -8.34375 8.34375 h -95.3125 c -4.609375 0 -8.34375 -3.734375 -8.34375 -8.34375 v -67.3125 c 0 -4.609375 3.734375 -8.34375 8.34375 -8.34375 z m 0 0" fill="#5e5c64"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -22.921875 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -5.078125 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -22 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -13.878906 0 h 5.757812 c 1.730469 0 3.121094 1.339844 3.121094 3 s -1.390625 3 -3.121094 3 h -5.757812 c -1.730469 0 -3.121094 -1.339844 -3.121094 -3 s 1.390625 -3 3.121094 -3 z m 0 0" fill="#241f31"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -23.84375 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -4.15625 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -22 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m 0 0" fill="#3d3846"/>
<path d="m 101.960938 31.917969 c 1.125 0 2.039062 0.914062 2.039062 2.042969 c 0 1.125 -0.914062 2.039062 -2.039062 2.039062 c -1.128907 0 -2.042969 -0.914062 -2.042969 -2.039062 c 0 -1.128907 0.914062 -2.042969 2.042969 -2.042969 z m 0 0" fill="#f9f06b"/>
<path d="m 110 32 c 1.105469 0 2 0.894531 2 2 s -0.894531 2 -2 2 s -2 -0.894531 -2 -2 s 0.894531 -2 2 -2 z m 0 0" fill="#f9f06b"/>
<path d="m 77.550781 68.582031 h 35.097657 c 4.058593 0 7.351562 2.898438 7.351562 6.472657 v 30.472656 c 0 3.574218 -3.292969 6.472656 -7.351562 6.472656 h -35.097657 c -4.0625 0 -7.351562 -2.898438 -7.351562 -6.472656 v -30.472656 c 0 -3.574219 3.289062 -6.472657 7.351562 -6.472657 z m 0 0" fill="url(#b)" fill-rule="evenodd"/>
<path d="m 96.964844 249.023438 v -30.003907 c 0 -4.417969 -3.578125 -8.003906 -8 -8.007812 l -19.976563 -0.011719 c -2.121093 0 -4.152343 0.839844 -5.652343 2.339844 s -2.339844 3.535156 -2.335938 5.652344 l 0.011719 12" fill="none" stroke="#deddda" stroke-dasharray="2 2" stroke-width="2" transform="matrix(1 0 0 1 0 -172)"/>
<path d="m 78.191406 237.261719 h 33.796875 c 3.910157 0 7.078125 2.785156 7.078125 6.21875 v 29.285156 c 0 3.433594 -3.167968 6.21875 -7.078125 6.21875 h -33.796875 c -3.910156 0 -7.082031 -2.785156 -7.082031 -6.21875 v -29.285156 c 0 -3.433594 3.171875 -6.21875 7.082031 -6.21875 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke="#deddda" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.03227" transform="matrix(1 0 0 1 0 -172)"/>
<path d="m 56.796875 225.347656 h 6.40625 c 1.320313 0 2.386719 1.066406 2.386719 2.386719 v 5.378906 c 0 1.320313 -1.066406 2.386719 -2.386719 2.386719 h -6.40625 c -1.320313 0 -2.386719 -1.066406 -2.386719 -2.386719 v -5.378906 c 0 -1.320313 1.066406 -2.386719 2.386719 -2.386719 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke="#deddda" stroke-linecap="round" stroke-linejoin="round" transform="matrix(1 0 0 1 0 -172)"/>
<path d="m 95.003906 98 c 5.007813 0 8.117188 -2.917969 8.269532 -7.332031 h -5.300782 c -0.210937 1.894531 -1.347656 2.929687 -2.902344 2.929687 c -1.992187 0 -3.292968 -1.6875 -3.292968 -4.859375 c 0 -3.148437 1.3125 -4.832031 3.292968 -4.832031 c 1.625 0 2.679688 1.101562 2.902344 2.925781 h 5.300782 c -0.128907 -4.390625 -3.328126 -7.25 -8.28125 -7.25 c -5.605469 0 -8.992188 3.742188 -8.992188 9.214844 c 0 5.449219 3.363281 9.203125 9.003906 9.203125 z m -2.289062 -25.679688 h -4.753906 v 0.152344 l 5.023437 5.203125 h 4.070313 l 5.011718 -5.203125 v -0.152344 h -4.742187 l -2.308594 2.695313 z m 0 0" fill="#ffffff"/>
</g>
</g>
</mask>
<mask id="g">
<g filter="url(#e)">
<rect fill-opacity="0.8" height="128" width="128"/>
</g>
</mask>
<linearGradient id="h" gradientTransform="matrix(0 0.37 -0.98462 0 295.38501 -30.360001)" gradientUnits="userSpaceOnUse" x1="300" x2="428" y1="235" y2="235">
<stop offset="0" stop-color="#f9f06b"/>
<stop offset="1" stop-color="#f5c211"/>
</linearGradient>
<clipPath id="i">
<rect height="128" width="128"/>
</clipPath>
<clipPath id="j">
<rect height="128" width="128"/>
</clipPath>
<path d="m 16.9375 34 h 94.125 c 4.9375 0 8.9375 4 8.9375 8.9375 v 64.125 c 0 4.9375 -4 8.9375 -8.9375 8.9375 h -94.125 c -4.9375 0 -8.9375 -4 -8.9375 -8.9375 v -64.125 c 0 -4.9375 4 -8.9375 8.9375 -8.9375 z m 0 0" fill="url(#a)"/>
<path d="m 16.34375 28 h 95.3125 c 4.609375 0 8.34375 3.734375 8.34375 8.34375 v 67.3125 c 0 4.609375 -3.734375 8.34375 -8.34375 8.34375 h -95.3125 c -4.609375 0 -8.34375 -3.734375 -8.34375 -8.34375 v -67.3125 c 0 -4.609375 3.734375 -8.34375 8.34375 -8.34375 z m 0 0" fill="#5e5c64"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -22.921875 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -5.078125 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -22 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -13.878906 0 h 5.757812 c 1.730469 0 3.121094 1.339844 3.121094 3 s -1.390625 3 -3.121094 3 h -5.757812 c -1.730469 0 -3.121094 -1.339844 -3.121094 -3 s 1.390625 -3 3.121094 -3 z m 0 0" fill="#241f31"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -23.84375 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -4.15625 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -22 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m 0 0" fill="#3d3846"/>
<path d="m 101.960938 31.917969 c 1.125 0 2.039062 0.914062 2.039062 2.042969 c 0 1.125 -0.914062 2.039062 -2.039062 2.039062 c -1.128907 0 -2.042969 -0.914062 -2.042969 -2.039062 c 0 -1.128907 0.914062 -2.042969 2.042969 -2.042969 z m 0 0" fill="#f9f06b"/>
<path d="m 110 32 c 1.105469 0 2 0.894531 2 2 s -0.894531 2 -2 2 s -2 -0.894531 -2 -2 s 0.894531 -2 2 -2 z m 0 0" fill="#f9f06b"/>
<path d="m 77.550781 68.582031 h 35.097657 c 4.058593 0 7.351562 2.898438 7.351562 6.472657 v 30.472656 c 0 3.574218 -3.292969 6.472656 -7.351562 6.472656 h -35.097657 c -4.0625 0 -7.351562 -2.898438 -7.351562 -6.472656 v -30.472656 c 0 -3.574219 3.289062 -6.472657 7.351562 -6.472657 z m 0 0" fill="url(#b)" fill-rule="evenodd"/>
<g stroke="#deddda">
<path d="m 96.964844 77.023438 v -30.003907 c 0 -4.417969 -3.578125 -8.003906 -8 -8.007812 l -19.976563 -0.011719 c -2.121093 0 -4.152343 0.839844 -5.652343 2.339844 s -2.339844 3.535156 -2.335938 5.652344 l 0.011719 12" fill="none" stroke-dasharray="2 2" stroke-width="2"/>
<path d="m 78.191406 65.261719 h 33.796875 c 3.910157 0 7.078125 2.785156 7.078125 6.21875 v 29.285156 c 0 3.433594 -3.167968 6.21875 -7.078125 6.21875 h -33.796875 c -3.910156 0 -7.082031 -2.785156 -7.082031 -6.21875 v -29.285156 c 0 -3.433594 3.171875 -6.21875 7.082031 -6.21875 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.03227"/>
<path d="m 56.796875 53.347656 h 6.40625 c 1.320313 0 2.386719 1.066406 2.386719 2.386719 v 5.378906 c 0 1.320313 -1.066406 2.386719 -2.386719 2.386719 h -6.40625 c -1.320313 0 -2.386719 -1.066406 -2.386719 -2.386719 v -5.378906 c 0 -1.320313 1.066406 -2.386719 2.386719 -2.386719 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<path d="m 95.003906 98 c 5.007813 0 8.117188 -2.917969 8.269532 -7.332031 h -5.300782 c -0.210937 1.894531 -1.347656 2.929687 -2.902344 2.929687 c -1.992187 0 -3.292968 -1.6875 -3.292968 -4.859375 c 0 -3.148437 1.3125 -4.832031 3.292968 -4.832031 c 1.625 0 2.679688 1.101562 2.902344 2.925781 h 5.300782 c -0.128907 -4.390625 -3.328126 -7.25 -8.28125 -7.25 c -5.605469 0 -8.992188 3.742188 -8.992188 9.214844 c 0 5.449219 3.363281 9.203125 9.003906 9.203125 z m -2.289062 -25.679688 h -4.753906 v 0.152344 l 5.023437 5.203125 h 4.070313 l 5.011718 -5.203125 v -0.152344 h -4.742187 l -2.308594 2.695313 z m 0 0" fill="#ffffff"/>
<g clip-path="url(#j)" mask="url(#f)">
<g clip-path="url(#i)" mask="url(#g)">
<path d="m 128 80.640625 v 47.359375 h -128 v -47.359375 z m 0 0" fill="url(#h)"/>
<path d="m 13.308594 80.640625 l 47.355468 47.359375 h 21.214844 l -47.359375 -47.359375 z m 42.421875 0 l 47.363281 47.359375 h 21.214844 l -47.363282 -47.359375 z m 42.429687 0 l 29.839844 29.839844 v -21.210938 l -8.628906 -8.628906 z m -98.160156 7.90625 v 21.214844 l 18.238281 18.238281 h 21.214844 z m 0 0"/>
</g>
</g>
</svg>
0707010000000A000081A400000000000000000000000165F6170D000037A8000000000000000000000000000000000000004000000000tecla-46.0/data/icons/hicolor/scalable/apps/org.gnome.Tecla.svg<?xml version="1.0" encoding="UTF-8"?>
<svg height="128px" viewBox="0 0 128 128" width="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<linearGradient id="a" gradientUnits="userSpaceOnUse" x1="9.197266" x2="119.482384" y1="112.655273" y2="112.655273">
<stop offset="0" stop-color="#5e5c64"/>
<stop offset="0.0378502" stop-color="#77767b"/>
<stop offset="0.0732786" stop-color="#3d3846"/>
<stop offset="0.92921" stop-color="#241f31"/>
<stop offset="0.97104" stop-color="#5e5c64"/>
<stop offset="1" stop-color="#5e5c64"/>
</linearGradient>
<linearGradient id="b" gradientUnits="userSpaceOnUse" x1="70.51045090805" x2="120.43254953971" y1="113.86664367826" y2="113.86664367826">
<stop offset="0" stop-color="#5e5c64"/>
<stop offset="0.0378502" stop-color="#77767b"/>
<stop offset="0.0732786" stop-color="#3d3846"/>
<stop offset="0.791488" stop-color="#241f31"/>
<stop offset="0.916595" stop-color="#5e5c64"/>
<stop offset="1" stop-color="#5e5c64"/>
</linearGradient>
<path d="m 16.9375 34 h 94.125 c 4.9375 0 8.9375 4 8.9375 8.9375 v 64.125 c 0 4.9375 -4 8.9375 -8.9375 8.9375 h -94.125 c -4.9375 0 -8.9375 -4 -8.9375 -8.9375 v -64.125 c 0 -4.9375 4 -8.9375 8.9375 -8.9375 z m 0 0" fill="url(#a)"/>
<path d="m 16.34375 28 h 95.3125 c 4.609375 0 8.34375 3.734375 8.34375 8.34375 v 67.3125 c 0 4.609375 -3.734375 8.34375 -8.34375 8.34375 h -95.3125 c -4.609375 0 -8.34375 -3.734375 -8.34375 -8.34375 v -67.3125 c 0 -4.609375 3.734375 -8.34375 8.34375 -8.34375 z m 0 0" fill="#5e5c64"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -22.921875 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -5.078125 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.664062 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.335938 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 6 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -6 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -22 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 s -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 s 1.339844 -3 3 -3 z m -13.878906 0 h 5.757812 c 1.730469 0 3.121094 1.339844 3.121094 3 s -1.390625 3 -3.121094 3 h -5.757812 c -1.730469 0 -3.121094 -1.339844 -3.121094 -3 s 1.390625 -3 3.121094 -3 z m 0 0" fill="#241f31"/>
<path d="m 107 96 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -42 0 h 34 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -34 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 97.960938 -23.84375 h 0.039062 c 1.660156 0 3 1.339844 3 3 v 15.84375 c 0 1.660156 -1.339844 3 -3 3 h -0.039062 c -1.664063 0 -3 -1.339844 -3 -3 v -15.84375 c 0 -1.660156 1.335937 -3 3 -3 z m -5.960938 -4.15625 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -8 14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 64 -14 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -22 0 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.664062 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.335938 -3 3 -3 z m 84 -14.058594 h 14 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -14 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -70 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 56 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m -14 0 h 6 c 1.660156 0 3 1.339844 3 3 v 5 c 0 1.660156 -1.339844 3 -3 3 h -6 c -1.660156 0 -3 -1.339844 -3 -3 v -5 c 0 -1.660156 1.339844 -3 3 -3 z m 78 -9.941406 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -22 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m -14 0 h 6 c 1.660156 0 3 1.113281 3 2.5 s -1.339844 2.5 -3 2.5 h -6 c -1.660156 0 -3 -1.113281 -3 -2.5 s 1.339844 -2.5 3 -2.5 z m 0 0" fill="#3d3846"/>
<path d="m 101.960938 31.917969 c 1.125 0 2.039062 0.914062 2.039062 2.042969 c 0 1.125 -0.914062 2.039062 -2.039062 2.039062 c -1.128907 0 -2.042969 -0.914062 -2.042969 -2.039062 c 0 -1.128907 0.914062 -2.042969 2.042969 -2.042969 z m 0 0" fill="#f9f06b"/>
<path d="m 110 32 c 1.105469 0 2 0.894531 2 2 s -0.894531 2 -2 2 s -2 -0.894531 -2 -2 s 0.894531 -2 2 -2 z m 0 0" fill="#f9f06b"/>
<path d="m 77.550781 68.582031 h 35.097657 c 4.058593 0 7.351562 2.898438 7.351562 6.472657 v 30.472656 c 0 3.574218 -3.292969 6.472656 -7.351562 6.472656 h -35.097657 c -4.0625 0 -7.351562 -2.898438 -7.351562 -6.472656 v -30.472656 c 0 -3.574219 3.289062 -6.472657 7.351562 -6.472657 z m 0 0" fill="url(#b)" fill-rule="evenodd"/>
<g stroke="#deddda">
<path d="m 96.964844 77.023438 v -30.003907 c 0 -4.417969 -3.578125 -8.003906 -8 -8.007812 l -19.976563 -0.011719 c -2.121093 0 -4.152343 0.839844 -5.652343 2.339844 s -2.339844 3.535156 -2.335938 5.652344 l 0.011719 12" fill="none" stroke-dasharray="2 2" stroke-width="2"/>
<path d="m 78.191406 65.261719 h 33.796875 c 3.910157 0 7.078125 2.785156 7.078125 6.21875 v 29.285156 c 0 3.433594 -3.167968 6.21875 -7.078125 6.21875 h -33.796875 c -3.910156 0 -7.082031 -2.785156 -7.082031 -6.21875 v -29.285156 c 0 -3.433594 3.171875 -6.21875 7.082031 -6.21875 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.03227"/>
<path d="m 56.796875 53.347656 h 6.40625 c 1.320313 0 2.386719 1.066406 2.386719 2.386719 v 5.378906 c 0 1.320313 -1.066406 2.386719 -2.386719 2.386719 h -6.40625 c -1.320313 0 -2.386719 -1.066406 -2.386719 -2.386719 v -5.378906 c 0 -1.320313 1.066406 -2.386719 2.386719 -2.386719 z m 0 0" fill="#3d3846" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<path d="m 95.003906 98 c 5.007813 0 8.117188 -2.917969 8.269532 -7.332031 h -5.300782 c -0.210937 1.894531 -1.347656 2.929687 -2.902344 2.929687 c -1.992187 0 -3.292968 -1.6875 -3.292968 -4.859375 c 0 -3.148437 1.3125 -4.832031 3.292968 -4.832031 c 1.625 0 2.679688 1.101562 2.902344 2.925781 h 5.300782 c -0.128907 -4.390625 -3.328126 -7.25 -8.28125 -7.25 c -5.605469 0 -8.992188 3.742188 -8.992188 9.214844 c 0 5.449219 3.363281 9.203125 9.003906 9.203125 z m -2.289062 -25.679688 h -4.753906 v 0.152344 l 5.023437 5.203125 h 4.070313 l 5.011718 -5.203125 v -0.152344 h -4.742187 l -2.308594 2.695313 z m 0 0" fill="#ffffff"/>
</svg>
0707010000000B000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000002700000000tecla-46.0/data/icons/hicolor/symbolic0707010000000C000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000002C00000000tecla-46.0/data/icons/hicolor/symbolic/apps0707010000000D000081A400000000000000000000000165F6170D00000A85000000000000000000000000000000000000004900000000tecla-46.0/data/icons/hicolor/symbolic/apps/org.gnome.Tecla-symbolic.svg<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 58.847578 73.999912 h -12.179683 v -27.99999 h 11.808589 c 6.734373 0 12.191402 5.460936 12.191402 12.195308 v 3.984374 c 0 6.527341 -5.28906 11.820308 -11.820308 11.820308 z m 0 0" fill="none" stroke="#ffffff" stroke-width="8"/>
<path d="m 2.5 2 c -1.367188 0 -2.5 1.132812 -2.5 2.5 v 7 c 0 1.367188 1.132812 2.5 2.5 2.5 h 5.5 v -2 h -2.5 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 h 2.5 v -1.5 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 0.5 c 0 -0.941406 0.617188 -1.734375 1.46875 -2 h -0.96875 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.191406 -0.109375 0.355469 -0.269531 0.4375 c 0.121093 -0.019531 0.238281 -0.03125 0.363281 -0.03125 h 1.117188 c -0.128907 -0.089844 -0.210938 -0.238281 -0.210938 -0.40625 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.167969 -0.082031 0.316406 -0.210938 0.40625 h 3.210938 v -1.40625 c 0 -1.367188 -1.132812 -2.5 -2.5 -2.5 z m 0 2 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.242188 0.171875 -0.445312 0.398438 -0.488281 c 0.03125 -0.007813 0.066406 -0.011719 0.101562 -0.011719 z m 3 0 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m -2 3 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m -1 3 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0"/>
<path d="m 13.125 16 c 1.742188 0 2.824219 -1.011719 2.875 -2.546875 h -1.839844 c -0.074218 0.65625 -0.46875 1.015625 -1.007812 1.015625 c -0.695313 0 -1.144532 -0.582031 -1.144532 -1.6875 c 0 -1.09375 0.453126 -1.675781 1.144532 -1.675781 c 0.5625 0 0.929687 0.382812 1.007812 1.015625 h 1.839844 c -0.042969 -1.527344 -1.15625 -2.519532 -2.878906 -2.519532 c -1.945313 0 -3.121094 1.300782 -3.121094 3.203126 c 0 1.890624 1.167969 3.195312 3.125 3.195312 z m -0.792969 -8.921875 h -1.652343 v 0.054687 l 1.746093 1.808594 h 1.414063 l 1.742187 -1.808594 v -0.054687 h -1.648437 l -0.800782 0.9375 z m 0 0"/>
</svg>
0707010000000E000081A400000000000000000000000165F6170D000001D0000000000000000000000000000000000000002200000000tecla-46.0/data/icons/meson.buildapplication_id = 'org.gnome.Tecla'
scalable_dir = join_paths('hicolor', 'scalable', 'apps')
install_data(
join_paths(scalable_dir, ('@0@.svg').format(application_id)),
install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir)
)
symbolic_dir = join_paths('hicolor', 'symbolic', 'apps')
install_data(
join_paths(symbolic_dir, ('@0@-symbolic.svg').format(application_id)),
install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir)
)
0707010000000F000081A400000000000000000000000165F6170D0000BCB9000000000000000000000000000000000000002A00000000tecla-46.0/data/icons/org.gnome.Tecla.svg<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
inkscape:export-ydpi="96"
inkscape:export-xdpi="96"
inkscape:export-filename="Template.png"
width="192"
height="152"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="org.notanapp.KeyboardLayout.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0"
style="display:inline;enable-background:new"
viewBox="0 0 192 152"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<title
id="title4162">Adwaita Icon Template</title>
<defs
id="defs3">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect3404"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,8,0,1 @ F,0,0,1,0,8,0,1 @ F,0,0,1,0,8,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<linearGradient
y2="236"
x2="96"
y1="236"
x1="32"
gradientTransform="translate(604.81684,170.58641)"
gradientUnits="userSpaceOnUse"
id="linearGradient1099"
xlink:href="#linearGradient1036" />
<linearGradient
id="linearGradient1036">
<stop
id="stop1032"
offset="0"
style="stop-color:#d5d3cf;stop-opacity:1;" />
<stop
id="stop1034"
offset="1"
style="stop-color:#f6f5f4;stop-opacity:1" />
</linearGradient>
<radialGradient
r="32"
fy="-76"
fx="-244"
cy="-76"
cx="-244"
gradientTransform="matrix(0.88333331,0,0,0.88333331,-460.35018,463.11973)"
gradientUnits="userSpaceOnUse"
id="radialGradient1103"
xlink:href="#linearGradient1069" />
<linearGradient
id="linearGradient1069">
<stop
id="stop1065"
offset="0"
style="stop-color:#d5d3cf;stop-opacity:1" />
<stop
id="stop1067-1"
offset="1"
style="stop-color:#949390;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="232"
x2="64"
y1="262.5"
x1="64"
id="linearGradient1027"
xlink:href="#linearGradient1025"
gradientTransform="translate(-470.5864,432.81685)" />
<linearGradient
id="linearGradient1025">
<stop
id="stop1021"
offset="0"
style="stop-color:#9a9996;stop-opacity:1" />
<stop
id="stop1023"
offset="1"
style="stop-color:#77767b;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect35304-9"
is_visible="true" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1609-7">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1611-5"
d="m 252,116 28,-28 v -8 h -36 v 36 z"
style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</clipPath>
<linearGradient
id="linearGradient1697">
<stop
id="stop1685"
offset="0"
style="stop-color:#deddda;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.04545455"
id="stop1687" />
<stop
id="stop1689"
offset="0.09090909"
style="stop-color:#deddda;stop-opacity:1" />
<stop
style="stop-color:#deddda;stop-opacity:1"
offset="0.90909094"
id="stop1691" />
<stop
id="stop1693"
offset="0.95454544"
style="stop-color:#eeeeec;stop-opacity:1" />
<stop
id="stop1695"
offset="1"
style="stop-color:#c0bfbc;stop-opacity:1" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1289">
<path
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
d="m 64,-148 h 64 l 64,-64 64,64 h 192 c 17.728,0 32,14.272 32,32 v 288 c 0,17.728 -14.272,32 -32,32 H 256 l -64,-64 -64,64 H 64 C 46.272,204 32,189.728 32,172 v -288 c 0,-17.728 14.408898,-34.19889 32,-32 z"
id="path1291"
inkscape:connector-curvature="0"
sodipodi:nodetypes="scccsssscccssss" />
</clipPath>
<linearGradient
id="paint3_linear-2-6-5"
x2="1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,6,-12,0,-64,209.99687)">
<stop
stop-color="#C01C27"
id="stop91-0-7-4" />
<stop
offset="1"
stop-color="#E01B24"
id="stop93-2-5-7" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath1609">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path1611"
d="m 252,116 28,-28 v -8 h -36 v 36 z"
style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipath_lpe_path-effect1303">
<circle
style="font-variation-settings:normal;display:block;opacity:1;vector-effect:none;fill:#77767b;fill-opacity:1;stroke:none;stroke-width:5.04302;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;stop-color:#000000;stop-opacity:1"
id="circle1305"
cx="541.88373"
cy="647.72638"
r="73.975525" />
</clipPath>
<inkscape:path-effect
effect="powerclip"
id="path-effect1303"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3835-3">
<rect
style="display:inline;fill:#3d3846;stroke:none;stroke-width:1;-inkscape-stroke:none;enable-background:new;stop-color:#000000"
id="rect3837-6"
width="112.0003"
height="86.00029"
x="7.9997025"
y="199.99969"
rx="8"
ry="7.9999995" />
</clipPath>
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect1546"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,11.821045,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,12.193933,0,1"
unit="px"
method="auto"
mode="F"
radius="0"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,11.821045,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,12.193933,0,1" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1869"
id="linearGradient1871"
x1="9.1972656"
y1="284.65527"
x2="119.48238"
y2="284.65527"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient1869">
<stop
style="stop-color:#5e5c64;stop-opacity:1;"
offset="0"
id="stop1865" />
<stop
style="stop-color:#77767b;stop-opacity:1"
offset="0.03785021"
id="stop2643" />
<stop
style="stop-color:#3d3846;stop-opacity:1"
offset="0.07327861"
id="stop2641" />
<stop
style="stop-color:#241f31;stop-opacity:1"
offset="0.92920959"
id="stop2637" />
<stop
style="stop-color:#5e5c64;stop-opacity:1"
offset="0.97104007"
id="stop2639" />
<stop
style="stop-color:#5e5c64;stop-opacity:1;"
offset="1"
id="stop1867" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2606"
id="linearGradient2343"
gradientUnits="userSpaceOnUse"
x1="71.432686"
y1="284.65527"
x2="119.48238"
y2="284.65527"
gradientTransform="matrix(1.0389681,0,0,1.0389681,-3.7058237,-9.8810756)" />
<linearGradient
inkscape:collect="always"
id="linearGradient2606">
<stop
style="stop-color:#5e5c64;stop-opacity:1;"
offset="0"
id="stop2594" />
<stop
style="stop-color:#77767b;stop-opacity:1"
offset="0.03785021"
id="stop2596" />
<stop
style="stop-color:#3d3846;stop-opacity:1"
offset="0.07327861"
id="stop2598" />
<stop
style="stop-color:#241f31;stop-opacity:1"
offset="0.79148775"
id="stop2600" />
<stop
style="stop-color:#5e5c64;stop-opacity:1"
offset="0.9165951"
id="stop2602" />
<stop
style="stop-color:#5e5c64;stop-opacity:1;"
offset="1"
id="stop2604" />
</linearGradient>
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect3404-1"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,8,0,1 @ F,0,0,1,0,8,0,1 @ F,0,0,1,0,8,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
stroke="#ef2929"
fill="#f57900"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="-16.018274"
inkscape:cy="11.797527"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
width="400px"
height="300px"
inkscape:snap-nodes="true"
inkscape:snap-bbox="true"
objecttolerance="7"
gridtolerance="12"
guidetolerance="13"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:locked="false"
inkscape:measure-start="0,0"
inkscape:measure-end="0,0"
inkscape:object-nodes="true"
inkscape:bbox-nodes="true"
inkscape:snap-global="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
showborder="true"
inkscape:snap-center="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-text-baseline="true"
borderlayer="true"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid5883"
spacingx="2"
spacingy="2"
enabled="true"
visible="true"
empspacing="4"
originx="8"
originy="8" />
<sodipodi:guide
position="72,16"
orientation="0,1"
id="guide1073"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="20,72"
orientation="1,0"
id="guide1075"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,112"
orientation="0,1"
id="guide1099"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,136"
orientation="0,1"
id="guide993"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="112,72"
orientation="1,0"
id="guide995"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="8.0000001,72"
orientation="1,0"
id="guide867"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="128,72"
orientation="1,0"
id="guide869"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,124"
orientation="0,1"
id="guide871"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<inkscape:grid
type="xygrid"
id="grid873"
spacingx="1"
spacingy="1"
empspacing="8"
color="#000000"
opacity="0.49019608"
empcolor="#000000"
empopacity="0.08627451"
dotted="true"
originx="8"
originy="8" />
<sodipodi:guide
position="32,72"
orientation="1,0"
id="guide877"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="124,72"
orientation="1,0"
id="guide879"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,128"
orientation="0,1"
id="guide881"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,20"
orientation="0,1"
id="guide883"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="16,72"
orientation="1,0"
id="guide885"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="136,72"
orientation="1,0"
id="guide887"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,8"
orientation="0,1"
id="guide897"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,32"
orientation="0,1"
id="guide899"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="264,264"
orientation="-0.70710678,0.70710678"
id="guide950"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
<sodipodi:guide
position="72,72"
orientation="0.70710678,0.70710678"
id="guide952"
inkscape:locked="false"
inkscape:label=""
inkscape:color="rgb(0,0,255)" />
</sodipodi:namedview>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>GNOME Design Team</dc:title>
</cc:Agent>
</dc:creator>
<dc:source />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
<dc:title>Adwaita Icon Template</dc:title>
<dc:subject>
<rdf:Bag />
</dc:subject>
<dc:date />
<dc:rights>
<cc:Agent>
<dc:title />
</cc:Agent>
</dc:rights>
<dc:publisher>
<cc:Agent>
<dc:title />
</cc:Agent>
</dc:publisher>
<dc:identifier />
<dc:relation />
<dc:language />
<dc:coverage />
<dc:description />
<dc:contributor>
<cc:Agent>
<dc:title />
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="App Icon"
inkscape:groupmode="layer"
style="display:inline"
transform="translate(8,-156)">
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="template"
style="display:inline"
sodipodi:insensitive="true">
<rect
inkscape:label="0"
y="172"
x="9.2651362e-08"
height="128"
width="128"
id="hicolor"
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
<rect
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
id="symbolic"
width="16"
height="16"
x="160"
y="172"
inkscape:label="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="baseplate"
style="display:inline"
sodipodi:insensitive="true">
<g
style="display:inline;fill:#000000;enable-background:new"
transform="matrix(7.9911709,0,0,8.0036407,-167.7909,-4846.0776)"
id="g12027"
inkscape:export-xdpi="12"
inkscape:export-ydpi="12" />
<rect
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
id="128"
width="128"
height="128"
x="9.2651362e-08"
y="172"
inkscape:label="0" />
<g
id="g883"
style="fill:none;fill-opacity:0.25098;stroke:#a579b3;stroke-opacity:1"
transform="translate(-24,24)" />
<g
id="g900"
style="fill:none;fill-opacity:0.25098;stroke:#a579b3;stroke-opacity:1"
transform="translate(-24,24)" />
<rect
inkscape:label=""
y="172"
x="160"
height="16"
width="16"
id="16"
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
x="0"
y="167"
id="text863"
inkscape:label="icon-name"><tspan
style="font-size:4px;stroke-width:0.332649"
sodipodi:role="line"
id="tspan861"
x="0"
y="167">Hicolor</tspan></text>
<text
inkscape:label="icon-name"
id="text867"
y="167"
x="160"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
xml:space="preserve"><tspan
y="167"
x="160"
id="tspan865"
sodipodi:role="line"
style="font-size:4px;stroke-width:0.332649">Symbolic</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="icons"
style="display:inline">
<g
id="g634"
transform="matrix(0.25,0,0,0.25,40.543894,192.6799)"
style="stroke-width:4">
<g
id="g1451"
style="display:inline;enable-background:new"
transform="matrix(4.0000016,0,0,4.0000016,-162.17559,-770.72007)">
<g
id="g1502"
style="display:inline;fill:#ffffff;fill-opacity:1;enable-background:new"
transform="translate(192.6698,-1.5393458)">
<g
id="g1538"
style="fill:#ffffff">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1428"
width="18"
height="3"
x="86"
y="257" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1430"
width="15"
height="3"
x="-272"
y="86"
transform="rotate(-90)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1432"
width="15"
height="3"
x="-272"
y="101"
transform="rotate(-90)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1434"
width="18"
height="3"
x="86"
y="267" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1444"
width="23"
height="3"
x="83"
y="251" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1446"
width="23"
height="3"
x="83"
y="236" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1448"
width="19"
height="3"
x="83"
y="243" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1450"
width="8"
height="3"
x="-252"
y="99"
transform="rotate(-90)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1452"
width="15"
height="3"
x="-220.63724"
y="148.72388"
transform="rotate(-75)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1436"
width="10"
height="3"
x="69"
y="257" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1438"
width="15"
height="3"
x="-272"
y="69"
transform="rotate(-90)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1440"
width="13"
height="3"
x="-270"
y="78"
transform="rotate(-90)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1442"
width="10"
height="3"
x="69"
y="267" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1454"
width="11"
height="3"
x="69"
y="251" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1456"
width="7"
height="3"
x="71"
y="246" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1458"
width="15"
height="3"
x="67"
y="241" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dashoffset:26.4"
id="rect1460"
width="11"
height="3"
x="69"
y="236" />
</g>
</g>
<path
style="display:inline;fill:none;stroke:#ffffff;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 218.84879,246.00002 h -12.17896 v -28 h 11.80607 a 12.193933,12.193933 45 0 1 12.19393,12.19393 v 3.98502 a 11.821045,11.821045 135 0 1 -11.82104,11.82105 z"
id="path1544"
sodipodi:nodetypes="ccccc"
inkscape:original-d="m 230.66983,246.00002 h -24 v -28 h 24 z"
inkscape:path-effect="#path-effect1546" />
</g>
</g>
</g>
<rect
style="display:inline;fill:url(#linearGradient1871);fill-opacity:1;stroke:none;stroke-width:0.965307;-inkscape-stroke:none;enable-background:new;stop-color:#000000"
id="rect4239"
width="112"
height="82"
x="8"
y="206"
ry="8.9379416"
rx="8.9379416" />
<rect
style="display:inline;fill:#5e5c64;fill-opacity:1;stroke:none;stroke-width:0.977008;enable-background:new;stop-color:#000000"
id="rect547"
width="112"
height="84"
x="8"
y="200"
ry="8.3424225"
rx="8.3424225" />
<path
id="rect15675"
style="display:inline;fill:#241f31;stroke-width:0.973833;enable-background:new;stop-color:#000000"
d="m 107,268 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -42.000217,0 H 99 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 H 64.999783 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z M 51,268 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -22.000217,0 h 14.000434 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 H 14.999783 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z M 112.95947,245.07886 H 113 c 1.662,0 3,1.338 3,3 v 15.84228 c 0,1.662 -1.338,3 -3,3 h -0.0405 c -1.662,0 -3,-1.338 -3,-3 v -15.84228 c 0,-1.662 1.338,-3 3,-3 z M 107,240 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -8,14 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -70,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m 56,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m 64,-14 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -22.000217,0 h 14.000434 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 H 14.999783 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z M 99,225.94141 h 14.00043 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 H 99 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -70,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m 56,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 6 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -6 c 0,-1.662 1.338,-3 3,-3 z m 78,-9.94138 h 6 c 1.662,0 3,1.33799 3,2.99999 0,1.66199 -1.338,2.99998 -3,2.99998 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -14,0 h 6 c 1.662,0 3,1.33799 3,2.99999 C 102,220.66201 100.662,222 99,222 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -22,0 h 6 c 1.662,0 3,1.33799 3,2.99999 C 80,220.66201 78.662,222 77,222 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -14,0 h 6 c 1.662,0 3,1.33799 3,2.99999 C 66,220.66201 64.662,222 63,222 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -14,0 h 6 c 1.662,0 3,1.33799 3,2.99999 C 52,220.66201 50.662,222 49,222 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -14,0 h 6 c 1.662,0 3,1.33799 3,2.99999 C 38,220.66201 36.662,222 35,222 h -6 c -1.662,0 -3,-1.33799 -3,-2.99998 0,-1.662 1.338,-2.99999 3,-2.99999 z m -13.878174,0 h 5.756348 C 22.607666,216.00003 24,217.33802 24,219.00002 24,220.66201 22.607666,222 20.878174,222 H 15.121826 C 13.392334,222 12,220.66201 12,219.00002 c 0,-1.662 1.392334,-2.99999 3.121826,-2.99999 z" />
<path
id="rect15677"
style="display:inline;fill:#3d3846;stroke-width:0.932374;enable-background:new;stop-color:#000000"
d="m 107,268 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -42.000217,0 H 99 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 H 64.999783 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z M 51,268 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -22.000217,0 h 14 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -14 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z M 112.95947,244.15771 H 113 c 1.662,0 3,1.338 3,3 V 263 c 0,1.662 -1.338,3 -3,3 h -0.0405 c -1.662,0 -3,-1.338 -3,-3 v -15.84229 c 0,-1.662 1.338,-3 3,-3 z M 107,240 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -8,14 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -70,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m 56,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m 64,-14 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -22.000217,0 h 14 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -14 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z M 99,225.94141 h 14 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 H 99 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -70,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m 56,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z m -14,0 h 6 c 1.662,0 3,1.338 3,3 v 5 c 0,1.662 -1.338,3 -3,3 h -6 c -1.662,0 -3,-1.338 -3,-3 v -5 c 0,-1.662 1.338,-3 3,-3 z M 107,216 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -14,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -22,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -14,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -14,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -14,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z m -14,0 h 6 c 1.662,0 3,1.115 3,2.5 0,1.385 -1.338,2.5 -3,2.5 h -6 c -1.662,0 -3,-1.115 -3,-2.5 0,-1.385 1.338,-2.5 3,-2.5 z" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#f9f06b;fill-opacity:1;stroke:none;stroke-width:0.946661;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;enable-background:new;stop-color:#000000"
id="rect16234"
width="4.0811229"
height="4.0811229"
x="99.918839"
y="203.91891"
rx="3.0459695"
ry="3.0459695" />
<rect
style="font-variation-settings:normal;display:inline;fill:#f9f06b;fill-opacity:1;stroke:none;stroke-width:0.927844;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new;stop-color:#000000"
id="rect16334"
width="4.0000029"
height="4.0000029"
x="107.99995"
y="204.00003"
rx="2.985425"
ry="2.985425" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:url(#linearGradient2343);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.965307;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;enable-background:new;stop-color:#000000"
id="rect1973"
width="49.802158"
height="43.418072"
x="70.1978"
y="240.58194"
rx="7.351243"
ry="6.47118" />
<path
style="display:inline;fill:none;stroke:#deddda;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
d="m 96.966414,249.0229 0,-30.00394 a 8.0055165,8.0055165 45.019748 0 0 -7.999998,-8.00551 l -19.976977,-0.0138 a 7.9850154,7.9850154 134.98579 0 0 -7.990514,7.99448 l 0.01423,11.99997"
id="path2725"
sodipodi:nodetypes="cccc"
inkscape:path-effect="#path-effect3404-1"
inkscape:original-d="m 96.966414,249.0229 v -38.00394 l -35.976973,-0.0248 0.02371,19.99996" />
<rect
style="font-variation-settings:'wght' 800;display:inline;fill:#3d3846;fill-opacity:1;fill-rule:evenodd;stroke:#deddda;stroke-width:2.03227;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;enable-background:new;stop-color:#000000"
id="rect2113"
width="47.955978"
height="41.721436"
x="71.111305"
y="237.26244"
rx="7.0787287"
ry="6.218308" />
<rect
style="font-variation-settings:'wght' 800;display:inline;fill:#3d3846;fill-opacity:1;fill-rule:evenodd;stroke:#deddda;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;enable-background:new;stop-color:#000000"
id="rect2416"
width="11.180351"
height="10.152573"
x="54.409805"
y="225.34746"
rx="2.3851774"
ry="2.3851774" />
<g
aria-label="č"
transform="matrix(1.6008942,0,0,1.6035493,86.283312,270.81006)"
id="text3532"
style="font-weight:800;font-size:18.6667px;line-height:1.25;font-family:Inter;-inkscape-font-specification:'Inter, Ultra-Bold';letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect43121);display:inline;fill:#ffffff;stroke-width:2.49653;enable-background:new;stop-color:#000000">
<path
d="m 5.4462146,-0.50516096 c 3.1304443,0 5.0724794,-1.81884614 5.1666834,-4.57247744 H 7.3012927 c -0.1304351,1.181163 -0.8405823,1.8260924 -1.8115996,1.8260924 -1.2463805,0 -2.0579771,-1.0507279 -2.0579771,-3.0289946 0,-1.963774 0.8188429,-3.0145017 2.0579771,-3.0145017 1.0144957,0 1.673918,0.6884077 1.8115996,1.8260922 h 3.3116053 c -0.07972,-2.7391389 -2.0797175,-4.5217509 -5.1739297,-4.5217509 -3.5000105,0 -5.61595893,2.3333387 -5.61595893,5.7463923 0,3.3985609 2.10145563,5.73914774 5.62320523,5.73914774 z M 4.0186741,-16.519699 H 1.0476508 v 0.0942 l 3.1376905,3.246386 h 2.5434859 l 3.1304449,-3.246386 v -0.0942 H 6.8954943 l -1.4420332,1.681163 z"
id="path3584"
style="fill:#ffffff;stroke-width:2.72913" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="grid"
style="display:none"
sodipodi:insensitive="true">
<circle
cx="64.000031"
cy="236"
r="59.504131"
id="circle2892"
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
<rect
ry="7.9292889"
rx="8.701004"
y="180.49496"
x="20.495007"
height="111.01005"
width="87.009987"
id="rect2894"
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
<rect
ry="7.9238095"
rx="7.9238095"
y="184.49524"
x="12.495266"
height="103.00952"
width="103.00952"
id="rect2896"
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
<rect
ry="8.701005"
rx="7.9292889"
y="200.49496"
x="8.4950066"
height="87.010048"
width="111.01004"
id="rect2898"
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99, 0.99;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
<path
inkscape:connector-curvature="0"
id="path2900"
d="M 2.6203015e-5,288.99999 H 128.00003"
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
</g>
<path
id="path25976"
d="M 162.5 174 C 161.13281 174 160 175.13281 160 176.5 L 160 183.5 C 160 184.86719 161.13281 186 162.5 186 L 168 186 L 168 184 L 165.5 184 C 165.22266 184 165 183.77734 165 183.5 L 165 182.5 C 165 182.22266 165.22266 182 165.5 182 L 168 182 L 168 180.5 C 168 180.77734 167.77734 181 167.5 181 L 166.5 181 C 166.22266 181 166 180.77734 166 180.5 L 166 179.5 C 166 179.22266 166.22266 179 166.5 179 L 167.5 179 C 167.77734 179 168 179.22266 168 179.5 L 168 180 C 168 179.05788 168.61571 178.26421 169.46875 178 L 168.5 178 C 168.22266 178 168 177.77734 168 177.5 L 168 176.5 C 168 176.22266 168.22266 176 168.5 176 L 169.5 176 C 169.77734 176 170 176.22266 170 176.5 L 170 177.5 C 170 177.69255 169.89086 177.85583 169.73242 177.93945 C 169.84971 177.91921 169.9705 177.90625 170.09375 177.90625 L 171.21094 177.90625 C 171.08383 177.81584 171 177.66881 171 177.5 L 171 176.5 C 171 176.22266 171.22266 176 171.5 176 L 172.5 176 C 172.77734 176 173 176.22266 173 176.5 L 173 177.5 C 173 177.66881 172.91617 177.81584 172.78906 177.90625 L 176 177.90625 L 176 176.5 C 176 175.13281 174.86719 174 173.5 174 L 162.5 174 z M 162.5 176 L 163.5 176 C 163.77734 176 164 176.22266 164 176.5 L 164 177.5 C 164 177.77734 163.77734 178 163.5 178 L 162.5 178 C 162.22266 178 162 177.77734 162 177.5 L 162 176.5 C 162 176.25781 162.17187 176.05469 162.39844 176.01172 C 162.42964 176.00372 162.46484 176 162.5 176 z M 165.5 176 L 166.5 176 C 166.77734 176 167 176.22266 167 176.5 L 167 177.5 C 167 177.77734 166.77734 178 166.5 178 L 165.5 178 C 165.22266 178 165 177.77734 165 177.5 L 165 176.5 C 165 176.22266 165.22266 176 165.5 176 z M 163.5 179 L 164.5 179 C 164.77734 179 165 179.22266 165 179.5 L 165 180.5 C 165 180.77734 164.77734 181 164.5 181 L 163.5 181 C 163.22266 181 163 180.77734 163 180.5 L 163 179.5 C 163 179.22266 163.22266 179 163.5 179 z M 162.5 182 L 163.5 182 C 163.77734 182 164 182.22266 164 182.5 L 164 183.5 C 164 183.77734 163.77734 184 163.5 184 L 162.5 184 C 162.22266 184 162 183.77734 162 183.5 L 162 182.5 C 162 182.22266 162.22266 182 162.5 182 z " />
<g
aria-label="č"
transform="matrix(0.55607615,0,0,0.55699842,170.09842,188.28137)"
id="g22833"
style="font-weight:800;font-size:18.6667px;line-height:1.25;font-family:Inter;-inkscape-font-specification:'Inter, Ultra-Bold';letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect43121);display:inline;fill:#2e3436;fill-opacity:1;stroke-width:7.18729;enable-background:new;stop-color:#000000">
<path
d="m 5.4462146,-0.50516096 c 3.1304443,0 5.0724794,-1.81884614 5.1666834,-4.57247744 H 7.3012927 c -0.1304351,1.181163 -0.8405823,1.8260924 -1.8115996,1.8260924 -1.2463805,0 -2.0579771,-1.0507279 -2.0579771,-3.0289946 0,-1.963774 0.8188429,-3.0145017 2.0579771,-3.0145017 1.0144957,0 1.673918,0.6884077 1.8115996,1.8260922 h 3.3116053 c -0.07972,-2.7391389 -2.0797175,-4.5217509 -5.1739297,-4.5217509 -3.5000105,0 -5.61595893,2.3333387 -5.61595893,5.7463923 0,3.3985609 2.10145563,5.73914774 5.62320523,5.73914774 z M 4.0186741,-16.519699 H 1.0476508 v 0.0942 l 3.1376905,3.246386 h 2.5434859 l 3.1304449,-3.246386 v -0.0942 H 6.8954943 l -1.4420332,1.681163 z"
id="path22831"
style="fill:#000000;fill-opacity:1;stroke-width:7.85691" />
</g>
</g>
</svg>
07070100000010000081A400000000000000000000000165F6170D00000123000000000000000000000000000000000000001C00000000tecla-46.0/data/meson.builddesktop_filename = 'org.gnome.Tecla.desktop'
desktop_file = i18n.merge_file(
input: desktop_filename + '.in',
output: desktop_filename,
po_dir: '../po',
install: true,
install_dir: get_option('prefix') / get_option('datadir') / 'applications',
type: 'desktop'
)
subdir('icons')
07070100000011000081A400000000000000000000000165F6170D000000D2000000000000000000000000000000000000002B00000000tecla-46.0/data/org.gnome.Tecla.desktop.in[Desktop Entry]
Name=Tecla
Comment=Preview keyboard layouts
Icon=org.gnome.Tecla
Exec=tecla
Terminal=false
Type=Application
StartupNotify=true
NoDisplay=true
Categories=GNOME;GTK;Core;System;
OnlyShowIn=GNOME;
07070100000012000081A400000000000000000000000165F6170D000005A2000000000000000000000000000000000000001700000000tecla-46.0/meson.buildproject('tecla', 'c',
version: '46.0',
meson_version: '>=0.54',
default_options: [
'c_std=c99',
'warning_level=2',
]
)
cc = meson.get_compiler('c')
cc_warning_flags = [
'-Wno-unused-parameter',
]
add_project_arguments(
cc.get_supported_arguments(cc_warning_flags),
language: 'c'
)
config_h = configuration_data()
config_defines = [
# package
['PACKAGE', meson.project_name()],
['PACKAGE_VERSION', meson.project_version()],
['VERSION', meson.project_version()],
['GETTEXT_PACKAGE', meson.project_name()],
['LOCALEDIR', get_option('prefix') / get_option('localedir')],
]
foreach define: config_defines
config_h.set_quoted(define[0], define[1])
endforeach
configure_file(
output: 'config.h',
configuration: config_h
)
config_inc = include_directories('.')
gnome = import('gnome')
i18n = import('i18n')
pkg = import('pkgconfig')
gtk_dep = dependency('gtk4')
gtk_wayland_dep = dependency('gtk4-wayland', required: false)
wayland_dep = dependency('wayland-client', required: false)
adw_dep = dependency('libadwaita-1', version: '>=1.4')
xkbcommon_dep = dependency('xkbcommon')
libm_dep = cc.find_library('m')
subdir('data')
subdir('src')
subdir('po')
pkg.generate(
name: 'tecla',
description: 'Keyboard layout previewer',
dataonly: true,
variables: [
'prefix=' + get_option('prefix'),
'app=${prefix}' / get_option('bindir') / 'tecla',
]
)
07070100000013000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000000E00000000tecla-46.0/po07070100000014000081A400000000000000000000000165F6170D0000007F000000000000000000000000000000000000001600000000tecla-46.0/po/LINGUASbe
ca
cs
da
de
el
en_GB
eo
eu
es
fa
fi
fr
fur
gl
he
hu
id
it
ka
ko
lt
lv
nl
oc
pa
pl
pt
pt_BR
ro
ru
sk
sl
sv
tr
uk
zh_CN
zh_TW
07070100000015000081A400000000000000000000000165F6170D0000009F000000000000000000000000000000000000001A00000000tecla-46.0/po/POTFILES.in# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
data/org.gnome.Tecla.desktop.in
src/tecla-application.c
07070100000016000081A400000000000000000000000165F6170D00000067000000000000000000000000000000000000001C00000000tecla-46.0/po/POTFILES.skip# List of source files that should *not* be translated.
# Please keep this file sorted alphabetically.
07070100000017000081A400000000000000000000000165F6170D000004E6000000000000000000000000000000000000001400000000tecla-46.0/po/be.po# Belarusian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Yuras Shumovich <shumovichy@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-14 17:08+0300\n"
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Папярэдні прагляд раскладак клавіятуры"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Паказаць нумар версіі"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Раскладка клавіятуры"
07070100000018000081A400000000000000000000000165F6170D00000400000000000000000000000000000000000000001400000000tecla-46.0/po/ca.po# Catalan translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# pocsenderi <pocsenderi@protonmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-17 22:57+0100\n"
"Last-Translator: \n"
"Language-Team: Catalan <gnome@llistes.softcatala.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Vista prèvia de les disposicions de teclat"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Mostra el número de versió"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Disposició del teclat"
07070100000019000081A400000000000000000000000165F6170D00000455000000000000000000000000000000000000001400000000tecla-46.0/po/cs.po# Czech translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Daniel Rusek <mail@asciiwolf.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-10 22:22+0100\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Zobrazte náhled rozložení klávesnice"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Zobrazit číslo verze"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Rozložení klávesnice"
0707010000001A000081A400000000000000000000000165F6170D00000435000000000000000000000000000000000000001400000000tecla-46.0/po/da.po# Danish translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Alan Mortensen <alanmortensen.am@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-28 15:32+0100\n"
"Last-Translator: Alan Mortensen <alanmortensen.am@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"
"X-Generator: Poedit 3.0.1\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Forhåndsvis tastaturlayout"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Vis versionsnummer"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Tastaturlayout"
0707010000001B000081A400000000000000000000000165F6170D0000043A000000000000000000000000000000000000001400000000tecla-46.0/po/de.po# German translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Jürgen Benvenuti <gastornis@posteo.org>, 2023, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 18:20+0100\n"
"Last-Translator: Jürgen Benvenuti <gastornis@posteo.org>\n"
"Language-Team: German <gnome-de@gnome.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Vorschau der Tastaturbelegungen"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Versionsnummer anzeigen"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Tastaturbelegung"
0707010000001C000081A400000000000000000000000165F6170D00000422000000000000000000000000000000000000001400000000tecla-46.0/po/el.po# Greek translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Efstathios Iosifidis <eiosifidis@gnome.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-09-07 16:52+0000\n"
"PO-Revision-Date: 2023-09-09 02:18+0300\n"
"Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
"Language-Team: Greek <gnome-el-list@gnome.org>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Προεπισκόπηση διατάξεων πληκτρολογίου"
#: src/tecla-application.c:136
msgid "Keyboard Layout"
msgstr "Διάταξη πληκτρολογίου"
0707010000001D000081A400000000000000000000000165F6170D0000042F000000000000000000000000000000000000001700000000tecla-46.0/po/en_GB.po# British English translation for tecla.
# Copyright (C) 2024 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Andi Chandler <andi@gowling.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla gnome-45\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/issues\n"
"POT-Creation-Date: 2024-02-21 20:03+0000\n"
"PO-Revision-Date: 2024-02-23 11:43+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: British English <en_GB@li.org>\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);;\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Preview keyboard layouts"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Display version number"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Keyboard Layout"
0707010000001E000081A400000000000000000000000165F6170D000003D9000000000000000000000000000000000000001400000000tecla-46.0/po/eo.po# Esperanto translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-09-11 16:24+0000\n"
"PO-Revision-Date: 2023-09-11 16:24+0000\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Antaŭrigardu klavarajn aranĝojn"
#: src/tecla-application.c:136
msgid "Keyboard Layout"
msgstr "Klavara aranĝo"
0707010000001F000081A400000000000000000000000165F6170D000004A0000000000000000000000000000000000000001400000000tecla-46.0/po/es.po# Spanish translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-26 14:46+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Gtranslator 45.3\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Vista previa de las ditribuciones del teclado"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Mostrar el número de versión"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Distribución del teclado"
07070100000020000081A400000000000000000000000165F6170D00000402000000000000000000000000000000000000001400000000tecla-46.0/po/eu.po# Basque translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2023, 2024.
#
msgid ""
msgstr "Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-15 18:04+0000\n"
"Last-Translator: Asier Sarasua Garmendia <asiersarasua@ni.eus>\n"
"Language-Team: Basque <librezale@librezale.eus>\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tekla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Aurreikusi teklatuaren diseinuak"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Erakutsi bertsio-zenbakia"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Teklatuaren diseinua"
07070100000021000081A400000000000000000000000165F6170D00000435000000000000000000000000000000000000001400000000tecla-46.0/po/fa.po# Persian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Danial Behzadi <dani.behzi@ubuntu.com>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-10 16:44+0330\n"
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
"Language-Team: Persian <fa@li.org>\n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "تکلا"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "پیشنمایش چینشهای صفحهکلید"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "نمایش شمارهٔ نگارش"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "چینش صفحهکلید"
07070100000022000081A400000000000000000000000165F6170D00000451000000000000000000000000000000000000001400000000tecla-46.0/po/fi.po# Finnish translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-22 19:50+0200\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
"Language-Team: Finnish <lokalisointi-lista@googlegroups.com>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Esikatsele näppäimistöasetteluja"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Näytä versionumero"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Näppäimistön asettelu"
07070100000023000081A400000000000000000000000165F6170D000004F7000000000000000000000000000000000000001400000000tecla-46.0/po/fr.po# French translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Guillaume Bernard <associations@guillaume-bernard.fr>, 2023.
# Irénée THIRION <irenee.thirion@e.email>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-25 15:33+0100\n"
"Last-Translator: Irénée THIRION <irenee.thirion@e.email>\n"
"Language-Team: French <gnomefr@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 45.3\n"
"X-DL-Lang: fr\n"
"X-DL-Module: tecla\n"
"X-DL-Branch: main\n"
"X-DL-Domain: po\n"
"X-DL-State: Translating\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Aperçu des agencements de clavier"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Afficher le numéro de version"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Agencement du clavier"
07070100000024000081A400000000000000000000000165F6170D00000403000000000000000000000000000000000000001500000000tecla-46.0/po/fur.po# Friulian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Fabio Tomat <f.t.public@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 12:17+0100\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Anteprime disposizions tastieris"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Visualize numar di version"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Disposizion de tastiere"
07070100000025000081A400000000000000000000000165F6170D000003F8000000000000000000000000000000000000001400000000tecla-46.0/po/gl.po# Galician translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Fran Dieguez <frandieguez@gnome.org>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-15 14:12+0100\n"
"Last-Translator: \n"
"Language-Team: Galician <gnome-gl-list@gnome.org>\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Previsualize disposicións de teclado"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Mostrar o número de versión"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Disposicións de teclado"
07070100000026000081A400000000000000000000000165F6170D00000465000000000000000000000000000000000000001400000000tecla-46.0/po/he.po# Hebrew translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Yosef Or Boczko <yoseforb@gmail.com>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 20:52+0200\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: Hebrew\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=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? "
"2 : 3)\n"
"X-Generator: Gtranslator 45.3\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "תצוגה מקדימה לפריסת מקלדת"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "הצגת מספר הגרסה"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "פריסת מקלדת"
07070100000027000081A400000000000000000000000165F6170D00000461000000000000000000000000000000000000001400000000tecla-46.0/po/hu.po# Hungarian translation for tecla.
# Copyright (C) 2023, 2024 Free Software Foundation, Inc.
# This file is distributed under the same license as the tecla package.
#
# Balázs Úr <ur.balazs at fsf dot hu>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-22 00:57+0200\n"
"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
"Language-Team: Hungarian <openscope at fsf dot hu>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 23.04.3\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tekla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Billentyűzetkiosztások előnézete"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Verziószám megjelenítése"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Billentyűzetkiosztás"
07070100000028000081A400000000000000000000000165F6170D00000446000000000000000000000000000000000000001400000000tecla-46.0/po/id.po# Indonesian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2023, 2024.
#
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-20 20:40+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Pratinjau tata letak papan tik"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Tampilkan nomor versi"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Tata Letak Papan Tik"
07070100000029000081A400000000000000000000000165F6170D000003DE000000000000000000000000000000000000001400000000tecla-46.0/po/it.po# Italian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Davide Ferracin <davide.ferracin@protonmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-08-30 12:04+0000\n"
"PO-Revision-Date: 2023-08-30 22:33+0200\n"
"Last-Translator: Davide Ferracin <davide.ferracin@protonmail.com>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\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"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Anteprime delle disposizioni di tastiera"
#: src/tecla-application.c:135
msgid "Keyboard Layout"
msgstr "Disposizione della tastiera"
0707010000002A000081A400000000000000000000000165F6170D000004A1000000000000000000000000000000000000001400000000tecla-46.0/po/ka.po# Georgian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Ekaterine Papava <papava.e@gtu.ge>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-12 18:31+0100\n"
"Last-Translator: Ekaterine Papava <papava.e@gtu.ge>\n"
"Language-Team: Georgian <ka@li.org>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "კლავიატურის განლაგებების გადახედვა"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "ვერსიის ინფორმაციის ჩვენება"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "კლავიატურის განლაგება"
0707010000002B000081A400000000000000000000000165F6170D000003D3000000000000000000000000000000000000001400000000tecla-46.0/po/ko.po# Korean translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# DaeHyun Sung <sungdh86+git@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-08-30 15:51+0000\n"
"PO-Revision-Date: 2023-08-31 16:35+0900\n"
"Last-Translator: DaeHyun Sung <sungdh86+git@gmail.com>\n"
"Language-Team: Korean <gnome-kr@googlegroups.com>\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "테클라"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "키보드 배치 미리보기"
#: src/tecla-application.c:135
msgid "Keyboard Layout"
msgstr "키보드 배치"
0707010000002C000081A400000000000000000000000165F6170D0000046A000000000000000000000000000000000000001400000000tecla-46.0/po/lt.po# Lithuanian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Aurimas Černius <aurisc4@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-12 23:32+0200\n"
"Last-Translator: \n"
"Language-Team: Lithuanian <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"(n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Peržiūrėti klaviatūrų išdėstymus"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Parodyti versijos numerį"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Klaviatūros išdėstymas"
0707010000002D000081A400000000000000000000000165F6170D00000471000000000000000000000000000000000000001400000000tecla-46.0/po/lv.po# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# SPDX-FileCopyrightText: 2024 Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/issues\n"
"POT-Creation-Date: 2024-02-22 17:51+0000\n"
"PO-Revision-Date: 2024-02-24 23:26+0200\n"
"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 :"
" 2);\n"
"X-Generator: Lokalize 23.08.1\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Priekšskatīt tastatūras izkārtojumus"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Rādīt versijas numuru"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Tastatūras izkārtojums"
0707010000002E000081A400000000000000000000000165F6170D00000039000000000000000000000000000000000000001A00000000tecla-46.0/po/meson.buildi18n.gettext(
meson.project_name(),
preset: 'glib'
)
0707010000002F000081A400000000000000000000000165F6170D0000044D000000000000000000000000000000000000001400000000tecla-46.0/po/nl.po# Dutch translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Nathan Follens <nfollens@gnome.org>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-02-18 17:04+0100\n"
"Last-Translator: Nathan Follens <nfollens@gnome.org>\n"
"Language-Team: GNOME-NL https://matrix.to/#/#nl:gnome.org\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Voorbeelden van toetsenbordindelingen tonen"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Versienummer weergeven"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Toetsenbordindeling"
07070100000030000081A400000000000000000000000165F6170D00000406000000000000000000000000000000000000001400000000tecla-46.0/po/oc.po# Occitan translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Quentin PAGÈS <pages_quentin@hotmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-03-12 10:08+0100\n"
"Last-Translator: Quentin PAGÈS\n"
"Language-Team: Occitan <totenoc@gmail.com>\n"
"Language: oc\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Apercebut d’agençament de clavièr"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Afichar lo numèro de la version"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Agençament de clavièr"
07070100000031000081A400000000000000000000000165F6170D00000433000000000000000000000000000000000000001400000000tecla-46.0/po/pa.po# Punjabi translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
#
# Amn Alam <amanpreet.alam@gmail.com>, 2023.
# A S Alam <aalam@satluj.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-08-22 11:30+0000\n"
"PO-Revision-Date: 2023-08-22 16:34-0700\n"
"Last-Translator: A S Alam <aalam@satluj.org>\n"
"Language-Team: Punjabi <punjab-translation@googlegroups.com>\n"
"Language: pa\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 23.04.3\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "ਟੈਕਲਾ"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "ਕੀਬੋਰਡ ਖਾਕਿਆਂ ਦੀ ਝਲਕ"
#: src/tecla-application.c:135
msgid "Keyboard Layout"
msgstr "ਕੀ-ਬੋਰਡ ਲੇਆਉਟ"
07070100000032000081A400000000000000000000000165F6170D00000485000000000000000000000000000000000000001400000000tecla-46.0/po/pl.po# Polish translation for tecla.
# Copyright © 2023-2024 the tecla authors.
# This file is distributed under the same license as the tecla package.
# Piotr Drąg <piotrdrag@gmail.com>, 2023-2024.
# Aviary.pl <community-poland@mozilla.org>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-03-02 17:27+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <community-poland@mozilla.org>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Podgląd układów klawiatury"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Wyświetla numer wersji"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Układ klawiatury"
07070100000033000081A400000000000000000000000165F6170D000003E9000000000000000000000000000000000000001400000000tecla-46.0/po/pt.po# Portuguese translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Hugo Carvalho <hugokarvalho@hotmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-08-12 17:47+0000\n"
"PO-Revision-Date: 2023-08-13 01:31+0100\n"
"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
"Language-Team: Portuguese <pt@li.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Pré-visualizar as disposições do teclado"
#: src/tecla-application.c:135
msgid "Keyboard Layout"
msgstr "Disposição do teclado"
07070100000034000081A400000000000000000000000165F6170D00000469000000000000000000000000000000000000001700000000tecla-46.0/po/pt_BR.po# Brazilian Portuguese translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Rafael Fontenelle <rafaelff@gnome.org>, 2023-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-13 12:18+0000\n"
"PO-Revision-Date: 2024-03-02 20:15-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <https://br.gnome.org/traducao>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 45.3\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Pré-visualize layouts de teclado"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Exibe o número da versão"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Layout de teclado"
07070100000035000081A400000000000000000000000165F6170D000004B5000000000000000000000000000000000000001400000000tecla-46.0/po/ro.po# Romanian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# kottiberyu <tibetiumoise@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-10 10:55+0200\n"
"Last-Translator: Florentina Mușat <florentina [dot] musat [dot] 28 [at] "
"gmail [dot] com>\n"
"Language-Team: Romanian <gnomero-list@lists.sourceforge.net>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2);;\n"
"X-Generator: Poedit 3.4.1\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Previzualizează aranjamente de tastatură"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Afișează numărul versiunii"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Aranjament de tastatură"
07070100000036000081A400000000000000000000000165F6170D000004B3000000000000000000000000000000000000001400000000tecla-46.0/po/ru.po# Russian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Artur S0 <arturios05@bk.ru>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 20:58+0300\n"
"Last-Translator: Artur So <arturios2005@mail.ru>\n"
"Language-Team: Russian <ru@li.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Предпросмотр раскладок клавиатуры"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Отображать номер версии"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Раскладка клавиатуры"
07070100000037000081A400000000000000000000000165F6170D00000400000000000000000000000000000000000000001400000000tecla-46.0/po/sk.po# Slovak translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Dušan Kazik <prescott66@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-08-28 20:43+0000\n"
"PO-Revision-Date: 2023-08-30 14:03+0200\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Zobrazuje náhľady rozložení klávesníc"
#: src/tecla-application.c:135
msgid "Keyboard Layout"
msgstr "Rozloženie klávesnice"
07070100000038000081A400000000000000000000000165F6170D000004E5000000000000000000000000000000000000001400000000tecla-46.0/po/sl.po# Slovenian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
#
# Martin <miles@filmsi.net>, 2023.
# Matej Urbančič <mateju@src.gnome.org>, 2023–.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 22:15+0100\n"
"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups."
"com>\n"
"Language: sl_SI\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
"n%100==4 ? 3 : 0);\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 2.2.1\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tekla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Pregled postavitev tipkovnice"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Prikaži številko različice"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Postavitev tipkovnice"
07070100000039000081A400000000000000000000000165F6170D00000455000000000000000000000000000000000000001400000000tecla-46.0/po/sv.po# Swedish translation for tecla.
# Copyright © 2023, 2024 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2023, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-09 05:55+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Förhandsvisa tangentbordslayouter"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Visa versionsnummer"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Tangentbordslayout"
0707010000003A000081A400000000000000000000000165F6170D00000427000000000000000000000000000000000000001400000000tecla-46.0/po/tr.po# Turkish translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
#
# Sabri Ünal <libreajans@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-11 23:22+0300\n"
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
"Language-Team: Turkish <takim@gnome.org.tr>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Klavye düzenlerini ön izle"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Sürüm numarasını göster"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Klavye Düzeni"
0707010000003B000081A400000000000000000000000165F6170D000004DD000000000000000000000000000000000000001400000000tecla-46.0/po/uk.po# Ukrainian translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
#
# Yuri Chornoivan <yurchor@ukr.net>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-11 21:15+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Lokalize 23.04.1\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "Перегляд розкладки клавіатури"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "Показати номер версії"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "Розкладка клавіатури"
0707010000003C000081A400000000000000000000000165F6170D000003F7000000000000000000000000000000000000001700000000tecla-46.0/po/zh_CN.po# Chinese (China) translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Boyuan Yang <073plan@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2024-01-08 21:44+0000\n"
"PO-Revision-Date: 2024-01-10 15:11-0500\n"
"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "预览键盘布局"
#: src/tecla-application.c:74
msgid "Display version number"
msgstr "显示版本号"
#: src/tecla-application.c:155
msgid "Keyboard Layout"
msgstr "键盘布局"
0707010000003D000081A400000000000000000000000165F6170D000003B4000000000000000000000000000000000000001700000000tecla-46.0/po/zh_TW.po# Chinese (Taiwan) translation for tecla.
# Copyright (C) 2023 tecla's COPYRIGHT HOLDER
# This file is distributed under the same license as the tecla package.
# Cheng-Chia Tseng <pswo10680@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: tecla main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tecla/-/issues\n"
"POT-Creation-Date: 2023-10-18 18:21+0000\n"
"PO-Revision-Date: 2023-10-21 19:39+0800\n"
"Last-Translator: Cheng-Chia Tseng <zerngjia@gmail.com>\n"
"Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.3.2\n"
#: data/org.gnome.Tecla.desktop.in:3
msgid "Tecla"
msgstr "Tecla"
#: data/org.gnome.Tecla.desktop.in:4
msgid "Preview keyboard layouts"
msgstr "預覽鍵盤配置"
#: src/tecla-application.c:136
msgid "Keyboard Layout"
msgstr "鍵盤配置"
0707010000003E000041ED00000000000000000000000265F6170D00000000000000000000000000000000000000000000000F00000000tecla-46.0/src0707010000003F000081A400000000000000000000000165F6170D000004CC000000000000000000000000000000000000001600000000tecla-46.0/src/main.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include <libadwaita-1/adwaita.h>
#include <locale.h>
#include <glib/gi18n.h>
#include "tecla-application.h"
int
main (int argc,
char *argv[])
{
GApplication *app;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
setlocale (LC_ALL, "");
adw_init ();
app = tecla_application_new ();
g_application_run (app, argc, argv);
}
07070100000040000081A400000000000000000000000165F6170D00000234000000000000000000000000000000000000001B00000000tecla-46.0/src/meson.buildresource_data = files (
'tecla-view.ui',
)
tecla_gresources = gnome.compile_resources('tecla-gresources',
'tecla.gresource.xml',
dependencies: resource_data,
)
source = [
'tecla-application.c',
'tecla-key.c',
'tecla-keymap-observer.c',
'tecla-model.c',
'tecla-util.c',
'tecla-view.c',
'main.c',
tecla_gresources,
]
tecla = executable('tecla',
sources: source,
dependencies: [gtk_dep, gtk_wayland_dep, wayland_dep, adw_dep, xkbcommon_dep, libm_dep],
install: true,
include_directories: [config_inc],
)
07070100000041000081A400000000000000000000000165F6170D00000466000000000000000000000000000000000000001700000000tecla-46.0/src/pc105.h#include "tecla-layout.h"
static TeclaLayout pc105_layout = {
.rows = {
{ { { "TLDE" }, { "AE01" }, { "AE02" }, { "AE03" }, { "AE04" }, { "AE05" }, { "AE06" }, { "AE07" }, { "AE08" }, { "AE09" }, { "AE10" }, { "AE11" }, { "AE12" }, { "BKSP", .width = 2 }, }, },
{ { { "TAB", .width = 1.5 }, { "AD01" }, { "AD02" }, { "AD03" }, { "AD04" }, { "AD05" }, { "AD06" }, { "AD07" }, { "AD08" }, { "AD09" }, { "AD10" }, { "AD11" }, { "AD12" }, { "RTRN", .width = 1.5 }, }, },
{ { { "CAPS", .width = 1.75 }, { "AC01" }, { "AC02" }, { "AC03" }, { "AC04" }, { "AC05" }, { "AC06" }, { "AC07" }, { "AC08" }, { "AC09" }, { "AC10" }, { "AC11" }, { "BKSL" }, { "RTRN", .width = 1.25, .height = -2 }, }, },
{ { { "LFSH", .width = 1.5 }, { "LSGT" }, { "AB01" }, { "AB02" }, { "AB03" }, { "AB04" }, { "AB05" }, { "AB06" }, { "AB07" }, { "AB08" }, { "AB09" }, { "AB10" }, { "RTSH", .width = 2.5 }, }, },
{ { { "LCTL", .width = 1.25 }, { "LWIN", .width = 1.25 }, { "ALT", .width = 1.25 }, { "SPCE", .width = 6.25 }, { "RALT", .width = 1.25 }, { "RWIN", .width = 1.25 }, { "COMP", .width = 1.25 }, { "RCTL", .width = 1.25 }, }, },
}
};
07070100000042000081A400000000000000000000000165F6170D00002ADF000000000000000000000000000000000000002300000000tecla-46.0/src/tecla-application.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include "tecla-application.h"
#include "tecla-key.h"
#include "tecla-keymap-observer.h"
#include "tecla-model.h"
#include "tecla-view.h"
#include <glib/gi18n.h>
#include <stdlib.h>
typedef struct
{
int level;
guint keyval;
} KeyInfo;
struct _TeclaApplication
{
GtkApplication parent_instance;
GtkWindow *main_window;
TeclaView *main_view;
TeclaModel *main_model;
TeclaKeymapObserver *observer;
gchar *layout;
gboolean ignore_first_change;
};
static GtkPopover *current_popover = NULL;
G_DEFINE_TYPE (TeclaApplication, tecla_application, GTK_TYPE_APPLICATION)
static int
tecla_application_command_line (GApplication *app,
GApplicationCommandLine *cl)
{
TeclaApplication *tecla_app = TECLA_APPLICATION (app);
g_autofree GStrv argv = NULL;
int argc;
argv = g_application_command_line_get_arguments (cl, &argc);
if (argc > 1) {
g_free (tecla_app->layout);
tecla_app->layout = g_strdup (argv[1]);
}
g_application_activate (app);
return EXIT_SUCCESS;
}
const GOptionEntry all_options[] = {
{ "version", 0, 0, G_OPTION_ARG_NONE, NULL, N_("Display version number"), NULL },
{ NULL, 0, 0, 0, NULL, NULL, NULL } /* end the list */
};
static int
tecla_application_handle_local_options (GApplication *app,
GVariantDict *options)
{
if (g_variant_dict_contains (options, "version")) {
g_print ("%s %s\n", PACKAGE, VERSION);
return 0;
}
return -1;
}
static void
level_clicked_cb (GtkButton *button,
TeclaView *view)
{
int level;
level = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "level"));
tecla_view_set_current_level (view, level);
}
static void
view_level_notify_cb (TeclaView *view,
GParamSpec *pspec,
GtkButton *button)
{
int level, toggle_level;
level = tecla_view_get_current_level (view);
toggle_level = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "level"));
if (level == toggle_level)
gtk_widget_set_state_flags (GTK_WIDGET (button), GTK_STATE_FLAG_CHECKED, FALSE);
else
gtk_widget_unset_state_flags (GTK_WIDGET (button), GTK_STATE_FLAG_CHECKED);
}
static void
num_levels_notify_cb (TeclaView *view,
GParamSpec *pspec,
GtkBox *levels)
{
int num_levels, i;
GtkWidget *child;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (levels))) != NULL)
gtk_box_remove (levels, child);
num_levels = tecla_view_get_num_levels (view);
for (i = 0; i < num_levels; i++) {
GtkWidget *button;
g_autofree char *label = g_strdup_printf ("%d", i + 1);
button = gtk_button_new_with_label (label);
gtk_widget_add_css_class (button, "toggle");
gtk_widget_add_css_class (button, "pill");
gtk_widget_set_focusable (button, FALSE);
gtk_box_append (levels, button);
g_object_set_data (G_OBJECT (button), "level",
GINT_TO_POINTER (i));
g_signal_connect (button, "clicked",
G_CALLBACK (level_clicked_cb), view);
g_signal_connect_object (view, "notify::level",
G_CALLBACK (view_level_notify_cb), button, 0);
}
}
static void
update_title (GtkWindow *window,
TeclaModel *model)
{
g_autofree gchar *title = NULL;
title = g_strdup_printf ("%s ‐ %s", _("Keyboard Layout"),
tecla_model_get_name (model));
gtk_window_set_title (GTK_WINDOW (window), title);
}
static GtkWindow *
create_window (TeclaApplication *app,
TeclaView **view_out)
{
g_autoptr (GtkBuilder) builder = NULL;
TeclaView *view;
GtkWindow *window;
GtkBox *levels;
g_type_ensure (TECLA_TYPE_VIEW);
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder,
"/org/gnome/tecla/tecla-window.ui",
NULL);
window = GTK_WINDOW (gtk_builder_get_object (builder, "window"));
view = TECLA_VIEW (gtk_builder_get_object (builder, "view"));
levels = GTK_BOX (gtk_builder_get_object (builder, "levels"));
gtk_application_add_window (GTK_APPLICATION (app), window);
g_signal_connect (view, "notify::num-levels",
G_CALLBACK (num_levels_notify_cb), levels);
if (view_out)
*view_out = view;
return window;
}
static void
name_notify_cb (TeclaModel *model,
GParamSpec *pspec,
GtkWindow *window)
{
update_title (window, model);
}
static gboolean
unparent_popover (GtkWidget *popover)
{
gtk_widget_unparent (popover);
return G_SOURCE_REMOVE;
}
static void
popover_closed_cb (GtkPopover *popover,
TeclaView *view)
{
GtkWidget *parent;
if (current_popover == popover)
current_popover = NULL;
parent = gtk_widget_get_parent (GTK_WIDGET (popover));
gtk_widget_unset_state_flags (parent, GTK_STATE_FLAG_ACTIVE);
g_idle_add ((GSourceFunc) unparent_popover, popover);
}
static GtkPopover *
create_popover (TeclaView *view,
TeclaModel *model,
GtkWidget *widget,
const gchar *name)
{
int n_levels, i;
xkb_keycode_t keycode;
GtkPopover *popover;
GtkWidget *box;
g_autoptr (GArray) key_info = NULL;
keycode = tecla_model_get_key_keycode (model, name);
n_levels = tecla_view_get_num_levels (view);
key_info = g_array_new (FALSE, TRUE, sizeof (KeyInfo));
for (i = 0; i < n_levels; i++) {
KeyInfo info;
info.level = i;
info.keyval = tecla_model_get_keyval (model,
info.level,
keycode);
if (info.keyval == 0)
continue;
g_array_append_val (key_info, info);
}
if (key_info->len < 2)
return NULL;
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_widget_set_margin_start (box, 12);
gtk_widget_set_margin_end (box, 12);
gtk_widget_set_margin_top (box, 12);
gtk_widget_set_margin_bottom (box, 12);
for (i = 0; i < (int) key_info->len; i++) {
GtkWidget *hbox, *level, *etching, *desc;
KeyInfo *info;
g_autofree gchar *str;
info = &g_array_index (key_info, KeyInfo, i);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
str = g_strdup_printf ("%d", info->level + 1);
level = gtk_label_new (str);
gtk_widget_add_css_class (level, "heading");
gtk_box_append (GTK_BOX (hbox), level);
str = tecla_model_get_key_label (model, info->level, name);
etching = tecla_key_new (NULL);
tecla_key_set_label (TECLA_KEY (etching), str);
gtk_widget_add_css_class (etching, "tecla-key");
gtk_widget_set_sensitive (etching, FALSE);
gtk_box_append (GTK_BOX (hbox), etching);
desc = gtk_label_new (gdk_keyval_name (info->keyval));
gtk_box_append (GTK_BOX (hbox), desc);
gtk_box_append (GTK_BOX (box), hbox);
}
popover = GTK_POPOVER (gtk_popover_new ());
gtk_popover_set_child (popover, box);
gtk_popover_set_autohide (popover, FALSE);
gtk_popover_set_position (popover, GTK_POS_TOP);
g_signal_connect_after (popover, "closed",
G_CALLBACK (popover_closed_cb), view);
return popover;
}
static void
key_activated_cb (TeclaView *view,
const gchar *name,
GtkWidget *widget,
TeclaModel *model)
{
GtkPopover *popover;
if (current_popover) {
if (gtk_widget_get_parent (GTK_WIDGET (current_popover)) == widget) {
gtk_popover_popdown (current_popover);
return;
}
gtk_popover_popdown (current_popover);
}
if (!widget)
return;
popover = create_popover (view, model, widget, name);
if (popover) {
gtk_widget_set_parent (GTK_WIDGET (popover), widget);
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_ACTIVE, FALSE);
gtk_popover_popup (popover);
current_popover = popover;
}
}
static void
connect_model (GtkWindow *window,
TeclaView *view,
TeclaModel *model)
{
tecla_view_set_model (view, model);
g_signal_connect_object (model, "notify::name",
G_CALLBACK (name_notify_cb),
window, 0);
g_signal_connect_object (view, "key-activated",
G_CALLBACK (key_activated_cb),
model, 0);
}
static void
observer_keymap_notify_cb (TeclaKeymapObserver *observer,
GParamSpec *pspec,
TeclaApplication *app)
{
g_autoptr (TeclaModel) model = NULL;
struct xkb_keymap *xkb_keymap;
if (app->ignore_first_change) {
app->ignore_first_change = FALSE;
return;
}
xkb_keymap = tecla_keymap_observer_get_keymap (observer);
model = tecla_model_new_from_xkb_keymap (xkb_keymap);
connect_model (app->main_window,
app->main_view, model);
update_title (app->main_window, model);
g_set_object (&app->main_model, model);
}
static void
observer_keymap_group_cb (TeclaKeymapObserver *observer,
GParamSpec *pspec,
TeclaApplication *app)
{
int group;
group = tecla_keymap_observer_get_group (observer);
if (app->main_model)
tecla_model_set_group (app->main_model, group);
}
static void
tecla_application_activate (GApplication *app)
{
TeclaApplication *tecla_app = TECLA_APPLICATION (app);
if (!tecla_app->main_window) {
tecla_app->main_window =
create_window (tecla_app, &tecla_app->main_view);
tecla_app->ignore_first_change = tecla_app->layout != NULL;
tecla_app->observer = tecla_keymap_observer_new ();
g_signal_connect (tecla_app->observer, "notify::keymap",
G_CALLBACK (observer_keymap_notify_cb), app);
g_signal_connect (tecla_app->observer, "notify::group",
G_CALLBACK (observer_keymap_group_cb), app);
}
if (tecla_app->layout) {
g_clear_object (&tecla_app->main_model);
tecla_app->main_model =
tecla_model_new_from_layout_name (tecla_app->layout);
if (tecla_app->main_model) {
connect_model (tecla_app->main_window,
tecla_app->main_view,
tecla_app->main_model);
g_clear_pointer (&tecla_app->layout, g_free);
update_title (tecla_app->main_window, tecla_app->main_model);
}
}
gtk_window_present (tecla_app->main_window);
}
static void
tecla_application_class_init (TeclaApplicationClass *klass)
{
GApplicationClass *application_class = G_APPLICATION_CLASS (klass);
application_class->command_line = tecla_application_command_line;
application_class->activate = tecla_application_activate;
application_class->handle_local_options = tecla_application_handle_local_options;
}
static void
tecla_application_init (TeclaApplication *app)
{
g_application_add_main_option_entries (G_APPLICATION (app), all_options);
}
GApplication *
tecla_application_new (void)
{
return g_object_new (TECLA_TYPE_APPLICATION,
"application-id", "org.gnome.Tecla",
"flags", G_APPLICATION_HANDLES_COMMAND_LINE,
NULL);
}
07070100000043000081A400000000000000000000000165F6170D00000413000000000000000000000000000000000000002300000000tecla-46.0/src/tecla-application.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#pragma once
#define TECLA_TYPE_APPLICATION (tecla_application_get_type ())
G_DECLARE_FINAL_TYPE (TeclaApplication, tecla_application,
TECLA, APPLICATION,
GtkApplication)
GApplication * tecla_application_new (void);
07070100000044000081A400000000000000000000000165F6170D000015BC000000000000000000000000000000000000001B00000000tecla-46.0/src/tecla-key.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "tecla-key.h"
#include <math.h>
struct _TeclaKey
{
GtkWidget parent_class;
gchar *name;
gchar *label;
};
enum
{
PROP_0,
PROP_NAME,
PROP_LABEL,
N_PROPS,
};
static GParamSpec *props[N_PROPS] = { 0, };
enum
{
ACTIVATED,
N_SIGNALS,
};
static guint signals[N_SIGNALS] = { 0, };
G_DEFINE_TYPE (TeclaKey, tecla_key, GTK_TYPE_WIDGET)
static void
tecla_key_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
TeclaKey *key = TECLA_KEY (object);
switch (prop_id) {
case PROP_NAME:
g_value_set_string (value, key->name);
break;
case PROP_LABEL:
g_value_set_string (value, key->label);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
tecla_key_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
TeclaKey *key = TECLA_KEY (object);
switch (prop_id) {
case PROP_NAME:
key->name = g_value_dup_string (value);
break;
case PROP_LABEL:
tecla_key_set_label (TECLA_KEY (object),
g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
tecla_key_finalize (GObject *object)
{
TeclaKey *key = TECLA_KEY (object);
g_free (key->name);
g_free (key->label);
G_OBJECT_CLASS (tecla_key_parent_class)->finalize (object);
}
static void
tecla_key_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
TeclaKey *key = TECLA_KEY (widget);
PangoLayout *layout;
PangoRectangle rect;
GdkRGBA color;
int width, height, x, y;
float scale;
layout = gtk_widget_create_pango_layout (widget, key->label);
gtk_widget_get_color (widget, &color);
width = gtk_widget_get_width (widget);
height = gtk_widget_get_height (widget);
pango_layout_get_pixel_extents (layout, NULL, &rect);
scale = MIN ((float) height / rect.height * 0.75, 3);
/* Snap scale to 1/4ths of logical pixels */
scale = roundf (scale * 4.0) / 4.0;
/* Ensure pixel exactness when placing the layout
* centered and scaled on the widget, instead
* of translate/scale/translate.
*/
x = (width / 2) - ((rect.width / 2) * scale);
y = (height / 2) - ((rect.height / 2) * scale);
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y));
gtk_snapshot_scale (snapshot, scale, scale);
gtk_snapshot_append_layout (snapshot,
layout,
&color);
}
static void
tecla_key_class_init (TeclaKeyClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkCssProvider *css_provider;
object_class->set_property = tecla_key_set_property;
object_class->get_property = tecla_key_get_property;
object_class->finalize = tecla_key_finalize;
widget_class->snapshot = tecla_key_snapshot;
signals[ACTIVATED] =
g_signal_new ("activated",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
props[PROP_NAME] =
g_param_spec_string ("name",
"name",
"name",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
props[PROP_LABEL] =
g_param_spec_string ("label",
"label",
"label",
NULL,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, props);
css_provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (css_provider,
"/org/gnome/tecla/tecla-key.css");
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
GTK_STYLE_PROVIDER (css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
gtk_widget_class_set_css_name (widget_class, "button");
}
static void
click_release_cb (GtkGestureClick *gesture,
int n_press,
double x,
double y,
TeclaKey *key)
{
g_signal_emit (key, signals[ACTIVATED], 0);
}
static void
tecla_key_init (TeclaKey *key)
{
GtkGesture *gesture;
gesture = gtk_gesture_click_new ();
g_signal_connect (gesture, "released",
G_CALLBACK (click_release_cb), key);
gtk_widget_add_controller (GTK_WIDGET (key),
GTK_EVENT_CONTROLLER (gesture));
gtk_widget_add_css_class (GTK_WIDGET (key), "opaque");
}
GtkWidget *
tecla_key_new (const gchar *name)
{
return g_object_new (TECLA_TYPE_KEY,
"name", name,
NULL);
}
void
tecla_key_set_label (TeclaKey *key,
const gchar *label)
{
if (g_strcmp0 (label, key->label) == 0)
return;
g_free (key->label);
key->label = g_strdup (label);
gtk_widget_queue_draw (GTK_WIDGET (key));
}
const gchar *
tecla_key_get_name (TeclaKey *key)
{
return key->name;
}
07070100000045000081A400000000000000000000000165F6170D0000008F000000000000000000000000000000000000001D00000000tecla-46.0/src/tecla-key.cssbutton.tecla-key {
font-weight: 400;
}
button.tecla-key:selected {
background-color: @accent_bg_color;
color: @accent_fg_color;
}
07070100000046000081A400000000000000000000000165F6170D00000452000000000000000000000000000000000000001B00000000tecla-46.0/src/tecla-key.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#pragma once
#define TECLA_TYPE_KEY (tecla_key_get_type ())
G_DECLARE_FINAL_TYPE (TeclaKey, tecla_key, TECLA, KEY, GtkWidget)
GtkWidget * tecla_key_new (const gchar *name);
void tecla_key_set_label (TeclaKey *key,
const gchar *label);
const gchar * tecla_key_get_name (TeclaKey *key);
07070100000047000081A400000000000000000000000165F6170D00001BA9000000000000000000000000000000000000002700000000tecla-46.0/src/tecla-keymap-observer.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "tecla-keymap-observer.h"
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_WAYLAND
#include <gdk/wayland/gdkwayland.h>
#include <wayland-client.h>
#endif
#include "tecla-util.h"
struct _TeclaKeymapObserver
{
GObject parent_instance;
#ifdef GDK_WINDOWING_WAYLAND
uint32_t seat_id;
struct wl_registry *wl_registry;
struct wl_seat *wl_seat;
struct wl_keyboard *wl_keyboard;
#endif
struct xkb_keymap *xkb_keymap;
uint32_t group;
};
enum
{
PROP_0,
PROP_KEYMAP,
PROP_GROUP,
N_PROPS,
};
static GParamSpec *props[N_PROPS] = { 0, };
G_DEFINE_TYPE (TeclaKeymapObserver, tecla_keymap_observer, G_TYPE_OBJECT)
#ifdef GDK_WINDOWING_WAYLAND
static void
dummy (void)
{
}
static void
keyboard_keymap (void *data,
struct wl_keyboard *wl_keyboard,
uint32_t format,
int32_t fd,
uint32_t size)
{
TeclaKeymapObserver *observer = data;
g_autoptr (GMappedFile) mapped_file = NULL;
struct xkb_context *xkb_context;
mapped_file = g_mapped_file_new_from_fd (fd, FALSE, NULL);
if (!mapped_file)
return;
if (observer->xkb_keymap)
xkb_keymap_unref (observer->xkb_keymap);
xkb_context = tecla_util_create_xkb_context ();
observer->xkb_keymap =
xkb_keymap_new_from_string (xkb_context,
g_mapped_file_get_contents (mapped_file),
format,
XKB_KEYMAP_COMPILE_NO_FLAGS);
xkb_context_unref (xkb_context);
close (fd);
g_object_notify (G_OBJECT (observer), "keymap");
}
static void
keyboard_modifiers (void *data,
struct wl_keyboard *wl_keyboard,
uint32_t serial,
uint32_t mods_depressed,
uint32_t mods_latched,
uint32_t mods_locked,
uint32_t group)
{
TeclaKeymapObserver *observer = data;
if (observer->group == group)
return;
observer->group = group;
g_object_notify (G_OBJECT (observer), "group");
}
static struct wl_keyboard_listener keyboard_listener = {
keyboard_keymap,
(void (*) (void*, struct wl_keyboard*, uint32_t, struct wl_surface*, struct wl_array*)) dummy,
(void (*) (void*, struct wl_keyboard*, uint32_t, struct wl_surface*)) dummy,
(void (*) (void*, struct wl_keyboard*, uint32_t, uint32_t, uint32_t, uint32_t)) dummy,
keyboard_modifiers,
(void (*)(void *, struct wl_keyboard *, int32_t, int32_t)) dummy,
};
static void
seat_capabilities (void *data,
struct wl_seat *wl_seat,
uint32_t capabilities)
{
TeclaKeymapObserver *observer = data;
if (!observer->wl_keyboard &&
(capabilities & WL_SEAT_CAPABILITY_KEYBOARD) != 0) {
observer->wl_keyboard = wl_seat_get_keyboard (wl_seat);
wl_keyboard_add_listener (observer->wl_keyboard, &keyboard_listener, observer);
} else if (observer->wl_keyboard &&
(capabilities & WL_SEAT_CAPABILITY_KEYBOARD) == 0) {
g_clear_pointer (&observer->wl_keyboard, wl_keyboard_destroy);
}
}
static struct wl_seat_listener seat_listener = {
seat_capabilities,
(void (*)(void *, struct wl_seat *, const char *)) dummy,
};
static void
registry_global (void *data,
struct wl_registry *wl_registry,
uint32_t name,
const char *interface,
uint32_t version)
{
TeclaKeymapObserver *observer = data;
if (strcmp (interface, "wl_seat") != 0)
return;
observer->wl_seat =
wl_registry_bind (wl_registry,
name, &wl_seat_interface,
1);
wl_seat_add_listener (observer->wl_seat, &seat_listener, observer);
}
static void
registry_global_remove (void *data,
struct wl_registry *wl_registry,
uint32_t name)
{
TeclaKeymapObserver *observer = data;
if (name != observer->seat_id)
return;
g_clear_pointer (&observer->wl_keyboard, wl_keyboard_destroy);
g_clear_pointer (&observer->wl_seat, wl_seat_destroy);
}
static struct wl_registry_listener registry_listener = {
registry_global,
registry_global_remove,
};
#endif
static void
tecla_keymap_observer_finalize (GObject *object)
{
TeclaKeymapObserver *observer = TECLA_KEYMAP_OBSERVER (object);
#ifdef GDK_WINDOWING_WAYLAND
g_clear_pointer (&observer->wl_keyboard, wl_keyboard_destroy);
g_clear_pointer (&observer->wl_seat, wl_seat_destroy);
g_clear_pointer (&observer->wl_registry, wl_registry_destroy);
#endif
g_clear_pointer (&observer->xkb_keymap, xkb_keymap_unref);
G_OBJECT_CLASS (tecla_keymap_observer_parent_class)->finalize (object);
}
static void
tecla_keymap_observer_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
TeclaKeymapObserver *observer = TECLA_KEYMAP_OBSERVER (object);
switch (prop_id) {
case PROP_KEYMAP:
g_value_set_pointer (value, observer->xkb_keymap);
break;
case PROP_GROUP:
g_value_set_int (value, observer->group);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
tecla_keymap_observer_class_init (TeclaKeymapObserverClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = tecla_keymap_observer_finalize;
object_class->get_property = tecla_keymap_observer_get_property;
props[PROP_KEYMAP] =
g_param_spec_pointer ("keymap",
"Keymap",
"Keymap",
G_PARAM_READABLE);
props[PROP_GROUP] =
g_param_spec_int ("group",
"Group",
"Group",
0, G_MAXINT, 0,
G_PARAM_READABLE);
g_object_class_install_properties (object_class, N_PROPS, props);
}
static void
tecla_keymap_observer_init (TeclaKeymapObserver *observer)
{
GdkDisplay *display;
display = gdk_display_get_default ();
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (display)) {
struct wl_display *wl_display;
struct wl_registry *wl_registry;
wl_display = gdk_wayland_display_get_wl_display (display);
wl_registry = wl_display_get_registry (wl_display);
wl_registry_add_listener (wl_registry,
®istry_listener,
observer);
}
#endif
}
TeclaKeymapObserver *
tecla_keymap_observer_new (void)
{
return g_object_new (TECLA_TYPE_KEYMAP_OBSERVER, NULL);
}
struct xkb_keymap *
tecla_keymap_observer_get_keymap (TeclaKeymapObserver *observer)
{
return observer->xkb_keymap;
}
int
tecla_keymap_observer_get_group (TeclaKeymapObserver *observer)
{
return observer->group;
}
07070100000048000081A400000000000000000000000165F6170D000004E4000000000000000000000000000000000000002700000000tecla-46.0/src/tecla-keymap-observer.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#include <xkbcommon/xkbcommon.h>
#define TECLA_TYPE_KEYMAP_OBSERVER (tecla_keymap_observer_get_type ())
G_DECLARE_FINAL_TYPE (TeclaKeymapObserver,
tecla_keymap_observer,
TECLA, KEYMAP_OBSERVER,
GObject);
TeclaKeymapObserver * tecla_keymap_observer_new (void);
struct xkb_keymap * tecla_keymap_observer_get_keymap (TeclaKeymapObserver *observer);
int tecla_keymap_observer_get_group (TeclaKeymapObserver *observer);
07070100000049000081A400000000000000000000000165F6170D00000123000000000000000000000000000000000000001E00000000tecla-46.0/src/tecla-layout.htypedef struct _TeclaLayout TeclaLayout;
typedef struct _TeclaLayoutKey TeclaLayoutKey;
struct _TeclaLayoutKey
{
const gchar *name;
double width;
double height;
};
struct _TeclaLayoutRow
{
struct _TeclaLayoutKey keys[32];
};
struct _TeclaLayout
{
struct _TeclaLayoutRow rows[12];
};
0707010000004A000081A400000000000000000000000165F6170D00001C4F000000000000000000000000000000000000001D00000000tecla-46.0/src/tecla-model.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "tecla-model.h"
#include "tecla-util.h"
struct _TeclaModel
{
GObject parent_instance;
struct xkb_keymap *xkb_keymap;
int group;
};
enum
{
PROP_0,
PROP_NAME,
N_PROPS
};
static GParamSpec *props[N_PROPS] = { 0, };
enum
{
CHANGED,
N_SIGNALS,
};
static guint signals[N_SIGNALS] = { 0, };
G_DEFINE_TYPE (TeclaModel, tecla_model, G_TYPE_OBJECT)
static void
tecla_model_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
TeclaModel *model = TECLA_MODEL (object);
switch (prop_id) {
case PROP_NAME:
g_value_set_string (value, tecla_model_get_name (model));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
tecla_model_class_init (TeclaModelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = tecla_model_get_property;
signals[CHANGED] =
g_signal_new ("changed",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
props[PROP_NAME] =
g_param_spec_string ("name",
"Name",
"Name",
NULL,
G_PARAM_READABLE);
g_object_class_install_properties (object_class, N_PROPS, props);
}
static void
tecla_model_init (TeclaModel *model)
{
}
static gchar *
get_key_label (xkb_keysym_t key)
{
const gchar *label = NULL;
gchar buf[5];
gunichar uc;
switch (key) {
case GDK_KEY_Mode_switch:
case GDK_KEY_ISO_Level3_Shift:
label = "";
break;
case GDK_KEY_BackSpace:
label = "";
break;
case GDK_KEY_space:
label = "";
break;
case GDK_KEY_dead_grave:
label = "ˋ";
break;
case GDK_KEY_dead_abovecomma:
label = "̓";
break;
case GDK_KEY_dead_abovereversedcomma:
label = "̔";
break;
case GDK_KEY_dead_acute:
label = "ˊ";
break;
case GDK_KEY_dead_circumflex:
label = "ˆ";
break;
case GDK_KEY_dead_tilde:
label = "~";
break;
case GDK_KEY_dead_macron:
label = "ˉ";
break;
case GDK_KEY_dead_breve:
label = "˘";
break;
case GDK_KEY_dead_abovedot:
label = "˙";
break;
case GDK_KEY_dead_diaeresis:
label = "¨";
break;
case GDK_KEY_dead_abovering:
label = "˚";
break;
case GDK_KEY_dead_doubleacute:
label = "˝";
break;
case GDK_KEY_dead_caron:
label = "ˇ";
break;
case GDK_KEY_dead_cedilla:
label = "¸";
break;
case GDK_KEY_dead_ogonek:
label = "˛";
break;
case GDK_KEY_dead_belowdot:
label = " ̣";
break;
case GDK_KEY_dead_hook:
label = "̉";
break;
case GDK_KEY_dead_horn:
label = "̛";
break;
case GDK_KEY_dead_stroke:
label = "̵";
break;
case GDK_KEY_horizconnector:
label = "";
break;
case GDK_KEY_Multi_key:
label = "";
break;
case GDK_KEY_Return:
label = "";
break;
case GDK_KEY_Shift_L:
case GDK_KEY_Shift_R:
label = "";
break;
case GDK_KEY_Caps_Lock:
label = "";
break;
case GDK_KEY_Tab:
case GDK_KEY_ISO_Left_Tab:
label = "";
break;
case GDK_KEY_Alt_L:
case GDK_KEY_Alt_R:
label = "";
break;
case GDK_KEY_Super_L:
case GDK_KEY_Super_R:
label = "";
break;
case GDK_KEY_Control_L:
case GDK_KEY_Control_R:
label = "";
break;
case GDK_KEY_Meta_L:
case GDK_KEY_Meta_R:
label = "";
break;
case GDK_KEY_Menu:
label = "";
break;
case GDK_KEY_VoidSymbol:
label = "";
break;
case GDK_KEY_nobreakspace:
label = "";
break;
default:
uc = gdk_keyval_to_unicode (key);
if (uc != 0 && g_unichar_isgraph (uc)) {
buf[g_unichar_to_utf8 (uc, buf)] = '\0';
return g_strdup (buf);
} else {
const gchar *name = gdk_keyval_name (key);
if (name) {
g_autofree gchar *fixed_name = NULL;
gchar *p;
fixed_name = g_strdup (name);
/* Replace underscores with spaces */
for (p = fixed_name; *p; p++)
if (*p == '_')
*p = ' ';
/* Get rid of scary ISO_ prefix */
if (g_strstr_len (fixed_name, -1, "ISO "))
return g_strdup (fixed_name + 4);
else
return g_strdup (fixed_name);
} else {
return g_strdup ("");
}
}
break;
}
return g_strdup (label);
}
TeclaModel *
tecla_model_new_from_xkb_keymap (struct xkb_keymap *xkb_keymap)
{
TeclaModel *model;
model = g_object_new (TECLA_TYPE_MODEL, NULL);
model->xkb_keymap = xkb_keymap_ref (xkb_keymap);
return model;
}
TeclaModel *
tecla_model_new_from_layout_name (const gchar *name)
{
TeclaModel *model = NULL;
struct xkb_context *xkb_context;
struct xkb_keymap *xkb_keymap;
g_autofree gchar *layout = NULL;
const gchar *variant = NULL, *sep;
struct xkb_rule_names rule_names = {
.rules = "evdev",
.model = "pc105",
};
sep = strchr (name, '+');
if (sep) {
variant = sep + 1;
layout = g_strndup (name, sep - name);
} else {
layout = g_strdup (name);
}
rule_names.layout = layout;
rule_names.variant = variant;
xkb_context = tecla_util_create_xkb_context ();
xkb_keymap = xkb_keymap_new_from_names (xkb_context, &rule_names, 0);
xkb_context_unref (xkb_context);
if (xkb_keymap) {
model = tecla_model_new_from_xkb_keymap (xkb_keymap);
xkb_keymap_unref (xkb_keymap);
}
return model;
}
const gchar *
tecla_model_get_keycode_key (TeclaModel *model,
xkb_keycode_t keycode)
{
return xkb_keymap_key_get_name (model->xkb_keymap, keycode);
}
xkb_keycode_t
tecla_model_get_key_keycode (TeclaModel *model,
const gchar *key)
{
return xkb_keymap_key_by_name (model->xkb_keymap, key);
}
gchar *
tecla_model_get_key_label (TeclaModel *model,
int level,
const gchar *key)
{
xkb_keycode_t keycode;
guint keysym;
keycode = xkb_keymap_key_by_name (model->xkb_keymap, key);
keysym = tecla_model_get_keyval (model, level, keycode);
if (keysym == 0)
return NULL;
return get_key_label (keysym);
}
guint
tecla_model_get_keyval (TeclaModel *model,
int level,
xkb_keycode_t keycode)
{
const xkb_keysym_t *syms;
int n_syms;
n_syms = xkb_keymap_key_get_syms_by_level (model->xkb_keymap,
keycode,
model->group,
level,
&syms);
if (n_syms == 0)
return 0;
return syms[0];
}
const gchar *
tecla_model_get_name (TeclaModel *model)
{
return xkb_keymap_layout_get_name (model->xkb_keymap, model->group);
}
void
tecla_model_set_group (TeclaModel *model,
int group)
{
model->group = group;
g_object_notify (G_OBJECT (model), "name");
g_signal_emit (model, signals[CHANGED], 0);
}
0707010000004B000081A400000000000000000000000165F6170D0000068B000000000000000000000000000000000000001D00000000tecla-46.0/src/tecla-model.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#include <xkbcommon/xkbcommon.h>
#pragma once
#define TECLA_TYPE_MODEL (tecla_model_get_type ())
G_DECLARE_FINAL_TYPE (TeclaModel, tecla_model, TECLA, MODEL, GObject)
TeclaModel * tecla_model_new_from_xkb_keymap (struct xkb_keymap *xkb_keymap);
TeclaModel * tecla_model_new_from_layout_name (const gchar *layout);
const gchar * tecla_model_get_keycode_key (TeclaModel *model,
xkb_keycode_t keycode);
xkb_keycode_t tecla_model_get_key_keycode (TeclaModel *model,
const gchar *key);
gchar * tecla_model_get_key_label (TeclaModel *model,
int level,
const gchar *key);
guint tecla_model_get_keyval (TeclaModel *model,
int level,
xkb_keycode_t keycode);
const gchar * tecla_model_get_name (TeclaModel *model);
void tecla_model_set_group (TeclaModel *model,
int group);
0707010000004C000081A400000000000000000000000165F6170D000005F6000000000000000000000000000000000000001C00000000tecla-46.0/src/tecla-util.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "tecla-util.h"
#include <gtk/gtk.h>
struct xkb_context *
tecla_util_create_xkb_context (void)
{
struct xkb_context *ctx;
char xdg[1024] = {0};
const char *env;
/*
* We can only append search paths in libxkbcommon, so we start with an
* empty set, then add the XDG dir, then add the default search paths.
*/
ctx = xkb_context_new (XKB_CONTEXT_NO_DEFAULT_INCLUDES);
if ((env = g_getenv ("XDG_CONFIG_HOME")))
{
g_snprintf (xdg, sizeof xdg, "%s/xkb", env);
}
else if ((env = g_getenv ("HOME")))
{
g_snprintf (xdg, sizeof xdg, "%s/.config/xkb", env);
}
if (env)
xkb_context_include_path_append (ctx, xdg);
xkb_context_include_path_append_default (ctx);
return ctx;
}
0707010000004D000081A400000000000000000000000165F6170D0000037E000000000000000000000000000000000000001C00000000tecla-46.0/src/tecla-util.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <xkbcommon/xkbcommon.h>
#pragma once
struct xkb_context * tecla_util_create_xkb_context (void);
0707010000004E000081A400000000000000000000000165F6170D00002FEA000000000000000000000000000000000000001C00000000tecla-46.0/src/tecla-view.c/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#include <xkbcommon/xkbcommon.h>
#include "tecla-view.h"
#include "pc105.h"
#include "tecla-key.h"
enum
{
LEVEL2_PRESSED = 1 << 0,
LEVEL3_PRESSED = 1 << 1,
};
struct _TeclaView
{
GtkWidget parent_instance;
GtkWidget *grid;
GHashTable *keys_by_name;
TeclaModel *model;
guint model_changed_id;
GList *level2_keys;
GList *level3_keys;
guint toggled_levels;
int level;
};
G_DEFINE_TYPE (TeclaView, tecla_view, GTK_TYPE_WIDGET)
enum
{
PROP_0,
PROP_MODEL,
PROP_LEVEL,
PROP_NUM_LEVELS,
N_PROPS,
};
static GParamSpec *props[N_PROPS];
enum
{
KEY_ACTIVATED,
N_SIGNALS,
};
static guint signals[N_SIGNALS] = { 0, };
static void update_view (TeclaView *view);
static void
tecla_view_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
TeclaView *view = TECLA_VIEW (object);
switch (prop_id) {
case PROP_MODEL:
tecla_view_set_model (view, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
tecla_view_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
TeclaView *view = TECLA_VIEW (object);
switch (prop_id) {
case PROP_MODEL:
g_value_set_object (value, view->model);
break;
case PROP_LEVEL:
g_value_set_int (value, view->level);
break;
case PROP_NUM_LEVELS:
g_value_set_int (value, tecla_view_get_num_levels (view));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
tecla_view_finalize (GObject *object)
{
TeclaView *view = TECLA_VIEW (object);
g_hash_table_unref (view->keys_by_name);
g_clear_list (&view->level2_keys, NULL);
g_clear_list (&view->level3_keys, NULL);
gtk_widget_unparent (gtk_widget_get_first_child (GTK_WIDGET (view)));
G_OBJECT_CLASS (tecla_view_parent_class)->finalize (object);
}
static void
update_toggled_key_list (TeclaView *view,
GList *keys,
guint flag)
{
GList *l;
for (l = keys; l; l = l->next) {
GtkWidget *key;
key = g_hash_table_lookup (view->keys_by_name, l->data);
if ((view->toggled_levels & flag) != 0)
gtk_widget_set_state_flags (key, GTK_STATE_FLAG_SELECTED, FALSE);
else
gtk_widget_unset_state_flags (key, GTK_STATE_FLAG_SELECTED);
}
}
static void
update_toggled_keys (TeclaView *view,
const gchar *pressed_key_name)
{
const gchar *name = pressed_key_name;
if (g_list_find_custom (view->level2_keys, name, (GCompareFunc) g_strcmp0)) {
if ((view->toggled_levels & LEVEL2_PRESSED) != 0)
view->toggled_levels &= ~LEVEL2_PRESSED;
else
view->toggled_levels |= LEVEL2_PRESSED;
} else if (g_list_find_custom (view->level3_keys, name, (GCompareFunc) g_strcmp0)) {
if ((view->toggled_levels & LEVEL3_PRESSED) != 0)
view->toggled_levels &= ~LEVEL3_PRESSED;
else
view->toggled_levels |= LEVEL3_PRESSED;
}
update_toggled_key_list (view, view->level2_keys, LEVEL2_PRESSED);
update_toggled_key_list (view, view->level3_keys, LEVEL3_PRESSED);
}
static void
update_level (TeclaView *view)
{
int level;
if (view->toggled_levels == (LEVEL2_PRESSED | LEVEL3_PRESSED))
level = 3;
else if (view->toggled_levels == LEVEL3_PRESSED)
level = 2;
else if (view->toggled_levels == LEVEL2_PRESSED)
level = 1;
else
level = 0;
if (view->level == level)
return;
view->level = level;
g_object_notify (G_OBJECT (view), "level");
update_view (view);
}
static void
bind_state (GtkWidget *w1,
GtkStateFlags old_flags,
GtkWidget *w2)
{
GtkStateFlags flags;
flags = gtk_widget_get_state_flags (w1);
if (flags != gtk_widget_get_state_flags (w2))
gtk_widget_set_state_flags (w2, flags, TRUE);
}
static void
pair_state (GtkWidget *widget,
GtkWidget *other_widget)
{
g_signal_connect (widget, "state-flags-changed",
G_CALLBACK (bind_state), other_widget);
g_signal_connect (other_widget, "state-flags-changed",
G_CALLBACK (bind_state), widget);
}
static void
key_activated_cb (TeclaKey *key,
TeclaView *view)
{
const gchar *name;
name = tecla_key_get_name (key);
g_signal_emit (view, signals[KEY_ACTIVATED], 0, name, key);
update_toggled_keys (view, name);
update_level (view);
}
static void
construct_grid (TeclaView *view)
{
gulong i, j;
int anchor = 0;
/* make sure we show the keyboard layout in RTL same as in LTR */
gtk_widget_set_direction (view->grid, GTK_TEXT_DIR_LTR);
for (i = 0; i < G_N_ELEMENTS (pc105_layout.rows); i++) {
for (j = 0; j < G_N_ELEMENTS (pc105_layout.rows[i].keys); j++) {
TeclaLayoutKey *key;
GtkWidget *button, *prev;
double width, height;
int left, top;
key = &pc105_layout.rows[i].keys[j];
if (!key->name)
break;
left = anchor;
top = key->height >= 0 ? i : i + key->height + 1;
width = MAX (key->width, 1) * 4;
height = MAX (fabs (key->height), 1);
button = tecla_key_new (key->name);
g_signal_connect (button, "activated",
G_CALLBACK (key_activated_cb), view);
gtk_widget_add_css_class (button, "tecla-key");
gtk_grid_attach (GTK_GRID (view->grid), button,
left, top,
(int) width,
(int) height);
anchor += (int) width;
prev = g_hash_table_lookup (view->keys_by_name,
key->name);
if (prev) {
pair_state (prev, button);
} else {
g_hash_table_insert (view->keys_by_name,
(gpointer) tecla_key_get_name (TECLA_KEY (button)),
button);
}
}
anchor = 0;
}
gtk_widget_set_layout_manager (GTK_WIDGET (view), gtk_bin_layout_new ());
}
static void
tecla_view_constructed (GObject *object)
{
TeclaView *view = TECLA_VIEW (object);
G_OBJECT_CLASS (tecla_view_parent_class)->constructed (object);
construct_grid (view);
}
static void
tecla_view_class_init (TeclaViewClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->set_property = tecla_view_set_property;
object_class->get_property = tecla_view_get_property;
object_class->finalize = tecla_view_finalize;
object_class->constructed = tecla_view_constructed;
signals[KEY_ACTIVATED] =
g_signal_new ("key-activated",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE,
2, G_TYPE_STRING, GTK_TYPE_WIDGET);
props[PROP_MODEL] =
g_param_spec_object ("model",
"Model",
"Model",
TECLA_TYPE_MODEL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
props[PROP_LEVEL] =
g_param_spec_int ("level",
"Level",
"Level",
0, G_MAXINT, 0,
G_PARAM_READABLE);
props[PROP_NUM_LEVELS] =
g_param_spec_int ("num-levels",
"Number of levels",
"Number of levels",
0, G_MAXINT, 0,
G_PARAM_READABLE);
g_object_class_install_properties (object_class, N_PROPS, props);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/tecla/tecla-view.ui");
gtk_widget_class_bind_template_child (widget_class, TeclaView, grid);
}
static void
key_pressed_cb (GtkEventControllerKey *controller,
guint keyval,
guint keycode,
GdkModifierType modifiers,
TeclaView *view)
{
const gchar *name;
GtkWidget *key;
if (!view->model)
return;
name = tecla_model_get_keycode_key (view->model, keycode);
key = g_hash_table_lookup (view->keys_by_name, name);
if (key)
gtk_widget_set_state_flags (key, GTK_STATE_FLAG_ACTIVE, FALSE);
update_toggled_keys (view, name);
update_level (view);
}
static void
key_released_cb (GtkEventControllerKey *controller,
guint keyval,
guint keycode,
GdkModifierType modifiers,
TeclaView *view)
{
const gchar *name;
GtkWidget *key;
if (!view->model)
return;
name = tecla_model_get_keycode_key (view->model, keycode);
key = g_hash_table_lookup (view->keys_by_name, name);
if (key)
gtk_widget_unset_state_flags (key, GTK_STATE_FLAG_ACTIVE);
g_signal_emit (view, signals[KEY_ACTIVATED], 0, name, key);
}
static void
tecla_view_init (TeclaView *view)
{
GtkEventController *controller;
gtk_widget_init_template (GTK_WIDGET (view));
view->keys_by_name = g_hash_table_new (g_str_hash, g_str_equal);
controller = gtk_event_controller_key_new ();
g_signal_connect (controller, "key-pressed",
G_CALLBACK (key_pressed_cb), view);
g_signal_connect (controller, "key-released",
G_CALLBACK (key_released_cb), view);
gtk_widget_add_controller (GTK_WIDGET (view), controller);
gtk_widget_set_focusable (GTK_WIDGET (view), TRUE);
}
static void
update_from_model_foreach (const gchar *name,
TeclaKey *key,
TeclaView *view)
{
xkb_keycode_t keycode;
g_autofree gchar *action = NULL;
guint keyval;
keycode = tecla_model_get_key_keycode (view->model, name);
keyval = tecla_model_get_keyval (view->model, 0, keycode);
if (keyval == GDK_KEY_Shift_L || keyval == GDK_KEY_Shift_R) {
if (!g_list_find_custom (view->level2_keys, name, (GCompareFunc) g_strcmp0))
view->level2_keys = g_list_prepend (view->level2_keys, (gpointer) name);
action = g_strdup ("⬆");
}
if (keyval == GDK_KEY_ISO_Level3_Shift) {
if (!g_list_find_custom (view->level3_keys, name, (GCompareFunc) g_strcmp0))
view->level3_keys = g_list_prepend (view->level3_keys, (gpointer) name);
action = g_strdup ("⎇");
}
if (!action)
action = tecla_model_get_key_label (view->model, view->level, name);
tecla_key_set_label (key, action);
}
static void
update_view (TeclaView *view)
{
g_hash_table_foreach (view->keys_by_name,
(GHFunc) update_from_model_foreach,
view);
}
GtkWidget *
tecla_view_new (void)
{
return g_object_new (TECLA_TYPE_VIEW, NULL);
}
static void
model_changed_cb (TeclaModel *model,
TeclaView *view)
{
view->toggled_levels = 0;
view->level = 0;
update_toggled_key_list (view, view->level2_keys, LEVEL2_PRESSED);
update_toggled_key_list (view, view->level3_keys, LEVEL3_PRESSED);
update_level (view);
g_clear_list (&view->level2_keys, NULL);
g_clear_list (&view->level3_keys, NULL);
update_view (view);
g_object_notify (G_OBJECT (view), "num-levels");
g_object_notify (G_OBJECT (view), "level");
}
void
tecla_view_set_model (TeclaView *view,
TeclaModel *model)
{
if (view->model == model)
return;
if (view->model_changed_id) {
g_signal_handler_disconnect (view->model, view->model_changed_id);
view->model_changed_id = 0;
}
g_set_object (&view->model, model);
if (view->model) {
view->model_changed_id =
g_signal_connect (view->model, "changed",
G_CALLBACK (model_changed_cb), view);
}
model_changed_cb (model, view);
}
int
tecla_view_get_current_level (TeclaView *view)
{
return view->level;
}
void
tecla_view_set_current_level (TeclaView *view,
int level)
{
guint toggled_levels = 0;
if (level == 3 || level == 2)
toggled_levels |= LEVEL3_PRESSED;
if (level == 3 || level == 1)
toggled_levels |= LEVEL2_PRESSED;
view->toggled_levels = toggled_levels;
update_toggled_key_list (view, view->level2_keys, LEVEL2_PRESSED);
update_toggled_key_list (view, view->level3_keys, LEVEL3_PRESSED);
update_level (view);
}
int
tecla_view_get_num_levels (TeclaView *view)
{
if (view->level2_keys && view->level3_keys)
return 4;
else if (view->level3_keys || view->level2_keys)
return 2;
else
return 1;
}
0707010000004F000081A400000000000000000000000165F6170D000004F9000000000000000000000000000000000000001C00000000tecla-46.0/src/tecla-view.h/* Copyright (C) 2023 Red Hat, Inc.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <gtk/gtk.h>
#include "tecla-model.h"
#pragma once
#define TECLA_TYPE_VIEW (tecla_view_get_type ())
G_DECLARE_FINAL_TYPE (TeclaView, tecla_view,
TECLA, VIEW,
GtkWidget)
GtkWidget * tecla_view_new (void);
void tecla_view_set_model (TeclaView *view,
TeclaModel *model);
int tecla_view_get_current_level (TeclaView *view);
void tecla_view_set_current_level (TeclaView *view,
int level);
int tecla_view_get_num_levels (TeclaView *view);
07070100000050000081A400000000000000000000000165F6170D00000201000000000000000000000000000000000000001D00000000tecla-46.0/src/tecla-view.ui<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="TeclaView" parent="GtkWidget">
<child>
<object class="GtkAspectFrame">
<child>
<object class="GtkGrid" id="grid">
<property name="column-homogeneous">true</property>
<property name="column-spacing">6</property>
<property name="row-homogeneous">true</property>
<property name="row-spacing">6</property>
</object>
</child>
</object>
</child>
</template>
</interface>
07070100000051000081A400000000000000000000000165F6170D0000084C000000000000000000000000000000000000001F00000000tecla-46.0/src/tecla-window.ui<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"/>
<object class="AdwWindow" id="window">
<child>
<object class="GtkShortcutController">
<property name="scope">managed</property>
<child>
<object class="GtkShortcut">
<property name="trigger">Escape</property>
<property name="action">action(window.close)</property>
</object>
</child>
<child>
<object class="GtkShortcut">
<property name="trigger"><ctrl>Q</property>
<property name="action">action(window.close)</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwToolbarView">
<child type="top">
<object class="AdwHeaderBar"/>
</child>
<property name="content">
<object class="GtkAspectFrame">
<child>
<object class="GtkBox">
<child>
<object class="TeclaView" id="view">
<property name="vexpand">true</property>
</object>
</child>
<child>
<object class="GtkBox" id="levels">
<property name="halign">center</property>
<property name="spacing">6</property>
<property name="orientation">horizontal</property>
</object>
</child>
<property name="orientation">vertical</property>
<property name="spacing">18</property>
<property name="vexpand">true</property>
</object>
</child>
<property name="margin-start">18</property>
<property name="margin-end">18</property>
<property name="margin-top">6</property>
<property name="margin-bottom">18</property>
</object>
</property>
</object>
</child>
<property name="default-width">800</property>
<property name="default-height">400</property>
</object>
</interface>
07070100000052000081A400000000000000000000000165F6170D00000113000000000000000000000000000000000000002300000000tecla-46.0/src/tecla.gresource.xml<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/tecla/">
<file preprocess="xml-stripblanks">tecla-view.ui</file>
<file preprocess="xml-stripblanks">tecla-window.ui</file>
<file>tecla-key.css</file>
</gresource>
</gresources>
07070100000053000081A400000000000000000000000165F6170D000003F0000000000000000000000000000000000000001600000000tecla-46.0/tecla.doap<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:gnome="http://api.gnome.org/doap-extensions#"
xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">Tecla</name>
<shortdesc xml:lang="en">A keymap viewer</shortdesc>
<description>Tecla is a keyboard layout viewer</description>
<homepage rdf:resource="https://gitlab.gnome.org/GNOME/tecla" />
<download-page rdf:resource="http://download.gnome.org/sources/tecla/" />
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/tecla/issues" />
<category rdf:resource="http://api.gnome.org/doap-extensions#apps" />
<programming-language>C</programming-language>
<maintainer>
<foaf:Person>
<foaf:name>Carlos Garnacho</foaf:name>
<foaf:mbox rdf:resource="mailto:carlosg@gnome.org" />
<gnome:userid>carlosg</gnome:userid>
</foaf:Person>
</maintainer>
</Project>
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!448 blocks