pax_global_header00006660000000000000000000000064150722627000014513gustar00rootroot0000000000000052 comment=44fbb820f8b7e83534df4b8b687528e58a1982a2 awf-extended-3.2.0/000077500000000000000000000000001507226270000140705ustar00rootroot00000000000000awf-extended-3.2.0/.gitignore000066400000000000000000000002441507226270000160600ustar00rootroot00000000000000# autoreconf -if /build-aux/ /configure /aclocal.m4 /autom4te.cache/ Makefile.in # ./configure /config.log /config.status Makefile .deps/ # make /src/awf-gtk? *.oawf-extended-3.2.0/LICENSE000066400000000000000000001045131507226270000151010ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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. But first, please read . awf-extended-3.2.0/Makefile.am000066400000000000000000000000421507226270000161200ustar00rootroot00000000000000MAKEFLAGS = --silent SUBDIRS = srcawf-extended-3.2.0/README.md000066400000000000000000000170101507226270000153460ustar00rootroot00000000000000# AWF - A widget factory (extended) A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. ## Screenshots GTK 2.24 (Pango 1.56)\ [Preview with GTK 2 - Main window](images/gtk2.png?raw=true) [Preview with GTK 2 - Main window with menu](images/gtk2-menu.png?raw=true) [Preview with GTK 2 - RTL Main window with menu](images/gtk2-rtl-menu.png?raw=true) [Preview with GTK 2 - RTL Main window](images/gtk2-rtl.png?raw=true) GTK 3.24-classic (Pango 1.56)\ [Preview with GTK 3 - Main window](images/gtk3.png?raw=true) [Preview with GTK 3 - Main window with menu](images/gtk3-menu.png?raw=true) [Preview with GTK 3 - CSD main window](images/gtk3-csd.png?raw=true) [Preview with GTK 3 - Main window with plus button](images/gtk3-plus.png?raw=true) GTK 4.12..4.20-classic (Pango 1.56)\ [Preview with GTK 4 - Main window](images/gtk4.png?raw=true) [Preview with GTK 4 - Main window with menu](images/gtk4-menu.png?raw=true) GTK 5.0 (Pango 1.56)\ _GtkWindow will be probably deprecated... lol_ Theme used for the screenshots is available [here](https://github.com/luigifab/human-theme). ## Tricks * Some options are available from command line (read `-h`, `--help` or man page). * Options menu allow to display some standard dialogs. * System and user themes menu allow to set current theme. * Text direction menu allow to change text direction (LTR/RTL). * Info toolbar button allow to display a notification. * Plus/minus toolbar buttons allow to show or hide: notebooks arrows, marks on progress bars and scales... * Refresh toolbar button and refresh menu item allow to reload the current theme (like `SIGHUP` signal). * Menu keyboard shortcuts can be updated on hover (GTK 2.24 and 3.x, *gtk-can-change-accels*). * Notebooks tabs are scrollable (GTK 3.x and 4.x, *gtk-scroll-tabs*, like with GTK 2.24). * With Ubuntu, menu keyboard shortcuts can also be updated on hover with: `UBUNTU_MENUPROXY= awf-gtk3` * Use `GTK_CSD=1` to enable CSD window * Use `GTK_OVERLAY_SCROLLING=0` to set scrollbars always visible ## Installation It require **GTK 2.24** or **GTK 3.0+** *(including 3.24)* or **GTK 4.0+** *(including 4.20)*, *GLIB 2.28+*, *libnotify 0.7+*. #### Installation for Debian, Devuan, Ubuntu, Trisquel, Linux Mint, MX Linux * `sudo apt install awf-gtk2 awf-gtk3 awf-gtk4` #### Installation for Fedora, OpenMandriva * `sudo dnf install awf-gtk2 awf-gtk3 awf-gtk4` #### Installation for openSUSE * `sudo zypper install awf-gtk2 awf-gtk3 awf-gtk4` #### Installation for Mageia * `sudo urpmi awf-extended-gtk2 awf-extended-gtk3 awf-extended-gtk4` #### Building from source * To compile with all available major versions of GTK run: `build.sh` * To compile and create DEB packages for Debian & Ubuntu run: `scripts/debian[-gtkx]/deb.sh` * To compile and create RPM packages for Fedora run: `scripts/fedora/rpm-gtkx.sh` * To compile and create RPM packages for Mageia run: `scripts/mageia/rpm-gtkx.sh` * To compile and create RPM packages for openSUSE run: `scripts/opensuse/rpm-gtkx.sh` * To compile and create RPM packages for OpenMandriva run: `scripts/openmandriva/rpm-gtkx.sh` #### Alternative installation for Debian, Devuan, Ubuntu, Trisquel, Linux Mint, MX Linux ```bash # PPA: https://launchpad.net/~luigifab/+archive/ubuntu/packages # from Debian 12 you can use noble/plucky/questing (unix.stackexchange.com/a/669008/364800) # Debian: focal for 10/buster, jammy for 11/bullseye, noble for 12/bookworm, # plucky for 13/trixie, questing for 14/forky and 15/duke # Devuan: focal for 3/beowulf, jammy for 4/chimaera, noble for 5/daedalus, # plucky for 6/excalibur, questing for 7/freia and 8/gryphon and ceres # Linux Mint: focal for 20.x and 4/debbie, jammy for 21.x and 5/elsie, # noble for 22.x and 6/faye, plucky for 7/gigi # MX Linux: focal for 19.x, jammy for 21.x, noble for 23.x, questing for 25.x # Trisquel: focal for nabia, jammy for aramo # Kali Linux: questing sudo add-apt-repository ppa:luigifab/packages sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 # or sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FFE5BD439356DF7D echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 # or sudo wget -O /etc/apt/trusted.gpg.d/luigifab.gpg https://www.luigifab.fr/apt.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 # or wget -qO - https://www.luigifab.fr/apt.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/luigifab.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 # sha256sum /etc/apt/trusted.gpg.d/luigifab.gpg 578c89a677048e38007462d543686b53587efba9f93814601169253c45ff9213 # apt-key list /etc/apt/trusted.gpg.d/luigifab.gpg pub rsa4096 2020-10-31 [SC] 458B 0C46 D024 FD8C B8BC 99CD FFE5 BD43 9356 DF7D ``` ## Known issues #### GTK 4 If font rendering is bad, try to add in `~/.config/gtk-4.0/settings.ini`: ``` [Settings] gtk-font-rendering=manual gtk-hint-font-metrics=1 gtk-xft-hintstyle=hintfull gtk-xft-antialias=0 gtk-xft-hinting=1 ``` #### GTK 5 From [migrating guide](https://docs.gtk.org/gtk4/migrating-4to5.html#non-standard-css-extensions-are-going-away): _non-standard CSS extensions are going away [...] @define-color should be replaced [...] the color functions can all be replaced by combinations of calc() and color-mix()_. I think it would be nice to create a patch to fix this GTK regression. ## Customize Use `~/.config/gtk-3.0/gtk.css` and `~/.config/gtk-4.0/gtk.css` files. ## Dev To reload theme when source files change, you can use [Entr](https://github.com/eradman/entr) with the `SIGHUP` signal: ``` sudo apt install entr or sudo dnf install entr or sudo zypper install entr or ... ls ~/.themes/yourtheme/gtk-3*/*.css | entr killall -s SIGHUP awf-gtk3 ``` ## Copyright - Current version: 3.2.0 (10/10/2025) - Compatibility: GTK 2.24 / 3.0..3.24 / 4.0..4.20 - Links: [luigifab.fr](https://www.luigifab.fr/gtk/awf-extended) - [github.com](https://github.com/luigifab/awf-extended) - [ppa/dpa](https://launchpad.net/~luigifab/+archive/ubuntu/packages) This program is provided under the terms of the **GNU GPLv3+** license.\ If you like, take some of your time to improve the translations, go to https://bit.ly/2HyCCEc. ## Packages in official distros repositories [![Packages status](https://repology.org/badge/vertical-allrepos/awf-widget-factory.svg?header=awf-gtk&minversion=2.0.0&columns=3)](https://repology.org/project/awf-widget-factory/versions) ## Credits Forked from [awf](https://github.com/valr/awf) by Valère Monseur (valr). awf-extended-3.2.0/build.sh000066400000000000000000000020611507226270000155220ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev libgtk-5-dev # Fedora: sudo dnf install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils # openSUSE: sudo zypper install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils # # supported options for build.sh and configure.ac # --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 # OR # --enable-only-gtk2 # OR # --enable-only-gtk3 # OR # --enable-only-gtk4 # OR # --enable-only-gtk5 # remove old builds rm -f awf-gtk2 awf-gtk3 awf-gtk4 awf-gtk5 # copy to a tmp directory mkdir builder builder/src cp /usr/share/common-licenses/GPL*3 builder/LICENSE cp configure.ac builder/ cp Makefile.am builder/ cp src/Makefile.am builder/src/ cp src/awf-gtk*.c builder/src/ # build cd builder/ autoreconf -fi ./configure "$@" make -s # final cp src/awf-gtk* .. cd .. ls -altrh awf-gtk5 awf-gtk4 awf-gtk3 awf-gtk2 rm -rf builder/awf-extended-3.2.0/configure.ac000066400000000000000000000051421507226270000163600ustar00rootroot00000000000000AC_INIT([A widget factory], [3.2.0]) AC_CONFIG_SRCDIR([src/]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CC AM_PROG_CC_C_O PKG_CHECK_MODULES([LIBNOTIFY], [libnotify >= 0.7.0]) AC_SUBST(LIBNOTIFY_CFLAGS) AC_SUBST(LIBNOTIFY_LIBS) # --disable-gtkx AC_ARG_ENABLE([gtk5], AS_HELP_STRING([--disable-gtk5], [disable gtk5]), [enable_gtk5=no], [enable_gtk5=yes]) AC_ARG_ENABLE([gtk4], AS_HELP_STRING([--disable-gtk4], [disable gtk4]), [enable_gtk4=no], [enable_gtk4=yes]) AC_ARG_ENABLE([gtk3], AS_HELP_STRING([--disable-gtk3], [disable gtk3]), [enable_gtk3=no], [enable_gtk3=yes]) AC_ARG_ENABLE([gtk2], AS_HELP_STRING([--disable-gtk2], [disable gtk2]), [enable_gtk2=no], [enable_gtk2=yes]) # --enable-only-gtkx AC_ARG_ENABLE([only-gtk5], AS_HELP_STRING([--enable-only-gtk5], [only enable gtk5]), [enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=yes], []) AC_ARG_ENABLE([only-gtk4], AS_HELP_STRING([--enable-only-gtk4], [only enable gtk4]), [enable_gtk2=no enable_gtk3=no enable_gtk4=yes enable_gtk5=no], []) AC_ARG_ENABLE([only-gtk3], AS_HELP_STRING([--enable-only-gtk3], [only enable gtk3]), [enable_gtk2=no enable_gtk3=yes enable_gtk4=no enable_gtk5=no], []) AC_ARG_ENABLE([only-gtk2], AS_HELP_STRING([--enable-only-gtk2], [only enable gtk2]), [enable_gtk2=yes enable_gtk3=no enable_gtk4=no enable_gtk5=no], []) # GTK 5 PKG_CHECK_MODULES(GTK5, gtk5, GTK5_SUFFIX=5, GTK5_SUFFIX=0) if test "x$enable_gtk5" = "xyes"; then AM_CONDITIONAL([GTK5], [test "$GTK5_SUFFIX" -eq 5]) else AM_CONDITIONAL([GTK5], [test "$GTK5_SUFFIX" -eq -1]) fi AC_SUBST(GTK5_CFLAGS) AC_SUBST(GTK5_LIBS) AC_SUBST(GTK5_SUFFIX) # GTK 4 PKG_CHECK_MODULES(GTK4, gtk4, GTK4_SUFFIX=4, GTK4_SUFFIX=0) if test "x$enable_gtk4" = "xyes"; then AM_CONDITIONAL([GTK4], [test "$GTK4_SUFFIX" -eq 4]) else AM_CONDITIONAL([GTK4], [test "$GTK4_SUFFIX" -eq -1]) fi AC_SUBST(GTK4_CFLAGS) AC_SUBST(GTK4_LIBS) AC_SUBST(GTK4_SUFFIX) # GTK 3 PKG_CHECK_MODULES(GTK3, gtk+-3.0, GTK3_SUFFIX=3, GTK3_SUFFIX=0) if test "x$enable_gtk3" = "xyes"; then AM_CONDITIONAL([GTK3], [test "$GTK3_SUFFIX" -eq 3]) else AM_CONDITIONAL([GTK3], [test "$GTK3_SUFFIX" -eq -1]) fi AC_SUBST(GTK3_CFLAGS) AC_SUBST(GTK3_LIBS) AC_SUBST(GTK3_SUFFIX) # GTK 2 PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.24.0, GTK2_SUFFIX=2, GTK2_SUFFIX=0) if test "x$enable_gtk2" = "xyes"; then AM_CONDITIONAL([GTK2], [test "$GTK2_SUFFIX" -eq 2]) else AM_CONDITIONAL([GTK2], [test "$GTK2_SUFFIX" -eq -1]) fi AC_SUBST(GTK2_CFLAGS) AC_SUBST(GTK2_LIBS) AC_SUBST(GTK2_SUFFIX) AC_CONFIG_FILES([ Makefile src/Makefile ]) AC_OUTPUTawf-extended-3.2.0/data/000077500000000000000000000000001507226270000150015ustar00rootroot00000000000000awf-extended-3.2.0/data/awf-gtk2.1000066400000000000000000000021671507226270000165130ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk2 .Nd Theme preview application for GTK 2. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Start with text from left to right (Left-To-Right). .It Fl -rtl Start with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration of keyboard shortcuts. .Elawf-extended-3.2.0/data/awf-gtk2.bash000066400000000000000000000035171507226270000172700ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk2_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk2 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk2_complete awf-gtk2awf-extended-3.2.0/data/awf-gtk2.desktop000066400000000000000000000004611507226270000200170ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 2 Comment=A widget factory is a theme preview application for GTK. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK. Exec=awf-gtk2 Icon=awf-gtk2 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-3.2.0/data/awf-gtk2.fr.1000066400000000000000000000024201507226270000171110ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk2 .Nd Application d'aperçu de thème pour GTK 2. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration des raccourcis clavier. .Elawf-extended-3.2.0/data/awf-gtk3.1000066400000000000000000000021671507226270000165140ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk3 .Nd Theme preview application for GTK 3. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Start with text from left to right (Left-To-Right). .It Fl -rtl Start with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration of keyboard shortcuts. .Elawf-extended-3.2.0/data/awf-gtk3.bash000066400000000000000000000035171507226270000172710ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk3_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk3 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk3_complete awf-gtk3awf-extended-3.2.0/data/awf-gtk3.desktop000066400000000000000000000004611507226270000200200ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 3 Comment=A widget factory is a theme preview application for GTK. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK. Exec=awf-gtk3 Icon=awf-gtk3 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-3.2.0/data/awf-gtk3.fr.1000066400000000000000000000024201507226270000171120ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk3 .Nd Application d'aperçu de thème pour GTK 3. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration des raccourcis clavier. .Elawf-extended-3.2.0/data/awf-gtk4.1000066400000000000000000000021671507226270000165150ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk4 .Nd Theme preview application for GTK 4. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Start with text from left to right (Left-To-Right). .It Fl -rtl Start with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration of keyboard shortcuts. .Elawf-extended-3.2.0/data/awf-gtk4.bash000066400000000000000000000035171507226270000172720ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk4_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk4 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk4_complete awf-gtk4awf-extended-3.2.0/data/awf-gtk4.desktop000066400000000000000000000004611507226270000200210ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 4 Comment=A widget factory is a theme preview application for GTK. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK. Exec=awf-gtk4 Icon=awf-gtk4 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-3.2.0/data/awf-gtk4.fr.1000066400000000000000000000024201507226270000171130ustar00rootroot00000000000000.Dd 01/01/22 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk4 .Nd Application d'aperçu de thème pour GTK 4. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration des raccourcis clavier. .Elawf-extended-3.2.0/data/awf-gtk5.1000066400000000000000000000021671507226270000165160ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk5 .Nd Theme preview application for GTK 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a png screenshot on SIGHUP. .It Fl -ltr Start with text from left to right (Left-To-Right). .It Fl -rtl Start with text from right to left (Right-To-Left). .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable CSD window. .It GTK_OVERLAY_SCROLLING=0 Set scrollbars always visible. .El .Sh FILES .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration of keyboard shortcuts. .Elawf-extended-3.2.0/data/awf-gtk5.bash000066400000000000000000000035171507226270000172730ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk5_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list-themes -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list-themes) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list-themes [--list-themes]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list-themes) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk5 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk5_complete awf-gtk5awf-extended-3.2.0/data/awf-gtk5.desktop000066400000000000000000000004611507226270000200220ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 5 Comment=A widget factory is a theme preview application for GTK. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK. Exec=awf-gtk5 Icon=awf-gtk5 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-3.2.0/data/awf-gtk5.fr.1000066400000000000000000000024201507226270000171140ustar00rootroot00000000000000.Dd 01/01/25 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk5 .Nd Application d'aperçu de thème pour GTK 5. .Sh SYNOPSIS .Nm .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl -ltr .Op Fl -rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran png lors du SIGHUP. .It Fl -ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl -rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-gtk-accels" -compact .It Pa /home/user/.awf-gtk-accels Configuration des raccourcis clavier. .Elawf-extended-3.2.0/data/icons/000077500000000000000000000000001507226270000161145ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/128x128/000077500000000000000000000000001507226270000170515ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/128x128/apps/000077500000000000000000000000001507226270000200145ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/128x128/apps/awf.png000066400000000000000000000036621507226270000213060ustar00rootroot00000000000000PNG  IHDRPLTEGpL+UU$II3+9K^s7PZ%tu7PY6MYW$x6NX"v!s7MYu!xz6NY5OY7NY5NZ7NX6NXz{6MY7NY}7NY6NY}6NX6NY6MY6NY6NY7NX6NY⃧6NY6NY6NY|6NY6NY6NY6NY剿{ZjSp gq@y 7N[8Ra9Wh%a$c:]s?< 956{jiD\k=d }?q]w"+0)>;BPzsy葽7P[c,[u"dgqimIasBg|v?ky>l|-'1;An9GEJJLS\ZaeZ삡injhsp}ꌺ둸PRZtRNS "%),,/114CESU\^cflsvxy~xIDATxuXA5PN0QTnQ@Vօ;۝ytw{r044ZҤ۴z\U0nQ?K#,BǫǑI2t06j'hWde}&A"-Wc WY1 q±R.JvSl ޥre{B,AO*{1UE]UģKW{jzI3'~6ṳ.d,:d׃8{h٧po,'Do~&nq 2}Vܓ0bL景,.d L ̗ֈ- H-Un"Ʋlj_Bw CazCPAM_ x%; }Ƽq3uOUS0@ V ]@Z>`Ԙ<υEy8@<_= Y5sh7}E]X;D]̲4~,|t \]y 8D `y%]|3p2mO6BIc/zH2"S9CPT&pGePNI\~ѹ u39!s,\|s ٲC>`t~n:9|*R+#B|z,WQ\x!!H|A@+ P0,?,$,}޹+,@ȩLO&9i5OkS5}So0&5TzB4Bg#Z z*/I޼TVymܵ]P`((1nlVjE8";S+9I.UJ%\ 8Z(U z,`r|HdJZIENDB`awf-extended-3.2.0/data/icons/16x16/000077500000000000000000000000001507226270000167015ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/16x16/apps/000077500000000000000000000000001507226270000176445ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/16x16/apps/awf.png000066400000000000000000000006031507226270000211260ustar00rootroot00000000000000PNG  IHDR(-SPLTEGpL#y pR6OZ6NY7NY o6NY([&퀟?q@u0Xt )S4Exah|LtRNSg]\L~IDATx]0X*ήa{h ܌U,)BِYf gfJ4<X 0[D]vx}=]if]V `K$`x Ұ7IrBIENDB`awf-extended-3.2.0/data/icons/22x22/000077500000000000000000000000001507226270000166735ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/22x22/apps/000077500000000000000000000000001507226270000176365ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/22x22/apps/awf.png000066400000000000000000000011001507226270000211110ustar00rootroot00000000000000PNG  IHDRj PLTEGpL$u6NX5MYzB6NY6NY@w隺6NY6NY6NY)6NYkU;YnBZi@awl=e!lXs   5->KJf^lossxatRNS:;?@Dhjqyz8IDATxڍk[0qJ Ѐ$nj^^j,1EWoٳ 8 n83% r Z*ԥ8׭IENDB`awf-extended-3.2.0/data/icons/32x32/000077500000000000000000000000001507226270000166755ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/32x32/apps/000077500000000000000000000000001507226270000176405ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/32x32/apps/awf.png000066400000000000000000000012631507226270000211250ustar00rootroot00000000000000PNG  IHDR D;PLTEGpL6NY6NY6NY7LZ6NY5NZ6NY!owqՎI_~#v7NY6NY6NY6NY6NY6NY6NYmMa?@y;7N[?q8R`o\R")t4,>mstDqOi}e}7C]Ek)^}mG=us R]7 tRNSL%ḴI.KzAסϝjMDIDAT8˵rPDQea_(_REOTsj k抆jMkktYEV'^V @>2( ,`hzrVץG;yiX/w7:խzCL$s H2IF D@`8@Qdcz@r|^Dd3ۋWBC /{a67%j~qxތIENDB`awf-extended-3.2.0/data/icons/48x48/000077500000000000000000000000001507226270000167135ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/48x48/apps/000077500000000000000000000000001507226270000176565ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/48x48/apps/awf.png000066400000000000000000000020031507226270000211340ustar00rootroot00000000000000PNG  IHDR00` PLTEGpL@#tq6LW8MW7NY6OZ6M[8NX"wx y7NX7NZ5NY}7NZ6NY6NY6NYB6NY6NY6NY5NY6NY6NX6MY6NY 6NY6NY6NY6NY6NYnI5af7OZ7P[7P^f>ivx!t~Ct@yZt ? < 9 20!+400H2r/KQSBGGUUZcZ^beyh~plz}ZH9tRNS"#/2EGLNZbfgvwy} .YIDATxZ@ݡ;L(IRh&iKw'|qv~:8s(s[@(;m4K|$굟3:%IHuoEr;hJ@2(0;,~cn8@E'Y+յ*1Q<0(T+kV}[=*j[ Th.ddP<gk[hqt Ň arIENDB`awf-extended-3.2.0/data/icons/64x64/000077500000000000000000000000001507226270000167075ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/64x64/apps/000077500000000000000000000000001507226270000176525ustar00rootroot00000000000000awf-extended-3.2.0/data/icons/64x64/apps/awf.png000066400000000000000000000024041507226270000211350ustar00rootroot00000000000000PNG  IHDR@@RPLTEGpL6NY6NY7NY7OX3PW6NY6NY6NY6NX6OY7NX6OY6LW5NY6NX6OY!z6NY7NY6MZ)u6NX6NYuϓ{~@рՋ 3!uu+Ձ6NY[4zLw5?<7P[W"@y;[o!7P^4?q=a{39VfAYg=ec}9@\) B璷#eBl i$}pd.Yq+\x*\z%a'^+\y3bpm pdC >tRNSuן#Xdb/<Z@?>W}vw%0偮 FH D#IDATXWA&wDEb;{6$"V`bGEEiv{/0;<<$e峦M)Ϙ )I6:[43FMG @w4x%Ĭ;y<Ps%-XR՝Ӡz>?}`% s,@ov̩[еcX4<J# ;jz9sl%p+cؾa  oΕ~l/~f>d_TU(st:R7,0']a@޾cϣ(S@!$6cœ\w8o^G|rxj$ ܺ}l7E@\. n+:$ T@ܵtX$ B"n=xJ@<{ڽO@l,|J/7o/|AM`\HX~T awf-extended-3.2.0/images/000077500000000000000000000000001507226270000153355ustar00rootroot00000000000000awf-extended-3.2.0/images/gtk2-menu.png000066400000000000000000001335011507226270000176570ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ɴΛdL͉\HɹocX]IbK[HȊ]Ȉ_J̿bKͿµȹߓaKɾeMZG۴]E;ŵeM™cLiL?Ӎ^Iw˿cL~^J_JgM۰mPF71ij̽gJ>ZD:fMhec"!!Ǽֹ110;(''}=<;XFYG_I-,+XFJHGdMú766ŹʻϽ]HOMKžDBA]I`_]YXWß}}{xźcHrtRNS@fIDATxoLg+2I8-u ^٥6kqxYi+pա]L#LHϘEUV!DZmŧC"DH6V>vty?'P̼3d~ybb )IR;N%bǏ7 OyǓ\F ֤5n-3FɴV> h;nukp#8c58CJz6IWyљ_cG9{~(o/?sxDTZ|$wK;lxuE27e>7b}ª^+*j/ѦQL*( RU VMLҭ8ka RR$[ Ʉ(Z-GD1/GQ>?(XTFQ25XIqX,kgA[l4ɸrTE(d"ޚk5}%p'6<Ԕc{ǰ7]G*cm *@q;`vwl؅?bÑvb52s|o̥xAt[ c ޲N#&cGg u4 Kٿ4 /A)'Nn38(+5 f' Ms$m,f`0>X{Y:y+ba8r[eWz46b(1׺Ÿc{m[u!Vzs^'̬]]Wq{[$:٤!0LJwg:`? A'k0G2(ųtV6p>-,[}ni\uRTd9e |UX@1tl\ 9u>>xa/\z3 GCW/448lٰf* uelJEMs׻4wfu4$evޏYp$P(ųtBo7 ñz̓Ÿ|5ʿ}Ao\5,\^|p{_bpmhMzɵ?u<\_?տ3}g׿Y_RWߙL}=vTYA]9sr<['4I.byx_ؗk}ECx_qH(ųt^8TOl3 Ǫ4Wֆe>Qc(dhN".LU؎nU\3zڕvprd%[0w;XŮMy؎\uDj(̵"<Z۰E]8"6.b;bs H$nXCHtC4D(n 4vP \0; "p̪jWn-D-rc!^\2AE`Q? b8=fo b+DZ_1)9Vc!1bk199Vc?' b-nrǞ#79Vc/9v3TZDX5g-:Fi;=(]FI%?˺7nŸy+={3S@Ѻg2''ennue]ϱc_|w J |۟1~ 2้g-,)OE J/|ZG-pSNT/__!p06\81x_Xy(4!DRMg^._*D::>(vA˱){()9l7_|+]Xҍxݦر8J*-8I{PWKw h \ !8Je-M܊(#HE"QX lԍuC*Vgwy3ӧϜ>sf?;}(̱g|ǩC14b:i2uou5Oh&[V՗34O5C[ `̶$[KZ<miZҢFd͍nXT5Q& (p=;}{UC0_7Ⱦ4+- xvt.]RsFGGxiNyhّK߬{Xuφޢ1:(܄c!bc7pbc*Ƃ)Xs:D}b|#qZjV ~(YR~%tkKސe2Z$Kr.]+ h;~jhԲ2jd;>EDz֫ƮVu\í5du,9F =c/r,G`C8\*̷`3vmY1t<8GW4VdXOf3ܒ$vXıHieCtX6TBKK ~} !i#pƆl kLzRi>b9fg4ӨͥRPRiV̇KN˰}O@:tӲxFLSH6Eze=𦊵7h)v1 [X2L >hnoq5 `C0;{ԩOHk+{TS7ZɶCd c11ڍݹs2Gv`-p4:-NTaIϸabUt.ZFITxXĪ'K('P{0^vxE`>z05\ +30ippjáHvƍĘ,0|+dǝ_KvoPve^8:\ʰP @$qۄlx6~j}EfѴH)pjRcG/LܱqnC6b7 cPǃ&Ǣ7}w }(%xh3Kҕj{έ-౽%*NH7n2CbJF5I'*xϸCkھsKjz[(Z4{hs 61'>G`};X8K;qܹ{oAELsT;)J gb:f2m]k>Xt^6s6 (rvcY;GLEeO<"޺4jDLLuuh d,K;|D(i1e[fD 11'zS!ӠθI43c׾L6/LƱpl6kt]&&Xy} mb2N=k:6Ǟ51'^Ǭcq:2|eؗer-G}`Ĩ9e" WN±ZyEXc1vxqj,9Q` 5:,BY&A ;*&!R2m@Lc m1'M>2hѵ6*Ÿ]<黍8&XIdW1͈|ڨȆU.atIwjΒcgmlAd74H PN>r;LY&!*1P%): ;)ԃvsb;yc:6-Y`zL.y[u=Hk4h+ҙav:l4D1f1y?u~0;QPl;-i۶mB2ǃS%%%<(S8 Ԡm5x`jJPN7AmoD _osz25uŏ6Bas$@\Dsl#iF隿h>Gh""iT,_ULZTPcd̲Yrl= XR__NNk Q:%|G_yR!AV((H!hQ4y4YS:N}ĭ^]x::K-PtF*0b&p7asKѼ{z$:Fɸu!ztxI3K5u큙5ctĽ{qqNik`i(^;[Y\7dT$554ݎ"lIx2S,*5L& {7=*7WwW_?gI96pWUyHcӕfm]]zukmS+m1 pPZ)ZdsKF%^ ~EEeedffc]"‘{W^LW^/gE@prGnȓbdfp g8WlJx#gƤ!&C |9zuG/S$`cų&dA4#d;k5{đ#$;r'W/wjc Qb% fN.G,W0a؝/czWǿZÿޗw~5cKTv{/ ʠ0$ P5rd}fa`mFЊh ^dpl?cSU|},b=D:.6}P}uD%Zwڨ̊2pq=Ubq 7>jYҲt[_ɲ='q^z [ MuwѶvWhX8btmBkc5|;2ǺߺeXwiYvDeUMo<~&k"wѶzZ6=qւqlhXB&X[iSǭ6ٿN׸N,8xcWļL3n.XFȅSM@A;vBeyz؄dchNӱie8&cLǦDZ}^1>?1/m:6]eI1rl߾g9SyoAa&cȜȜR#,Mݱ=]VkW1*>ztlzrD?XT"h(/f9R: s8qh0Xf]wLz="ʶ<қ o-z|QD2NY2|;}]6BssݸcrQ<hz7 H1uPEb1(JsfPJ| H2͠0qlϯ- 4u6ܝh*:&\]_[m&Ki5L(E;67&OcAaҝ R ao<㕌 /;(̴uqLMpAa0bt+8ށaTH2B*e,ic㱗-]_t9?z㱂P~^qUhx'㖥m/Z,?RSz+ױwNwt_uײS%ovT2{Ƕrw CzpY>)7.ZŐUREdcQ$sks5:E"}[2Kѕ ;`=U\|vʑaҁެHf$2֭W1b>*;xzOY]t O1(qk{] UjN6Jg쟢8?^(+eE 9VXkšDQM jm9ebD7<$ CQEESPrDDD :1{]\5==]ţӄל%)IPO6HC!NB/58Q? 1A2Nw(+)79VqkXp~ѿ7cyܠ= ^o݋<dfy&]4 ZkIeb ^8RǨ]T0\1`bi d 008J63BR'4c:^є7 oq,K+${־d˯F۝Z?`ܱΛ %5EJ\eǗ[mIA^n8n=00ws|f\Ăeg M_  ae ʒOwߏ1wf>sL*J۠-W㰘58b.ᇓژ5vG[aZt>pj/Hq1>! M2F@]Acza_\p^q=<%'M(+Vew,XRqǑF ʈ_qg2YDj H515`~r#Ck*#vZByI  Ϝ9YC4U @0Ro`!zKǠ4˯|n՛_Qo♌ MZxuı?'8msRќkĺ=䊓mqTfzq"repA.^es%GXsȃ _b8Г@8H/_鯯_wyC1P{%{TZ*ln?:VztFnl!ԭ Abd4rK- 87A 7~mA)xֳ(cӂ9F^2ǀW41X7A%(7|#qujH_SdƝT 'c?ߏ),FQs>C7s_ "d,C \\hU,&էcs-x>#ǾVS,e Lg)"А~28t`\:7g::RIB \' CBљniQt-NV\abD.oT> "8:hrT'!AT(6p>,}ŞbM1;AgC/4Wt<)iSČ8: "Ia- aZJuL☻ϕ6 gR "np0W!XbgWf'cI&pL ߷ۢ1бwxR.]X-4 Zd;a1B|YѪaehξ铬ce u%LF/|ƱStr0s̼݁]yȰϱ?#>=+(rk:q^ߡGI;9XqSS _ N/< ec' WרaبctlӮQȼ)xV̭q=pLαecys8AЭ-κ-̧/XU4X&ǘ%'3es"Rx4?Y3X7ձY/ȱԞq,q:!0zıWUgG=sSKO3j&wl<}{CuGLXKc۲ r03_20cLw&NE.5ei&w誣)c. ̧ⲉdmc-ܼ.vxn@P=멦$yR ^r]ȘkyE8Lnձy_혉2 |,1{c[ى"%*nwew ߮x+rT6hZw(.'gcKcz{>X(Lus_%j5Ҽ=2wzOPh(H⮕Y_KU}V0ݹOTbytoݭR]#*3IW)o||9ҺZ592WAF._Kş5z;ӈc,뛐faII^ԧO}m1{Q>B}dǭo>($#շ-zVׅQ7->W>;&qlo%*G֬IkٽxLԷ #cgAmc.W85~H9sIR2gb$Q1k9RR8DU3?Ǻ;6KǪkzyyXc}xCwΝvbP؁tqnx¢4vp$QVXjJHI%Y(˥3k? f f3XBMݷj?ynǿX)Im6m0PSWڍA?Sڱ{~i\>;&|̝*c|vTxF;38$yjeFfX~WJ;FǐtZx0USgn؆b8^(SO(J'_-_>K~>Q|<Q8{E('Xejt?߿)AlRHydk%O٧ }_>2j><1Sy)`cZqBc4&m 9Vcov| > ~QAyǐMغ-*SK :ڱyṞʻ;*q"e5~d3o|Xs}s ]qω[;`vԥ9iu; 2sZq.3Y6~H CnԱQR}yO¶iՔ]8ƭU ک'C)=v"{*;;/{3 pD(t~ƼBl!c34v1Ttpt9?y.$ &u%W ~0Bse+G&]JL/ t?KR[h2qz00Dr=:O꘰䨾m2TAZ'SzUkUEf/`Ra`a:T' (I&=%x$؝KL70;ϿHtTVZ]]Z7 ;~OO]+."5X(|لgsª,Ucz6cfJ:mW*=+K}Zւs{PV@*TǦ.U¥6!"{񞇂s$gfXU k=u(81\CVn5[A$Ak*EPsracr)\ؙ܎&jڴz᭒։ùlZBoa~E39rvj ٬☞$JBU ޛxHы,p\y>{o;+0-ǎA186o=aWVW!lb;LֿPSXX c%5B2!h%nֿPmQy،y`Bkv]ua^ y5NkWl-c'뫰]ZBuLQxlZss rwLT"He&~Ek}mtpMEY ZBuLQmiN*ǯk#=#sHv1em-š>Wk#:Op0- l.u5U>e;J't>k#:!׀ȣ,Fd)k|ٷdU~̈́Hs*A1GTUMPS 8Wްkzsf4#cw٫(tBY>cvtʪ*1cG qlUagX@8l(m}{EFJ(٬\gC/4Wv<6%/^u,w =V=:;!/Tqä/`1\#|p>mnޢ(Hⵑ"Ĕ dłb >,0*  q%&OyD 2xwdAVx1N̓bUfNZΕpt#=Kx簣q)]P +>ycӈce;AnZѪaehξ哼c8v$?: 8VyַO*h.z8ot8Q`/sӎ(F z0F3rT`rck#)<,j<_1w,]yȰϱ?#>=+(rk:q^ߡ6#I'pJ^q[4׀ձY@6'+͊`hdcD69!lWP#S$̷ gm$Nu8V97n+ F FcvFMigenإ&c-14l> .ZxǶ,c9sDZO(C*rsVhpHNAM*րBkdٍPЋs qTcgdƐ>FsF2+׭c&Wr1Иcsc88$r=E\/P#̉8j}t,8RHVebvFG[ؒp܆h'SLL8 G zO㵑KY 95q:!0zıWUgG=sSĥS;fcG#V^.1lܱO*g܁5=$K*1/V2*=jkLX)1rV2nhp*V8>AP_:6k#QL9er03_20cLw&9O%Id*B8?ylcMPѺ E%s98%+&&9!;W\8'#11k=>mF0;y[pj/Hq|v ȏⲉdmc-ܼ.vxn@Pa$&Zɍr6"[0 A18py8VHr77K;^ c(R:JPD]q'1'Dj H515`46@#I2b('h_Md{=8BB:&~>AoWhf9*4ĻViǼV5`.Tײr]iq2c-9%cO8f) 8椢9Du{'m=Xa*\z38P28 زرA!ѸёHb*fǂ$cPlnS~O`)9%N?J,w0ߒ ] }OǴV"IgK7;4mo7;kJT[m=LvTpͶǾ-IB͎dJ`?R2Dee4 ] T}g|J=>JRa7h[/JiۺKdZnV ͍n J$ DXAV"(v*tߙEyyrI8!$'Y]9|lXUK_SE±99Fc^4BBN+-Vʭ:vֱFiCk"+@ızzq'@ҟ^/UW5O"/oSX/oت8bCM?İ8{fT]5b7W BBN+,;ZR89ffpp.݌gyM K3Yݝk0%ˎ`]Ş8Cx@*6{J{Autlpg>8<Ф7S-yObgoG%{.cg K|t㕕UVUe-(A*`]V w JA3tZi ba١8blE.lG=z}u*A C ㊙c8Ȅ:')_T)(ItP}(,8A$_pVZ`$zUq8bUL>yp. tLkknns 1o8I+V OFwIyJ A%ck$;$Bzl0vaIK=l䒊Nm.X8c!cnՃ=}yc&2hb,?٨^H'}c@zQlc ]c[A)K%+r,5 ?HZ`B=IssɃ| ӐDZGwn0ɞ6٭ؠ&GȂhD=vVXp ʞ={ٞ/X8<H[7id[Ych7@H$B'aRǜFRJ/qxc axsRVAF#`mߞ$\ v):sҁ1ͨy5|e7LEǢOsO0'8ıcB~f>8f0VAq,c`p~Ń`Qtluq׫ %A0/`02R.q3o9$ڇsg_q8#1=A]<[ɋ*;*L_Vm+fb45\+e*8ƽۢ8Ʊn]<9>~fq[cڊס'MA;5t[)^椌c\)'ߜc;cQ!}{۷G)+>'u mqz#+Ǹp߹vg6[lh ٱL9t3:G:8dEc˾5; s }ßX>>/8ƺ^[2ofc*to)r JGS1#1яrZɌc̹x/ǖ̱;22ңiLEۮˑɈ]/rUD8VtHbX3M_P+mĿ?=>۩Ѡ߄6Z$s}MA+LΓnh\:%$ol\G#knyOMRB vLbbHx?2ul+|gaok:H+m[~i!8vcXױ?7pP ӰPllšGQ'EFlR۰cd26!8>4n+;>u $u o+m#ƑQ"{ḇ#4JX9*Dz1i+*E c<o38="3N0*b[yvs5uZűHら[ 4cicQ!r, 'ql#7 \vsXqv::A^?=|`V]NgfFű9X k뎭;޾}o׮]Au mE#NOO[2ulHR5s=n~x`Cpa.^ec4ME@)+*U sK ~ c鮄pli&;e;Alg._ 6}ul3s,-U1bZب.LQ sLlW_?_ۊp3]˗l#j㇆>7:l#QRzFBi3ڎq!] YH5C앥LRXTc>vHz;/7CЕf$c]Y؉m*tf/=<]/~2oZggmꁶyKVc?V?Z>$يUIۿd˙a8cnmIQDbmC.7C'su%cN\]zrf8Qk\-KC>VO:ǯ`VNJ].0c:M©tO~rꌮRg9zryrz) 輣ɩ$r1d+cVk~rB9cO\;fa#]K6r;Ft$˻3t++1k;sh>1n|X;J)\Pg?W[:Ļa,6fFV3U҈clKq짵a9ѱzx+28ظ"A2 Syʼn j ʡIO=}< |rDm:嘧끏.UMKh: mr~YL ^ǎW+1ڊb-'Y-~*sulGӨ1/ql+r`JAoGԱP^--u {}X1#/;c4 Cb~3ۭal2[o+ fKB~P8w] XX췍8N72kvH<1z4 5->$mA9KWo86_J:㬎m9B[U Őō{XdZGuxj:QcHx܈6cܜEP u,/u,jT)AUDgl-AHxΈMXH.#7TTQk+X9d9|kU[u,9E&-eMQX ͖uP-;t>rP\LjR"jox̜/V͈9 jml>h8=F#&ϥ[u9^o.Fj>-nXDo;niC};/c=_1>V3X{k]84YR wNNE{g]cA1Ko^\,w*.,^_PBIr 1"]yD͇ yM>dH_ެO"j8s%czM]<[ɋ*;*L%m—U+a`4Rړ]jԑc1PR2s"&Y U#Q Hcshs}eᓗb6ccס'MA;5t[)Y'c]Agt`xh~`*TQAL77H$~7$-Hڛ%1?l+^;_/%c{rc\\aݭz6g*Iikw5 Q(köcǖ)E?BNϙuĶ5h(K> 6s3g;qƪ Ǥb-̛X9ݧvJ]} IqJV>rF׎݊cQACUzWEzWᒓ}e-w(YQ:<8H51dcHYO{=Gw1/uiu pT4{ Ylu\YIΉw Nű臦}{쮽n5Rg)gɤi_Q˦}m3Vsӭ^c:&F>~.upnj.Lk_im])9ch_)/ߪU)^1݉1sYvylW:_{& r$3,!OJjGw̪LsL:I븏U8 5GRGNsrW\C%~cDo(&tM-+KۜaAݍ+6d`gՠTP o)ȴd={9}1Ǥܱ~{7֑uu& R4,)@Cvy̰jY&( c3վS 咉\lL;6XVqX"c=c~iǛMhsPK]XȆ^U<&/~7Q4nK"~mmıgbLy:&, >.b.HIx:Di,W2}kcc/thbs@I^/Cr%iIAGvLűcY[)wY1wB|\cӕί;0Wd֨-8=&UGcPZf1 H r%i ;vh)<.uLθcl.1RƧSi@=^os\4+̱SAS>?{Թ^u $x؍nSzY*,(ZݼuFa)% X$v!B[4 -ys/B{zN=l=_ڬk<=-,$h6 3XHp,N/1ǖ=A2q욓mWlozâR`LH>EB&x=uܗWRe^Nh1Өm$c&sؔǬBJ c8}%p'Oc{éޱ!/WXYyAt 8p>\ͪ2̼b^NUT|?[29qAǮq4?1 ;8dEsyE'N;&|,>),(t@%׫[#8v2Y\c1y"cMuVlvLsL9xu[FzzQcзpLNW$d.S N҂cmnP:0~QFR8; D5cqKǪWyE c+jF-L5e8 $:e:綳ݹsNj\pÛDfK'd1)js,~&6Ɗ )17+ZUjṶcҨ&%:v4wKv@u K棎ϨjT._@f3FScP;cEL n1;_@S1:'/ ֊cvlM;lpLh|7Tx>Lcxǒ=1^y-W yE؉ر¡T?V]=2,H? XV| .Kٱb;A<ԗ?XVݎcfR 珁[?WC>]?MX1-9pY \C #c70^hB%Ƅ'Kѭ5ݫ%,ñrc`: WSkZ*)bnŢr`{ͦ9;K?.c6.C&#Zt=A1/EyE}}:z/rCߝx7BKK;a^qt$ꃌ?{RL=(BHe߽>;2K#ñ1#ñ1#ñ1dEp,m2_ޑXژ} ˕? ;Z!1"ZhCd 4cȹcZpLcv\bsB>ЁᘾP/~A8Y561w-Z6V51cMĘY#I,,"qEhaEMTTFmN|Bb8cΑ{=pxZh7=zc??ͷ6b #sscŬ HU勶zXe7۽aՎ9SYZzF{כ3!ȃnHEdX6 9jB*mMo^nGl")ð"I(ֹ$A71fF'.Qs`q*v^ ZCg%Gv$>dyyInwwluql5Dsc;E 1;KR7`*K^oю?%vhmi&ЌzlZcG|08}jŎY:-1{)LLǞb)a:^ob̠ H`kd>|eT*2BZgc/:o(1X,𺫱cÊc:Xƥ~[rt-n܋bxƋ%"s aq_f [^nh?|A*YKձթ<`v" tNQy Чnoi8wrSvӱa8qZsK,z[<@ lL2;@fNX^ǵ'LkwVݹ=,s_W@`sonY,Q,>6eQQW$~&\7zc^{&ocPÀ: *\ݬa:^u+r 9Zz>uOnHI8DŽ Fo:;/"$nX?@0aFt`Ulo9,3O[[NY,/\g$3g/xr0lL:&ƒIm XB/"jLȁf$Cp#C;䯯^__'m:>!gӇ䧴2}R%:kPD9T-@ pDN༉lslkzBPpLfȜ=p VHU@EĹXFce oб1Ʊ ̊DñtRuF V[gJ:2GlZtNJ;Ff&AY9Vֳ>bŇcs4A+Y Wnq-+.l+vw? _ؘW|eU`7/4K3U&:9+P^\R'NVNM V|v77VmJ[pLܤXg 3' R?,>f^̌-=cHF,eeUzJ $c0}{ckT!,s Y*䕠-TYeg_>N4i`dyq]m,"#[3?411Z.%Tbio\lm.wy(QqY7&f̜?sGcX#a;=SGUG3viiuݨ>S9n19=ɣYwq0VOe0TT$;-oˑdŒ!,taG~j}2bM.~+Oapcc3voޜd*' 11>cʏ,ce%Ғ=6C췰fX>44g쀱\ťj4m<@Z?šQc5DS~knfL2 8y?\P~d5j 11>c==+~^nlGJ#-c5Af)ޘ_ 3#-UCTb&A1co[7xb2|c;c="8-5VCTavA!aowb0Ⱥb@6O_LܢO[-2 W;is*P+"ڪTV'ǩnuU#)Şܖ]5c돱eJl9di!@Yze欥Lh1cąڗX2~U ǻ.aO.*vWȟWooKG{2^\ Z KnyԌyAi!X 72&'b7?SYQc:2؞kN,Ẕ)ѕE Ph{|"Vei'\`kC>xJcŭ2c1szFkI`ǧBj1 DFlXVsslN\h-"kN\ F."] +Ka1oz9a̙ǫDR>aƦ"b™Iio;aSr e}.Yz/3T҅s̘ҏ\NAgSG2` `, DĮ B".i\Fg 792c0QsEU9sE6WTA%2+ %wCX|0uu۳ĽMBWdX_֧Pbdax0ԯSZNJY![i<*\֘ݕv$5ouxw`4 zD{[GYKZW t"7)eJ1Hۮx;d2ۡ+cy7l؇1*jp{Ft֧s%8H늃A8H?e?Oѡ C)WEsE`)${~qqߠ/86lQoWȆ ! x+a^`Fbb9#1gךc^Q'Q4Wd`<j%Ɂ[f}Ƨ|9gc}ŬX-7U=5Xnb7 N9㜳0ȁ4. ы+JERX m09DMzb 2G|WLd$ob1z9 4D7dXC1sg]80x0)gEbf3<ƠbRfaTvu'E^&CeL|*1}pŹL2d$Q6F∞ݵS2cOՐMgaq`Pc썎v :&WAKdPw@ 򎛼UY%F$cR㠈|41f =Gj[ T J5YadL Ʀ}!c 4bwrGfB pC P2X-+e R۸QJeJc̓Q!*@ѡ1V|د[[hESO& I@5:c]НUY%FQ+d] OU2coS0v$e<]c-Yi<.1vX>}Pu"|>h%:L4*ǘT֗[zդ1VcNrsT|tfT\_WMcQ0f*1Uщ'Kz1=kb\*c.cGxX-1qw8s,M;THڏ11~JϠl06toDߋvbii}B c06tknX#Mc^y51v8 ;c@lSFP.bo뭴TSš1v.+16ClF,'0~vb~b{!iO5c=nSK~F4a5ڋVޔ2ˑζɉ`+*ٺ;R?xoˍִOVޔ2~U ;Sb?]!^վ-vFSHk><Dye><;#bztRld=峘ޝwflw?;B?v NΓ~#c)e df_d|Dg*0 9c[xzm”c#dKV~ޤP0|3,&15cΕ-fؑJ;Tfm"9[zSd,b, T(4`4:.; rr.=cq/vS*+Tu-Ӟg1Y.-hcgd"3~\c~!~XoJtc4rCShh'"z,GU׌HKVA޺G*e|ڳ,&/Ӡg=x֜oM)#M ΀Yc\A˼NɢppF'ʬ4JbQc05=#WΗ O{g1YvW1Le<1v{I췚?c~2c|''".#]D<ɳR\cGt)1͏&#Imd %Ir7B{uw$R\= Ax(2vޒa޳DZ434 @|t~S6Wr3ƘZ2rf;R5ڭ猱; =ȕٝZ a Ey79\DA!W b\cʥ+"|a ^lBcUfd4ǝ:̦|Q6eX ]@D\F<kg 792:d;64Eb8dE,r/̔6 !EaPʒ\C"%a6`,8Nrl8fkK.ۛ}~H>H!3H(LyTc#m\|2lWa$^8ޗNdLA0z_߽֞>t ;f u㻶0\wA,𯺌bLprǐbP(~[Ӊ&O{I]˜@0X1´GS٩ˤyvfaK y] +\Pk5l5 spA_]B^#%߉SSY^c Cs+ ԤMlDM,9{D~CU5 ~r<{@%ee|pᯭrxt>WG,VHQ65z1EcII6Lhb&LgM2Y1LzBJ ɴTb/RПM2Y1L\u"_iX 6ПMbU}bL0d%*)$ZiX1gwWu=eҶRy"1Y$’@_=$clتwD&VzXvR7LJlEX[W B2riN&EqR\cƔg*`Z.a<_iAֹ9-M'nE*1*o~3|tCS7eXD1򎱙׫fp cRcO(?SK1OTce[ `I1¥R)c0fBubL1Tc Ř׌})V(߿q WQkW'}Y>'6J6:ybl[3f(Ƃ/ݮ k`p1޳1YZʴEƢocz GybLOFN[@km㊊s{ŃgC ):)BgUcwIL4n yI <n"8 zCaLKtʸiKSgťǩ㥭 +6jLiZ߭\jv 8 /(n;H fw7`y <n"8qoO-ꇍћ]ˏhڭᱱaΘ}k+c纬ݻL83<;vv_YzD\]4 CR}3FqDaAx2_3P_官;9`⌙ۃ% % .k4jJ -@RK1$_&7ɁJâN;c 1mظ<6⌙~Vĵ edhW?+|T3 C;1MJ7}-y1b̜hO-{UQ<6?H1Ϙ|L_ӦhZ4ʗ~_~e/=?3VRIbLI1dYc1*Gƌ12f(bL>yPUK1R))ƼXuߖbc̴g7jDʜoΆ@XV1KNb Cg=>Ѵ/ edDoSVy+ŘTA:9b0FL{|&S&[ ed$e7Gư^1cR%2c,0aL{9SB0,+y5scJ1&UccIm]30Q`´cWSORIX1tf3mPNc2[@'997{sVfƔSzs4q.&.qI|&'_L*sm4 uk',VӪ bƔMIK'7 lb~t01Ft2y~vb ۝V]3Tuh\L\Mo"g9#CqjW~_Ōzs4q.&.q$rx&_[5~:gd02:^կsM̘R՛s1qS$ik61b1#و1(Hۮ^Ό&fL,f]Ҁi'b̘dƼgqxځX13ƌyI:OW?z2=1a8t3^)~-jr\췁7g (`ɜ_0=I n#Q1үE1fNH(:s~GsrcJb@8r3 nj)~-j8Nwn ,_>WC2=3EI Gn:HZtcdA`yC3臽82I `#Q1үEBm0˯gɘzg񽤕d|Ib@8rG1cJ_p3|*DR7bd]IX)L&蕨p̘R"yK#R1]Ō)~-bZ3TkY̘R"fe1cJ_Ō)~-bZ3TkY̘R"fe1cJ_Ō)~-bZ3TkY̘R"Sg%eT53TH-cl8?/U0&CbƔJ5h:^gUO4Q1YwČ)~-j1Èc]Xr1U_ǤwČ)~-j1)SRB(Ga\8?\`.b@Fi5px6jQ1cJ_eWCʯM6c/t6rJ,Sd,{scZ{ϱ ˇ~BfL_c TIiĦRT1HӁaߟ+cfVO!p@tʶR-rbHVcul_͝nQYI1+88KYFhuT|BX:W X ꂱkp1ӏ{oN 28x嗶jמbjL7f_.Z:\eXγelci_o| ՚MЊ'1VAƬ #35aD'̵ciIZVe&5&Vhll+򯬗N1 5+*+:U213殘13殘13殘13殘13殘13殘13殘13殔0V^(_"sh_0cX(^hȪVƞ K)[Gzk1)Ѡ֚Dk=a%ca팬M:'Ls[Dug+ozzcդO"bjNz>-7,|쭤GtHLfi(]KT~;E~G2vVPnfVֲrXb{9UXJ#[4sdC)ӧ奥u(,fb)72R1V}lqmX]]R}y'b1 ]Wu=yoFo9b7-bz̗sIXy C_?2bfd%,i܎^.}_[shUPĘ =0dppIߦ7wEk7phb ׃>#ѿ⋻2z)Jy_X X>u"1Lѐ+/@Ϟv1Ƭ.Sb0op`]~"۵ pdN(ד<+WݻqN.b~kb1\QMȎ\Fx'Y=ջ>5oQEk("ydY.>ܱ>K#2 t"_ě䶰D tڑpGg`ۻ=Ŭ e|V>7ǚf2MXo3'.1H%\Y=_V7[+=NzwG_vi" }C ,pb|tCr!`=(`'nA.>8d3)=f mR,ߴ c cA/0~MXo3्,D^| =,!!m RP 2-DSXB`s,-ȲR{VXCg{36Zkoy>~ g ߟ~n7ʹ78Lu_cp 188^czcp ez!cp 18  cpr[<}4f18v})MeČT8\+±v}VToTEnjҌT8Ǯp5zbf18ñ~Kr& (ߨ^SL9SRhfoܾ~FoTO;[EC.NbLN X $J[~FoTO;39Gepp X}bb~7n~AoTOuP UCGeroF*c18F|m(Q[cF4nz~Hp] ǮG~SQӴ|NV4VGepp irofwj3~;Q=M|lpbLL X];Ec~Q=Mpk E2ǘT88wvLOcp8^czcp 188^cẕɢ5189657n 83Sұ ZN1c#w)bY\13ftl\r"S Lx&t`1׊q_+b88^czc88^czc8ӱH 9gs8bck1`iplxoS(wo-Xi$r2K>S^ۦ+Fmkm 1Zygy_9V*M1Aef^5<Gc$v{[(f밚}7-5z&E!Pݎ}ذϲ\݃c NǤdm0A|oZ1K=eG9Y0 ǚU~F4׫[c@ceMK=fSZ|q(?kwF>ٛ{\cyqɵb~{ZJ޴Xv$]ц |.a#~pZc N= <&]+޴Qc٨l<S󡙅sހc NքbݗZ+Ӯ޴Qc٨l+ gOz:&xmOϜc qrl3y_<M5z&1!8+>Xwqށc Vzb\6UilS6憙C(v6}$|'8a 18vt [Cp; ouC*XoHG, l=_*=y$\dٻZqk6#k4,N6`LX,/c]*g֏`ط:CкaGT%˂T". 2go8br]K)RL;G*;xDX:?vc ˕rs]LjcFз5cFˠ:ې^-,8Au^-r\bb`ٯg/^C6p,%ű;-pL':7p?>lӧpSؿK[gqHݡ*gaaX("hЛbŬW AǢt2 M<"((22/ A`s~,ƣ]N}7bמsΝTwv:[aV?2c/ݟ)[дj9KbZ꾢Xԓ0ւ:XJϝsccl-'zt݌5|c+vwf׹ %ã}^bY_W3+GU++m8Xki4bc`c+XLJ_jvX[c+Uة:7vSGבD{}w7˜:X}? X݌YǾV]alRON~|yy,1(ɶ1>)c2Sy0ֺ.6&[<>>]QiWTtn͞c;vj]k_L^`,)">q5m7`Lt+vřr X2Qȟ|ZcX,%¬W؆u噱ǁ'}E36ZYVOcD ػħgV ױR<{35؇:kA^cRMc#?cƋD(c"yyyyy5i5 RIs`L>= |{ĻAWȼcvng '6ƤK+Ad^ݣzc{Eý"aσּAof0Fk^0Fof>aL`̰њћHc*0F217KS LXhpcb ƄfS톇I5 Xh5:L|H73 #`Lh:ƀҥ.3`]y`WƤ9c ;{f2fdF,g{Yv ure F,[1elfuKOr1VE|1y֦1~RQc3bx??T5Ȍ n#KUR=5Ʈ|[+ύqdy:ǁP,Q7ƄYǙX]y0F!?2{8q()~==d2U}D[W(66>8 ϋq`NJdLjslN9f7|B>vh9f4oψSsRb{uvzũ/;.Oy~GuU"; y.׵=1̸Xh;W/(QW#;?cQy>t uU2ʱ9Xhϙc]8yc!4{ݏCu ;v-I<|jw5[Bcjd~Bh<6Mp 1ul1.̓ckqI"8XR4Mwg^fBnb?.$o[zd,'~CpW]Bi6:Ӿtfᄣsuc[Y] 5{5 '8Zjc8Zjcױ%3±<"8Z9F&8d>p 1B)m-#DL@3p;Û $iN&1?Avܞh$?:-Zx|Noghq*V zbʁ:̖(#ydGIo:`؏sp (Bvi_s{]% Y%6r{BJf?^A_;?p m~z79PR~ct7o`o%OGAX[9?A/Pt^6?=l?tnqǀc4D{cl}AIK<Fڗ;ubӹ}'p (Br#aco2ٱbEʃ~}QkP[]zq~ľ%ⰏE,N~?& ~v8SgND8TjdcF=~LLe/"0ൢW`-TY_^rc&mʃYKV;A2 :&tI9sp (B<s؅"PP18Ky\+|׊|2jcq@1J0KF4,IENDB`awf-extended-3.2.0/images/gtk2-rtl-menu.png000066400000000000000000001320551507226270000204610ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ԴͿ͝eMbK]IZHÈ[HɹocX]IbKش_JӫdL\H̚dLʓaKcLȹ]E;ɾµ^IiL?wڢ~ŵ_J۰mPF71̽ijgJ>ZD:XFifdfMYGfM gM,+*HFE110VVT&%%;}PNLʻ_I@?>~zwȽ:99ƺü}ǽsqnmkiú^\ZǷxvscH<655]HѪM<4в{UDgNְĸحŸɸcL򥠚db`껼zdXŶ¿rPBښ6NYw\HfPFr`d3q]y{fmR*zho[O̰@ġ'T4djSjXBtm (/.L r54\)^|z/ĤLկŢ[z(U?sϣm^Kr!stRNS@fIDATxol҉lbb{v%mm-Fkh4eTt6W$QlRRt6fDQ%ڐPdi:&ۉ ܽsz 㼄 ȣ1,= ȣfbu RBCY uf-D{dPg%g' &t\GqG҅ Ǜ ,D]ݧI~qg~n(Jes-<_ؠ@6\;Bȇ>&D%Z+X3),'Y=)BjDQ%D/i~ÝU=ɺeT1Bz::<@F]1?a|1!~!jL&ibk$hr2 (D4-'.喓7˄]fR:N OFbT).ɨؿ/ѱu@?L&EG?P/hF:-QAbQm]BS52T>O!~._\+ˉJ0d / ˈ/HS ڋ57ʨXe4rTꎅ̱/?;B$ccd;ti22e;fN&ޛfMmZxXF^k>R$3i=C,+s,O.Bt'ɻ&u-˒H>w$:b@z,UZ*/ـctlHDDX$C5b䃕)Z ЂTQYE[}-O) ++dIH%<́ ,7+>8I_T9Z Rk[zEpeQ bgF]L24+ 0Fn޼ѝ/>Hw%yғ/r+&n$cWl r4[$٫ϐpw?|4(=FV+4x%d2(IB}#Ejӗ|lmܙQUWTe1[ _X7">/*GbSu,ZpZazm7HEJ>d]19 :IRU>/K1e:iXƇYz Tl6n݁lȈ QܱM|H=]F+ݧ1ʐ4<;7Qp,.BK&21OKm:]JؿhYXQ4ѓVeOD:ެ?j:dܬ"< b-7 -W+ͺc^ƈU/(P &*h C%*zWJ_(E+в^yQ"_1PB(TTw̃ HB]BMG1d^zl l Ǿ "t#CTkՒA]Ut6:7a:֩_lFbL1 t Atp:o+4>ڱo![x6vVz Q42qn|s3oN=+8&nuHAFvi5>]Ǿg8ւl1Ό4HԪ=+{<wG١HukYU~='#E&ŋ@M?NqہmYPjbm)Ff̎netǎ̙5'̲Y:{ѬF3ϧFBqnMMM`#W14ri v;vinzyV1N|+σc-r*u`U< |Vڑ-S>josf\IlSH雸S5bF:f>\?*֠`gbx3)&֬cG~OcX2Kl_x287-K21Oѱ-Ǚj S盙7pDq#`cyRG/WLaqjQi \mi|`z;+u!<|*Du?Eدqh(TΓo [ NgnϞ\v͌xLgÜ,yy@9ĸ1ȶ|mG(eLnPP{ν6vVpLH9{r_!]wuh]ϖ{z ;x0 9-ؽ9Z<""Ρtzhv 9yp s$mdSOmquąIqRۂzgRS+Cnj4tE[ o,$}[^{6XvV۪`D[ZV]~=SyPMؖt*<.HAsũFl9ith ,B`oA(d惷l3kE8[ O nt1g >pI| .K#2|>׌3غ0ǘe3]!0fձnAl0Ǹej^A ȷO6ۍ Z>@&mHXOdT DZ*ION rqAlP}AH|pYY'OBA :֌c0Ek1|`T*)t~ō4 :֌c^Hc8ō 190:Mgq ^I/Zˊ{8 eR ?خױ:ieXk{/3t z{_7§y%*"M ٰ$a{s3>oAL}p ?o{.dssNN½O+H+6%@bM ׎BAAX|Q< ;W5}6s^™gmkEq{qax k"q7)$ 8 ŵ12j{$XA0TL6j{%.1ɍJ u [n]cTR[*y{fe gN>o=C%{3ǤY&8R}Ӭ'$@W&`'s)yXG_4E{m#NX&&pWN~彫(S:f)bd`*1$BrLJ}t[n81}}3 &VJ$`''٩'4 M/uAުquhm7M"M8띫Ϟ*i?pl҅.YLի3$WtLnqkfc®Ni7]zR❞=ٹo }6#DfU[Fb\6}}4'ns;++]ݰ\Œ54L+$K4S*#_Z] Jc(ҵˎS'^7u5H/`_UfmX+ΰH^C_rWhD͓:Mo\RJpY-Y 36oGJ)?{&-{9$cjDNvN<"LF(1`E"c*FМֺu; ױ/1/cǬ2Ϗ{9r,x]q7+hk3 $ۜ8>MZy1(7'b3fof]u#i1WuLXnqr1k믿:Ry]v+m{d0+Z=2^QxbCwX51i[\iQvFam\^)pǖ?A#ɱņ7$__z,X\zыc{zβxӎ86ΪpI1cb> JT~suux_k*W7:c{ۼ5X\2z͌XqmS I DZF44j5| ZMX[,spfJj:!gUc^{̀<>~b$c~L?8Pv>n7VLqs͑v͠Lis AN e.(F +AcbOW> {`bCKV΢ =wrJ!Flu6&L&YLUc~)=x)`Z 7í荈& dBuJ¼Tڗۇ&E{qA Y)ئMopa.v"H}l9YќoKwlS-`9@?R.Z< wPe،D~*j^n=1dvؑFn 8rkkK& lrAjnjjj +.1)/zfzQub,Z'PDOxO˱8'ȱSSQQsU4 8E3}vdLMMǛV}'bh\ԹڮB&4¢Xfk! xYVDwtt t_vݺ0U%e@>a@\"U"A{8f aU-rkVdA{Ӫ*2f9Ǣj++G6SX?RZ:^ix"" 4iit0M_^SZ6^3XӎFt=uҴ#%a\Ҳҁ:H .U*"÷ cR>!&I3&55H7E7cty]xtu1!|cT%ǪZ܁BZ{OVUYѱʖiJfgZ,mX|<&5碣#رx)Y&zPͲ UC18)K42`(eiB'% 3Jra28hfH@ žA4,5r(I7t.?Odl/קc{"hT x***@D?/bBT*G_[!1*OLko7oXӸ9lD) SxEFsdfFsGGD4_!̜Βe?A;SOݗ#99Jf4i <6U܅1(E($Jhc>4HfB'z^XA^D#tX6 tt>* s+6xrkbc;w޾h5~-t,<E>l(RD̓vVXjB&ØfoXQqh0 M=l]k%łhUl|f􍥛5cϰPَ /NZt:X5=E:o&9<cђ"X+v9o9ͣJ^*[&biYfz-|5ŸX4dÎM55ҍi 'I7e5vln1sl_4&9lvn9&q V ́g1dCM$͍Ђ+dEgY%.Hnq,]:cG9A؁s0=R38&n{cMft8ñȟ {m%@` zZ{Kȱ|a. 3"Tů8e>QC#4j?4;d߾}W ǞUɿ5bg u<G91-`;f:/Nmӵoo:Rmm68vbc8 98x‹cX剮MvGj= ~1c݅,Œq,}3(kħ?noP(f+'=|+'.[rcu"z.^zg`Ş[r,r^PyB1)YCw˱9DcOvd;Xhql+k +Ѥ8^ ϝ~<$Z-F|Ʊ o$Ye+om11JPWq5xͱĂ;X;Il TL?^⽯8cơUf*LihY`Z ͱ#x Fyrl۽{>tXd䱶@?R3m gFEt߱i?ᘞ=U.2khU+qYCPa*;87 Wg2\؃ qC@fuZ-c87ٞ棆 6l/q Qhv > bZHzeZH^sh(&ЇVK#NU YC%.sA1W[ǚcJtddhkv=m8fx>*KqTd N d*wc$CF)hfTPF7JD QɊcި8ycC'>xȿ8uZ=1_ᄅwLZ!cLShC9FPY(&-ӆVq H$PaЊep l˱9xfě8-X$8{$cɕ`M*VtavqͰT[K%t==y_WǧRmmbs5bCEYFR)Z%[wmB8_zIQfؚZ#ǒ~0 '^^_nPv- DWDfTs+1eMR_*XC׃9ħ#'e†\*yc흵'C/jqLHZMB纊.jo"^%Eh%=p̗2lJ@$|"TDX c":#_v]:$lU [#= Hrzrrt999eU_]R;k姵: 1P6~Clݘc-q.f쫙c/_/4O}1Z(8cHt&7 H5tlSRҗ+ΝcWS 4G@;ÿ3e}y䩛8jY(C'Kṉ`+&. ,/+Sry.ģ8|dxƖV= yCp`li+ c$)8v$YF-^/TQtG>X~nmfzh+;YBq!Zر1Ow&*Zf792^wm]0XS * -u3/b^8}e$R KȾUXyi`iF@3:/Sˎ .[ߜMEVUyYhFMpǝe!Nzkj7A%e~vťKeǾ}Ņ bA]ʱV_5F)d pb1׸طu!1qa}`ҵ_EOACwo<j8N|d+$OB݅{ cvSq0;[{0>naN~$h];Vټ"cpsycc!-xP0pBsNMy~?Xtt1@(ٲa{tȗIAҾE*6^m_߱wǶ:gvZa_z=iz BiC-#9wGNITGquL1ıDZ F FY#4V13?9qY{@ۃcI ^~q웳ǎ<l)Jopl]pLQ"[ìleo6Kn63ν+8Sklq,fC1A9lQuQ#pZP6c8NRwp䘳Om&iM dt b}ضrb펎mnw߱upvlcӗo;'c+ġmڱ9K,[sLkju8!=0o,Ƕ5W;&cǎ|˛#:kӕrZZc_^Z/.EG.Fr;n(X]ceDjk"]DZzjm&Woγ6+ ѽB*I_ҫK%ivjC Oz^q8ے׻1+zXczcuKOOD ,Epq,hαjԆYl^[]$cѹRq,Kg(%c*ҒF%E@?-H:8FqL)yAǬs+F7cwLϺ5O0L-FVS;Fo܋_?޻1/4%@e |1gJB*[F ~/ǦKINf51({EneEGeH1+;6cd¤WXޥ*RG.b¼i#mfz}<رeU+wQ./=c~'^*B^µ'B`˪"z>od(Q0?|Ա2xf l߄4ouzczK %}u}g?:~3*<^7Q̓rsy ijK;:J=ΙU"NX}e{O.}:>~oپC2Íc'_+: 2AҼ+vXn8Fv<&+p+AX\v웳oq4~ъG ⣎ؕR=)>C:=o˙<|}+r !gO$#ǒeE57w1ZVbGS蔂VBPRxRc]Y/WoBb>cUؾm[dge~qY[nۗ +骂79&ҌYJ+N*:Zo:yn^ce:v98zӈ`9wLǪR\CUx\qŋ8l1֪cܢPn\vx)4',]uGAE%8S┃m/BAc2:I\69I&xZ؏l=hkcNC 9\;qU:؉pYı͘Ċ ?;mTB̑⚣G$۩5##5PX{=笯>^8"͏se$#&\15Og>>8X7|p]@CkwnjmpcB: $Ik f'ZP? %E>%M<0ѣתI_}:cl<~Q7>92r'66{{ο9GhUz%N]ܘeL3fhcN)aHgMJTZ]fPk^;&cq Ǣ4B2 ǚZn 궠n̮vU.\s̡pɔ~:,sҌ$[ƋF'Gp7𠱱@-(|A1 d4!r[[;w;6±禩WLA&K?rp}EXk cbǤcm ؑ*4f Q@J#wxP 卬(ih)5l;&c'cv=4?tQ45:MQ~aXcϖjCs Llcڔ@]kNW+7V+7oVý.+h]-o̱\Lx~':Ѧ~˶J׎JO2S7xȑ#TagDca8+[؉oͱ:~cd MBBTDYZb^iJ3I<kz>6X7btc9Ppg}rn9v͕?VfUsds+Cd}*ZgxC#GoC;.1ghÉ#9ahhqpB5 cdЌر~p Bt9Ul;ېco`nqn[DZ*Qt}U!,y9fMccű!jN?UtPq[ ^JR.T j}ir$3ڐRg?&',3t0NVJA3/YٴQ8V1plx)^3}J [kȈ[ ч eqL̓.mo6Kn63? [$ؤQF T rbm$o=t Fq' idMaU'.[cjcx+XՖZIE?$#ǜ}r~Y-qhZPM dJ?uXyUA1絑dṽ8 YcN6Vp:&c28&F+cQnwڿ"cӗo;'c+B )4/fn1g7'${rs0S +.F}Q H8V?H\ F'fW z KETBӓuUy|V1TlFlhSfVD\|k -7˕Ɉt(Q":zb0!5Si4*x,şJێH4dM3*`Zbb*\_!PWחGni5&>9-}46T$lH,A/SSM*αʇ+mkJA2Urzr1MN6Ǘ, A[ct0ة)R4?̋cAS,o|TVPMV.b¼iƺ;NqX(Iv :l qb8gn |4ݑ9߷[^$2p,{;X1!kŎ=oBcweq 8QT"cX  LWCIP{t&z7FL+;˂LY({1o j ѪK7QQ\6ڛ љκb.$m 18 &%RU`JPZ-#ztgLˋξ}/:~<9'9'$! !9{{|Kn%^1>qsN.}TwJW^Lj;q|v& ?Dzѱ{ 3ס$97I}^q},9ˈfh[0@ETCU}wmTT` h]%r\mKձ~Gwk-q5nC~Bp5 }$)oCR8ͅ - JڒXbKa! 3,jƸF `*gܕ| 'ACwbwS/t]<> wTK?WloÜ`ސ#Iy^omPawđ j :.m+a( GJ/l} к=>kܝ<}% -rKs`GҧC[ǕA7rl!C8 g9CgG%q:&yd\^,F@J/fU]k8 n v2x%cPb&/غY>;R­c̑N8m95 Ncˍq<&"cٴ,b2ni slf)$' bH]O_c6#.rc,B1k1)o!F g%cwfDd b"ql}$P؊7/*ኋK/,rfRzJP;(n39\;1w=8AyE:m>%rwgY}fW$)oCG]7Ù8&IsWaDŽt[_^9`wK`$P ;ܞ8<k:˘8O~mI18&l(?`_ ;\H 21>ܹfdV/DZ2@>'F\S"]p۸>nMmĺ@tK6m.ױ9H̑c,VNl|1<%D0/G;XZѱ .lkzKcr* ɀfu^̻A_FqjǶ|ٱL*? ˱ |ls1*1G+cx+ (4Bγ7쬶9uY}K|?3O_W+ rv~{tDRΆݥBôd+J|p,ʵ7QGkNr,*cy0>c>? A98VP fHt,E]wc䊅RUD+ǜ.3&z-ųEcjw p؎?ԛ!B1WVNqһk^w-QULhɔEx3k|sK~Iɮczu%:I<0c:k*p p"y:15Qٲ":zZ6S9ah w-2hj hMKcBd[e[7ױn᫱1d#K;xp~mr>":mGԱŝc] \ձF[lKf~򎓓μY1 d j9/KϤc|8$XN,!dk,/ lNN1#rJ ԱI|xXҨq;v̘<*U;'5~ !/X{gSSS YǨyŊhKe ߄c3qɘArgȇ U+2CHXр);8~`vXiE,pKl\9lttt8wrұ,jdcapGyy`36qG3*V}7;.pSc:{4kŶ+ ($KD#a\Xk pՇbN\ʧc *M=1 tͦ?ձA^GŽX~A>' ؜g. yp_|j?KS_q;Ա; bqLحZOBw_`mŽa+M=1Ytg#Xcrlُ?>sϻLǰt"S$ױ~^15tcpL@c,& ~|3t"p "o`_04D̮ӻdL8P;ENcywbQ`KRWHZ#c*gt@sdQytJ;o dLbi6n 8MJWDPH:DZ.1 A$J2zcݸ MW_Rߐ3ˑ1nTQ mǘ`$8? ٲ~Kc0ۡv: fj1`JQ':Σw4Է :8#o2&ٍP0n!m\H@1 xeЀUF'˹pP%C\*q<$ǔ7(j@@ǖc1~_@uu}:W21s=`11Fa&`YBmu n1ɂqL|zccJm*TSK92쵰"̵ӂUޱMkcs 326dIvCF+س~%Q.bNpSc%{ )~jDzKeccho-Is XJQ%v` ^F։-oI1SBHl<_F3'x~הHc]M UǺ`@ݱmB" v-INךc wvKh ~KcZd`\|d9@1"؊ce 2`=H%߱`WQꚣ&kj9!JV ,[pLN~;|ԓǃç(g="*FYk/r-@3DןDVxc/A}}(`48Lی.:vRHPeQ۸qUC6V}peѱ!jf}GEd E$0>vpZCbiǔZYP5-Y/-0tGtǦ~o43 Þ\ WrL<\_Gkoξ\ձ7|s4ѱ!v64/6iǨ9Xx,1;NYr,S,mFn21K<)P.<{4ru~;(1< s Ή /f3i̔؊ܽ\mn9 %XK 7wƏ?ø'q;UY+[f5^-_U}ݿbx > U[11}{oajr0YrLS) tnq"6(T&X]pc㒹4;FN1ycZoO 8fJ cFd{;YwN {cU3 e 9r0ʥkVy,qedꅅug<&l]vV1C9|J r"j5?6yŶ0~!H tɛcpdXMS͘cv 5 *ÛZX)0z=wzbFa /%׿aר@2岚Sl+sM~%8.T񗥎x-bzrk~*99uAP0Q PǦz[ Y8w`3c+IrUK_ܿ^scGk䗯ސzÖ5sMw[n*K;F|D, b. w,2ݒ`JqLw`]%f+ACM-M>$$YO?yEqxz9xAֿ(Z :WH/o;qnɇEsݕc@k6Ɏ=+d~ ױ-_Wi%ܱtK>t{2x'W =p< xcD30P[A@11u%)06'׃ΜL#ffgkOݽ0KY$dcZf?ñLW|1DR&'1ZP(ҵZc4ͱnu3s 99(b.2M\S"\'qIZZ ^VsK1HGLڻtǨL*ꠅgVERPXmAC>:GYCva%;%6˄V8RСTFopV"cq& X`!VTcIq $kǔjBES~c,Kxb5XXu5U?bXq:o:1p"b[MqwS{IvlMI*8Ot^ڹsL$Աr86s>77otvagIc/)B)Ţ9ƕ[10cW&A- ^%:$cٽ8JEg/@3HFꘀOm7QGkNr貭~Ǧ(O :VYahkh;EU)p+.DR+߽יv5#Eaǜ.3& 5;v,99{s&ؔp;vuhZPrv չspYp/ Pt,Eu|jj^jԴc*d8ql48M~ZfIZFcY*94}5  Ϯ_rx_=*Z/"?' tw&rXjs~2?ʧ*SӉT*r똵P"h+g Znձ*pL/c`'&;X{: Ū` ٵ.XhK7]-+ [c_p+N5Աŝ#M!3ma. 򎓓μi_ s:ƞ(7T^AÂeIV0Օ}[c[)(VtxQҪ,$m ss (j$}>hk,d.x8c;1ehʂhQcX/;鹧SR2~9iKGxrQGw$|6pqX`"tlq1'[XkɊS6 k߃4Jfoyz({hdO9`ki{0Wy 4qRj21gwIGNJ@,%{E&72P;%]iR}P)d,X4 :3ʤc1g~w^=ǨEZ .W֢ФVAA&Kz9tdG F|yٯTf~{cر,DZ_Lm|R*ڇ'6\v3 FVAJg9`^β|k$e Y^+&ݲz {fUu㭩p i Efca\c:-2Dx=>j?"6%C%@*n7:oE&s*w*p,X-iv"6ޕ1l$ah1l\M?{DPH׻{aw~NkHrDK V(P q)+,E^\r?M6Ϲg>3tf< /gfC XZ;&VfS4M*BmcGE@Hw߿cPF`ГEpo.xަcL*64akU=c;&NIe&u]Cl8)nGWVcA7(8.Zˁhإ i8]D%FwL^M ҶG +:#:ր/6gB/X}{gIɌαX@:u(^r<4J옦cv_QCfd<_(PsFV6p9K1cqTq,SX{{Ohjj3  q9KE1^'؄|:,捈cms%TO옱88yE78F^+6ͼ+8 J;;f;ci"r<~EǠ`%coc&vLDpH.(u45hc1>Ա3w<3ݽTc?9~&wq>f1Ne`G 0x+(8^W|'yۍc<̄$7KGppc՜Z:{s>1^Cobc: 5j8V7<,t;{iA-)O?&:swL'.?$8v#qlnW7DG1DxptdA++ onWWT(<;f>CWN8 nNnlx(7QER/<;f>C%i9VRφW zX;3cgOQ *po$Ǿ?#zB7DZmum9pV ũ6Wб co-wiߔ x k18&ɎO1(~veeƱ xV1K9:?& | CO@8V|_T Rq jq?؇/2ۯQmHzcMa'^p3c$~5> ˆshofbLXa&ΑbWfpǀutWt3c=j|udڱz_| 1O_f7^&Eͩ:6ykkm:ZaNh6A>"d_+&T 1*D X|!gw',ne£_̴c{/ΑZs:uC{:[hyΎ!Α:&da؍6õkdj??=޾HYSͱL;VƩ~z|5ݔS?5sfP!.xi3cѬZ[1MǠ>׵S[ i<*h?;ciewGn4ILowP }ՓҖgۏ+ӎpͤvpp9vbjh}- 9Mt!]Ĕhz!(cSoLa$Rz5R3?%>t|Řm3u 0{{v(Jxjוi{zm}=o&`1{VX`pƱay=+cQ?3,I_7cQL;,Pvsar*.eǼk#|,T7cxFvX#(I1}a]6`"{opǏRcŶ9&PON=p^:rAx@%Ytuyt^-}gX{ojc2t&ɲ[W_9 :=9񣔭()-n^/.ͫŇsE-;t9 w1hl^Me'Qߺ86EÁysgۏb~z>_˘cFx! &M ݉u^sJb$[c^:{Dk/ݕ }m f1cC+2$g߂/ Ve:d^*#c<Lj?321OD1ZO<4pL W4 1i/{qDz1Kᢌ8tqDzͱ/wL Cr\ecmRX$Xc3)Kw1^EE OBwqDzױnQO(6\lkQ1[U.i)qψsLxKD6Tr) v$/Zp&fdTu,gٛf+VzwK<s/&ٖ|Fi)ո!,  +m}' ЂĢBfE/TH`̭)'g1y$U nՂK<+GzupsO5miY^x>]:mǨdcKcJɔAd2fj<ǎ/h?|` ױdj&\ڵ@ݮh5`؟mD]l [Zl`kЖuc-8`$,r˨fE )#i([aCD-8@T .o~缎נK+YJԧbEc,8% Rz̐rx!# gDd!;m.1cg{"_ CNQ1'6\h܈<&)и"zFp;vdб&qCDɱձ|$ERvga1єQ1ڏ@x7RɈcDC@p-£TsX ;SvLx?h2OGz Ke 0q>!*c cF{ztsLc}"JӨjrظHdxG7X9& 3?0W577T_x9QP"fc4s e)}CX F'whH>b_4Q`X sll؀-i~rpnj*Ssն*dJԼA/E% [؎lۧZ>hi"x:t3ٟhքGRyv,iژmPhxJDBE,]1oas̝޶@a0_y9s-&ܹ{>07N'[3!=yyBcvbfsclD)P|MeLMϲ{zBҁ"̽zd];tITGs4O)ķkXu%u<uMkc,Ϙ\bX1V_ߠØ^;ƪ!Yq7**y3گޚw{o|#UƪX%$Y0T2Vu*v3,fx{*cR#UƪXތޚi;?y;G+)674"Q1*cUg oӯGO5v?6NKYpH>SXIT:cexknYmݥ(58SȘ]eLoX pXϨ?Wyf0%3*~ q# IT:W(Bf +c>k=$"s}#zUm*6X5Cx ɧP74b71XU蕁u4e,矜 u%rWCSc|#ʘXj,՞exS"S2,5->,hۇ-5>`7%mS1:~L֗/XsT[}@_|Z6ƺ _(rp/%ƀy#:y哒KTsE,J>tc0l>4 n9ܐ6cilv2:ͭVeB 6Nzgsnr9cbd!469F3D;4˪Ʊ}>2K`x^&ҚK dW|fpAxM79z)Qz1«M~R 5']EyR2c6|EfXvflp18)HhL6N:xr] ~OnM^J1&TdP$pDDRZsa eL`BAj^|g*ˮ^OQl-,֋P17uM^J1! g+Y"6,; x%H΄MaJeFe 1Ǝ7d  γh,45M^J0fp֢!VO e"cHu'i\>8K`D<8j5>tpؼK c.ؗ/1Cv @<\1ƚLj4 g8VH&b+3&1KjXstP79z)XOwY?&)79)nݡ_2) y,M6wf^ =ęJ{064a(-TzܩsG \іhW; 0f[ƺ8(2IVSL0qi _ Ii/p&+&d\0fgfkM'ZFKKtx"(ccSA1+;3X,5c3< ڔÑј5?t XS&77u.yYzL|Fy}^_gXus麘!L[5OƊ"k_Z@O `4^6!y(c]%2J1Mm1&Lٵ{,gy1g6,bQck{A;AfTc(ÙrZ l{gb0 iEWՐc}PvalJ50U)R:"s则1[,fb ghP$}xC hw=Qhve\OcNx^EpoAƁeCN班MPH-ؘ]BVF5'e =[6M79z)X1[x@)r ِ,@ l;|5(1]nZ ܴ{\זnIo o504H[fDk@hOv̘+dzIXctYxlBCvԡ,cTJbljk%P;Pc|ٵ˾ޅwZ^?Z)@wRO/v⯾Omf4zs<>E#Ms¡QH۪3VQt)N Ή!lF t;c C(c?i?kn >>W?_7nDZwoEzg퇴Esx"U+_jtS'2& cI\< Lj'hQ>i! $aa?Vv1Q&6e N#IbsAƯ8BR^2.[VeL۲TcV nPaIíw^i%nxǮH=?ȧ՝Id,VeLʘ12;ڷ!Ad^.W'ql1nchhu~/d4:>)27qP*cTy G~;#dRM*cd77wJO0y/ T0KNk501 #ɾ|G+1J-8vU@D,ˬiΩk[Ա>cl'09/Q _TT:c n/sc]F 3*אXћ'Y=eaLdlOr9ʘlR.c䂋ug&1T߆::jc̾&rTXrKz5ZȳTYJru$6q팮86ǘ]:ƤҮ1kugW "'b=4.s =n~ ;ؾaiӽ ^opMt-Y[_XjOouVD~sŌGa蟏SԈ?I wg$ V{ҵt/Ewn~֓1ZsPBug"Jgnk{eV@~#BV^yqk$o7`3H(;]{p!>M|m=ZLڞ c-TG@1 "%s i3f.r(E n\:;~D1coq cte‡ vj= btOWR74Q;?3x!6X@{LcV s) ro0V~*dlʼn,¤FWk(za %՞t-&mOcԍQZ͘_AB,قzV246Xm^d[jO'{YI%<̌ـ-h; 4Xz˫CZ58:*. 6 XMdL L0rD"1T1@Hm˾~cWFGZ|ȘO3K4l5 '̃mc "%փV6+t }:]0B)g5v63C72FCMF(Ag1{}xLʘı Lel_1# N<甆J֬;|Pr0P7ZRހ }a<ПX7??oU1+1um˾X-2ft4<"eIzeK :Xm-=Șq9KC+/(]cM&5d3XQeZUwXcZG}X3 Ya rH%ޏҴj^jpg:ePK\Pq*KJ^ۢ@7V!c} d~c$^)q&V\IƇ^$l8X2քu*c0휇0>6qea\urJ zT RP[A Z`q*ZDD aR"5[JR`=g|a\ĞsfF#;9w3ѵ񏮉]ԉX*]9th.|`>7h:t 0 [F_d/G{{c2syvQÏbL2c@_%kL4qwKdҝJl)Fʮ0<ˆ&fMbs=!R$P =@&GqRW1+2ۯTSaB09aYuC251tZQ\ULv(f1 d%#,KV_%dRu~*NKrp39STqc"uѽd]`-]-e1Ϥ<1"{U(] ՟)K1Ϥ!Ř]uY1.):TX\)bC5Wc xSϘ\J1P1%1]>cbe-=ݔV2嫱C8QS&[iP%̿as/X˒XyN)Rcǧ_Gaƙx:^ܷ9$O%V-beXΖ+s&kyu0mά̿Y-G^cw LeA7فKY?Dl&&cOd3bLw)ؒXl+7XL8Be &;0y)Q3/96EPئ3,y Ͼ fܔ$&sg1:Q3/96o{g,Ibf{1r$mLrZH1600+O5DĀ90IbL+$1b/0t^:v&ec}yCc1f(fg,\+<^)puC sׇj2f(XiS £/1pM"cf%cdAQ3c֎tg(-KNĂɘ9 /9}|' ^qRtiMN.,&5my^=<7{XX8[H|m 1d_&7فKY/ɘ*,uw|՘oWVjy1Z>&c'+VWs[Wx\K<|rR"cwɾL2n3.:vfeN'c 1P>4s$16˅zBR;j[c<|4G' tuP1߯(Xi0n4: ^@uxNcXƘ/e`fYXݻ:<6@-f&,^5&G\8G'?j]21c_QD8.Y \&Lf̥䔿Ibԁo0ݳ{>3 .ja$1hwFWD/@~铌+|Pk\ʭѲo&Řg :c B!z9W^W%XcP7f* ʺco`3D/KߛIVJ^2KQ~[WgEb} 6c]z$~|ӛV{S[_g]1pLL NBrɳcy-֯"]1fzC\{{i$8055 tc?`:E68 ؂|1H&4LGEmh]{aWa7Scu'{KI:|R?{^ZG7X m- $I}ƼĂ 5dło@kڹFbZ"k'1Mo+2j1ܿ.X cB4c7 RTS:ҹFZ[@Nb1P:Wdra58aXbkĘPB铌qV8bk4a-&nq$fcYLls=Ӳ4t*b? tY k1qƕ~&ԷL.2t3y~wbL>1u&ۮ^lB}1LlCN<фHc1P\oc\P C\AO(މ1"1k4a-&l%~&Y\PcBE bo"Ƅ땱7b#Ęr;"bWb1䎈땱9uxTH;"bՒ"$wD1G)صZyJH;"6[orc=RHƼGxƊaExhc=RHƼGxyy֊&WĘt!#R1ކ0/ 3_Y}%d A1nl~#Ƥ{ySw0Vy46yIgþA1nt~{]V_cDrGcGxâ8fGsfpI f.߈["#R1/y]ͫt0a߰s~{]8v[$wDJ0v}7,ޜuQRoV1硐G)˜ow/Mdz ̼e%ӌBŸ~#Ƥ{*yX̾12aݬh_));YOc087wjxp7-)BrG[d䎈#H;"bS#EH1bL-!#"ƈ1y= ::_c3Ęl!#R1]zΟOgq8W:{Exn~n`\̼`ˆE"d{j <ǜޛF cɔd#?qw45ɴm6j{Dv/zh7A-cj^̰SAR3o/CKÁ1f4%9V2WCZ}nXD(3|whn1G`x m05DZ0Q1oŇ74^N郀O?@<—;;X0؋JcK9JXߋy( v:p\Rb>Yr0//JC?4`^ؽ{Hc,z/Gvqwx]y+&P (qﯺ>=9h6+ދ:S 2ڽ %1RߥcG"eԖ{ oyvIt4I,~ o[܍l%ɔӜdŁآy.2 {>(b{ERu 9c$bL11&V+bD1F"Ċ#cbE1Ri'N;?C߄YՔ)1XRhzCCZMG5tSt1ֳn kf@/` +M|1%[ØXpY59e xbJ b;[6ŠQHwlS{-W^\մj& '&~^2e ߪt=Zk,_ b~C:6yV\ Amd4RuJL1ϱ-5ϧXp>ffEv|g#Z񗬦f7j//Kc?V P#Z]JdAֵ؟e5UYl&15RuJL1p4lły 4`Vd;Fاf%tOC]Jaю V8nfXv. .hFcNI/cc3},ałC췁oxblrd>!vs]Cf18b6 Nd188Zcjcp 188X/1cS cVT cX=͟L{cV 2V ӱc_dx*&';8IǼ'Jx"34X4fdx.DŻQÏ;QI2>Gop E1 oɺLxnźQ;Z0rSPۦQ~FGG58"☧7*m$:vnFRJ^=UbdXD'D oEvPջ%lYz2ʮ}o18<&z?F o17֍tm5Ũg(c[r~ E1O oF^ o17֍ov:OE.c&~c>\<$ãrR&IX7N?(G2 ['|!yNx S›(ƻQiЋ%Fa(e|op&!M p,=p 118S cpL-p 1wl =cp~ !+1Xev_8c԰{]/agzА2RYz+#O =ҍ-^&~8n8@1S pL-p 11S pL-p 1Rh"lE:pc7x:h8ΤfIhDGE>ZMYhx»Zlsۛp ppM }cB/-jv .ZhkǓ'uVDŽ]'\6*;/Um}iب;a* NjY}]p-uWǀ.MCse1QQfۍdsJZfgY]p۽VJoehJVQv*Flz27i6Yx84hY]p-uconǤc=:ln+/6O$ -S:F]mlZq׊;@U1yKn4hY]p-u>J]fk*:[}51d,Drz_\jav%6O=X~lOgY;ftӗc]X .׾~ǀX6v`݁?hY –^*7'+:6D G$k9`.1̲'68ZI+ r|`q+N'̀tœ 2,әf*<_YY^^.%MyC'Im0J ̫aT;$2g r\&?Aª,pH\^|C'΍aek\±{;ƌ9Ö5A玎(].cǂ p,r" p,|Y8TXhY_..}yqGǞu'?1|XK>ǯ~?p۷o>>;֦0ajouJ(HA&n8]Yd Җt55d7&$P:;yQBWp1INLJO2~ rl|ʐ1vFz =WHfy {ݾ^`Z׾b@Qoqc7 -~]̎{V#yRh T{>fcul'!Xl6C j JT˳WeeX}2GUrLVοc[}KKT+X?p䘬;)g8D}-ȱsHǮ.Tձ 9&;#[U8+JW\Z\'$gs&_5EñY{Oc3z~p:W:,pWMQ`q^u((n[HIi] Ǿcc#179&cn@ K:?r(ā%z1rlc*9 Qcz qLmcu˛~@9&+c9KK/cc*9=c1uDˉjӎE^WpUw{xE9&c}OcsW\uccڱW;Oooc0hsa=YMcMX=LIi +]w|FNQf88V+>;U11X78H-3c Vc_Ǵc̲ڗcI-G3cOj_e`1~7Ty,ph%z>6sKTj<ע| +? i5WL'`s, i+jXb()t_WrrLtWrrLceccU/zY8(p˘c4J&p.c{k03s1ŸԳ!!bFbwiq13-199ӱ{1plvn1I^WyczY嘛 =zY8LeEccU;R hvrL#ǰKcY+v;Uvy=O7b:s2 r FӋ|9^f&nOarL<]` xQanf:VGX-74~78c`|ݯ16tr BN݌ oourL1&Yk١)Zt11H;xa :up S|8dlbGYccʱ!ǀwC8ۯ9 c!rLbX\xɆcvE)dƨc8zG]X{)9&X8zGryC1 ݿ}8-[}EEu VaW}mrLb:Ϡ< cI= 8tR㪗U}Eqh⪗UQr WrrLceccU/z7|5o#ÏXQ/fbO_I# 99$hW\\Inb(e]σ؞-0zYW޽)7 ׿kGǩUCۓ饢)! Bħ Pa٭P+B?z)_B^//37~`7'RQ9:c8(5*Pԡ|BA쯑Hy11u(c "BA:9+{/bq^r uL:W:"q^  .ܱE=LUӯOpul1!)mvqXقi;+YG]핦X78w8v"wq^ &CS̀>1QNUh|:guެu^O/ZcT]$ǼD>c)j kQu8606Fc֓91,;Vn݌!6; R.ywM XOf]b#crUu3Fꊑ_yE㗦&q^*sˎ^gJG,;vl&T8l4FUkXucI19DZFěS[UD:ʱ:V:CS'XvlfTǦR1<]`n*uJ8ggQ۫g)NQсyfxX\-n`1:OsXF٪̉! qqfbvՠc:&}2}:~}yAWfݞ~c]vLzn73c{{W,: :σF>qFƁ#Zp\g4pzQN.f1w7.ګF7^y}]QcȕKBȱJk gGRܼ3c:+ BtNFq ?:u,݅HtN8:u }<::ul".bSDq\DLALvc1{]4}Vm(u!~йRqbN&>xC['vHq˸}ӃI-.:~44KI87`Hs}#suB<S1ob*5䆓8^zc8^zc}<p6gEt I)OT(Z1>;T[Ahf=y#oQ@Ʌ6_h/Yۜ)3p |xY"fiŽѱVRmu|}RꄃDe8qgȗߺI~?]-jۥ syb(`bi161ȱv^MϬy`A?s,k,zI]XڳVW=w;1gn10 [*ヵ/y jXR3ż'J9 KON̙'p >kQ;i1b5zDi"2B$6{Pqs Cl/߱Ҷ eQMl5& b/N̽<10B(W11~^i-qjN4 ƪN1ьx>&Ͽ<c@+Vϳm&Kc cjuzcgysa,ڧs8c8^zc8^>hݙLc[P[IENDB`awf-extended-3.2.0/images/gtk2-rtl.png000066400000000000000000001504771507226270000175270ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ʫɹͿ̿ZHocXӛdL˼]IݘcL͖bK^IٔaK\Hȹ୚wԴЋyi]I_Jµʿ]E;~[HiL?ŵijeMeMİmPF71̼ɽ˿ǼZD:_I~WEXF+**Ź;ʻ`J%$#110987 }Ƿļ̽üVUT?>=FDB~IGEzwtgNÖ|zٻRPNĸMKIfcaM<4kheøusp`^\֏^Iوÿ¯cI>ԢsQB{fY[YW̿nnlΑuԙ~6MZsniƦwaȻfPFĆksd4>n&QmR)o\N}v}1`[ɦ}OHĹab;wA 6a.sg\P&Lh3۹㖍w`q6spXQѿ^I$#Lq"Ɔ7-/\v_@hy?9H"pďc[n)t-J^nܠB CӌbE4caL.TwFTl0QD,ʉ;s0δlQb}{F2QsoΥ^XE&:F* R 1*n*ÜJU`ɱ {h\3eN9-2evIʡTB6a7Q}(نgSbر/cKINЦNDC',\l<Z 26cZn8ǿNHh*JB!}ٓϱSLx.K0 2l2=O8VVcbTq0~w6 Jc7 h0S^/en.G`RTC'O%4Zclr )=FI(*Ne<ʚJSDvQ)KQjiKf!Ƙ޳d).13Rx -EXV1JO#`SD~!:ŨԱocf*`A(Xf h{|>-y2ZhGRBBzGP&L慹38 ] F {]}k) mA!ŠY{ҥ48^+,|pƂy1pgجgKR41F:K%9!";9qÐl(Lw kCl~)͔AkZ( 73LqәgVBďD{(]aD#ZcK1j ,Yv 5C ج4 gfQ qnw^ $E"0&Ҕ9nRq fbgxi!7:r{cʹ ?*}F2sEF@3K85wqͨo Q3t:Bl9^tk[T-:BJi .'^ pW}T@45akh.uvT$iE=Q1EaXF9*xWUyX3yǚ Y!tpCpƣ>?W \z, $?;lAi Q"2C1'\8jwLٱD# ?njK =q ɤ8f27K݋fq 3䘅P.rY,OC}N Y.^b[ɣ<ড.`f]h!d3ͬ} lC辢a;6$7DQxic]/V79!L(SPvZom߷3\1j)tLuXe9 ǼѯpV A:~wOjh R2xIml]kL}+$^艠VaO$UtfQ1R &b` 4\L 7CM-qk7L|KuQXob&b̤DzftD^cqjcځskcxSVC;{jaVŎ527a:J#j̛O4v4>H@ Ԋ'VZ@#jO B-{@ ٱZ ;c’G0zʎ&,y>__)pWGIٱgK Q"joJ!<,eg 5\ɭ[OpLcK;>Գ?p{v̳?yǖzycS9Z/g: ӧap!T¥k6:]C(Q\rhtUګC=]ҒBU<(ӕѮ΂TAEOo!+,g qtUؒE9 y}rZ8?E1Q4MrCR>OGQJ{tzB<$OWFOzlE}RPd6 ˖}zBLu5-Ҫ.zC\HԎz._]] vԩ_'e84X_ 񃔈չ{4V7~TG9!MF~qP&<8\=PqqXW"PtUؒE9{DW2F'hMJLqpQQj1)(\˸TwM]' Qp0R)ծRSAWHu5-Ҫ'PFTszKRz6 8oBu-ҪGn=qc ;Hpr`àC,;Dx$7=.,Z0ˎ=Kx$?wyP!&Evl9@1Ȏ$@vB-{@ p|N0PSgM+ `(u[a4;2/ ^[ ,n‚YQmixY܄q{+xG9W&<+ヘL ' @r'<>]>;' wILF?>, 7vLY31x`zx,ƤukO%Ǥa!$Ae{&<ޜ'#3V"ϻ/B㫽1`c jǶ ζmm9^ljVN LP(ee돧Ab홋#F ˲۷D̸2";_>PG;*vL7 4Qf#DŽVl6`L|Q1x`UL[(kcrqv@6.;nN%,r,#yHZwp kgrϟpN!)>j|T7[p _Ɛ]; /dc83d[pz\zxbum M&(quJ,7l6}87"I_}";kFWD^m!ްg u ~ϯBc۶9g߽jժ;wMGb_4N%t\&6I&t#uE{&399MNf2vz:>1 WW+fcDŽ؎ϯ_Bx'XU236:xݻw_4j/ȲH8<>R']e99%#!i{<L1ЪWQtL!"!Zu;$U(1Wg;+94NܷdxdۯPo_ 5j2A]"ք:}@4ȱ̙yyHZwD=>_O"w9 R"ޔn$²H b5S |v ?S@}qs=[X89P{˄5V mɑ:hO`1'ss#+;U;ǞyJ˱!yv,Q:8F( B[6{]՛W{anj8}/+"+a<c4Z?>FI wsȱuų/ٽ?*XHD۱!aSֱ8GAO|L LcuL46*UrlYx<_cXkz%λKj.ݻw[n߻5QʱR֬{Y:_"cj7lԎ:&;FG2 Ӆ\-pw߱{%qW> )iҢo&ctkZۖ g'#s}w=P~\^ų{?(E(1h$ uu|u,/8FmPWKƁAd A4PQXE"јIbxaݔ/$h!A@hėP jt)knn޽/yNN4q~3t>~93tC1w{0?jα[doX W@~8Vqcvvv1Oچn lk XJю6Fcqb\cTŌR Jł:6|zLpXSX6,%`eZr5cرsD_W!911Du߾}w1BL\;~Flp,v|Иܡ+ vp2*Xk75ii3fp8vO~'ثK@{g;ix ,҈KFKαOZ׿ZTlC'\Zn7-ۇV= Zn^:M''Ag{OC]o2kJ{$WJSSh±߭EZ}|.x~Nq4ЗQX7#ɖY*2$ӲL٨|7wOcd1 ]]ܜw|tl;;YѧgGdTBv썟["Ϫ}h8ٗhdGhbȔhђC`b_rߺ?:$NƠ㌾cJ=w 7c{:-8566;3xilmإny\S,m~T6X;w_н~E\Dݵ8{bxl4+aXqqWL{S}m&&m} |.ph5EX+9Deo 0ű$XYDCBc"(NJ.Ë;r^r3#<kw<X3H`f"Ex62ܒc`:*,Z"D4VL?G%ֱDT63ޮ@DazQ{=BӁXX5[nKnˣ#ج$ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖ''ܖ(ܖg2?Ғ@G8oA%B S]N7Z{N2!g7M41uǝ{N> O&Tt/tW$Luy0; `acA1dɱL Sdz3 5F)+xZv&q!vPˎFvQSη^y؂΋~nnsǢKN}cʪc)S% )gF AGD)X0ѣWбw)\j/ -\`:όW#VOi& /IR}; z7, $$OdʔdP9ۆ"8 h1(V5]h[(p->cy\Q\Ig#Zt(2x0'/cy<.;x&RA֑L"UJ Tt@Q@J3 6a΋L&X"rr['[nYQF3w9XZ&pbpsK>TCkќUkuR8E a roۙJ(tt 8Mx`3蘪+$ċbV|bdI0YSpLU,*6h:?\'6H15.C+jyHIP1J00Kɤz $UʕZ:+Xb5o 0Wr3XV1Jj(U*dJ._%2Z~b)2ɼ'3)JVeb9nƚMZBpۼ]vH^y<qSzͼ=$Ðt&d!ձ B+ZFl$$hK 9!4.ĠTcTrlK$d9:EdigʱlZ^+/֋){W:HVp&E2̴Ӌwr[kW&YAQ54U43ǜ^EI3HGFt%惜gX|? jyb529.JPlA\!h(;M|pz?a L9HA5;VHvq^qBd (cN}^% uf1.Pc=((wT<>N4ef4-Ǣq}X=t6ťhձӗjMcAKK_c[Sw͟qt#&rÁ3%۸ǂ#qᓇcx b _)qlv,mBW*9&zNԍƈDv߃t'o]ܐ43ڵk+ 6(ߌxs`@|͛7/!V\֯6s[!y|o'z* MP2 :01+6,1O'^XA'߿\bc۱Nyr'O_SqھGNBkfƁ\m}@߅7S Oc%hZX*&Tt%?HԘQg!K]Kmۻrě g[D a["@IS0Y1ݹF0 B@7nmuљzj֭ңj.bS,#j332=б!ڨљcc_?cuGo4}hA<NGLhCa|Xl)g/cxXLMgjj M>P^V}&+B'FZzix4ilp2iD軰ۢ'kN\CHvq +JβY[RbZzر~jҤ͚2K`VJ ov*|K(0s _jQ- ƆJL jy8NmN sch0fϰeT?+։ɩT\m+֏ nx(ku9be}ԃ<ƇGϲJbqucJJn }~E5pv}Պ^MGZ|9;'7|1NzՕ`:"/rU 7ҽRbj}цQDϨcB PE }EQ.bm"] wjbbqI|ՄqגA},"s!( EV"LHi0QD1cq (f;x{'Ɏ"VЀjk{?RSƴ 79Zr:1e4K_co״G2]yee:*myuyyv:⣢|9Ta#Y{NlXڠeHh|QC8Nl9Rwݚ粧#DTTN_l[^)1)>lt?)(rٜʜqlNI2ml^Ya5u֋'n~:j<Ȉ|eYHJI0J*${Hci \8CehxA5сp+RJ.j:W{(CqZ0kVKQYtzI٩S7ȱFC=F}_Br:FKPW ;=c_\Vp,'ϻʪ]e/lgvg;꒒}9n^u-.px;X0ahXhw?B4u8m#?ro9S.q;P@]:slNf2l1JηyLKN"˒ gTl@2%_L?`MO?BtjڶR.\H &m7f;춇Ykmz h8ՒcH<njic z5:4|1=ݺuX|߾}wn ʜ(raEڬ4t8g4L8⹗vrs$Y<6Ùǚ(R^U vm4)u%%)!qʲ\6+&p~X2EG"jsAslNfjTUx3I>D %*͐ ⥰z.]KLwI WhiiiqjuUx? Pqa=>q_uuywN;~R.):j啇;ɅpŸ|*v+:}/8P,Bs]"+JW7G6|IXkN+>].?M??ȏ]Β}.CT֑iMZ!h%|'qY~nnTLA(5GI1rsb Cȇs`I$f=īäX3SdX ۇoCʽd 0ıe˖cŻXJˑ@'&l>;VTt@}?N{C"8]qB*vQ8@َ&ɥskZr$'ݹṴcxj -0|?\WTO+:WcޣuLJkJe4t/ֱJ1Wڎ_q] e>%,s H3m^)Fc@STOdg,qYn2t@!\84Lc~cۮFvmQܑ3{K$XEL'mZT1Jn2tiVڤ%-U.짗;wųk66XsHVJίxWvy~!c9=u`ʫ"-b"4sV ,IiRx)$i H6 ILYN;_Vye5}«k4jkB6!mot1KE; W9GT(G%&lǺV* .mѢElWS}pJfPDQp"L%a"KD&.xG]hAW9䘄Z>ƲɶA77|ft\ɩ8dR @{EHᓘdv+_%c%Q4Pʁ5+m;mW Tzc#-Y.5i ] ;s9;1&HE2 iQb+*TƩұx dVG0U,RR 14[|F DKwl:,c4-ӬiMeC~UqOi&rc8+X&`%@^2*tCFrQʥdw,C:*T阚^U*[r1Lܳa')'8bHUL*5}19lrlm 2^k;V?S$at_*Cc?C8n^1X`bWϞo=9BeqջOwgڪ7Ĉc=9(c{ 4(# <`rPDnKnc{ұiӝu!w<8VɎ5njmYf&mo0͛|2MWyr8x-2>k˃IfbN'T̆czZCJ1VߦOnEǪ4Ϛc3chcϺ =6{R묞`{峀iա mm &M6\[OMj.i1#Spnj-K V) FR5s,vmɛAIXgjÓ]S^U 'VCC>84& *RPQ @&s ɳJr\hf)ǔ[k۪9oJ!6\WT7 {ѱqX!?jEV @1$͘c؋>TvLi'e y7z(Gy(/I CuNMt)$^.!9A2cߖ:zLz-ZKKP_V~Sc]BZǀc]W/!膽zb0P?[)TmU%۰aq!BmU*fKFqo!whaqPOccn49q8(PK 1-Ϭ0C[0t.zojH"`"Zt~+3AV!V3 [Tn(x@AkZxJ e;br۟6rQv[Subcc3T>M_EƼZ"@.`3 _}qO֖[-yf-BvFr*"{OWxxl2=XV$' CPWdj\I-=[c&;jݕ8"p?4DoFzؔ!L&1 bM戧hj96Lα2VLLm3ăGK+ YePQxĄ#N)r=Y1dRS ~L 3 QRn/*@T$]2K+S:aXN"od<VS>2Z,VO.!LC`?͙&zmxٱHYj*Ze\u#;(Nj<*!f I\SY;&(ӝ}8 0IuX@ b^,LD}F.v+K!@,6 UE瘉C5qe->! AdE N0q!0}ੱȅxu~Ӻ;dpla4̊*e0,ZE$ +h7 `SvGr:641RI ٦a̩K O9 7t=tzݐɇ;#^dz}H|^(V9bKm@M|1QQ p@*FtChy!ylq1tET,kp?jMct=v^A6D"cڡUCcbSZ)cw˙0@)K50xO7E,=G\ޢrW]w:Pj\u \$Z])>'XCW٥FX1AJ(nq<8}%\^k!z8QkSiR|dN}ŏWcm+-azcsV+"ˁk3E4Z  !?:w3hho/+;.:idH-V ^z/JRZ#84{Qylb($y!~,n&;!oS#Wju!XI5cGE.r_/FKs#̈͛>sԐ,fHrX88xQ)+pF/Xy$ȑ+q9uk#)vڄs,E8y!K`^ۊ6o_P yqb={V1|s Ǧ׎sr[ɀ$'8z#4LcP U@`ɈucT ->Rd . زd2 V~He)4uڊ;ǎ^;6mSP K|/džNRF$N;N(Weqs988UJTd|@ŠY1Ȫ)|^̣^;jtNH'6p'0)9~a"ǜE%15M96d(P!6HXCUB1fMYp4 V5ݎM3c6AL?>~K583뱈n<6+V2@!]"f$i`3B o`_2( ̊G"cV~9XcGwoA;8p8 Q Hl97h?>)+{yM蓼<<蔗7{!k" < wNkmڝ p-Y62l:c e 9f)|^ zۮj/K~R3_l'0yびͱ51+2Xl+Ru߃G|#uq09_WԱYbG}{feJ}:\q qN ǂ֢0ߏv,{;rc-'Ë>8~,Վ۵))xcOL)"^Yѿy#-51i2x67A$MԴIb1S_R+SR;w;w8%%"uyɍX/A%&e (Yjn#c9uU ̆My^䤦XnәDŽb,9v<^]ޱN$xdXc_Q@ep:FpXzE*,, / Ǣ3g灓LKlVh+h?C/lN8f)|ٟo}{lm~{Ř8c YILXf cx$%̓䖜\U>ֆTa`1HF]rZqd莿c|eK^!=\>hf!h!c6s5U܌ሎmm-4)=%q\"ŊYb+&@;danη /? @hI+5%a`:ˌgeB4kR995)?|sԯkn dhաCuՄw2زqV9ɚY eefnճ$2̆[vK] y?,n}rO;0gł8fqf2U4G1薇αO}cyroF3:vÄg~Ÿ?׻{"U^ę^y:iA+&B M@ rKrwykG'5> --xJO3;W֡>|)Ui%Dr +.% 8:}ӉDA# 4uk7!qG测_͗;]뼜p8\.Ge:w:?s3G?$6?J!5cKzƱz`o+j$Ipo0k E_؅ ~@ R~1c0bqx9Hu(\j46h oT)p{2^9S/Ҙ\|HIoFpl5kּ;kY J]kd\2nDB9S6 Ip^nfH^46KKQ?Dt/n) Pkcأ#CoZX@qFK{vv\cl+>7۲e˛L5֌U&&6**"b#\$tC, &d";dɒgz4C5F[M5_2c4TTINIe;_kQhT-g}\RrC~ {b^5 v xUEPXHH6 \Q9|M5 f|Ƙ,@'f#'BlMKX<>*o+^p_Ð#mFTy%UǮ߶o.wI~}n]G[WT3d{ܺg]m9[]D(!aX XA,Q#h`۹2F"9&hi`55- H8M#JJ_--!bW<DVlp0ijoj?e$dsUW.:Y)ol/P9A*4 ߏ}P:c;i׎pnwJКQ&Mj1zp0:STc* `N7#z`DUO:`+X0K1"Ô>K>f3-{_gE `!ty)D 5X5i&X"xKbnTobȻB !r Xhk=c \[fӏޱSNmyy ĂS[k}ctҁw,9@Srxf Ych|c2+Nߏ~Wc˩Mƥ’`U BQ9e:M~fg?9}Q숏Ec{{ث\,e ı9؟`D{r.-c\- w?̵h<ŎэEj*ʎEl#Op̙ٱcs0A21ձq3bɳ|efFJ\TzRmM !Er ܤR fɘ1gfFZS=LɦaI^Y:rPEL+}R\iu؄*  V mɫT\6hXͺH__Qf69[=x, 56RQl9 cHXg E")/iĈ3>(Х- {qH8S%r` qئw!Yl?񠵙]]ĸ-O6ǒPc#)G[dO1k+*QǸE pSBوSz1$#B;,Jl1IM\ZtddžOHpQ'~&q =P$Ck18%dlWox'eyeO~<}#>x7{a:vlgL 16R}(Zpl sH #.eqtQ*pXGiŴ T ONQ5M/t,nc_}r7?;~cv1O|_fۮ!Z[cyG^ w'ŎM+TrUW'/6LjaT`!1=j[1YkbpĻ14c7JsW$hB[I?@퓛6u_+c?4cFǔc#zz _vj1Ҩ!O$ :&,([#T,E ZcjM'X\a85=䈟'vSzo4I {[Zm|ߨ-V]̑;or>,WUEhR[UtХ ˢ2^b,VERί ~_AgK+ٽ{z>! 7 ]4M~~I)=hjFU$qQQ cJTKP[Ǧy9@cf4w軟sj7K O ȡ#nSL>$8f_Zk$>/3H85e!ƴGE%U9(SSggUb"[4D6ۅ(A*йQh:SFGWG]{Z*ZXQTFQ:2p[_S?|7BiyN9nb>mHfdnY4 P'Gb FH&;``na7nڹ{vl2  ->X ¥iȍÎe9*@0"?_8ͨ5`E=JlVeyI/|pUZLnͶh9k`'˳ܛ,Lˌz迓K`Y8ZX$մ~Mi ؠ t<3SXM96K|K8ðY|^H 5j?L^49OVÊռV%pr#7v K>׽W:JJj9mYK9L|-L{,I8B ȂE&3(%7vbIu+FP\'.B>NƎ18F^*U_Ƴ,邅h݄0%h?v1ulpJ #gmWfl;֒3rK GRc+`HL_lmdɦ5)mތ"*Yؙͼ. ^|PReCltK CtE].`dyEU&f86$8>һ)k{ Xh@KG5<8zc^ `atc*qBBl38.S C3 у o #eq.Cqb:ΜK@ij@[bELSVD|cʥ@yUa~QeX9\+ _đ[Fs]ҸSP1P(d$< w$Rn2G!H*ĩ rLT(+OJF6ߊ*RğSNn' p5\ cŴa"왜B,^97kvr:Xk(1}Ӓ-t|ӝc G:Rn;  sĂXlyݾ$\qL]KwǠؗ;)/sƱ4m_46pFrld<Š3,YX_džN=X✩w@6gz׮ZX3}1HŢ8SV<(˙]C3wqO;֋Kˆ<[iXqgɴ7@xur|ޱjauq1;`ɱY?)SPBѱYc#1U{Trݚ;VKc;ǚ׮mMm+;{h;l~'d_9[J0mwaۢ hT;t31vsV8VKf'fN%_(WSj%X" ÷N3t/H˴Wh{qүnV*c~6~άqŢ;Vzà|=;=E/y49ֆc & -Bb_X't?Ii[i՗vZ?v06\ZY:flV(SƔ*8d"fX{-h+l[-T9Ry4*>_ۼ)ǜfG>UMK]m+v}7y}[1\mlF @[Sb+kGe|FZ^S-&ǖ}ڔ~[:ɂ#%yYCMqC;94c9:Bq }fP\329kJ{αB %41S߭a@1rIUU!81&ػwy-X;q (~BՋHc&.KDLˌw acǸr>]{h*Is zf5dk\L{,b$< ,Kcy8WXZc&_1Icp ǐuj,j1a'128MawZӊۦ'3N;vX;բ;+fU c$ͱ-[Ȓ),+c©Xa@&oKk"IA%@1¤9padƠa8&u>5:M)M|U \~7 {&Db5]]Hn<`Ãj*cċ * bx#1:v,śk{@ݝ!Sjc.иT,!=261Hƹ[cdIslJ(8 Y8Vc x3{MSjcaB;Yq,q+ۑ 1j$)%10Ql0 1q,[ ~嘽^#ؘ $dm~nl?3?7c1,Ȏ-]f1pg>PzÖ.1p\)ʼn?[1cJ,8"k)`RZ?=m7=鯚mOYo}߆c7y4UFqx͚5P]muuuPΖf%19F* ˅ ] c~e͚IScoP ɴyxSՍ\/,tͱ%%%B23 {H9&$p,XIɒcTdž|x5:97cco6=S$kߋk a5]?7kq.^>u^ ؽ誏g%!iMKcZB*_ cQwӔXɖuHinm0"FTd" q/;0`r`%N߭Cj*WR7:;19pLQR* #;6egKTٴ9V\z(~-Xcqݻ-}3'| ׉9p9ЯWo_V8p74k|P/Bbͽ{gcJX+ Wtǀ4uԺjc5qSc/GJ1kw/ YX=V#9{>չ_M|{uquƱjrar,өׄl' %֎9^zSYR.<9ݗz;ovk]ű6U=VѤk{7mf9&?KEޱҨE,QPLqR E$xOAH,g"\\ƱvY^2M<2U=k?>[pƂgWhL_^~W7~VɾvogS]Q<Z>]pJ, T5`i ~]QJ*D|#1Ó[Ƕ7HSBq .gn.E}ُ9󨡙;v ض6#W۶Hy\gQ[K1A5K%1]^ćQƥJN}7ϸT+GPK{,U>sM&³T6|NQVHɢ0?&%O"8tg1 $Ó=xIR%رplC18v}aIٲLޖPDŽffi9%yŹ1:H)+DZLޖt%V U(c82q,!}"8V__Jǖ%?J8ʛ1*R}ɣ9 ɌcPrlmY X 0Czrp8غt ;_1rn$9]}e9类hJ.رV5?o\W\ΘdKo.{0- sL8|Ab٘(N?VӌV*c4&{&DSsbc }ϣ#?n<2q13/]~vpe1J 3&`=8.cSJĝ>tPh,0"yY烞y.Qke4q9VZ*%X:r@AuMe;PLu}M{9#,Kl{LOlfg{LuE V-!_A4b< ݪ~/|(r:v9ye9<ֱ_Ony7ˋ>տxqA_gM׋8B>FkBYYSi[ǣSlJr,Bck˥#SQJM-R{ w>\w/&Scgnc!}q; aWgX1v#*#կv~ 3kZ~Ν.ΝY=6,4D|B@5̠10bLqq̼rc+X6IwH&_yg]}Ȼg# ݢvz}V9In(6>8c!s,[X}_5?tFdF9ǟl._ّ96xDx۽ʘslVҎJrD+gSdq7e3&? Mi*hB1ƫ(JY6fXccF݊cYT'oNg~wlH;Ɩpڿծ@Z f3tX U78]:< 0Y XI8@ :BZ\(Xձt6<~sv%~NJˈ\`8ˊ"ieNNW$ 6@Ctb Ao_?UOx<s/rP[ ^L ŅI@Q\cYS?iiZ)Xo015OKјxbN'L73eSH)Q߭M}V6W#CKo^6 %^O>4>q8ƝwAMAOx"xӔa츔ZVG-A2]gt۝P6K@0QQGepQ\pnAۊG犵Oefq(N󜜷$$crNɓ@;Pvv,WfnT45"Z Ѝw8"- Mxn댿y|N] R_i;fgLDS-g%q ׈lSDn⃜"h.@Z-{z BBYGpKcvsݱR@-'Q ѾWd%ݛTRAl`IJ/8yޱ9߿W+4PxTl(ckvsnqtx*ƶd MЭ8T)N NJeXFXۏ!>VYk 8f5ֶ뎭^DU/t)N6 Keײ"`|E!|x1zR9f4d1afVN(- $x$,r[8|,b~+.̕xF0d1#y5d" ̟!džZ%K1F0E1c E?ϹcA?xc=Zw^2f@n X]! cFM·bq*ֹc1Npc12YaL19Cq 2XAn+je|hX8@0үH:/pS'UbGs?he40'Ljbı_Աc$UG5&h>&}xH/ر!hRT?ϣPhEv.}<J;XpE[s8'ӟH# c~Ecǿ|K|Rϧ|c7 ?co/ ǰbz<1x$ϟBc }E1MIvҽcS熧Ʀ޻$ ?=ꫧ 9XyHt>.UaǾhߏ_~fA@9{Wp8r/؈Sju^Yvѣ)P [&&<9>:cx|  0"Î}h\ &ʩeˤ°vksɗҐcGh!L]tK%vTK?vy!cls$Tc.u7Ü^8/VMI}HK4{3c6_FSRZF$&AȵcW+?V/?:65>>ױuS㏦ǶN\Ʊ>;봾=7ɓ2'|/޳1<[cݻ48Is1yXS3LfbA)p~$dͶֱxfi\v,o FwG ݍ:F2v`ðcn反ذw7/$|?%bQ`"R]Uі`$h#raQ0S1: q̭ܖw{zzZZ[zzTG!-9t>`\*v`OucOۧiQT*zϱO+>kH[!J Y2ӱbn:往-8)'I5qE,I;=k>UWn!]Կ-9=(\uLm:vB}c?- ulPw(*;1$$NRO9J(c'cfxL,jy~x)Ilc#{dP_11g8T;F@$_WV*eA;9c|{.,c4ibca11val2HOOw+?&VcQ[7G/9r"8F+vm{뙩",!a=88vcCQv߄hv+析cc4 㭴ؤǰc&n|}3깩k/!+_n#0XT#pL%,k8 [Cm p-86>1gOuWǨR!GtZ}+cV[:l]S1LfЎ! DsS 9 hon"pXǶPw̜:-9" ;Fiڎ!T<"ǎɛwl׮] hy6@:w`J`0cGq# 7@6Eow!/tf9v 1vv{I{lBNt"B4b}=ock ,Xg[7vcMSA(fMcUcְ~)W;2Й6}laئ2 z5$ߪ(0a)GF뎠㑘1!/M+M[mmٚO')pdM񍲲`c-+1O%C֒o ,mg=0aCS`87(m+se8'F00&^)Њ4k0e:O:S5#. PT97_kx 2JVSUΌ 4C\ '$r3;*6CRjxRn$2&%tUd$"RZ iH).<%fa̘knb5y.w[$,S3IIAjAG?!Op)b)XN!˦sܬX" ',S傰  .XEY]?LӁB΀@tΜsƆsΙs潓A\bhP{6P+?8|m<>_R,e^ࣹ֟ >1dPӆbJ rmx1fINh|45WU_ĘuPtcoǾxg%/1syzwoϻ߇vU?;>T>PG^eCDc.SyyMC[zg4EA}ƾS:1aKu-7og׶4EA}: [-⽺局2x$a#i;Fsw/ʗ1ٶ-Aa퇟i*0V`3Sj@c6 /V`Lۿ`'0j[i2cDt +0_pʛbU׭m_'tblOxgB[Q^Y/c\08r4=r08O{}\c mŝSŠ? ;cȃ1pcbt}a>j4&k5Uk. Rce^yr2Xdl(;`єg 6X9UupSh0[҇1[PUa8ƦPt ^u%O_ b1D2bN Zb!`Ęep10K=io (~4<c7DQ˦ FLP D =J G,Jr1fS8S?.M> ۷]yf%_?Qs,cJ^78lݎ a p(,DKҀ1VdQkU㕞ci@ O< zb1e0w k Fj2bL οCv@'` E @9Fpͽy=_Ѱ+V||ki+2m-7c]f}# %g(^`(Hm'K= #XTպ\ج E]4cߐ`@61V/݄{?MC/Đc< p5w8$cB 1U@C}Zx;40D߁KPzVh3r  YqGV1%\g].'\{]1;.w ڎbbl,櫍Iц2cW'nޞ6@ٟh5&gg5?0'܍iW0;Ha͍Z0W1kݥs"ޓOuצlY,D #c"p#wb]'w}=l`Oγgň0RbI3Ves% N\%Shrh?T,z5$" ?m^.r&جVFƪX!C uĘiI'?{nd6EP"2vtE{'\WOk6D`WbM3 wP֌[蘵f| \K֪kfate3 fSAvv% cvx s!l,R&|⑟YoB}2cU U!U1F4qLU|aU1cMvX1 ,$9/90xtIe2Td2#hp@+%~$mh JSJtJxBL m1V[ݴM}20ɫR%c5ialbۈ]47D&ݧh aƍӴ0T9"5cgm#iP;TZZRHb  ې{GE7MZ6eX10 ܜ [,M]fbZђLI!1q2 Bڥ%SZ0W36NɘGH e.ob6=jɘsV`^L,WN#X6Q*;[U`L͘?rѯb)c23^FS\Eg<~Y4I^ЃC8&I]D ǻgt e*<4(UvnM'dafs״wdT;6W#c s6Wq6(s3O2{izt?43ﱿ7Ʊ>j2}t* |M!L>~2(=xAz"ZF>{F|1W++W&eӽ;C^zd2}V K%TqO7AJc7Z?uO{>eg6g c<[&i)8<>eѐ3@4Vb uplry&oBQ`-0F̫ڴ;Ksjy{F[Wd!3ISQFqU1C<1Ex+zE"v)e >c+:e{ܓax^7QaݫWxyK-07 ߾O~M=J^2}?Ҕ1# `pf,L4&yN*Rߣ>'rc|@[>&I5VU5q[AȝecwFNWe^(*;T ^D#~2 K3#s\NV`li]㮍-O-܃}>ty篎clvzцoca̓_F 3ګќKT-nUn)v o67tm+W1ERqF:khǘvXz qLN{vgNC?#܌_h:.vaRWi`8|̣+2x3)R'RFd_{M}c},ܦrJ[/˩ږtn񊶐ۜټ9cFy~<2o2:k~NQe޻*(i858E-1bl$#&? '_ʋ0q<3@D4$L8:"@F:3s-fg@;lʜ,<$V͘X:t%dZR+2QsBg*{[;!c"J#/IS%ԫ=3b*^ǔlf n* 0J7 ^P1\f K3fچؕó֙3ggja 7@K3{Fbߩ I,=VkJc3줒\g1%J<Ќ| ƀތvNPI3L a6FbɱHr8sb\10wT ㆲqii<0;/줒TTʳ[ߩdR+dNM.` `R "N@ 0LA%)JFͨ`/%W12uEZ2) ^ zvyO#κ1cye 10F† pnG0v ZC8vB3!3E23FqKc-{b4c<Ĉ!zoП@Bhhuro{Z}FcN_gg'֋v{wULAP2vo yY_cR?,t",-X^ cq'{tO_`C7Ct1˞+z6F VUn _R}1i߹A3++<+K%Ur|yy1gÂaJ&>1ŌypKot':5mkDRӮT;q"ښ팧8Dğu\hܢ9  \3^7̱k kƲˀ4e2tͿ ɛ7'oTT ]a"?~kqWQޅ欵54ԃ"楺ۓo3+K\+gRI\DLz540ҍ;3̅~ԌmΘ(c(8mc Nh+vө |`#}Gڀe1y*a} ^c̊E^41i<}SP v|ؚaXM1˜` cKeMҁ_]_ZZί4/*!QClJas^GE`97}fY\y`Lw뗑PBcǙح1f0&QPx3"5e<ݙ; a74s^cKeqͰT==.]4/*06xȀЯ rǟ_ &dR&h GMQՌe{V' e&F_DAgx)s=hyћ8gIPØIRٷ:aA^ܼTccYqY]Z|\i^JV1c[dK_c׾#Mɤ0L d#;w <_1^,_ƘLb]oMxc3f2LP_.fb"Ƙ*Yo $@iP(C)kW/`E4cyBl?h1r\e^*^ 1f>b^E%hʶLCY}LcCۈ1r*#L äK)@v1ؗ?fHbrN,u-xz +1S4(c?7Pړn$3;@Kb] 8[AbB)X+f^ U]YgϊxVTUB-*@/gzPHf쫞o7b6&0)rԤ"]800寿 Y?2bŶcœAs,dg駲eui#?ѯH[~X%օ*b^ cVgcPWB2sw̱:}A~l2) b/QElAwmphHŊt܌jLx1aJozqTKr2F5AS;\cEKUuHݟ]cݫK%Uҕ ,ݏYIZK>0q 1۞h+aId)a]&sԤ"]0dXzoG!IHk9cSN9y~+]^oER2XBgjT}<04x{Nb>&3fj&dJad5d#˨Rժί|iz> ;?ϞhT'-=k#{<%8jxWw V/ {{-xJc*5Xc厧R ^{d{,ҖchZ[mь=9ENkOnʲ=[5c{ONkړ1YSsS(iQɘ~(iJHNkfR1&L0av)R24)@SE YAinRj"Ę0$ K1L2ͬ`)"-~3M~_*sdz )Ƌ*R-/Ę0$ {_WI&%MkSDZʌQ|Kp_Kޛ׊JT"b bL`洰J2.iҺdLߗJj٢:TLEKJ3v@Ƹ fC@%*%L~$+NQʺf̑-*F^CNf奲wǔ*I(>&"-)V|&YqR)W3!/^d}oBWJ!=`tlayw~fV\diR&_uHDZR'6D|&YqR}5clQR7e奲S*cUO}?]n L3VBR 6)/Fط_q^*1d0KtDԌiƶ7?KŤ8/T ci0灁 ">SɤX Iy^7QܼTR%,/U=NH3&# do`{d^*&J3V Uqۃy4c{] bkpf l=֞K ̵Jޭ4c1i0fgԌm1?rum qnלaF Ͽ(]e V'Oǯd+qfl -8H3fl6qݩa_:1XkaLXgU0T>~¶ ?67`,3*1kdƺ"3>@]$}Ӄ WcYϊSLj30 L2N͎1qf̖1DlfzԏE&XyIX_d;LHXljƶq4׹ N-Nf:!ct<غ3# L\ܤLLbI ՌXxj:.N` Ou(8Fuf+mlm?_ll1XƲ-4L)Qg|,8Mz}ጅ>_ON6$j댖HΥ@K˜1L~{'8">2)iMvP}ȺXcgiJDlf,?ƸB2cFAWW[ftJ,"8!c\kc8=bWԌm]R?&7~ut$.&2c"6T3O:Ti-bTc9~!WY}0xesU3< .).n"!q1ii Ռբ*;<g ij|u*Ռ3 _nt1/1L)E`ǥg˜P͘3[#é!;1\fegNfZEr0J/^rK/ض]Ԍ9Ek ֶYTr:s5WipU tED+ 6QWu1S3e m3I? $SSg)6+kR Oᐥ3g΄z[4ER(xn7J35"c*15clz&ZCu/11+{R&J2w:o\ԗhv''*DsDH<]RJMZƠqGl5ŋ3FӽN ]j EqReqb Dϡ aTgD3oZ}eOn)iMt/Ia|tAןc1hy͘3kgŅ.Y;S8c4݋&|;wgŲش~s gfdG3 4c1;瓽/Xf4) :Xgݘǥ|:;ZtjN'Z_p̳\g7RL͘3[dع1|^E'RSi")6Ly`}PݏFR3 ]x0}4,J@JcNLXikM{x "vW a].>l}$\fU g\`k#tQF.TGܡPӮ%ȠSʣn$kJQEoBS5XrǍ6:I+L>S*N6la lW΄(+E9=2IGDfrqcݒT0cWI6RS c%-Q&73b=$ȠSu7HՌ֞6ל1̔3r?F Lns̘֞>&"3eLYcIdNgS̶r)kJQNkOa K&6EdlW@llU.7bIiQOgz#(d%5cڣ1s+׌9B:/mkrZ؉Tm^*cX3VrZꀤTg TR%u2S.֌"ypb[ʣ#GbryJh39ZU* c&[lAԜTԌ祒x@fpTi^*3:R*Y9S>u}Conzwv./UGjt4>}çJRI8#v}ETԏƴ_25c{CWwB\e 1y\aT楢J8c|O;64+D&' Znd\)RŢAFrJVV/zQ! QX6&AƲYTȘBU"E$7eQ.Jn۫~^_plޖ98`QرcavZͽ8c6xlWMBQ=LJ C}}-@uYحs1q ;c6 r`Q߆qQcs5UrɌNZu_UX}+R>K3?cd^* yJнH<֫9|.&X >fSeN GD'YM1++eU \~ucvy}W<&=~wȼTDX藡P\<&V-&Ĺ|r;c6>+vc8Ǭ&"/ۯJc"o>ys~eE^?~΃{{<Jrm`Ȼ zCgHM>עo1Z} gdjj1|>1)_Yo/͓ ++jE^K_|TS{{?26/dh|jî+W>ɝs1g9է@ 32=1pF{vP3X\j1|w{?$/>Gk>Er,׷l? 32y 7cz |'V<*:yjK\-_<ʿ{y[vqG^*}&|$X wcm03܇GЙ.cǤF#("܏ldCs?)MyȦϖJ>d;#S$[^ My`vM yY1#"R}|usRa1/_n\l K`{do:RFJ"z'Ds?)2L?#"܏ldCs?)MyȦH6=1#"܏ldCs?)MyȦH6=1#"܏ldCs?)MyȦH6=1#"Ym1IՅwY=W ?,j M8"Pluz"˱RkN1_M/YTc3x31.?9c| d ̩Crm$BQv<3։9xA'fzpНx`WXi`3#S^o /ShF2a!`$Xga;=v r 챐.S-QnL/]tjzcx># -4agt3DC`6I%؀1SO}$NaJ1'c= 1f+7-vc%d0$0{v1j/c2ts1sx y<{w̚Fq  McbΠ6h'B *qr1!K.];[s9M#NB >?_7iLhƴhhLhƴhhLhƴhhLhl*RiјYƴh{ƴhhLHcZ4=FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZ4Fc4Ec4FcZkkoƖߘ[wP=7[ؼj,tqdG¨:QbeǶZp:ciC$lNf6f:k/שqמ3nH*KGtLl+2$<()x^Qz1ce S+/8^fpLz1(Rw֥zB19αKZ{I>gi?jd6hoI=А`%19α?ސ0l4{)%kEžzaCz1ce1eI 1c [8&)pL|p̪1fqǘ U8?jw̪PS^;v)[ʇ9/0KY8?ȓdYk=c 13bb})E}Kp?h-FtԻO1^y`I1rrT)TJܢU9[ϔH/c[Lb:FTwXbۜnp?Z<,>=*9HpLb۱ 94]J1XcD! UQ#/ V/3H uUt:ᵐ1\W^ ݝu]%žwlǢ]{/4>q%ccryqq ,T?cz0zP!9{0,ӚV kK2De[*c=v$ZOw}~`y㙇ˇ71S?=y18ӕ8/8ǾP2ԪG~{cp, cc;\:/] uH3sx،gs*ᐑAeT B㸓LaN!9}:}_̘#dkXJ%B2QgL?K5uw$L}P&>L؎}:S>8>$!;͕oqgw4cz ۱F"fcpCcSQTOK?` 8Og,F`p=#o;Vg|% 5(;tNmH-* Xl~ʍ,\DἆPǂ-Hx*`Čob95(Uc8^zc8^zcec_ޟ!-V@7p 1Da/zp Dw 68nBUNWG\u I D1]Ag+\Ϗ" GD'HdoY>1]W ZLnIo!oSGoYEAٟBӶwy::^10DG\yFPKgSgӃ}8,2ouc/q=Dy-bD骔ŃJw;^nsHqԉ[B+79v7V7-dsz %[Ĉ`eznkѭ5@Ls͒:F&35攏AZ7/׉lw;^sc`X7}r.c)XtM2"|l-p aB<;Il78vXJ)+\1;_Ƚu,tK֥]Q,=up h}ڍ6x M<~6UuLYcIp~nW:^1@/p 1 @/p 18@@'m,) 7IENDB`awf-extended-3.2.0/images/gtk2.png000066400000000000000000001471401507226270000167210ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶ӫɹͿ̿\H͎^J[HocXdLȹݼ^IcL˝eMbK˿୚wЅZGyi]E;µ̽~ŵiL?aKÌ]Iij]IaKmPF71ݑ_IZD:ȼɾƺʼ#""XF/.-*)(XF:98}HECüļؿVUT433`JǿfM@?>ŸMKI~{·RPN܈wtpµqplM<4}xt{UD\ZX{mjgpRDbJ@ԣ{eXa_]ifdÿĺ̿6MZgc`wxzԙΒwȻbbbse4)L|gmR)8hr\Nvɋpu^„h.Xͳ}v;(3\LY۶xS>̴\Amiq<9n+! 놃6)]R\|{t|گcvdeFRD60t#'CHFջD<tRNS@fIDATxolgKq̦⊂XNS׎YU\HE=$`,U@V^ (C -$eMx-YmXDXV3x'&1הd}?'"yIayI"! NJ@Ta-/gO\PF PW^_fԉ$lȧ 4ɣ)/v1Uѿܺq@@c*j my5 }w֓{t~s6jyH"pqŏ]E7;GJ|MPvnT,6"!rkNbpz36ډ8 Gi(ޫoCTqlEn!6JvXBqovFXӑӚq@Z(ѕm "O.qJ?A5Q C qВ,nR;v86Gd(mEwm2 A;u.`ñhxQB\34%g$$4 -<,<\Ԅ2P"dg8Yآ^8VbqTq,?U qlx!*9""8;B)(jj:|&ܔ;"<[Z$S熦U$8Z\h br{[8qKX @YcP686**8Vs{]\ƻӚM)yA1tA/ԓFtƏmTa[qˏ6"g8"8,'c̈́R82TSq.F9<1F8t6OS@M9[4Myaj:!4N0\Klp8 P rcФx( )Ċx7qyD%yufvaAf GA.;% $źf1+bʕ+o}1hX m: ̨מ2< WORٮ,4U- [.kтep 貉Zkc~K)աCXQz8s =$t?VQ NZc )*8VßP MOSa\ Xjw+fwT!Zz⒢BHMS#:pV+[ao@S4fBn#'h8 H*MH8ZO{|xiNw)}J5^p+P_r$bJ S4[^5ht:FC!CLIppYN!b%hs.5,GEQ垇s" sH,trpţ>?혆#!\΄y R31H?Bb68Š%~rbwY<&uՅ6b3c舅SCK٬8f6[-%,Sp̅"0%;"\.s>|T q\6 !CPknc4'{1. )wg8.Gྡྷ.sS\OXW;NG?7Sz1t?V[KZJE!'jk|}u;&Yqlp ]H+X fQ13JfB4 XO}3Ṳ1nU{X^Ԭ86VlLX H-|khk4+{[\W\eo9QɱZB!&jv43渊fkQP *Zʊʎ5JhP9l/٨Jث"; P d$@vuP dV 082+S<[9ρ0I0_&Tٱ*vd6/`*َSa=2&qrSD?SŊc޶P/Ucx4qLU\G զ3G&WU@pG}E݉1ۂb.c9yB>w4<܁£r,%; `ia@AhNeVM8#*qR\xgX(GY-Ecm^^zǥ)`EG;aNeRϠ3 ۊ6' J)\%q9 SJP, ;JX:=F¤JsޡIX(GY-EQԏX=M@BS~}Fo[2PbH*!ՑŁ,%; ߸@S@\}'N Фr7Y0yGi_"Cñ6/zD򮍾@ԑuװFc )#Nã_U@*̊ONPX 4Q)O@:=c9yԜ(嗃Ȑ[.30˗NC_tB Xxrm[=YgrtxŇMʦ8dug8N*@S%)9 <َlJYR~9 1 {$񤎰XX t, f$8f){bb6 BWLeRl0:#<gs8AUd@9rRhr; GDŽoܹ^ϤyԜ(嗃PSnp#b|&&ʵ1. j;BWLeVXc$uVaPwֆ[TEh #']D] O<8? uϣ,GEZ LkZ‚1Xyѥ @XȎ-d^:O/!,%ň@cK B% EvȎ@ TٱB%gP 0ͧaiI^% bWKzͯ^%ѱw 6|h:}v]]rLF//؊ʳ 𾙙C+%FE<slP?pVfݧ33hnț рVBU0w.Қ%l"rVc_c+H ,]or> >~p70v_N{D=DQ=9ID]]&7/8h[6oٲ}[[I oJ\~۵2Us CC\vgacu=0c 5R9{:a\@g^p쓃:۱؁$Ca{B/뱈M"xh:v&⫯a/ϱ!/g1;^ݏF"W v1j$2y1cv,yvIJ5y;Cvfjj0M8En 45ݼVc(Gxgu:z5N?Og2a%\t4,dX0:=|8ዖvLPlǎ5Sݙ ف,16 zX4*‹vѱn޴ ذcz٘ eϕ]QC&i5 G\$\4za h& 5 G#G+9'잺wmh:,`Z@44 /Et ְ `Ǫ熑5,W0ycszuԐǮ"2dhH:Xh pUi?yP9y{p> mv{wMA2̽,Êj‹clv2`lc|s+16V.i?c=̷ȱ;.*0=ɰZW[#AejֱLc"(n1v[IxCؚj cQ 8bǺ]!EM޺pi_OJ;f<gt/x+>K:|h||~qpQÔ F0 GZ>9y n:6%3uc]߲E {2<›!xذBRDl6[:f34j : 4޺bC0;>B{8` 'DCDc漻݇ڷOT tɗ?ٹ{2|ͼ9_#D1 }+L[1c ORS5%C=Y;byc3_5j"Dg¨h  4:yru}s[?zHSWNj0feE%,\kQ#U&B@ËoaVyQQhJR*VnIfo[7Uݟ9tax 2̇t<=нLd-Μ4dX̋6_wOƟ20wyxoaϟa+͖K}kfvZǂ"FL8ːh1խ=8/fuTtwݽAt̙^TWr$8Vgeed hpܲڈΩGwL pZ$2?ǣ_xvɱw: X.cpXwjÀ$[groo=Ć[kݻ_oQxݮ]j[h`pxᢗ/:c~yA+W6؆}6}ghuz%ݽinz:{i"ɾpY~;=OIsu[lz=l[u=p] ο4p}xT#+!x L$uu9[j r̒-ױ;6`yl"w{+g؛yϡ붨n KvoMKګ \}љ$˄OuPt.$+Ȥ,wқۧk)6k}ɾ %[~ܫ{Ξ=/y,2\Q5Ѯ⊎jEC~m+T?|Yl-/7Hd$Y憺[* (1Y)LacvLuvYzh⊳w?FX(؋9>[khoq*K/P<>ghu9FB{e>д28qȱ_{:3cF?|W-u`m܃|X?S3#B*|}_Qq$-W ]3|lX!g4LQQjZ(+:clLDM%(gb}]}qK a:>-ȱ<޼I(kJd<$hƌq CIZu-n1ߐ[vlb[Rk=|<6VZFjPJPYM>a`1NA(Aw,]|i+>KF,S!6ωtM[zdǶp֖`[)pk c^/u4##CQ~D0O@9J xdai^zbil>Ch(ZĺcyeR{өXB, %<$X,#Q\T/ k3c,;}P,hzbRr 55Px|Ԍ䗾C0+B~=Ka  G Q_}ZbPEQCIpsxȃҌwVdƛI1w,E/Z&bIZ׬mVTӫglzR+ Sā?o@ wTixb`nR1TqLJԂ+1.t*ĤB'B{w0gYuM`yc<absqI:)xZ/ ~^cԂZfw W pǒ+ܹ[]Sk!inKBŤe"UЃF =,clJ)i$K$Qtw 6 G`(!g9ClM67a*[Dj@S`H'W:X5n'  d!zjڡS̪zxb ?Q Yd5A*x7JK@wvaUuS %g2À20ԂB/ы?hAXٟP6'?x \䷕puLj;[мk֌4=H0ݱW`4D@M0cAae@ƚ5sedUB'5c!ExU31ZH21Rl&6@H1<4atA09TǪS9UP DѴ6??u)BdhGqңOnW7wt6׿QB!l;&'\0i_ڱ)g?j 44^Pa@k600tj^#jۡ +C~&U4Xg(yN)6P^W`i/NO5S8hY]*e0_Dx[xv/'1;׷7%I+ s8Pr]5B| ;LÒ:|GQ(܏Ǵ<&.ύ+R061<2{Sӭ4\~[DkHU:ɲaӓ x+N\=Q3vjX/A8괆žzE~Hx,>a0Fv+#:cz(1cGl,,Fp77ls;ѩ=<О"=5:;[J|BD+u׬ x;}zb/0'R;ۊ$A4n6w|3+楾K 6ٟ~yAW\z >8Mae-4cOdsSG>C_؝;rN%rT6N$'q P B5w.|\7/=z|fjD Uȅb-;p݄u1(&laCG0,B--cJ{y*Fn5c7Ϡ< 6Y"Cvko8t Z}Iw+7驎TXB@TA2%ƺ?tf[xq׫Lس ϙ۶}gEǴұ+$n8)yiDn,kꗆ3q۞Lf:}0c.Jf'GMpZqĹ,\}ʥ∂{%raB/ oC 7c;CS%>Y{ԱbSS{Cj)F;?L v„bf~!n~ء/`h{4|]BdPQ5Hܱ'dy#OftUIE_$+]K LD+KRDVPӓZJT)R.,Dܱǿ Wpva>c~VL(vWR栖Ws}:%J76{4ij+M - ̲O'%jPGP'Wqz`1fڛ@±ضW1$8v%bNwB$, M'^5Pı&2MH7-K=v\!zYcG_kI]wqv_͞JB@ \M BޯdMAw_1fLx&D8mboOuUceMmsq̒ஔw Ȏ j5s ݈D&WI'J(P  XHbn[\زfiVv^v sjWeUAfO$Դ$d 1*@f|4BUE508c`nuk@ލ1隔 9Eni @Yw åwk:6jAنt Pb^HpD T _PJc'cͱ\ּe kDHƥ  zi[_fķ|WЎyh(7,4ٴ4"aQfQDh8&>cXgI%4*tLDfUjD'ر}pl93ץzˤ}w:*ŜBcA1OWp}[rj~}ETYr,VD w Mò4l5Y]z[vFÌU,V׻vlf@qA3=y,~ߖLϫfXkܱX 'f۷/X[w= CX9*9ܦu=V.9yr}ݾ' tK)~Ѻ7=;\ٻxccۦ?xp%Dh1G}=HU &@̅bAo 1ikg$IO{$8,A7><|ԩɡeF\3S_yk \wl$ꋔ]Re܃Ӗ>Kdub 0$Ote(YMacqi}Ϟ;gؙc籴m%@򶜴0#DJfqRh !Q_3[F1s Po c&َnIlWHOʃje`]Z;/9v2RKr,[ AC:* Q@!j+^hʐ Â#hzK&n o C4Kdž ^wBx#<(F!xw*ıLا昸˶8FD>x`P(Y(`Zdv\W˱PHyS CF 0sc0J;HQ(Ѯ<(F8_ yEضXc ͍k E&c$%pA>>M0] #K͂+&4IF_0ءU2n0LHś}=j;~W ]pގLH躅o!Y6}Ø0 9@O*oTe`7 i >B4M T2%,c+ILP@7zȵ,Lc|9f|<6gXBm 3ֈV,}b Gzhen5+^IAh!nE]r9{k4XDDŽB1M S~J YeB2$ڱO{9y Ä;Lo R4?{ĵQ AHPZ3szIKdj$ZQw*Hy(REP*VP+VQhx:8}:sgᙹ3y9l +nt_Ρ{ |'Rv`0QN; Bo,ͅp"RED57P'ߠcB2hf$ BX]d,`H1_tǢ~Q!y0Ճcw $yXOleGcVX  s#%Ibbrj)\rCD$޸i,(ENC810?gPY[y&)7ZaYq֬7{SA1K/};Ѵqb8~|clvg Йfd|^*ȯoĔ*E*TZ~f1:7US y!`z oyc(+X I͎-ZmWR[x[ll46+A3DkKJЉm_JdbEړyƎ;RKSJSRq "[H|em Hx1Ȥm=ޡec˝NqmXdnzc}EՈ~1&0Bz`(U$&t -8Vofj9 l]MV[d3XS+AزŠ+` F[ :Vn$>_).cqj-O咒r'YK` JTO MD55F5lē>Mm.oX<"b%U`WY!''AI7,SImƑ(*0"Dz2z̬(qfCd`%p<S dNTdž\{)cO/¸t*}N;&]$\ ΛbՕ_p 'Iaf ;ycWD Gic颴ȅ"1hDF&m*+h0̸K,ߞN{\r)ˇvSBu-~Ή1EJ/:53n$q8vƴiAEDm<+4QWL#nRDD25 GBwGvlH (Z Z:Q®1&/-r[@.ua Nu;H-Uckcފq&$[7b10edF9n5:%LkQ:LqB51;ޤceX5!bYܱRR2l`]l))Et `K@^tac {F6 *p.^**XKpc-3X)MB쬲)"wHq@Nń96߷cƱw,F*]xcnbm6K8.8X9%/)}E(`6XcǺ}_{WL:Н؇ݱDŽe[66";%5kH:ӰYzXc7[LDcn,"6>rNWÂSْJI&Ʌ.U99:E$ wuDǰK3 UrmsXeCTkֵNudw~&y848[[r'Wx(R˼>1ɱcЗ]m~ǫuLJ>q'~GwlsǸ8VaPfddDl'4R;R؉~U_MzZ9wc'&1.=23֌ fس i@OOe1VWG kWͷ.f}/{ }9d% @l}iVC#(UY 7-!Lٴ>iPpĈX߹*vX7cބcCB2gt61۵K c5;V. ?^UeDds\v~?-]}_uy~VZ bYiC9&3MB&cyDX7fhL0{XV>m}s` Z3]=)@&=[~ine i:20ȭU4Cq(7XPg{Ź c V1\HNǍ]Zy_֟:X?_MMqTrDz=yW1~lj{Xf k{eq7B`fr]5}Є FgƎŋw{s9\kIG41:7#G#z0v?S\bXSMf8c՝#W6:Hʊ;֓uii?q%;q6=}buU8n=b=ĵ,-}[[nep12|A/D΀۳i]h Qu9--zw%e xhA:ǀ\O>c]Z(L/d~iTvaUmsڍf!uV=bZxQdI۝Ybw;_m!1xkeFƪlqHO`U]ܮ*zr]r-]xvqZ Ro0+PD{o͵:ƊLW;voTlzǔeLYo.if0l ]_|%R#X?FƱ?ܺ (&%aq_|2]vsycP+$ {oyпlK&,َdd:n#8DoE# yqr޵xr_KH5?1Z1Xkps Vaz<:H1hA2akƞISKтd#ǐt:ԕШC'СCc~Z"\` DXFG1 uq9cd𢚸8ӷ|L*[86CscGk髋nw|UGpP g߶Zow=q[vNey<;.^~ʼn#],_8`iTўe`% I"~OYʚ$5i|]s@S`XÁKL uSCɾξI?z!vE)e _eD:v̏f1c\kWB?$߹7ܼѥ/=6~6o׺6 m3*dXLmڴzc7|47?IrPPs؀[SF+ 垎3SOrU9Y~|1ca8OnSSRj lԦ=A4"^!o1 dL <-dZxHWOŗnW:/FrRp1ɥzEKAٙF.`>ϱʖx Bo%/z>r K8hqlƽuT!ۋ4=117cұm8gg{4 }ݜ);?ej}Pyg+ K gű$M$2ش!H€.H"7 Ce!Y./:A[XqlBmaLw.U1c{qpoǒV\ i׷R(m:ֈp/UtE˨X2)&BUk"  B7>RД!v,qtwrY1籷no}}Aqc=RXe$ DKRBj5kJ*򍄳ekPb 3lUbq"8tպ]I+I1>P50q4`Ҁa4Vbɘ9+ݷ#Fҕ}ŰX|ےk_.YҭVėW~}L[Emd Ŷ98RGj&vMiH،d2CmFT24E2bTbf0(LKRsxRtTchδǞw.a,F~>Ǝ}{ڒ;'ȷ;xM{MV[Uaq~#ʉb[[1~1y28Ԝ$bQ!L̤eFjŢ Xdī 0 U$w[ Hg78&~@j[ pC1,8v$o!ʅ{Ǔ1-1H, coŭҰQ80LcV, e&dNTpluӲyHN,8ݿkzUrxzY=۲4q$ı%cg;Yl'xqp1OX薵-C?]C1w3y5>v,<رߖB?6Yhgaռs]c oكˊQʌX}ŞCk!gi - HFHHؾW_ڒY4hcM_-_97l1KE|]ȎؾW̍ |ɑmNl'-s9'zEw}#9Ǹm*~AX /x' ?>; @ 7[-pOv5dÁűžYHˣ o$84Y__ձ 19F__r"צH ۅA/A#:ǶrxeG$R#j16{25,~Vܷ#TX>z~[uOW:1&+*ڸ3cXyNq9 I`D_n2} ybs<6@͉x| :-P}#F*J,ul2R{pe{-t%O=,(*x8u-`}oeƦql.qch_Njƶߞ=O˄bg0Ũoz1]|0´GcIm0[',7v/ "=c2|(FXD++͙˃a]- c[bH4ߐ~ )ю&Ftl:>@]:,k6)²gf%Co-q㛳uF3<1߮2% &. I #,q@ix0 56Ryv9φ1Ɛ%q=.0FHVв]bHp3SdXVc}#%>ɣ~X]K\/+?=Wř^;'0}NrPh8reto{JTY~#q8f/`] !rBn'\.zc}oCN e4McPbc%AY y H ;:`!%|XԂ⅍Ki *)PRId7wM;#U_MzZ9wc'&1إɑ#͜{vF7eGynm&)(e-N\!)oGC"^.&HRכWR{c ӌ+>)c\4zOj)I9o{{ 9}jO ^ô(zۏ !Kg"?Yu 8r3c}~apckCmaV9K}צwlc^sFD1{}Jho U2w S>rYʎ)`K;`K.*cuZZ(Rӫ|oKT *%7ގ 8]@RcNFQ('Q3S!:{6{}#'*ǯZ P+@}$$JDum,J18fl{F˯_~yK2E)r qPU}9oa mkGN"l*cH4u"߻ D_@@ou @@-_zY[;Bj 2)mj۾-Owtr=p8&wiͪcOc r}"H1R/NW|PL<Wnv.(!H18iOuX'ܧyݲp t:GA.8&Ls7x!K٥e2-a3v txɺuV1r\z%5Ʒƈ'y}dś0\:h@cNoG,ʑbp yr\~Xk}Ei}k#cZ4wL~Bޝ_i4R,(dbh#]_o9<.3u{Oǟ^߶ ux~9VڡU#Qzew>7N‡rU^R|aD~TK(P5n :$CblXοuC15m&k\p ˆ}Fֈ 8Fg/DU܁~@ഔbocfyh<9u+ Bc<@)1mkVˬaԩDqs#&F"%z  SEALHyB450sNmms_@}Z#""ZPXmg3NgxWcu͏%O6MpWubWJTIqkMy E>x~i:qPLuǩv[#vSS7-qVbdsmjt3Q@ AiMIzYwx\Rè۱|2U3@iab"Q{p*5Y& @(ܟu{^.C' .B02 cf$Rar֊8pmލ9 %^GIyQ2ٌ3 L/&%3{\3 uU_rP{݉&a0.vp/V1lf6ptd 2@JF) ‚TM&kU3/D# mw(Y<\K.[H cK.8v$9f%vl_c|~;Ps4zh895ue[?}jy>Iryp-e^^i2t+/TDc PH0)̸CoV߹sΝC1;7l6ڄ+rMDf ئIrǾ‘d8_Hxo}iea=Z^4hy9LѢ[Ms{M, ԀY1/rK 2155VvNF~l[* PjXWF5I {xrrIzH[ Ł\b3(lcıy$ywk&t^%bWx%FPBᎀD]%(*X M S-1)Zt ;+t<nx f]X%!3"ϱM,ӂڽI`SαW(׀`e qSo(j戎 î^.5xTZ8):P3 f֮21~N l݅\r#Ûf'Bj6%1U;&XD9P+{(4XGPȇJrJlQkųUAAF&đ<' uZZ'RX y BSDfykMjd%Y,?>%l [B^=trc>ag,qǒexBp]> qY#OELߟ$1<3sA.jˣ.м1zpuXdze_B{o bÙ6Qk+6B1.ٔԡ屃MZ]XIZ7cޣ]pMp ibg1H191sa"ܛs۽'}¢W܎qX2ˢ"q8ɠXcPǂFi]iPz3~n˦#qcoD:-ERlHVtr,cQ.@}8"~$8&bfxtO.N^֋cͭHF^ ZXxQRl:W~9?X~$b[IZeYrqlz0si<¥A}Ǹ[~8Fpoc8 %CV.q*1%+cwgcI W4֩eC~f+z\Gsxpj0Hڵ܈Iĩ;Vf} ı{?͞gؔlʮW6y\1?;;ʱ^_peTX3]e];xw2?urX!J9Ja8: !3Dt.o-"Ǯ<_$m8?v0԰vE0SF (ZǨ8)6kfR[Ṯ&FyB'Mf:&4l5ML'A1rlhG=tadT:V5UKÈ=)sleQcYMlڠ+mtrqhǚFq5lw;z/1CHb5)b)sljP$æ0 !ű`ݱZX8ʖñv1Q1;:عk&=3DKcL/E_L;WX?+s|ׇ1;Tݾm~㑼kAbM׃h>E]6;w7φWTLb枟_m)xxݔ9p41]~_DmE=;{xƱ5cv8uWz}zzv0XmX}dhM(c;&X[@b“$3?o=Lc4Øc+W\zBPLKc vPZ 1V$N :ov;xq`~1-^{+vxp]{B͹ٻ=|RࣻmEv(krqη{XS)wɶT 름dP%߱{{Y68vbű?K#5۟n:nxl>H˃C]:h߾׋cșSK2${`ɩϮ?ÿH tLQ q٪RnivI<fG[1l6˱w:<8gqdoc<fn6Ӹ,ʪe-޺ֺcJ &!vǯB&: ckǎ:5_t1+?+Q8F:8ډY8o~ʖ$ee=vj.GcoĥTNP J+ւ$ 'mػ]vHvl#*{;3;󽼱+w5}J[)F~É}Lr}~{VWw,:a-KɊ8X/눪;&zٖMm1Ǻ]{$1<3sA.jDм/1Mzŀ=m=؈WMu 8cY똋ڇ.2ֶ UH2íde6☦vK߱]qecĹ'1kb\)Cc:D)ryǴ8^V?8`="r%S3ϳ['3ƴF1 exJzuƅ510OˌzOO aǸ`XeJ _;>59:E0m-h)e qǭ>}j/,.}b8-wfllRX4;14#crlz0si<̥1u|޺ںw>qi\c`F1m+B'hT(+[@ۏK|[}ku5"3&&_ !j1!YRFp[Q~8$RyI Wk]:1((cŽS/)uw1݉ةrMUI؀pJM2q5ذۆWZ4mP@<"lh@VJȰe姒8Gej5l}:Uk4NJҔI %#xˇ՟; PqttY\.j!zFE18hG2EpL^k֎e#_qt˜8,\-h\B/2874:Pz̥ + 7E$BKAo-V ՖaEaC)~2 K1:f:aLDZ}Jcai%0фjx2Ն_gJR`yàC8r O'[gE@/1t}9ru1qLi -=ɗ%hjT:<|tևd7KmRC/Otb/mAp*PдWEE7:. :w =b%e: ⑪&jHBiDZ%.rdgcڸR*f#n11N= ? EE0qY p[9.YC\-Qd#=Ɵ:fS#Idm1ޱX^v3X6^Mjk١wҞxs[c~#➍x<$MP;Ɨ9!>'uu%XX֤%O:&?Xvd1$!8#~q%k$F9&1_#pLqY0`wne9&?VsL c:FlX^N:um^o 0p5p[qnKwc&.e3 [SK8yУ"m1؇ vȄVĒ3rˈhl,u,.֯͹cc"/ Xt`C/,:8X{Bc1zl_2vlPXrMvpcy/=?8vy|.adc _t~ccߟ~)t*~~gq+l$@1zv̖/G|[1O&* vtb4o;;RVK5Xi k'K|GmEkkEmy11t}FW|< HSX޿9XXXݥٱ05pNzJ`4L`&ZOtcx_.E<1u (10c:'r,=[̱0ѱݻwmmE *8&`+X! wyױ\CӔU?vLcjL™!Z!wL0=J0(slX{\Vd'5z9 /w~uݵ;z@/U]@TqCC;k+A{ Vc4ı]6ǎJQy YDzO֫5Wʮd$Z4Yi 2))S]Xc:! az^p0Nkj8qg O|WAs>4v^ LG.0ıĴ|ۀP6 ґlzq$*\gU;gE4z&'_,dwI!w;f86?κzƱM!?΃cj-tO<`] +kucYfw̱5pRbqGMY$$2zfkO!="5;`|vDZݻwyx7 c} r옼$ >}v 1`Kh0NlA^2Z5c9b0^[[ xpL?٢)Ypnu 9zG'Hq@?I#B4W,رF}(YXŐ7=:8l}$) I2ǀ bFN`>:\/2dW+HYooD5Q  \i(L|%ǬNDB}*RR(TZgƀX4%3v+%CFcKuqtT,ur$%8,:PSի --{(g nՙL;Q(*GU8@ c?c@2UZ{J<˱j, Yr 0l(N[*|@t!2|e EiA߹`0Aۻ.LCAxR aCd{my, 3sUVVBV$86xJ(i0Q*MO "4s[ނ5l[$>.4YϞmW^9ӗks( >Y]2LB^S\W:5Oy՟0B;.j6KŁ c@+Me\Vv]7{]papO07!6Fh"oBa;G!Gt-t@F#HNd!'_NaHK>֏̺ < F`/ ^pe`ű ;Pa,(_KRǜE<1*\KS 12-^oiIX"{aNuPh YTO9x$Yl$M@ @n DxIrAlmEOh>yBg4(挢_>2昻tcl7(gS%yK q%VNinBJ匱%7iFA(xj>z49$ %bslobg(Gx#R>hDjA-;XP\ 7Q(k6QJ, g|=..jk)д[r/ZJg[ ckMN$"9smJ@ h@pQ**H1hf2y3I}3>k(Ŷ~?zޘgZOJY*KSݡJ81HW6ˮ& a>wut00+ܳSFD"d,vL4˿e3_Y8 ETwXp>uq4w1cLbXgSۥq[v%cG0{c;Mw)5|Ϝ¶ú7&뜤c;O綄.+{V~XFٶ7Xbli4f}Z,K+RJ۟#yWFW,1ce͘7,|߳ƪeLc I%JD˜7x= /1U]Jۙʉ1âgwгh(c7%JPTWlN(BCGb˔{19g_̏vIWbA"mX(ڒ1ߢF L{=3[2v(~b;cN~, ƼJteл}Ơ, *@6 2U5XJt˜䱷H%mvTƤr_PyhaL}y:d2|1cl:$T-X0fcĘ\0k煱w-[kf>Gr|f3>$2c{USW. KLY V& 1shNfʝ} Ъ5g7.ly[OFs#%#I݉T|#apK26Y{EZhnL7coTNYY{ f-cs^\>s+jNLS;i{A^I{ʘ.?BuIE{ܵjmKwcr]ǘ9 R ǜ<҉3O~LZGGce ؚב&g xtջS.cw\zfKnO^D"/lH)3Iȫ%QNJh/QKIj-csf82ycRDuUv!=I7YlV]\:PBdQIfz-\ek/gߏA[0~[Ml0i+?ffxĹ~9/~$X@GڏV(OPk&Ј3ݟc|QnqwZ|pk0{lq^DL5coD},Y q16Y$+ l #:c]"mQ+vZTkSf)\NjqJĘC\4eg$bZTvCwe1"áK]~Ba"LM @I 3G6~l_VgO>Y!?L0f܏8c6lH3Ӆ }歴kU0&8Vak(cVsK9[fk *NrۆR3yp1ÄcnՇ9 ^Ԝ• ihuUqzP ,Ju݇/sgdֆt.ydl:2%5/ϳT?Ơ ceLX@Y“u[:/I:a3$jn xh觹\K˲\YI1;@|Z]LtUV?UO EwI@g]ތ,3 \RVU-;Xt.yd==f1q1=?\\ۿ Oa= ފ [bNbo ++"/A6AW8gbj &1^wv15R{3奏~ ?*aA2-;?8$SyF: q|26ޘ1E`iiS^FK) c'Oz&>yeע6r#yb<4FLF*9d/0d"y2Θqʫx+kW^?( C0>6x<]5{qm u8:N*TY̊3g0l `evFB3.]\دJ.]+ZR\ij1\yzPA~I|nSVXuf: qc٭X1+(,__ѓ` ZYdR͓08? (L}2cNu0B\ᓬնVkS`r]X#21V[>Va=~k@<:b=#cMaIUܕC0)c9Y#+ {Ƙs9:eC7:LF=C8{=&Wp?$$r.vKU0F )ބ/-1ЅT/a?7$ TWn]Q,Zq4b>_GbfIr) @Rz'{.. @@,!ȳ/W^d1!3ݩsYinr9v[in!x \x^ߺKV-cYwCv5Ev&c%6cejItcP$4 D$ȁ=<_b{X؜JYx?m_ep7_ :)LZfiWbu<1ƪOCu ~Yk+BB2LU/휩 ,Xk+X yXz#SHǘy3vn|H⹎ ,6f\7;>h0\ys4͛k8}t?׾cFWpMOSpn{}_Q>cXbg ˻j[ NG)2ƞG}F[pEo _+8_7+'kKvntNEُbbgcfU"cA@O^0`PґLG{6ډTiDD=uPRg?wvcQs[rTFΌ4zoQf~F}]_"SkR=(v~Ŝ;Z1)FqhÕإg(LLv!=LӐMg}X'`r`< o-̶ARʘ֥x{F@_jt7"TV^֯Lѯ3u#۽޿⨗-ZbUW/1Mж[odL=oGf&3SJmz5L#wØ7}cuo$%S5qpev&GDwo,KZ{T.DG+0@39dHا`:9m4M\ GGF#+H:6}B"+~.R{DX{1d'S"`ƓHf ݄r}_G/{|ݖǺp2>[+ܜ$'/JHeI9dcM?f~@̈^TD2M2bQ:6|yS}E9yMPbؿEc͹3&߉655!){G7(ulct$Ǝ >]2&QWI+ nzt]VXlX*V̿,%>!0Pb̌dWE,f3W< 2y\M`WPr68G3c[?!.mLpAK6&8?e(K?֟-cKm~L3ZOD{_M-ͼþ{h@\ޏt^ud s[-[kfunX}ef|H eb۲c;Se~wHA~SgTBƵyBٞIs1Ey(S 3,1XXI,fblrC1i:Yai]-$20uI14Qu(R.+1M0ujƘ{jyD&f{ OG1&(a'@q~b綀5م$dYj=:Ƙҁ).pgPq3F;1 sD~)^{{/(Sٞ)s1(fEx^(Ɠ'K!z ^A ѣGG+SuB 5h0B `F5߇65L[0 ;cbD(0e413y.fF?&M;Qb3萁.e\/;8#qwj#1fpL0c|BBAp265,c<%5ǢN$Ln/i6RdL SE<SWi1a[gL#& 8mJvlpaP%[aN5gU'.(bhuUqzP ,Ju݇/sc:'aD(?Pd 3E23s0ՙүXb,c{L'lb#MpঀW%t˥KD,˕d 4Hju1W9b#lSPT`Y} d 2n7#2˿~zU|~,/ﳲ/}toO,1F2`eAxqm4qd՛xM4ƜQ?n7^~gLK cjTb[h?Z9?c>O^h䅡M\.l.H䱽FM1QefJً!0zjnjkЫn0 6Y= &z?rfl΃$ێ4k*+Tex^'\ 1`2QQX̜r,_ /:hRY@ 4_+Aﰜjh#38&&v9𴎶Kjt-).TݺT`lQYdfNFX?SGg0e: F݁s@+|VVds:csc-c LucU+p>]&jkgjѠ<7^CmLý|cRXuŲ_~y\jv&yu]C_o~տl[J}B&ls68GV@h9Lz&K!jqՋb+L` 1j%r.vKU]@R% _Zc ;(!;^)@n2OWR6l-?,EĆ8#Q>@ūFRI M 4jTCU#6]H]JH+T5=;#KQ`]ޞ8kfy}R-L=xpsXL{/U'k*?=vpՌ{7U0,J{WAa=qE\-t/vo"7T?@nT71% >XW5c 2bсץ"7%6){Ld]*h!cN ('}쟕UUA.i4 8g*ځVUUQsX ]Ui},l+zSyὢxs1T7 c"E VXa=9^Ĥ3r&yi640~bc+\ .-30ut bά++*kU IR-3_2 ǡ~ c}77 aE tC+a֋{c/GNݺzWK_Bcl=}Y)\jx`8~Cc֗K-\weq̀"J eШZl]\A#g)_0_otθ[ C֠s mZa?hJ8[Xe)4'vae|R5y(ehmvL02&E>JZ?R(.J#{WeƖW KE[HU-CȄhŮv!뾆hVPHQUP^^tXid[Yܬi;SUePoƲ s c+cɶL'^Ibjt~r7踉6)QRf}XFKѨtn.u>+-/40ڞquh Aw3 ZB *Ҋd[!@/ځ):p#ZRJ&XfS<|ϖ+ms<3;tF0oܜ6LgTTc>&1Neh+{5y(Uh4l([(dRt}yHȺT_SN2}籼zAT:0PqAevy" ru^BEY)ĔWQmMP" p% VJ,eIg!% k9C8^Dۈ1tDLLKQC@fW3'{.1= KUt*^][eZ{BX]*l!3c(vITB+5*&⳰.eкnazEc ϒ+;ɘG$o$gI*&cFQZUk221w &c-^ ̊1Lr[F; c[F2~4lc? TF'/Sե*׍Ke|4M02**5y*L R)Sit31VƸ &ZXJmyh):LD0?Sy(8 -)^]KEC]w }M|4&YXXb^%d&FJ8E7Nd 3Mb Dեzx]*YRA &v>ZƘ f: KJU&dnԏJ~r?QXץ?A7%ЛR }M|4qLt,XX^yԭoJ4_ih%fp*3V]`T&8.o7uh &v>LLrKyh^ϴ NL|Ȣncw/.VTJ#bR }M|}Lno9[ȨVץ2l9KE%.k|-ŷo".&gc{iŨe]w~ :֥[05iѓKO6?SȠ2uWjc}-a^&c/R1u4\Xf2f2uxe.[21ci#dLo$g+ "4lB>=6볧={4gKE=-Wj$88]/g+HȬ?؆hgL2۲3'n`̼TΘ j2cdz2G#ög@|XǵP6ݍkp9wö%XWe,n,J&f`%.12 N m3kdl1i{ES2dS3Fd'aTf#t0v7a6AΘsCfѩj'[q9Nاj(2s'>(c &c9&~"?>' yaPy֖j&g Ov+EP72fƀŗ=%-#1>(s &c9&~~ ͸dCfA5Fc0?fs)x[ i-q탃#1pQLrLy۲A?V'd`ϗvZZdۃcz8F[01W ʽ"}6*(c %k^҅pH3YՎXbcx?&5|M|L8c]ad7: a}(!&&@``W HdFH17ʢ1Q^RcX-'Mduwq(LC" 0!Jzwdqā2q |Q{\SJƤq# eLқߠ7hw)qٗWٚx"lkSLHky,t-էܮn.A`5s &c$QWʪ= z 25iKHۣD?ĠglvFQ_4h6:33| * 01 K{4 _F; cS'><3Skᘴɦ0 K K8H5NdפGXS'G ><3Sk¦'UaiR5x1_F; c%>-&bf>SΧUa`Xڣ)õ%&aj fcxM|1|L}6TaZNKK844hSl,2G?LL}&k+´qiẆkha,iqѮIO&s͘R嶌v>C?k\0cTdT/tKekh瓗-0&V>uTXBk~u s})sz+\ѣ@6u6P j{Qe Ic-.9ZWZ*[+uuu&.$^'/LP[H=ˬ+K`]ptzGCBRl'ץtwy]-Vu m,&/1I`?6pe I(c:oouuwWغT 7xEXH`]*l!59﵍+8>FM6]#'6Z'IF>f >5! ꑔm,GXX+U"m&vCR(ݧv[ΏF?BH3;s1Fgƚ?>G!汭Wт>5VQ؋RScWG..W֥$>RvpB}nD`]*lVg˟h׋;b3c Bvs4\L\28wWiGELm⌡mG9=f%Ѽ}F&5 }^:եvL Wuz8n4_4Ҙ8s1OģW d`7Cc?1:Z-cZx=VidJC0Vִ# 3h\LkɧHQ+l/Um326 hl:i1{bo~E] ʤ19W cr} 2fCiWʚIi[%%1<{(1oklr)j$i[151?#[<2F@3#cD1#[<2F@ulO];iR)kDHTK7R?^|4b]*˂{PxdYj׷A`](_[b]*˂{PxdcF]iu>Y \u #bRHcBX=ץкTO46Lܿ?K"6!K2֥,ȼeGƈ41KU @TuL yWg]*_OK߰.nDl]*]||1zץdK5#qb]*}EtK!.tͺTlyKodGƈ{]*#[<2FDs[lililililililyA KcF {EpA i ܅4FB#w!]Hc.1pA i ܅4F"Dc-5f bxyL .%"4\-a5xDτ媗Cd 0ܿ5ց>)@HK÷l+^$/27$%4oAdP8/>roW|# >Ȅdoɢ11Y4Fc4&hdј,1Ec46V41(>hdј,V1ј,1ߊ4Fc1Ec4FchhLɢ11Y4Fc4&hdј,1Ec4FchhLɢ11Y4Fc4&hdј,1Xn̶U"صRs*"tw1!̽y'P9/D]ZiW*O)e,V.|u%!{9^cyZ+t[H1@h Ec,d Y4Ȣ1@h0+_0ƌCc1Иah84Ȣ1@h Ec,d Y4Ȣ1@B-z*2Hku <7ֻp;Xvv{637 ^r-c][הl{auYozZc}ݵ:b.km$ rm,+;o4*W7 sV듣oTD2܍s~nqP4啪COC`*C.zh!`b Ki&T]Cf<]ckvu~asp01Zȱ@fcuW8(>|v19of7mNiJrΧnn:bV>;e9FH_Z?]߯lvscutzZ`,^%v|Q8r T}82rt,fb%X,qv0uc|x K=׏#ȱ@۱Ф +)Ov\*6 ].h+zNjUc{]j2{qc0 KqNq9 ~;X5S5~x'5"app&vS-%JtXɩG{kK3Y@qNq1!ǂcٱoLF+Bh4::Fy?Su̿qH2#nc[/qH2#ncOx`) vȱXcrc̓cAӱErOc ,cA˱W:6DZG,FH&}Cٯ8z ^_Qv8歾Bmcwj IfسG $F=2lc%h#7y %=CLQ@^L9H?hrpf9̉pH^dQhϱ؟cocX2#pEˌÕ9/3r W^vc1Fr _fsF1sSÀ:ƮYgAcZZe{1 ;vQ80,9{,97nva+p]w4Ka@ܱvyWp,31߸/׎vA!Lac%Ue;X5U%b-e(;9wǒr;t:Wc2ypl] PQͱtqcx]Zަ{q;إuH=92|f1(K۱Y 붟ǚj~C7t(jcckϸs :9z_QF}E|c"eFʋ×9+/r _f1|c"e&3RIե—cn}Qy3:y :(cJ<#ǂĵ9c8<9 c똡&}cpcÇbڦا/cL!m 6{ǘs8s/--1RtrSW'4+U~E>-}]X:vq9|c:FpzaZx/Xh sil |Qg5ا/c-vұ<ё[+)^ '4gcGIC2ߨLJUO[c+UFypUKǜ)؈ _ɓ S砓Dc,|b-n* wdCyԫ1 6I7FtN%^]+yqڎ\ K[Üs}9Mi=gK5xo>ԱgZϙc?X XW18f8@,3s~ b*r'x*}plc&Ɔ9fbbT,|-s۠J:_{ttrHcvW3yc:Ϟ9} ? a5 /86 ^+aEٝY T:6b p 5 /86W;0,p 10 ,p 10 ,m>.e1b1~Y.9O5IxSc&08 uqxPvX9u cCWTbɂ:V*ht.MzwK[ɫ*T[z 7c0맪È0?fOjYZgN0ĵ%wbj#9Vp{~sɃJ4z䶎Nh]LQrQIUkɭHOGpZjfN01*-e}UY9sl EmT1O!VEn:lZZj;k8 ʋQ1"WDt@i6i 74ri w,>{_5&ۓWr\^VڌlyLqW%2mNB,mQG_P{GF)_g@Pa!*8\ b>Q00.A$6m{ɶQѻ>f_nui "LAنR:בTLu8tzq_6h(46Kэt(:-bY ]/W ^4V*51' ܒ8b@QXz|a?*/Er~;T0d,_]:YFF8TZ KP ?Ls\<.\.&U(*)B\ 5q̓N؉*3 KdN 3r TPZ:b!-'y8"[_5v)- ӃI7:WR@7LW2D/ kpu!_k*CI!i nY LQ i6o^2f/sƑx%JeT)uf ['L#M\kib  ƪ~"UUc/^ۄrb`dbS<S=&It9ϛe]޲*D5JuKTك{x@9ԉٟSg h_ic|?|bxB/oͫ ҮHzb:MO{Fh u CSg1^yB7bzSif"#/1) ]<.c{Կ)XٖW"f 2s1]N 2hEƨ^P(c%7 %<=CPbŶTcJ,46B1 %H{BIc/Q(X i,nF9"6c2H[i`:uzxL}5%vH[ :uC :<4T_p;4z8za.<+|9Ѥ`5 '\677toC6j&xe3]Ph<8Fΐꅍ 'iOM8t k|ZœkG[TJ g˫[C8"rt:(O4Սlh'ޓga uR=A!X 65{BIi4G/'!{ 1@Nr;E]RМݚsĎx;N걃t*{|ZyPQjAyPјތK3^+.U6E`)v%mn(ߣ9 R5 aBPEL! () 09Ifh)/~_n:GXЄ^FN)CҘNh#.u:Y37hp\8Z~DF]KMB}NZ5#TBᐣ!zÓ$uc Y9!)qR0K(AyPXY\\~K<С3Tܪ34_n aB;.hL vƁKGH2E]9Q/NtxK(Ayʐ4/:zmC|QW IcKU/$gRI bqkʔOB'xm1<8d7X6:&jL ZcFWGoftRfkbz/X`hlAdǬMز R*u|-kjn;T96-H䨵H{D%>2XdY?%ở`x-F2`qe-;p ?|IOhlndϋdڵFJNޙ9mT5%NcYkuHgM\c!av ]֘abjj'͓'WX7x0N.dQk΋c.eoܨw#w ^c9ޞQHITAcp59]`90X6JbվD;YTrJ[[Adc?DEL$h(U!Zc=~)vcα$?}5pllVO9t`wu5$vY6ϓOݡ~ghcDa6ƾt&2:'ÄOy>GdC%6kQ؝;wUGΟ|(yT5[fCYscXcc;rs0,Att&a콃;Kv81S$Ͼ Y, =?~W2C%6[Q?ƴkX@b5*cUA!e 1[ط>~ѣw뷏::=v u,5};//~ h~zѸ*6 m$^c7o5"BDUVVV1R(9kuw?~:w=?70хuzVj6{[(%> -w=" ^A}tj^ 4gяFw?P=56GG{댬1o^UǏe|*ȈX;;>6 {46je!,kk#N5-^!5Cɩa^9wkmE>ϿBJ ;w?Qey/(x*S@T@6 4h/n& P **<N$=l&;73;o0oP[Rh5Rԧ==OTQڦᄏr 䏬1L GA"  kȓG?ȳpNja%ᕹ31A(t/4Bd8AĦgAd8ې52?{z{{HQթ>)p鋠x3g\A}xč@&%;~g%O;ˋ/Nܸ3mT/Vd̃޽4kk9P`H]Pqk~&ޟp9ti=z>P3i̟NyEc>qwj}jxbԎ4v{ҝ}.λcÕgK:FEzSűƚ50Ďeժik O'57˞OG>mVc?4.?sZ}Ɲ jEʝ;q"~wx11r@'VSvn}}dشMCb>}8ۍ5 YBW~74.R sGc>rpeek|/dOxyOW Ncju?\w̘вj4jfc]!6xf^͑g~ Y~3Xuw ?J#ؾѕ;vF_Bc,<}o^yl :H㎿^>샍Sp9ql3jlvqځSqm;V'?꿃X{_Kp&]pzc,o7VV[N65t)TvcAdyO =UӨkgxxv_M#k@V3*0Ab;03s_팳5Ã_鶅ua/OaownHcÏVV>Ϟ\:燆懧5Tݎu"ؼ3bA[g'8l;44vGA?օQ]]ݧ{Uc%!th}3L_ˈ4;7.oVM MW;w*`,LV+N={5/4SV"/5|X^8`|И }qy\G |BG8\0n)ԐXm*]h'2 ώԄjqlPc{I'2c* CW\bq68qDUc;ĉ 2k)bzbklkW&֮'(M]O,^Q\c[XXƶ6v=xEqmmbzb5+klkkW Y= [U5;Cs{INs+:u>,8Lf?$Adz+:];ѣ}Spk[ڮGvb ;Y%,Lj]~ӈmz B CR^J"L\|>|&☛d܂3]0~#N  gg/|ؑ/6-QΙ[ZxHlA(:8|TuV15V{a>^p`2pp\ڄ4,^E!J eT BP$9 +Đ\$j5ɕCEOb1| smEӕxahe@+KT"6< ^*)DFyp9 J11d"H1q!k ^ y63nxvt9솤PO&;Z ,cԜ6TCFcѓ&i ]\[v(-vSRJ5s#'Z[[H(GcvYZtT"Qb4VBkv C8h.Zڔ8@K5 xjadch¢(ؼqV.v⬱."R%TKq8c.$pkEu--D+:ȂrY(b EaA,2Qyq_*T5<=mx@4ɤ}ymy ͅV gd,'5rtS1RbT>9⎥%jqyF4Ve`Lc4qN~8?pN.;R$n>&oR9)8-%DZyʅ +Ƣ'MԄ p=qb-l XdO5sVJ.>EΗ4VaY%7<RQ< NWa~Vc8Z⨧iiy niIAXcHBhxʋonmMpvj?p9\82Yf)煬!9d@R5a֊_ΗO%: ޖj4VDZAkRѣ9, jKli؋x#fF[>6=F ?)@NQeIϛ/7\Vr)ǝY r6KўыccϦz^O^TO o`[j:8ScWV,Uɡ[wpEÍi kʌ&jN  (Mb8K ( n R)/j(Ɩqn8ZDF(P[l *aTsWj9S7$b^0W)3ќ!&._E0W­lLզɂ99bʰ[bDR1!%}ϐ +zj}Ӄ+}M n^rnXc=/-w9I-ȸAϝ[Ͽxq- ܵX.mtww~uuwV4!0|~ATMbMU=L\P hb?'ooQGG"p~k'@ W3T5.PD{Uk,z$%*XzVəZӓ$kpgԣ3esŊ]d/02bkτ;Z^mT|逩Z\d6+iRiVidM[ڦ! kEJ/F?t"^$Btfl-5='x,K7Sbܝ8Tk*45vf$eg'&&f[U~ks -)zoDϜqvn>LjbANCϵVSRRG/ )2.:gjnřHqfzq[Y`k_!cnl- -_} a7- Jӭ -8ú(/Z]mҴt)$4Hz?g)%ʲZ1,J6֘LfdEw]h\p/4''7Km?.Ud!;UlTOaLg!Wspn=l\ch[tGr~PW֌ c$gfbP'b[˔ Af.ʏyH*,$eHx\/tt>ڒ.MRqX ZSH:*Jl_0?:" 6IcfڌGw I45[1gdv %T%o=}]iўi?&lgG2AB戌]i}4 )30dBcwu@6~L4o[ ]z50762t54Vl=]Fma1Y)4"=5Z֪ꌕVRRRRw+BKW_ʗ;= "T.d2bujL ʆǢ'o<6sw聒܍3& 8n>g ۤ%1 ,WF CS:D KDW5op66$tݓL4_ꕙ+Xվw>r5F$=0?ҷWtj+LZJ1|Mc4I`>*k4l %%XY؃k$섛|;jL!Ľ]V.CWrObgn墸L" $1f[8EOb\i-*xI6<uW;;9.NmaĴƞ$qBp wdd< X!"]˓,<MZe&<|Zζ\^cGzu =& _0s<~JXEMaDDa&}-t=uGgfAo2֎$6lmB1yحi,zzmlPxKN36Ml!g,~EUV Xcѓfi RR:(tL¤66eꨯpJGj:[=IQc FD.'@MUf[3ӣ=7IŌ)x,ek@.Pc•F2abG_Y,b+ %>^jFR4VKZ=T5_C(~L$19hr:eY`cG謹3du8ƞģ+ !/IO>!LE] P@dymh M61Ekqwј 0n&wo4d"  H5 J#1$KYq6QRV}lI,;m[=Z7dNю:Um7cG"%CjB) *0PJԜ ˹p6{dE4te ֘3ppN/%7-1M;^@="#;2> !pkav7DMP΄rV& [S]帺gl+Zq3WG5x_a"!#V~*(݀<)0>ھ"Sxcs$A8-oy{hC+Ƃ]!X70yrEҩ"Zp=Gc;1#:v?'xab3`]P'<ljDH59XVd\&(H@K\D׳m4# NsPpl7k 쳛C lz,YGp$4) o= )W>^Xz}\c?-_QnV&֮g밄t5d]O|ژXc]\K};~fmErl{.ƅ%ڋj菢D1o]vo|ǩ{CzE-gi d~CÃ>٫5D#z?fhwo=K)M)=>>!h51 '+ 6uMOCzƠ2yz5j_MB$*#Ǿ[^4[p8|DۏuwJs3/e^\Izja$%k#66%e@"SE͋šƎsN5]zR?> Ow;ץtV`wC^ t1F]L{ 4C/ƳN6@N3=z~NƄB4V"ZbQjsX|?ͩo^c/*S?V8m }=Ǿ-n& (ss0X:ThGUdǪJc^cVq+Zi Ï `@5@@)IB[0a85~tjY4~ScEa֊Ux${? 1+)w+0kư%Izd= 2JQ@^w樈V+1瑿XcǢ']Qi_2 >C{ ?i2j;B33 GXc D\KAHQ'ΤTSNJ|Sj Ԩ+z:v1W?kL}Hp7AsEwUVrǚHט)pL, Hky/0*ua6L8cQ,X/0۠7+Wh0x?vP7oE}ܢWI*g :* }+iv&JCܐC"֘1_d%rYU8 OT׾QPBJwB|H:irA s/~$ F<-*ړ J1MϏ7glf0 k}{5^޳r,.2RȐ3#c3]v,B*6Icjtfog\cۛSW>4=抄#o1Xc-1[ۆU--psEH%']ZpJG}X4Xj4Iޅ4OkR)J㛪\~*fsŏWL/X`/10גEffwLU.L P"} N((!՟>֕cڪpB ݓ@5XWȘ t.i*6/K8" #Uhwz遄q:63st>5U%mܓZN UhR GmP殓q,m2Ɗc]̘5f䱑,?zHMl:)şE mɺ`jɰ1)%JdZNV;jeŌ Xg-Rab O#eu2U;y-Fz&Ljt:OxHSyGC *]ʥK6Jkk T*,֙~Xq$yd:jddZ,)*1$8SҏWp51|BT)+e,{(w'\i,SLk3Vdi:UF^{NC yR|Esx{hXiHծ)`gGȖޒK[TMBD3)Z#K*unqfd̶qa+BׇS3U{,<$u*ڞYcapwjp~Oe zzb^  <(Ru&F;χ~`5k=0X i9/5= wC降.(R+z84GmC뇱hA[B07c"Τ_/%4u4hٱ +Ɛ0Vj 3;; :e`6j\4ms$80խ.WFua749n1lr넡]\F٠.ٹq[J늘1W|yuȘڋ K:`iJӯRMg$O W,1Aua}c_hԃŀƤqvc bhOC;ٟUW6rj_6ӊK4rd@M-`D2]bFM_֌_(.i0]u,1Iu!v+w[}خo.Ta0l?<N{ȞlX-†NL!K/o Ԏėce=ř#c `S\̦׏{ʋc( UeCYhqkVXВsE9(j:\8y 1&.`-H["]4{Q O%*H}ڑgA/S-e{K-&s|75{ap4'ѩJ(%YWmh 7OWZ1zm JB{MwL_1Z:˖aZAEP 2ܷm!gUy- ;h|*@3Z܄4@fZ׌Ul%uP`ꎘ1 Z0ﳼcVm}=;By}N4(m Rd,% M#Axa(-PԤa xDh'K˂pCuhj7/cf'EaM75_[AX"zWKLKƺlD/."ޠdv)4pwgbQaPd< )+@m(IBGqh"ZH&q [%^/M C'n}2y*6Z8ƌum.ƪ5+oMa*sƪhY^dݚLǑCȲRq_ #=uښH,ŻY"ɻSp"b(RT f`W촧j-[~y ^yt'bxG~?cT?"+ل$ơ{'POǙ~ 4<(%| Z Q83sJll>jg+XUd/- wX6Zx1K?"W !f̸y7PDZe0V_jﱶ&ꊓ>I,N"2)N(ң 5F}hU*.&LƱ bV4yYwd2OF'=oz9c60v.ve~h9ݞHVUa}6skLħ,_ZUYPbxC0qּ_Qg@bCR/.pOy<}{kơ/ ut%|p! T1쎷'x9/ Nو y5aǀlD⼷;ѭ ƞNq [eck}ЌMk>W|>ʧXn3.\c]d #f~E0=g5bff<b{ 8{ iܻ7^=ꇇo*6 XOXc&- f)c~dޭ?X%Y1-ƫGG^pFoW< M],RzHWuaV2&7Mn1k#~)1ŲPR}R12c1I\W!8(j<+d~ڍσVZH(jY[g~^?]h?z4bjR\ERiβ(SxB|*QJO8"qpJ sV&+N +!,-b2sLd~081|Z2ãT3nuAT]±Gr 0Zt,DF+P/^ǕS:tE<=ӄ%op>o\1 vy<)8{MPQÇي 2Pe-Ŝ7?%G '[VU뛱lL%Ę?BJXD6x;a05<$c rr/^uq!KPe iB5Po$ adV!hڿ?i"R;FqɚTAx};̎Ǐ̎=eU&z;v,BƜ4;sA1H8W+}/ -B!\q{E5wXVU{ݖe0FcG#+B}W~;JQ5'd78YfX !Bjdo66:w_,=Jpv& OLRhSr޾ds:mn/Vxn/,c#}g9Μ9}iC҅k|&"xWh daWVDUYϪrwGX):xxJu|T{Wǿs<퉏wa'67Q^ޞ+cǎ{d%!̄tS;SX 1ޤ?uZԅA q 82w.2/ 8kxT oKcUUe5N1*^a֪]% !u'ȓ`z8qFݖC`lt``FCCO1 T?4z ¡uC; Ĝ@Ax Ix&5*@/eOP8,:J J I.Ц]tߛ?y&`;˱̎߻7>{c۶~ TpmyKj TCIa,ŭqEvG}%DU%alZs\ÚXs=cؙD+I{iiiEEE1Kd\򺋽K^u㽝sۛW'@9c6ȱqDNB0`ѹUehR ,M M hR_|"{9Gd$&Y]tUl)JN̉*cm#]K061&ebjXmL(B睿7Oϛkwί"?0`WzϛHcv0rk`C1{ox<}Q q3Rg.@3[.RZHv%^J0Ҷ Y6 5ΔtN=:4 ^h,hpБAw}ī%& t.HP] g ʏ[2v&eL2ѩ]* Z"ō2g r7D=bY5UVZSU5Y{Ɔ^]>LƦ>cM1v7~6qό,}a8>VӟXVǾmh,7QY9ޝhVth^M#wEEJ,츌JR&s7l [/+[==~mz6|Ez=32v̜L؝pUwm':!+$XuL*EH*8ktb^րtm) #^1h;y!Pg>AlJ&)V  D a(&{ f_=fv=fwey>_zsy*ݳ^2cBG1vzNFNnFF:NL @Y"6jwmFdBю6>_+kUa9R9h9cM5P AE{B(ғ͵ GHocկ&c#oAwߠ A]}=uW{K99'-dŬ}2rwfA@SlP#vJXKdxG!\uDLl$ -6Čt-xaj2XzD[竲+T+kߺql]=K^I5IUQD$20y1xo( w\Qԥy0`9 ԕYZASڐ#[X$fYֲQRLp6y%T<4cZZ! =W\1zV/y =eA GU=D#xCE@RK)PDRDآAP2Lm/y{W ǘZs'Dqx4kˏ- aHDh5 {C_@-đٜ17C9 @ǹU.-DD - :I-+0+wmdy_X6Zx1K?"W !fP@>c!Nmykں"eL1B(j;F qH{~R? )HJ%i|0njڔ6aPd\\". V }ި4Dz/.,h[qdcߑP<]\`Ę7F+M/͘]1++qfw U% ^J5̻QUiU. Hx2lZ YHy2d?<7:n? @bCR/.pOy<}{kC"g?c+g *ӁbpNQy^*1dM"6Ϙ%_n k!A/>׍7=EP`F,o5^i/k^SnͿx yKh.{>n1tٯs?Ǟ{gT KĆe7)f,yXr;$AE^ˋ9 -B.XN(Wu6C+6 V”kT! .rnh)|Q JWB%Ļx8,X~IBTjm謺˭[Y/bcWY* ?EyXcm@Yr0rp+66]mctOtIꦛ:k9t9<9r.Uy/\2X36Nk5LZHU)5Vqnfu:e`6j\4ms&Mu˕Qr(`qe̗['LCKM~=6Rn55lg?{gԵ@x3@X/ =ɐs3 Nkg{2g*K3AgL //_E VN*NOy{%$;$b|z{Zkgg3svL06⚍2xiWոttUxʊU_K󹤃*C-s%xЇ-f0[d1o966-(RR(1]hՀPSywd]M<q/,3 1TATƓ6Rc-XAhV,t*JnC͢ջX7L7L]&?ڜ}{);3eS0QK؇]T5Zbc>-,xYg!b!-Q<3DPiQ=QQ `qL k4I!ҳHeXf3fTOplG;T8޹߄waSHYy}dLrieS%+*ZF}WJgC\'ÒCE.yaV5;,g%wz9ة rG@Kk <,OJZ|R73eANb`yVmbsf4f: ͨbm:!!jZƘQ6Hd=<#X^,y%cg5Yr: kϣB&cƃE!5#a*Q 7&Gؗ %kB7cAۉ=FA.Zb7F@V?l2Jh&9Z8*#1y7+60d)^ BI3ԼU/ Xv҂R)ж I״64b}c>dYBcGԐh7W^^Cx%^2KcI?d 7~I%Bc1oaM nI{|1kpV֭A?p&U~=Ɩc}IĶ%XZݧ_taÏYY{h?77鱋Z$xLg2ܵˌkߚ /8hDKa9dےc,-/ھ#L_ѧ>8]u&1X-30ebk+c\EݥMf!Ea(J֥9s&=B6/nR;!na-3ӎY1ke@ 0"g̜%cyPdX\ (yKJ0V/1Nv,{eXƶǃyćKc3:㱵@L=^9|'UB3ɑ O}CJ8Dd7[ cFc7ᛱ0j0c/~Y<]93N;W bLV/pO!Ҧ{U= `ɇ\{õczAXf, 9996lrE6`NYѪBlP*!᪫aGʕd` SHH,rSREŀ * q4Y9`xx^B{5$G#~sgڟ3V?_g%&X@^ ؄R -*[K@ 2=™ \ T(ͥiE*c{?c C tvWcAcwIy&a@cuP_1ØoHÇc`4u5 jGFy7nݺ gkqr:E`XZ2vď4\+\̥x0A'c WL)1^%AGj8a ʕHqG[m0;gcl~[mv/6ZY8A LgcG1\o`a,TD$*w`,Ny$޺- 0ۢf hT+$ᖪZbj2=OXHvLo^S3Ҳ]mp.hig.1r]tv. VN1y(O29rh q:ƇEy}'x0<oڈ~;;ɵc쓸0 'ezLrQBr9s:# 83*73ϐ:Ά=)`TygJ2xb',jj:>}>_i,-(M mK œ~ڙsa]쓌 `7kYΙ2Z1ȡalR1j*إ#i!BM=,Jam`yrhUBUYe2w~SCA_zy YMH.|0v" ؾ͐ ӎɁI I=Ǽ72ِ)d:Ǯgf6gbѤmٱB\^8a?S)ۡW+k4{_1d7_lxv͇՘Jv\a65‚ UͶ3CU77=6\ lcJKO:{JKmH ;;[q^0)iPly\)pQ0@hƛ~(0}Etՙ,ݺv7ە- a2CK\x[vDL pӏߨ&g;WͶۮ wAך55kZmjj:}pSűgۚޅkj[3t~dM]q5k( l8{>ZG3ތ^G_37"hVϛ@?@2cbw~'Ʀ hssss-efKYjj̄lx3eXWuzTB8@z.47?67\Xx/1~;ltWUYQYYQv;n6߄MeTf1YP|ߥ#flьc|BsxL2k#x ǘdfPf.+K5@2s}x'PU ^) ^ElcJ[C&\]Z:)'g7 c€K#P!wM"fc x_a/ bTy\aHxmDzfsIf5noavˀU8N[%H\D u_k纕j<kZl.[33fsALW%2bX M&*@̹з︂\Yv#cBՅb!XMq˥SA=*K-3F_jWHjk PFaDuy K YFN6Ȇ^& FX (o"(%T]ovvA۸Mmƚ׍I60/m{ssC<s<_zN-D 1XA=f.G[سae 3o\b,gMeLx;1jq}sДF 0 .9" rEk3C!5 w=l݄ό}^x![=M[>'JK]c=+t S( IzqbF/#E)TRM6H\ \x%AL_MVό~# cgكEIBu^G23T-#:ץ7RIH|aӥ-\# aդ6܌ƌ3/ծ@!wR%s!NsPc,U9REjӽbz2_߆1Z MyVD!c4Դ |*R9o֕~k1mS1/j}>_4$ 2EMFh? ɸ A4cIi_451 4JT>w#2rCc;cZ{03w{Ssg۟EkdddY}K1>3Y0o^a(q؉/[g'OJ}@ c3o0ќͿG.j݇OwdgmW !3vfgL$7>P:qÇ##Ϟth?VӀwL1+?7X..chkF?jEwuW` 2;c 1Yu- Lۙ1c#Q4*|Η߰cObV]Ɍ0G  D Hc,22j5aۭcd==Vci5طU-0Ɛ1eמ%1c1+\u\?z<"PswA_ H|1?,$9L(h/wcQNf,k""k>z2[7O2c/`Hw&rAuk]/pNu{%l ; ݐo>`MVko oD.~o@ 'Q $ ~,@SxY"4<91 ݠuel^*eVU9;sO`7t/ُuØ ݉M ;&6`Nc*7F8$E lcJXADx˧68vtf ӗ:1揹iu]1(͑nE*k+1cmHL0u8U _=l&SP"UIV`MmiBۆ -37q#k61M +/_o8%ɘCߠ+65eM`3 #L+>R74Tb6cHcК ڰKs B̒qS(! I=NԹ\|1+Vu_G1Qꌊ2pQu %%SMp^ATY[Ul68K q*|+&u 1;1KŪ V(͔?yƘ?DN{[閶^TK/Iy^cY==QƵ!uQclmLߺAf,=JR =k kuc+Č}bnsq11Ý }9R7 IMu'5uc7Ju9)e=0=o.9y\+jL$3/#6ԟ;c,_{E+7imo%2ncc9TKRe$uuc,9*R LLDޏ+HތI`~c?}ؓKc7&)&՟WiXh䜫+&$j%IՍV~a2 5lc"9+|[K~8 ؐ<2?waL,/@cO'Xwc^2`vkX$1+ӓиLza|G{gc,t#c,d?ᆎ_>m]9q/cEy$kZfLk-IAƂcy#)磹dy#EV^D#\ ֧\Ul_0ߖ@SG389tzl?1|4y=TVjQ5?6˜scI!)2WcFi+)w ZoƂs ޛU02vHغ/87u} c[_.-r]_~6rXf bB׌n c:0ū#cMG/}@cՍZ1dgI06o CBFd؅t0l+n, qcLՙv"^=q!\~/[H2o~$H{3 x4@>vL<=`,Cv DS'ҢZ"mjZM=j~&qBE?עdl)%c+n?S8tX hlUۈP_߿Gn3 c?g;0lm!G3[O4i8v8Nr<V1v/R+B1i9TiH%-]f0؆P81 d-]3Г5e!fPB͛EN1snEYDi"w #21 v率A];B`#ٙK ?厱41(ApMRV47b)AIԵhJM>K#S)E cKZ.sm \3PW>`:p AXgK]Kp=y^(as?63[ HvPiJ6b(+PɆUo)N&x(EGxn.*yWȌ3?]0Ā3Ue1+zX8DO;51\,c54S3M"8EP8" mx\dQbHCʽ+ c R{m& ̌m6(fH=9J҂5}y.U1uzMveC& 9` ܆>)a X|FNHDvug{2kΣ̌9$ ěԏo1fABct{EB]\̈c+ba!ӿ6˻B0]$!0"T+7 (2)Ҟ&6I>Zu$9yxAb,`#c>>vפE&72d(Lx)X Ue_1hv8"L5s5ZAD@I:c] &xswwqLJcM*.tLnduHzTԟ Ƣlfik>1M[%$+0=曧Ͱ֋5:6-x؝4}CbAR9TuDyc/h]YUWL`UuHm-&SHCr;̫2J=n0)5ˑ%SwnS (3 gUuZMVkmZPbJ-bh|d.4cHvDa(XrQ$-m }\@#m4بn3Iwqn槣tdr:OHz굞̤p%?}^Ti0+cDd \3܄YI?c:V) 2a;b$c^!@E53 o =ㆱ˫/'M[eגV%iw6`5Wn4H'^Igm}̮Ɨ R, _je[1)c #%F`3ry`h!?m4յNY,E"U҈+Ɩ5_t!ŒjA c}e5KLj|$mfiƻ_ ;r=]9t3/x)Toh dnl2&_:i *T[R4R &+*?lI[C+Th]+T$#Dvn۸W޻fW=:niQJɒ*.|&Go{ϳR:~,@s*]Fr&(6}H>"G lF‘y 6F?kFBCdem;mWO!6i\0v3WcE 2T16\A"+ B&6R_ &Y1E4u[,vH P8,sR,?,zA&-c<릭inCk:(?p/I{)_Yߧ 81!$g88 6ŎBF!piFB0V$]J14 t;EnR1f諩9i08OȴwOO6<}2~]ӤECAh "d:ghL<:;s$] 4Ɯkj]pС ݒr~|dmߛ.SئDBVGJA<;uvԤ9,&},NѤ8+2X٩ᛒיVhhR BU2 Ы0fGyӣ'\% & .=1}հ]LflIaB^f1Մ'2)t=s;,^jsVITV\c珹cWlT '[1ax7ԛX% cdD`@2/^&\x_M^u E 6KpB}7 }!qGO|5ŘiA`sjlt Dm7f>calcƄ1 y=2PĐ!emϜ^=s@WEzI礱a,h$#6.Σx\Z2>6Ŗ]S-ܱŸTc ! $P\b`310;h1HAUJS2} klG{qye-^qŽūvw)@2KT/e(7ÑpdR$&c*Lc2cSXŘ b(Kiad&l[ iα [Z!Ɯ. (tB1 2pdxS bd2b\2d@b,{dIsd_Kѧ-17B<.+m'"!e 00Q+?`n̿:?c_y#vX/ŎGF-p0qƶS^}relv^|_pKexM0֘3c%^NtŴ f6c1v104cYE$`~ Y*VƜ5N'bXN})7?VMRncrc=b0dI5b`*Ɠt*^OԋCzX}Ie8ga7l#lqņ*7Xȧpu֭{bŘ.c/ bp2j }s_ f6/l%*0V&ަ`1aI,zfӁP}y֭S : q1}H \ߜNy_6Ø D0Gf*xp=1 9{xC$ܘ[9jQBY޸&ՠSwϕr(c<:# 4ʫkcL82y%Y 7f1\r,DGzBerX6ut)1a b.'ֹbEow:UGFas:Y,v#„e,DGzBePK+c:X/C! Θ1>Ama:a"#X!o1f'Z1=ZE B>&81ݚch|bE]2a.6:X)d[b⿡4eNdquh͏F@&PqtĐ @(c;|.r`,^"e1fX+5 @$GEF&l@[cy1橖!eMeĪ=F m=:ҋ.Zta|Y4cFkmu=|D>=n7 X-<<#k\@^|^g2U|19"{Y zreAOV(\UK35‹1dl92'#W0+`ȋƦ1i+RVJ\2Xb,o6I.M7blKVȆZO 65eU8 cu1eU#7zꋊʦ3v?R"jC7qnWJ{0u1wn˯='\93c0p%҇<V]ZcA9}xu11WsPW:eL0h5rˡv*į71pg?F.GR3u_4c>lTeɲ3yu9wYQ281FɝU=Gb\q*JȩnVT\DHWTWbF>K py}j?m5-j Xź[!{ >_Έð^v&c$*,I>y':9cESl645Әj;C'0LƜw?nKS7M c͌Hࣘ-jeL\̀te8x̤qHc+><{6=yg\_^Ɂ1qXu'v;)3aewRd8s& |&wp=Ȉi>34͍Pmb[I_>皟`1fc9E D14B0g̶H?Fo"b`?#~jd Q>GƤ&O~v"^'X-13qXʛL~&c4H?E||!`&(vg}w%4c2VЙT.[IUuXXH1CǾ=<5ڿ:3c1 1f9Z7[k:Y,AU[ҁcQ3K9{A>cɌx>3t+Qv`cRdx Gqծ1 k4g)¥ 3pd[_1{A5D zb}֛LFc93F~m0֙c5I@F%M)<tϠ y{  @ i)M^΢ ppdq@A[d1S&_$;"L\c k"!T `Xշ dbgZL^_(bN c,ƚRRNŇ\jc5\alIa ٌݥ_1~ Ķd| S⦀ɌmهgoKYyWgRA6vbĝdoXJgD2Xe^ٽL?12-E3RL=3<3u-&/Rt~1/ћ`Ct1ˏAĐn9:2Pf1E<# 籰՞b-eL0z{Vd1Qg&c 0)1JIt*C˃5XLk/S ]dyb缵>i1Q( +Z1d#[";`WqdSzۚ`T t5a*z"OSOiƸ(FW\ccJgpdxS b#d +!b[Ib,1sg^Qۊ={,?C@LSYNWF}]ceg ,c[;msuv,ƖcaE1bl76FVڿ:?c_y#v1 dw";c̑}GF-p0qƶ7XsKu~d1L ڊ5mmrc1 cb`Li*c,4`E_4;cȂh,ȏ1d3YR[1尶ig ؗF*VA7xR[߻©w/41!7vonS8y㛚3X3sBqy+Ơ B`Ȋ`G$1` h(\ u1֗ϣcG@;ԏf72G-%%qeTٟ祒*du矝,P^ S(SY`T7hm‘!eHXhUXC]K` JaN L|z{u!6N?+G|':/tR[~|cǾ~Fh^*MZ=;'QO}S)2f+f=z `l9̥ZޟM\{W.1;}ʪXcٻ~KɩONœcbBRaV d؃^g69= Tf:-$ vn-c5a \R^R 8`W2!TQS3ň:0vgg Kue)1y ZK+UOFwPzkq1X([8ޡ ָHmT cx"0Zu)]Jw^L&aRf&bD ϊgsAyΣKyVz`,R qNA^.qdz/3b̿N OH9:"1Le/Q>FUVqM.+{5e#\*e\xPh^w1qylkm7>ŗЇFEdV>'<}n):ci2ZR}tc\idr&^j5d`sׂBR=*0奢,RR`tQ}w 2a N ] :1bpb,3;)xc\idK&V:AtߠUR~7ãm[4v@l4nJ+/?0ORy|[ЋGAl13s4+>s1U]m\>e29 c/&LcD}ϥV+DΥI*鞬>+^x(ir;:1@,?,za߰.A S[WkmqQR-8 {ib1cTP+nrLäM&LcD0]-0Opi!:p(PʆMO cfA3sL359AG3K2A I0kØ:g4s c"*jznKIuH́vf%wOR8-c"*jz9L1iGuǵfwwLrĘC2sLyf>3ΒqM e.][Hc^nX]r=`,[`EaXclYmדC?ZCJh71HѫyΝsNR{p=10FE0=_WE22P1b^ ϛ)cE-%ۊ@[ BEhTg)/J|^'v=ƨ&E K"zK\LVxތ+=fQTޥ\j'RA'v=ƨU KL;q\$-1[ys祂R%8/҃I]1*I.WJX^_**HEZr'`|&d+80&(/4yfLp^*Wߓnư&Q¿=eYW/)S&.'P%Ep gr)N11Nt^*ШlxV {p=3CݏScnMXe2It^Kw)/Jl^*!fbw^ FQKo.vP C`x 3ؽT'Ϝ=u`^*a,vW:(ܛEIErɉӖY~!>SȤloKeIԞ.B xQԒEIrX.dX^J!ƒ*KZdX)QKc9b]Je !獷'}mɚߒE-Zxy-A+2^1Z8(cOɘln1&1eqo<|-h?Z8Jl?хGG 寷%].<:TGHuCSS؂GesrQF3&{=l{8}kᡲͣop/~`l+7Y!U־q###tT3?:QLc ΏY"1[Ʀ%£ k1['1VU4\ gj֚{- h w@vTS3tLs 1O c,=Ƙ | -Z[>eVjoT)EM-|XNJb]Bl6 : Ke3WQM1&؏ݒi3?fswQs!LjEԘԖĞf,Qg47i/E^6H;/))sLP"6cƤ cnM?6xz˄D]Ihj32YYƨL=gM9"/yDil&cOAF[hXx?4hњZCrVACM]RJFt{)q MMy :/+)(6tQk՜!C8D_%Jd?Fy(Ҧg*c4c5u~g~ЮpoWWoxz]"RVFA*[ד+8>F>ƑcoSM (6q:|jst2i_Yz0iŊD#I{mcd]r\&nR&ոmv%8SP[&zmS5V'3b,մ3sW u<|IY[1(cɡ (2P>3՜&b>#3)@ {2F-áay7K=ϼ{w(/'梾VyH͡ay\OgL.oFy +;+_i iv{B?[Mɢ\T 6{мTSxW ?%$4/`ؿ!=I%*'R Ya .]?{A%ܼs檾Nyu QΜV+4/`_| Ӓ'iJ=; 4bŶV`seSVǎz+"5=8ط^l^wmiDѢh\pe$2^8(;M5 t윉d)~#;> g#Z{ήfծWnfVCƳ3~YB|~;شiyگ~xܫwrMA^K꣟9dXk'#G>Jgbj~(4/iMcl&'? #' q'5l-&bv}&mWdf1q2K j8ZƊفf7 ֻ"4 q85bouq8+~sFDc?p1W\hk1ٖ-dg9M}Wb+2)/`Ǩ 1G1Xfiy:hƚ56k4ZLs˖H}̦iĺWdRX31^`+6"h5|N'=i1rH`Bu Ԙ9Y-XHwyVFi@ Ԙ9Y1p hOA ]ckAp9""y 5dTGEPcAF5T5lTGE0/UQ="\"/GTo楂Gw2R>\l$+431*.{(zTxb\b^*¨hlycuaC ^Isu@ȼTS clмTQ긧 Ľ5 K=u S2,̽MObfqD+{XBBRqqfzq2KeX{ A+QPcK==wjLh^*jLdq@) 8/Mr/9R)BRFs Zɬ3jaqvvj2!4/aad41-dqD+:sRKeX{_{A\*#>wORѭTz_/3/aad<&<sCh=B:*ب揊jj,ب揊Ƃjj,ب揊Ƃjj,ب揊Ƃjj,ب揊Ƃjj,ب揊Ƃjj,ب揊Ƃjj,ب揊dA0 ^AdCD.1 j ACD.1 j ACD.1Q.VNy f8%s]xLCYLDh,{YC&l\RGi߅ Pxx]5Ձ9׍OjZQ:^EL4 {1dodjZQ:^EL5F7TtXgJN;~Jr4R]yNHoT$I*&ք1K7#/Q͸=Jst+Tuac] ,?&.Ug^fa/} ZOzP{7j魢o+;P:avx2m=Jjk>g]}FAˏşǢG߹ p!ef;FUڐgO1jnt K; o7C`װGԠut,&XA{><6X~L\cWa!MFKވ"ktfg rlJ$Ck/Ss<Y}o%4 ֱ]8yN47Cq bhu'gQ3Yއ+K9A9χcwf ʐ:}&XvA{>1n?H?&} ,}'Xj)WhPqX3䥦%xxJ~RڲXƚq{tw!Z=]6.+ b1 $F&u:6XBL>v35Fw6yW|Cq}-`YDh&y4V||8 "6c|\VN7tt*Tjud߷ :XJLnGD GOmrti,0܅@560q|3aB@Ƥإ(C%\ IA:zthE$Ap]N]J˝(zI.̽%qr哗-10 cØ6a c01i0 cØ6alrVl&0 cØ6~+b c01mƴ[c>1i0 cØ6a c01i0 cØ6a c01i0 cØ6a c01i0 cØ6a c01ie,W6ؘƪ&Uʁ|zS23-|瘊Jl"*sP}ZΟr1Nhz۵/& 4i}\&5\'Ga6i6i6i6iØcݽȕ0Xs.9Ɯ c1˜ca̹0F cD0F cD0F cD0F cD0F cD0F-blb:s&wy]35y_ÌunZ5߷hw7zM91qdq 2fQ *wfĂ ;vAƄߊT4^-^ƶprlJZ3[wAV$o;,۲[[[餗X0;l0o;nF+1VZkqI;[d=,gQrb6ٌ- Ēa cVKd2%8' cTXq&8Ή%060$Ɗac{cww=UpuQw]۫m؞?7Ɗa֘=bLWX1NJcA;ͷVus<7鯭z&3bqzBq1Zķu %uƱAzBՒe71qű^iqږZ:{xFK#U,ZFEfpcɑc[眯Ԯ]\۲8>mSK"Nj7,(eFu`ܽ}c?$sS߱D_(JX&]\8rӶ"'xpg\Qh3>L cp,:6 K%p]dpY`p]dpY`p]dq;&X uL1vTEݎ AL* > bt+ 8~׬ck޷+p,v|cpw%2 ^"c]ڬ1w_ޕrBc58;V͏1D+,tH?cs^qS'ǚLS͸P^8ƁhueYr˄k8WcWXw#y,[?" 9v>W1*8ZK:ѻ8A4ts|OǨx,~?Ǽº籆Zǘ1JZ䘿x$cna݆+ cWL%x_]dpY`p]dpY`p]dpY`p]dpY`p]dpY`p]d+>!>.U @]*vr{cwBDr Xjѱw :9ONŋݥJ}~؎ ROu#*㓊ϱz"F⥷ vή1y-hX F1ڱLRx;+nɱ[g@:fkeñ1OZzƾa&bfбzT:9Fhr- c'cBg31l2ỳc4]r(M3̃#F.W,_:v`ptȱl/B;I_L^1~cuLfކc'c{Lܐg&cͶy̦4yykewٽrXl\cg4p,|Fwu˨;uR$wX; 1 1 1 1 1 ,cP]d,0 lMfxIx lu a(b ^1أpt gwX{c;+K cяS86w1886yF1%0XTY3c)MyR;)+R nbC1IåN%Ŋw+o#[41&= }׎18 '^K2g~h^?ﻁ+YgSޢTFhQ7ue 5"B .|at\V|#͏L{9&1lޡQ$bol3.cu;kEuΡplAIǎG4w{=w0ޘc˯}[[{Jd˖{-h۠il{J]rNp }:FP8}5[-w:xrخEZ]>nb̦@%MG%rr'p }8֨[>KFGfS'srFХ,=w+qnu78,:nF4;xD]ǎ1 ֊X|3plA9V>{;>-r[1S&0~GN9oI0"tG5*\y| ǀ&TǬݯx9nQE9־ 龫Uh}.3ȷA( %w2ÒOG==u[rf2Єzu8<QE930z"J:ȩY2ÒOI׶)k&M{̳ee^Q1؄c#ASG0tPX$)Gn"OЄلcVh}ޱ*+Y'e1P`1_::׊bݑXcM2lT 8d޵' Ǯ'_>&kZk[zղoyTUqlIhÎ+NٛtIǚypq_QnWe_1 M1p 1 @/p 1;3@@'QixIENDB`awf-extended-3.2.0/images/gtk3-menu.png000066400000000000000000001305021507226270000176560ustar00rootroot00000000000000PNG  IHDRcZPLTEGpL¶дɹ˴iL?bKocXȗcLwdLݫ\HZHɿaK̿]I¶_Jyf˿o`]E;zgcL]K~ŵeM˼ͿgPF71mP\JeMm`[H[Iijxe^IhP]IɾgK?^KʻfOǼޑ`JigdcLݑpapa Ӟy<;:eOŹſ$##IHFDA@|Џ_J(('Ƹ}zw232蹩ĽXXVsqnUTRmki»\H00/+**766Ŀqc٣mQDM<4xurӘ~NLK_]Zcb`RPNõ{UE/.-dLⱪعu\PhKi\.,+cT6NYbI=إi5--,r^rV,߲֬oġ˱~cɑxEpo.Bt8jP i0%Q(1(T  960_<00X,ZqmĤ8OXc_兛22Ӓ ȝm3g6Jʈ3ltRNS@fIDATxlS+z+dͯ "LR㽞:nޤƨP58%S?&ĻIX! 8r&UHI^%QR^^*(Ҥ>ǽvppآ<<\s{9oV,Q hdoX h^KA8=җȴB`i~48IAWBp˭2G4Ynܮ%nu55ԨĸYlvE"R JD9)0ʐUf6SрWTã3Y9bOV!Ӌ!χdyV@Ȓ SߪE%6Np\tn,C"Q1jc1R w)iAEeIQxEȚrsYֈ%+#Bj{BnȃGg.+oWv4Uu{679!C0[RJ$VRYm!4N6p,kuՓ_/ HB4 t*Ya8,z3^RU6Y^9[f-s*s+#)rv!Ʋ(@Qտt|IA"\p' 2;V[>|Xv3_Mc ݻG_FRLjNURzRj&#P3 ҨPL.¤9-MQzpXޭpק̭ Ӝ%@1op/ s=*4k-8bJP ZLu/G̤B]]6 EhO. d;AaS4=!#(d=Ŭ0+R@,N !aj{D "F`TȚrH=84^x1EjXt]X"sRC[1+]"St|4-\X^NeB zEtYUѮnmAȦ%e{0qE2!W c}B+X45!U.\/s} !JkLJ]DfWn R "JB `nG2ݙƞj@Vj̋Czɛ1xZUÞމt~SfcBLLE ļAZ=~{y(W"ۥe8qy.5[! "د}^;o\ RM*(iG'Ggzb71 Ep&~Q'%~WԥǏD!2\Qbe7xd2=J%v'5Xt bDOL!<X%9;ĂԮM m (sف HqqJ X04&yxnnuOs3auvCut+nzF 1[ ! ΡNj܅*MK]},^8ZB6ƪ%Fx:)Lc͐NCt'<RAw+-F$iU;b0F=$ N]wUU 1殆f(܋unX{{;Jѳx~ƥfef:B\^YY^%"@'Fػإc̷{!ХDha0,F-k/<};T ;]F2 1#܏rc5f%B6|R| CQ]N8N@rLi;eﶒ[>_qklnBkyoY?~ȑ[Z Nֱ CS 2µ¾TNmd_Mp/Q:.M)sOKl0,XA*ٌ/L49R4lh#ñٌ%_G~^ʇWDNڕ{vR9H/yxrzZt"RW A{^UAzA 97+8I+j AJiOɇk/"k})]c?~4/A55A5Vl;)N0jlMR&24vWw#ȺN0jlM%)X{oq/@q6Yul-^ [aM ׊A5V:V|D<˞%}c{"&|$K@6zۂ{",[b7Kz;{w"[^HHa2ɯ{{cX4z)4F92l,j1*2"18ؐIcGN,S4$ ɷMkS,tdؗ_ 8X$߆lA9ykGbr :XX59VJd(-Ycl>K(ЦzPhe jԘ+ZeafA="'̖4;WmD?F4F?>U^RT|m3Y%[wFBZ~joau&b1Ȗ$OcdR}_ϔYrkyq_Lef}4HO h?<,.0;(|0 dL nT wWb&u Tp]6pHVX/BѬw7j7Rpo|!OyڷrsNwOOOqf>}?|ӫW c9;GtkIռ=D>F a`:‰6V6(JTUmﳽʬ.+_*[ qvܜ_.NTbd9Vm bW/2]=;:mo׶c5u IJtoR;\=cXd2fWc;6WʶUrgΉ"xxv%˜c@*tUfpl濷^k jѠM=\bkUOiCO=xcI^_-u+m/VI+cx:V˲Եjh xXZ}`tW|szz0mڵm?ݴ桍^߁q6y<'*OqHg?c!*%l탲[\bx1+jMV]Ji`̭2V ~$_VFeVHk`Av+ZmR}Cq &_D#Lͦ UX߫EަM{6P'!=`?iaUj&*ebohV,acXlYeN\ <޽YʧeU=z؛[0|uUh=sB$ЏA~^۰ M0IEb#G/yKf$]ax1ڽIh) k7~l`L@f +ex+}sZbl?O7EL?OЭfÆ*@Y>!i{H(oO7$Z{]~Y=qɘcw;$,}-\{m9)bcRT'{1;`1e*A6?q_Aƈ*Ř\ܖs;:724_KUf"f*qƂ+.)SKal؂3e*~)Ld̶4Z ;p-V--#Z*wIl-ٗLRwDKOɘ"W%X녊 #ǗTEncf\Gc3gBǖzL2(!.sHLmF>z'*:Z.$=ڦt$eDKZ&c;k Hϴ/"nw%W8֧S1eQ-iJ+bLj$'>v1T@L8K>15ђXq1VZ$`[eՈRNϘhߘeI"Ïed1&ߏYFʎX،MÔT+kbiЈ׿<>5:'RCۺ|4IE1Hs(ƇUyy~! <*e_ mؗ_]=bJӺ#Fm3y,5ejdI+f< _1='iGǤ/1 tOhcL(jOwI3&-iemMԧ5q^CοR"ĪL1b!!aV17  f(#;,sŠ@8HHFQ2DklPXnxy  bc28+Rpprc# 0s/O Lw ̮Ʋl.0`l}z1h # !ΟjSI0j yTd,y•+ NHTELJR܊7ĝrcq6i 5b@P `,9,bSPBl$Kd,y*jh(g(a BL̃w $GQ0I@&bpqKbN ?n9,]pp^bt|S.rE&$ xaWB( P m'<3rU"V>CX^13 QpjPp"G$I"VN|M]!yQ+pIt$* Uxfb c_\  Coƌ׿Gwaܤ 1GR`"H`(a`$HL<NJFWHhJAg2-)tp3\QqBq\JVۊO D}noI2kdqә/R@JrtHž i$KkuC-q1Ttɉj/>lLM{4JΉrI%;jUeZ@3Qd߱RCm2لPhDX:GasLMkWJhs W n;*Q/fsw%?jtH !Ğ!>l]ﵵ$FaMtbȜ`́2$t(㰄JC~_jL}оt`!| q_KZZtZW "!ѵH.H/o4Jt%blBB rupbcC1#wH5{\qzp (:Jv0DC&"[:]F7#%xu: e[ɓ22ss%i OlB՚%bT+h:z~~FPzP}H|jMbacC*\BBLLVBK4阉/%.ci熍Yk̬j;#Nt.FǓI,olK{EhD)|6H|<%*5ut]m:7%g[+FgGTӮ}s=B5Pn>p26$;8KI"8VNN s]G /+.3:14jtKءLtJ~g|N><=ڗcl" ṃx80ߏ ` ](&vϥ' CuW:?n{?c, c0&rDzLt&g:bՍn \ *@ƌJTp^+HhY/PFG>bCUj(OJS{_"Geud"[ׁ֑aGIbmy r*ޝnmzYi[4D8pQegl.e6]'nrȌ!)dOu vmwѻ<-k&!/1،Ϝ<.?D 1940 (Q(RB5FC>8uqMGcԶ 0  ȎR Ґ P*a $5(E|{G=z[~hoobv={ɟ}~,C?et cubC>1t`&_'/ p \)j@BW2SАO>NR:0blFvNC%^XdX!ʥoYE\ 1َ=zpħ{L}a_&~L0{!cL# Pш½.AA cH& (ra bbk bj_Q=B«*FH.} d:37ٷ}+_ɶӡ@{ۥЀT}i[4uNs)th͎jUOq9qz)QjjaFb%[Ӗغ&b,E`ln+Vu+Wɶ񁮖/ퟜm97%QG }`_&fؙVtȃ3=1^`N|R9s=B|`06KQ:V`+?vfg즖[&c/FL2|*2-?ޯ_zb+!d7e%Fu,E2jcLS jj4:24t5iMLqZ;ս{wr}}7m&Q0m2X\,t6*** Ǟ߮@|}^=4+@~9G?G&cØr ; X՜Xů7+Wc̰c`)^UnΓަՏMuuXw=cOdoEqb1'Rsg;rC8ihuzX/߰ljyd1x@է ZY1qd#W9oء'~wG9^ҙ엚)/L>cC}oH+ wՏ}}pKzƄE* nȁ1cOrΔ+)xs;f:Ƹ]VQZΌU|c% 2ddKSW.R2gXXkFfc0w_IN9'9Vl|_q:yccӷ?9f&X~aq#§j+#3wRe٘]UE eI^k R5b/\ZNg3d:i-ƒ UtcA~lXs[AzxzKWKORtrym?+vV%g#g|H=AaEapp/,pͽY#dQ9 O zoT HH VWuCꧪ}ǧJI+ۋ%9Qž&\I 3Lz0ssv,MgRd}Keoݢv{`D3'j"gmfE>&c2H}>.5ߑI( '^,}- ,(GVu\{s;YRd}|go~N,imjfo)z\ {aoÛ z_3:Єt"Vɥ︌Fժ{Lgݭ< d1ی qXPces8&dXecP޼iBc2޸g%ìs ތ]k/3QRFׂR8%5}f+M+lїi%2V19 vٽ:"cv0*czso ʊp/1b<72%qt=t:Df hjVGfg5oSF} }Ɍ u #$D czcc@c>mcID15ýqLc,\ V&?F?ɟcS]+i+wgcUD;{vq^OͽKW1&&zLxxwtѤ~mF_9@ itLdIc۸Wݹ:Kng-^R)1I6hg[żk".T}Ň45Uc,|s? bQE d[e:C/KJ#'n`Ii_bxP(Hyߗ8qF- TxX868c1da7qe,^s" 1c\ ! 9)}~k~?BaL8v&iQ?[OpО0Vj18}ҽb]w`lbu^ <6?渒i?rP}`9;:O$|)æ1FBσ|AsEפG\Y9OyqC-RƂgLcU[a Oߏ-ߝ第8oas" Ah$W1KBō&W ^_Tc)o!Ě12]%Jzذ݌%I|.<c}8U%C 'VZ̙99%L99VÎj3ǚIwߝۺ(0.B8͵# @6WO"o 0&02wƊ/vT;o;1 Gܛ/^P#W.Yɠ=Ѕ| ̘)`J5J3&&yȍc4ƶEz- t33+3=EɅ 1bLcAk]NRU"c,{&WmȌUh~?FdAmȰ6,(df!x=dX^bIY bxyEUUQUUT00cGy.Ps}+.c 0V\ bTUQY\9UǾxƈl6 3-wqr?#GX-у1CdLBrb~qH;e*R RtrS<O,jk3;_T']UY5.mT.tdz߽%2Hcj*c17a -T_sBL!\zjɕx9q!&dEʨ ǖ^73#QT{~JJ=uAU 鹧 q%%OvWXBG_{g=sjZVP(>ۼE]Q$A)1L؁?I6Ӝ#> Ӵk]zUPK臓OEKCWMzxe0hS~m.,0*bbj= 8a2&NjUn(TQ5 @т*vn 2sTTC&C9d0%K82 ʃ36K&uݸ%clg1Fjj )KO^Ob율]B}硞Sal 55RSkMDuDiM @Cg`sFu_*Er dǯ+ bax?f}kV` ~ڴ!RouIY^`z_x0vc8q-/}L*W))HC ӗdleС?8{6yLύy|be/O11g`UjOBpR rY9cKgӴt}u0DDĤ x4*1BH$C/ؗ 1ٳ{Hbո'SWkxq >j16Aff I=xSA3S)-v6"'ΉBW `(c|GFƭK)v&+V|ʄBkrXYEIKlj}KTl7|8Db &/7{Tuuz8Xy#Dc;ƹ;ȗ1C@\|;dP+aS !=%~a+Nr0q$D-_ʀ_LT_s#)-K?{ƕq:'@ d\Ra.J}1R5lXUD[P&۰"H#be@014AcPѐ+h%I}/}O~Ϝ?`swΜ9ڊOs3CB3-}c/z2ƺggkiooԭ~7v#Smj@;0|tzy/260m cЉº(srGW'2 ௱ o~u a! U W]p㕖VƶH)؇+֗nDŽSs;kAݎXzf6o8IGס^1hs631fKjpf d}VέAܻNҰfq'+jbAy T;XrFJx>ƆXp*<uƜ< 1EЌZ37vuJ8+ 6 :)cP6jjy; K'D!IjFQZWN"KH&116 F=`U`LyټxRMf P7-Ns /n߃ǰ~d]FZiI"G–HRyTb,G4=X[za[1q>6>lۼK)6)9qS6zSʌ4L;L9B6N vQh#Q X9! YBKRp1{i{2*c Fc/_y#jfN:SCfyN&rn">cg{mʌ1cW;-(*{CQ(.DDHBmPŵ16^`zzz7ְ!~ Kv@!RiLP t @ N|™(rrrșr1RQ^+@6?2glf' -GRi5PHzX7iH'*-jjK&cz1Gw㞭7j;B~ Ğ LY*c[E1ew4d,<JYqoZ2:T QKuU+CLe,^R˜|uHz X3g*U!uݖxIX|w/Fe_FL!9|>܏4*c1X c+ o#I1yTrĘ*cX#Ʈ~o}{Uƍ{euLk)1_A}FVP okP,\_c1w0c^و' w Q }8-fwMtsj<- cM\"abD2V[H.E؇$1LqWQu2F 7=jܖc,TfwTf7k{1o7cf0qDa\)|.R1P$ծ#d-X~Eǘͤ,PH0Vc% EØ)ʢ&~%'t)F6cx12Y - Vpw#eX{k{*==R~bl޹$9oBr8@^fAۆ,76K2BŚhCɇ{_<cǢe,uRPoP49ẐZuh[M6E"붼cǢe,ofw|Bc`,﷍Vm c_DOgN_l&~c)WgА:[c@$bqrh& 1HC^NG2c7%cDs6&zXׄc2Ĩ፽S_E&YƘq".L555- C55yهRSB[#O {q0)cMDOValvy^OF ak08{=Πk^09eۊϬ7s *@W6a |A9ߍOSrCj cO0w1|)x)RMyXht40z ]3yca!C-3m+)1.ܘ%(z+79}![w \i A ZB]oפRǘuþa _ǬТz"u109"C6FǺW'xW;v0Q<)$X,R92<}cJһQ8&9}Z[[Q&J1t%v?&6< ̊35 ,XUG.*|.sFI$DGyJ(xK,)ƢI-)U sx9X\_}?Ay5)!y^ 􈱒w}k'"| @EAZs6y\GT`Ӈ|j)zF"k?&E.|!4$RLc^AWPz{{YhcפP;m.UXb "(J8+[$."8FafB-2dbس6&.`?P h5ySW]6\at֜8Sa%L4bR$1jH6}YK FT1^a2&]T)/Ą6ǒcLG=kb1|e#KÌoW_~+(ZBEA fA'/:XwjSACыޢdLv?Vn;*c7a9}A!;/RJs Gd1}i8cI|&2?7c21D Ȗ#J[QJW1IjSz_{!eo4e?Mu|Ǣ2)}2ve3,'؍k63"#8dLc`A43##8pHjBՄIb~}7cML$)$cD^=;ccdɘɘ,%?v511a#ܙVǤcׯ'ddL41$Yưj@^$Icf݌&c&cbǐ c ڞߧf^U@c/}ddLrAg:rH$rBO`&bN{ރ (<ފy?Ie̞04.0aMrtGuuP 1~+u ??/f^Q:vYc?~0K#c2> c\ 1?&m!c*Ŗ6D_gx<'=7&bB KeYc`\|ь(Xur/c0^يsRp%kZ[C.b P-82㠋} ` !wwuS[X.c͒3"@Z+KU`D9ܪ5Ĉx8q47c C[wvvARxuˌd'cv]i_UWrdGw WC9/Pk51>JmxOvgkZ[ɅuHةG .!  y ; c_ǘ<c ] W4Ɗkk7'#+NƆAzfwlt%6a-pjk51>J kZb t2T+Uac|Rl1xOQb_xO%_0ƌFN`~ݏߺ;WݫEk& q[ͳ*_WXCI%n:`)k|𻱀5cZ\џ1:UǠdǸDkL#k,\(ƌFw[q8<88( /16~f+=l=ZcEI c:&;D:^Q&Gz^wkZLSc?ZGcFχ>`( ƌ#gb Ey,IcCɯT?(P-X{UYֱՍpƄL,Gyc&GQg4%??z"tm?LUdOp~#mlw݊P;IcW}/4(؆(8*cU-g#+vwLX܈:QVeL\Ft?d`췏O&| : ǵugX f*=Bc,%gPicdž~b#OgGT51>Jtvӱ:d`lhɽ0k6EjW&o,/n=\n)2-NCUOd fV9ZOT?dL1)扱Wݝ/Zp6/ Ƙg.cz8f|3|M+PcQ磙$Řsu2F~xڹtz1#(PSsH4X,ZA ka:րI#G ;>d2cbAxMǘfl\[ ;D>g1%ʺ gb~(ZLVTƀI~FԸT-"cWKV6YThTcnG cmC*ieAb8:!YArZ=Hi9nEg>]((+cO;t%,LZLc lYV}Y% ɘٟUx! CD/Z&[1,k cl_W81fs)K_M:+`~Xo: 0L$QAXxO͊pc:dw5PƠѾQT}1ߟȗeKYL#yT_?CұL35֛13i *l8]a5a[ lwlbdedۮ>޿s+K݋v{[|"S/[~5+tcXhS1һՀU635[WÀQ y=Atվ`SƘmd|xMY^ۋldeʤo6ޢ)CeǏ2=FDBB?fWޅ,\0 >!|WK04>EcА- roɮL̴WU56eY-ޒ%H<!fR}z ',$B_X\'޹|͘NNn8i+mmW$*k̍@X@N.XS4K{{+sN!rC58!UKcUAL'PEvd,oxbڦ?jSOǚ&Owͱ67L6ɋQ8J-.m\?}{?uAh9qR!2Ss1+*/JVT|:ӱɓ/alm1)T̔zXͤ(gZyF,pN#T@tY(*)ЌuAdd.๤OhNQ0ơWYo㪥bLf,,0.PNYrr6= qvnD@&gs.eRysP:u寭ξqnniA-î@֎5'&c 04x5pј6Sd,["Q碋K8Qjr ]|b~~aknnͯT?ijjήv)Fd,~?׹BTPLT\Ԭ%QA(1%*(y%A1F2~nI ]=RZ{77?oW/&cI1[/U.$;|Z**GF#&槙EYQ\Oc֒Myµ~7< *2yEiSiԢ_OYS:8Vm6FR&-d$uML /ج !OB0P**A|&Deu٠dqf_!x眙{[Jtʴp sgΜ;@gϽsP>%Z9=օn | h 1jY.bqb{C#gƋ!/eZZ)κDEvڀ T]G1ҜvdL<;+0MeRiz Mhʁ VzHG{s疈%/v(1n-b>ƴ~ۜş_4ʙhXV8#ݛmZCgt41%ʌz.w0E1C|i6ӓ}E`̘҆m*eecoex1߆s9i??r'3̛?J b?͸pX2ƾ01[勴TNڏ os=NO!nh4,+\I32ƾ=it"1ڏ+f妅xSS 15@M+f*3ߺ;;SaY8c1>[v.2ˎcUqҟB ^KCrSn4~{k4[:c1b>2X4hXV8g: gЌ1?r??̯׮=~Fq8cels\V8g4;8q8cg3+9ort;)fxK6 ~^߿mral&w3vSX;|c+:? _ 2H!缔rxe5)ΘbcPO bw#c@P~uPAEDOt sb,#q XaLL*J[u^%cMAXWdĘCgZQnez*v)=-nƛS@bUy(3[^) n:朿;cWo_U c׮MCh;ͧgLc 2Lm IZ TL3cr|]9sn9WeL8}K7خ*\ܘK[1hQ S c] VO1vRA"cl0g|Pb ͎NP2֣ j]Q`[j+i>𑓱h4c2A3;(bfA?/Ռ5(7:ACA WX*Z Cc7d Ldcmh %Z!vVY޹݊XNv- geo'}Nj Dy ? }<*e63z`Qf,y<AփJ}-gkɕ1OG1k"=c+ @T nX^ F<42և-c[1cB y3dQWg{Y_t8{-g">XW]Q0>yaKF3&*.d톊};ؔNl1M5LfStv+S+ctz? 9nEgw,Jp@0c = Q BZN6[БV cO)Y3vpd+  V] #s!Å2[^;XWS~:2݊b2S؋"R01dp;fbjkHVgkiqUTxjQQZQ#a;uT0B(헬.y+b2c6UW7b$# t bPNJ!c'8c%+Fw}DXÊ2Wd`&00bn5A0)L~$ † <Tf|Юc 86{gKН|~#dؘg)MƧ"}2Hp b 2hL;Afe#2BL1D,kO7aq03G`]OoC{wDZϭ ¯w-I6gx(|0y£Ҿ'8bAj4O)p?}\>>Po/ >n" $=򥵟 ^c1On o3`ѾK$d3[aN]nR@m S k[X|w3YoT"6c. 'ghA F6f-ͫS  uwl8k#Or1x2rm@ˇU8Ҿ|*cJ)Ed*2ԻafNl>v;m>6sO#ĈY}쒏&6}T>Ѿ1T鳻Ru%ŷRs}8z@]7 g&ڽY_cbk7|nuun!?18%=r*>3>[z+S h |SME`L}2V.F;Zxua,b ]-59*~_JzƼ4[z㌕0c3ַR[IO2c_9c]-ߖo;o3VŒ$ɚ gBp8 (ekNK7vҕlO~+\o1EU3ɘ a,]W o rvST)8cd-cU-xtL;4~ S4!dLj0VwN&%.c8XҜj ͚s{~+\oYxeI6gLW|Zw{1q#}1\Rb,|e oeMc`z_d 130L#aL݀7a|v{f$YKwdAKG~`('c^VN`&X1u/gL|m(]Ma>d63s/&Z4 Ή!/1X#EhPS!0F&l#(#xnysˎcٌ]8+c0%#³T )g T2&L<62QmKl=^̼1T|,1ˉa؏y cr1ODXcfi`04Hz @|-c'ۋ0FwR7K"gL;c;9JA܋ʨ .ogggvy0Qy:&g TYaMm$^Bjxv Ƅ,*bo91-ųdL;1Tگ[6-`&>O4EH]ÙLG~cdiՕޱ՘n35iB:!|Wh[K;]o^daM;3F=2Dxƪ]H0Flf΃{O<-<<4}1g8rf'Af~5-DW43T8G Z%#͘DcA22~3bVVp&;nM&ar&9jbP`W8mN&vqq_շ9z'ɯL6O A0p=a 2wbCbT!c|`m/ Mkc6/h&J(isόqoNx8N2 W*92ֲ݄ |-!1V-f)`Ỉ1v(cLn_KrPQ?ޥ"<~۹\fA:H|g]Z*^ T8gv^{M#iSߥ+1267;mM&aR%:jRPv` `ζx øIU 2p K/T]uu1/u 6~X웡o\drKvԄvPgImd[D2ޏ;[Äv c&&h4 T8c-+յJfRf3aFkij9mmUYb{S[ݞmX&;nM&ߏQ&:jR ThY=A{v1\~ufa 'opWmyv\ɦ5 #9.L2mu7_psBdקzg)}?&;nM&aR&:jR d$(D@fN<r8|fn߽W46>'x[Q|R7LH҇ƶ x^SivϚ<3'{¸ X577..fN$1cd,u^-񎯌~Am)V2i#eIiM~x|=[TMdkPkKf3[~̏L2)Q{X/}el3]>cz]{ƭޕ]z_;'oAQL_90ݻH6F*-l?Q0l~gN"Hg_}ی\H\'7LGԉbkƗM˹LpuтSd28r^|zt댦\|*dhj@TKxOsX뛣(]EK]Vm\%jX΋&a]nhKcQjbv㇭uL{0۫,\q;0Ax0_em&{CCaL=er1\^b6ȌaM8rMŨ*b,@:;^ٖDZWرE1&Pu^6˲,8u$};cCM[#w&G@j17^٥k7 —(]E[{z̘! cC@8ߑN|,vϦG݊1`,4/7Ax0_gа\<ԅbLSzxVO>T~}l#C}y3qL??W(^%*AT,mnh1l܄^ǰՂ7}RUK]11j1Ɲ ՂVcJQ|~c]r_&5nR&y\6KW N;c E1da߻叩 ^1$1KᏩ ^Qd>kOM~ivmQ25D{K R2bL-d)1S}b e490&Kwϐ<H2V㧚U^7TtX(ڄIbɨ:+|&dL6Řo7&CB(c͑1Iz[Jĸ3n#NƛV؄IJ_BBsVųު̱ØXkr|v6:I+L}&&,?q&1fO+}q,0_>ce~wf1?gUcu紐}N%NR İ3fiOyK7a2c|6b}`osg}<06|]6L{:.{-i܄I`Ma4 uQųcAX?:fT9}&Y0ulձ]h7\?ͥYoda l,1̴gr8q&3fO+yqߔw?xXzS% chcV3n$<901{Z&sE)o߾z³ߪx֛b,(Ys Owf~&zQųcAɅ1 I3<<~9-0oUcg5]ųcAI1- cAI1W12vhmmnFq-K$\΁1 /ԗunj|aQQdlmFh܌\ )h^?w-=)Rms1[SIˋW. 8IWi⸶5LAn/ P!! Ox Ev&-+5mvDD~< T0gٹK3svawdˍ}mll%ϗa"fhZ@%3<k6`&ń"s'@M/\Ztuno}|S7!оwdl|Zyc1,71s4a.X28w tل1Ʌ<Í_~ZN#c{r9G1C8cFY?ح~90bI,нf\LlW0'V),<оwdCѵ_kkq3:M)zntlB}32D5d _lj}TL~oj|@}&٫[90S,[F9_ [gdb{:=az艡oFr'٬90b$r,пfˋnF&T0cU=pndd K1EG9_ /u322u}G_ Imz1C﷈e29Ę,+vR<,;ApĘ,cy-߭,̓c31Y>c}1osA>[̮62a5$l u#dIǘT:?1oï—'70| n?}U44t%cq)7HD| _c\p"t#d{dN׊| *| 72[o!l4Nc=2b e 2z9X虇oGsxmoԅ1:MjQp"t#d{(2ߞ/fA7vv=_ A: FƮH}7R:r$#{Ę%zeR9 F*6g$&HX `:r1N71Fc:t1Nj$c$O0W8%c$b:r1H"HX:r1LDb *{Ձ3a$c$O00U8$DzvOc7h F 1Fc#%1FK# 7(:~yU1&K#+ m(־qcR1&K#SJp5SL'TkSN%9bJ'DDl*TEɒȀH Ba8(o\+uM;r2:ķj|Zy Դl:lFG "ꦵDzUuXĘ,o2aUVTf 7jVL &P`Ymj2 Qы:PH%9Ƙ7p8F;`^M0vk ,9m&ExF{83V1&K#co*0])0R*?:hV>X<9Εj袡"1=2}?v[a-6b[տ7XuNUDu D1& T QEYkEߎHI833{i}inhylDxU  cKwnLAT÷#{d~ou\OzV 3wHB&oЊޭ{di3)Թ0 㗊Ę4o0?5ODm&4y>DܛIIܼ`dRYTF:eYkƢR󕾈HK0" KHK򵢯D׊$ޏJ+bD1F"#crE1"HĘ\c$3~1FFvyy#Y#ߦJm~1FFV{Uɫ^o]Xl 7v^~^o[]uk̡\li֤z>כd2er6x(P6M~Kks1w޺g,¥tQ& O 0fmJK'ͻ^og8vf`>Rl'qL ~&yy4cRFm=uv]}sY_3M|;u̒׳;te>ZK?垤ꡢpfohD%YCl"z3sĄw3V(oo_;x},+fٓfVt˱҃X)5AS6߬ @k˛ (1,W r례f?o 7zΖa%_S^WL7!.D+|\}(ΚY^۬G$1&lvq`}R.uw;VJ0m>OoͬY_]haLgՇB4ȞbFx=)d Ha? r@2nɘgc"16Ej:1&MMƂ 祍4H&oqׄ$^FY- C%HЦƸ$jnͱria*jNJ~kjozQio$0<4QLQ&&L:JX=q7^39f ~_͙P(d01i27zczt$2ebT8\+±:F\(эeJ% ie_d[ u )w췁Fof(ͨi7^n0wI SSX1o37o&(Hm~1:ᤊbT88ǔ:Vt[0@c~Fo RKzdLI+SSw~+T88б188Zcjcp 188Zcjcp 8cp|+c׊p159AcsDNXw=Nj/X W;AG>iT9M8v!~rf7qCuP-18PX)ٍ~8qc%[ZUP*Ikp (4֧c\u97:LF*1t횱zL{%Tȍlc;&ىq:c[}_a23Qƚ|4& v;;KrfdϗiDhF}èO]_J:ϗD ~t-docHL,1wCe1o ܡh Ѱ"n̎xح Ip?.OA&zCo}lB:$+_nI[]a& 1py \+n0_+z d0jXԱ۹19X"׌j ﹂eX"A_.HLc'y9h Q߰>ay ܏w]4=>9Q0fܭ9Klr!1J1PNsl3E9v3*Ϡ퐎ף7ƨY 3PD?3{N hp N0~'18ǀZjcp 18ǀZjcp %ϱW:YFcZy7mnn>[e;6ZH=l.*!zcq9 0⮭0x*# g;3WGG>LB4rd#X&a&\:"o_'nrʜ~c@_ys'9q:.fB%?\l;׋Y|+nQeۅc. q3vPSS-jj)ov;nq`ңOPp~C:Zۚ596x>TSKkS7}ӏU|cs{?v {p(;۩7UcўMBqt*Vve)j[ܝ8dGӹ+l6Q|ipL)ػk[p,nrlFc+Rرϟ?hZ~ Nc.uֱ[k_O?2';&(~1=[٥L_cc̖ėsŷv}ؘ;ƷpLyљ[ӧ;5^w6v.AIsdOL{Ecߺ4rq?,x٭!$@?KZ1NQ,$)J%F0quF1ϗ|އ]38>\c0ac:c{v;'×N4XMar8~ {;ԯ`,ҦԘܻ/qc5X0`,` XbLXT=`L4<^"y {z$tif-,)(M*2ƒH1) E=#{$Mƾ=l, PƢ!c?CZ }bG Pf&P|D=#{ُs ?1b# klT^KxRUUrn)ޒ_aLPMےS7ܚ.~[޼dac061y1)1r#1b1r#1b1r#mLh1cRcFlc۸1`LxFW~q90Fr:a/0&<:ܳUtsc gl=K3cb;+1YG3/&,Q(zloW טc,:mfUn Q(VcƬ\n/3cj*jQ(1RdX!+1S7(>A%ˮ<3&^]$ g4mJq1cz{3XXZPcnaF3n̞ǚNǢgL )c!~>Fp̿K7V~Qq|RmGq;?`@x_Q"3Vx*\* ¹TFulmUҘ^1i{|>="7+Jɍ {=r#1b1r# sccFu`DS`,5`L`Ȟa>?5scnSzӆ1qc+J9'Ůy՛}WY1 )-U3=v hSubonj&jc({=wѰ cbc6KX_+o2bcP~a?S[zcxVxܸVc'ǖ[{~)n1 cLQCUe羍/uyn3fi::$_><jsVTPcc_b3Vдc=P籬w|>o^Q|XɻʟtW$Ppcg֫?ֽc{Q1v4X]y7fnj4Wt_$}{Jz{c'v}Eݳ+cO g) YZ0&}x'XN01$g &60<>̻efI9s}ƒ̬)(^Qp8>d ÞDŽž-)(kYنbb(tk}XC eW y]NYp$ &T!n Dbtgtboǘ$Ll \;$ܱ {g<^c1#gʍUμXwD/%-FqΚNMxcavs1Nks3 ~ⷽlU<;XĄ9s;2깑pGq59~Jߗ8V-I0'X+cJtNp血q~SlVI BOnɯ3w9ǕQU|^wܱV7,Ü`(k([9cMqgc)KIwRq6)NrTr#z<8I@}qÜ`(5NtNQ1 '-X^ sW oJ{F2Orٕ9?<(U^XZyÜ`]plAccM2ڇ93πcR ]*8 BǾf8^}ıO9vg+z 2m~[We70}畵cٷPߜ vyƙ췝أ̼|OcYY+9I}F8xNpfl'q='8:d<]i$4o *.\<^Q:@/p 1 @/p 1 @/cw:p 7'bU?6B@n)?7ܱnC[Yև%~i*nS(Vf/"#OGjt;!sM u,RhU?ާXs_ w)PўU+UiݢuܛJ|'_n۟o5sM s1^{ ƻ6cT:ձmh־P-mH‚OG\3NЄܤ`lck1|9{ jS(v[.on'ײc@cRȸzs`v wQɓHb~Yz'I Wcr;g>:vQOnJy۳+!O(YHB5#_.tmXtXw;9k0I|kqrA97Ʊ[GFA:VG]c ^?mh}.GuMh= @/p 1 @/±_ :ijD ygIENDB`awf-extended-3.2.0/images/gtk3-plus.png000066400000000000000000001516601507226270000177050ustar00rootroot00000000000000PNG  IHDRcƕ9PLTEGpL¶ɹ૘w޼̿ͿocXʹȺ_J؛dLeMyiiL?[Hۊ]I¶]IaKۍ^IȖbLݛ{΢~cL]E;ɾŵbK׫ZH˼\HcLF71mPzgʻ]KgPxeyfn`Ǽԃ\JoahQ"!!/.-_M=<;ZH)((pbŹ̾GED654yfOüWVTƿԙOML{{wu`J³ŷάL<5m_ƹdca^\ZurppQCkhe瘘ᴴomj{VEcI>5MYتƒgTʔxߴgWma8hp[N$N-Z䐦żz`QoIud4mR*˹~ɠr^yܐygQGԝfsow;R.D}30HSj'ǨZ;q֪m)TtZ.é6G2g[!dc&uD&LC@ѝpIp޼3c} 3}o<3D/(DX8LP!L;|Bha`*/zp+F Pn)3jG oB`Zp<|KyQ; B aSc|Y^t؇"ayo>l~s5$Q[ر}"&8vټRey80laSD;A(fT0@JN:$;X R 7DY%‚*Da0 R~ax H¦:,t2 vFbY $`K:NZ~7Ɍ- ]sIMTJ=velA\w#Oi݋; 0߃ac(%`R:upaY bˍxH@ qrgEnHq(в,d4Cc後dX.32XѨ9S,33hM2^&m@I)BڱUˏ uݹ,=k=~kxw,ۙv>dtr77'ƒѶvhڸְx$iLPI4'v)#1DP\2F`[330R%v Or,&{X;GlǛ7_#(E0` Hcʏv g$ڼұcπ33~xǘYXfXdk1^(C:6 H"!FŘ9#Yn3n 2v(pl.8Pv2ބ59SǞ1X>7H8fB._|Σ71hL836Ah f@<7:cMBipMXa1IgĶ[@x0€;#XMiMx` iT 2Xy(S!4Y4Q0n\ (]qDM/嚰c-1y [(EIeǘPl X;cfu`Cgl YoYBYAmwD[,6)HN`d9MGJuЃqYõ#ryLl;hp,! QovVnohtJҽ"O-jPV.tf`G}Kg>N<5cSLK-+CNdkdYr#rE؂{Րþ1=%X g`h>ob%h7l nwQJȫy8f}Bgc\}6b!194lwBHL*pjw`A@"*a`peМ˅+:?o(EoN1)=0='Q;v̆Y|$9fCl6x8/~Gu8e6z$61 B f7?ׅ6 lC-"O2,Y.;k!%|dBc6IdHG#jvEPΉ"7Zj ([V^H#,:V |沂wa1wS[[)@ 1b4LHN"FUk sBTW~'y UKT 7v` -'*9D\^X\\ \kFN e_T W^ԩ8+T礬3.:ؾn\Bi'y$#D%Ǭʁ,uR^0pͦr1 ${ h.+*;AP*8R(J RKP* qW P(";3 R d^P(@vl{U`^q*=EeW*E ;u5 [_/`JOa?R9d"'NF8uwg.cϏ*7AZ}y)RQ C=^%b/qogy2qȪSLdv.ΝѾڝ:Ah990;S):: O)19x uU.REg534bj{zG'/=%^;巃xۣ= >^\'=G!u5ӫZa5kϟ&iP7N7E? Ra,)XtVY J:MJIsZibPO;=%^zl043e+:W"z}7p?*zpߥSczo2`[I@I'i Ȗ뢯K}~yb1)n?Yy{Cv!EKoap9aXC/Wb'{zgZDΟt$'(u-]rRX)P`R^txpI4)np=R~;( |Ԉ;Vٞ"MVI#z8dEg e$Y)PE !XeqTϢKl0dvDz<Ȯ]] ?G6^f{v8:m5fF G\xtoUJ*XtсS&HBAuI&wpYJ_J9</z5gQvP6cFXSS Ahj2@6^#Ioo{[+2Cxt"oca`YkFƤ (GN:?J'eS/\%xX8jβr/{]kuco ;VfMlRCY7 5& ք/~6Q6"c ȎmP(:FTٱ7(J%)BcP(S BT;L)BP* =Je$oZlٴg.DmsMku:h3YLyوæ#;#o ||Z9X hZSQZ tȎ2~zb*wl?{< x#uK+.0іL^ñNz1}oWJȉ{߉QCo[Op)N,hLD ucVF ~֖L}Tc[7;>:ǯV;nrow|__|^wuww;kv8..zѫOc(l\ѝHq3lAyP*ȎCէXcu 7?5?7?IwF~߿ymxvSEu:!A$KE1'튾\(5bݚzhz-*wnZu[osOrl([ǏV؟LfffcTj*Z`h6N%b}Q8ޙz_o۶?88/5]_IV_A3lv7X}ciH[wGb2g1]*!&ɋ YciEb~?t&4˦+@iݽF<y<Ա Rni_P~Kԗ_|{M;/Nx<*u늆0zR@~#KXYWה RNjG2XmAsl<1c_HdCKxGcq+Z2j%ۼ V,ЩM{^kYmR?XݱKypU sI\-xXK6+jcMH K_#o!UVaSG, ME$hgɴva4INLqBt*])! :*R!hwf~X4>{k煸_{syν=U?Y@&N b)|}浟~~ivvSkO7}y}4z!{uH 2R؀((%2VB՞XT|X\ܣ,3339c3-M:t=Q`T%:1x{-ZXqOn|{+kD#ջHX#.2Sf2f7%rW_7#U-V 7qt/򑶥M{cӛ5Mlcsi^[7`;>hFc`/?ĢG2")cV4^F,3r}>e&c~_}V;sB#[d{`,zgݧc[y&u[X%c?_˱gald]%26te c٧g\G_~D{d!}IZo*+i[0?p5DW-*Myzơiu7O$=ch2oml5h[ bcĘ6de:c٧dĘطo~W_mrϞ=_~Ͽ>.3he{8̙3i5:40?1ywj͌?x4}<c)5x"ۖGN\Ɛu`<H]F4XHd) A re:Ut%蝻si[kZ+'=eG,n|b\Մu&##A[[!{pƊ٧Ldlr41D^]ш@c~Ykflk_[:cnpFoM\Z]ⱉG===&bqv͗ LěmGj,+;%;19k V+'h֥ĵ 61(ُ(fXbYhexF3}ʵ33ʵ33ʵ33ʵ33ʵ33ʵ33ʵ33ʵ33ʵ3Zߕqneӝ|Q%tL<=Y߮1&҄'3yq.^)AJt>[7jtx2Ѵ j!Xپ2I h\+@\OenG:$C#EN]I2\ec7CDHAj^d>Cǣ.ӿZsTO[z1аawA=a62Aq)1YEH邹/1k!h]r;(C)d^7oO;2_co.u tqX*/GHa]HHJJvGFr!v2 6)bⴁ%ҬBG ?4dU/TȆDJQ&Pdv/$FF($ST XT7T 0ѿ`k6v76*11lw&alC-Gz!_`ҳeCc$i2ڤTb>'dsU z0z5)c zHI$9TvN(c"I9CFUzBq|Iݕ1wu:uO#zWV5|nS a"&6Tva@SQege2IpA)&:c[?i^jSD2*æS~_pe Xz BFTk-_KAjKRKbϋj x֭ۊČڥj"NeGHq_" /3|Cd($k| u/*}ƪVr7mZ\1m.Ñ6c#j!ɒ$Н/iP? V\҇sbN3e쐠^);m)Z^FvqQaC @t *L'ʉP.X1 YrƼ5i`(alFJ\'0bLDK:HoGx+a+܃EEQ ؈Dqu \G5@&#FQ&Ky^(8gLjFbluLZ%җV %!H_wjyHw_qҘ᪞6?=),zkp^YDu ֨g! C ;RQ.1W(!eqk,T>{hRg`ƵX}s}ױj'/A+cTX$@IbvEjX< wɦ4SPdF6!͑Z(hʒcS0w{]{ WR9hkk۵ b(`E{^<QjCe|kf!˨#,51uk,@3v;O?ne kWWbN!Rt Z'`pmbץk ͍Թ>q|5}.~1 mm F!+ko+nۥy:y08L Q)y35kֈ&FΟ;=6rҥJu3qסjӧg\酮k"qmLd;{q옃uPg(q%0;g/-vcDֱJ<Ț?I!I!G+*a$FK9 =p0Fz%DA `R65c/q醗`+;}ӧN3 ':Glco2!Rqpo#.nHW^ojvdosTV)XkpW] 5kQ#G!u/\ZZUUYSS~-vW*gKJtu : [ ]7cUX;1o;#!FɄ̶C==4'M'c GSz{]Ujv{_EVJn75>_eeU4޴)gG'ۇvlm wj>Bjn~S^qWE[w;TTTw/_ ΝCCvjV@JUЁ /dE%~ptӧ?^dOe|>Tll!{~_X 4T p+ved JWB-QyySW+`P1cZx+}3!?;\U1\[. 1mPЃz1J&da[קzQpvsc[ lg@:]B y}*L2LqmݾBg2 GaSOF{m Xi Ƣ$-`*W 80qp ^&"N',Kp`7+uK8O>9UwobaTϺJEoh% UG %+&{Ećeю(C]1J o }:tJJX 拂[0H}]Xc;:@ nyLexc:fhҜ0fƠg`4̣Q]03B7K+ݡT;ĘQ+I*ٰMCTvÀL!/44\(m( BtD 3gև#.qKx]C89c' VW' t 9!w هWop i 3##. ,CXp2̜뙰9{މA%U.D4GMk!J4Jk8NW}{vAτL׻;n<ݫ@{E_UY ^`eU!._ "!'(E j%hh4ꔝF:_t?h ?ҍN%w@PQFoxSyF˪HP R1--|Q9MPMp k1qwp}nB;W lZf//BJ8qa8w`vӦz1@ 7< Ct/my9\~XeX+}7/×w \۟ce?W\j?Jl9Xc׍wu: HkZBX|ck)h8jS0V @ҁZ{G 4a4p/@C pubNDMUDurg2nyHNJEZȟ>_Ik(IEcXjP)D,J~A+`6I} Z|w^.Q0TR( РMڜZHy䦆.wUy= get? "j˓3R1w mn7_%6q:9`J}TɜQyT#w%i`Ǣ%g,}='<63>z*q:moЄ r ?.RI Dh'#FR3b jь nGo}hس0FQ ^ѿ<)9![Ě(7w46I HWPQ $J<*Yr.!45wX̖~䌥؉l6>nAFMxZjk20 !~&E En!M~aG.ڥ^ת N8" _g#P3V +CX !Eݛ1rJQQ]J-u~8 jd*dd#hTЏ QU''9c}fX %EM'cSs<6O-iºGrʑR=m6W#w(TjrYxގ"@;21+DD9 @Ǐc {: ndžMߔ,)cpDÓ8΃ HطYȒR4,LNLN&W$.<xCL e{@NVt^@ISҰҚTe/Hh^ Qcy2YNHY@P%>V< _{#l$6~1 NQ68Np3&!Nr%P`RƎ|VWӦ^w2v57t0CǑ$`dv4$./vbы B m΁U-eQ4cN0N<8KrP/K=I溶!EiP[T%RYQ.` DuHQ$.}E;DFTxqLaVu\+&\Z`މu0# 4f;Q I$U1*llǴq\ q$#1#N6EA ˅yqےm"Ƃ[,і` ~sdٯ|LĈ__I;N\e =97`aŜ AJhh}g5Hals 92QwlIɎ +]I;JVNǝgy1> l:1- TԺ/#Kxg՞ޚmfQ۟Yy^9k_Dz_6's|=x~f,b2F'>uxpʩ (kaʕU1x9 4鷻fxz*Y'ϋS=:T{x'S595fU9I \`I|McṮ&\ c|ތdw,.ݻ2N{dʚd'? l+nhG Ů\ZOkXǮvM~|5^3_ᗋ\'[zمe$B.i!sDu/f걛}:Q͉7ҧ{ӥ'-Xo+5$??$a=uJW|SPyyUy٠\if$ܐvך0&a%ey.#@>BmDQB Q-iH ㌄cMxiޏ 러{TA-6xĘ$Fcqg9ƘyeN%g 8%q5A7bqՉU84K#)ԅN-C&$A!֒.4 `l4 cI5$Lڞ}9X_u[䌅C\l$n[B\ZF7ꋌۥj V\89c@,Rߤ Wl'?Iqc/:ƴ _=>uSQk\P ?e"-MyH,d,K З4"k+k.R}!??(?IauJc,m?yLfydȞ1gg&$츱g\1 lb9ž'o*Ɔ9X/`dQjFoy`Eq)iݻ0]CBc$cS zߠ {,nKXu}_c14۷f0O?Euh 4݂,E2iHN)2d*$av _!k5 OD$l9T%?Ye_asv(ss9kL<2fFŪW =7Lͬ=d8)CMLbvc 3Ue  cl ҝͣP2x4%is$8Z؄ +몦@;|`"~.}rVJP%#(Sh#u:eؖlxS÷t8vm"3ٖg7gƺ=3NʡQF;:'dB_O1ʔ:7cG8xWB-XɘT{V 86 ^-.fK  M8<&eO1V̄z?5^R\7> SBӓj&d| Yk'Pf6>D~g(aZ _r!1UOAc. LU149FU|j6nӞUg~:uJCB&mp[0c2v}m8ߟ?y,;۱1\my7x0Vf82ffL+ϛ+e 0S]X˘V :<#%G`V~fՕ=]"!hXLni|t'4XkFΚۘʱ: ʡ3jZiHR"tCz I7aR147 XkBOOm[K'-7*zgl33flbĩƐ72}$|-G`L?韧n̈́9*c~zG2=$"rhfDHPʕ+Ӌg=&_ckr=6pxAl#yۘ,ajWƥAA4wؗ#<4|☜4}XȖc11VJc=q3v.toWAݜE45g[(W1dqdE~[旱$E^(&g={ HIOn;\\nϺz9'g9fXsh*&1uiM{.cDNb!ئ]$LD)myh8kgH95lڰkSͻs$1vc?0i[\]A6 2UF̏Ν"Dys1bSNaAfOx3  䇡cEʎ#X_C4z!VT.RWa˓cqAc"m (.)$H2 RXS(ڋ{n)F b@E6@Mp$ rȈ,IUjޙ'TDRvCG袘'8=.Ȣ |Ak?d!52ďbvQRKm$32h'EqZ;1V^r IEd.s #3VNϞ凬[ e,T] ǻrB1(HHEʡvZH2jE/ GSNb쏬!èK"c< K7;ɺCcn޽$X>T/+}K--Ӕ.P;,~jVWN22ɍZJڐ$H*$!H,yM-IZ'حumXWcdo/cWV?xG$E\_1,5o&8&,Mb;i$ V-) co0yluk,]\ ,ԔcN N]3rؠ2F;PJ,U{=򔁪Ǧ-K-}/2(]wu<wOfOJZ_`._ǩ K-G mEi%^)'],xmynHX0 ?R P1E#FW)coxþwOxC6*iJ77Ln|9 BݢWTӤ1NZ1NƪR6eȢ3O]lN7"'_,<7m1ټ~e@QU@5'G˘iغhG][Ygh(rMVC\ɗƣlZVi&&K#@F8>+p40A+x˜j{CMƎ2uv uSV6I*m +%,q @#7pB8E-&mFuLY^ !pچ^\=FEK}R0$KH5XlSnuk l)[=s!7,4 2r-R 6P6r#ҍq=2dħ ǧwk#rzU(W^%X7)H\O}U?wcY\~ W9AUh)SNfl}NBޅ()w^6m3VURu,+*T9=Jc_(w45Rx=[4NwvX#:Μ*,xu{n/c|{uf |&U>L[<JiO3`vEj@Alye- ,6 C 3ypJJ| :gSzfJ dX[z "5K5M=QŝT1Qs]["UҐYn͐og6%Vuq\}(hǿ\1?Ҿ:14ľhf [<֯޿n4yivbڠyӋ6Eʼ<^}.y7v7_F^CrIjVd"b`* _aH,Z`z,tg^ k+ ='>cpW)  =^0:;vu!Ig:OI#6u b+%~, lww'z,BJՒ_}Hcujqؖo;,h߾}Y4~x#V6H^ x0VwIևvK.gXhVz@^_Oh"17 -Vz7n7EPˤʓ/o.&T0R5e5d54deDB2!h-OF#;BQK*T9G OW@{d,S<5h XSMHIe(R+DR/cBS/{r Ą_1o[oI| @mf|%b ;y,-7S=kAzт5ҫlpb {\R9M+?_"I;"NߎRN=SjZI/G u>,c2VZV~fAWNFȈ$1Kj-Ic`옌=[_<~%v@fȡ9/pzb3K1epKq. D@RIRHJZ&3t}w;\#85ߎ" XbLƌoQ"#V6Ա(2cUυjڒY c !;:8|vJ IKDpK tHcc3κW7UmB'bajezb4_{gM)C\v1*J;[p6)٫gk(1c~c()eZKDb e!3J"+dݵj1AYPrt76^;e ӳc4u4c"_{">^)"iP)A" ڈd?ʁH #qJ¢B݃MyEr0 $mGF ]*_(Ŏ珱a0*aLE?Tx;wO<4j1"ƌSç10V061vUxjs9w1+oj"E@kSF9ȌQ~[ɔÇ"HvZ!tb&_ZBC=yt,ےc֪ ̏Uaϣ0_='>~xypotg7_g t crze,z%01UJSyy{+$#[yKY%LFZ+ue th101 9E*±ZtB6LR2To3yMǪ0⍈ݸݥX7ߍL?y[?o[1v-=KϯΘo5Z؎:J搫J |(# MY7–2$H֭f}w13Nicv#\n !Sq{|ZM"8ɟjPfѼ5Bzz1V"Vc70v>^{R햓581 7gi> s=6Xmmc- `m%%>U4D}^JuÈhENRn0\TZRUڂ.eˠ(Iü#&^YW5}kLx!"/DMJP%#(Sh#x)5ZqG%r(C c*K"U#&c_kŻt`,tacVK^c3"ƌAA2ZG/];"| U4"MhRn"N0-".*Q3 ^-.fK  8<&eOpGqD j޼ %9=K-@U+1wNҿ5Gg 2wvd˜0c_k+Ǵ_VZ_Mt1w\y=@M)v701uHFc-TiZH?nq,w<_;;·Z؊_oj0VK =Ajp{ݳfZ;PU4[+IL&P[|DjŊ[ GX0 Onm.k*gnA"7tܬnjޖ>1(.9cÓ/F[] gP 0\ g=g` ";DʸՍ->^g7qE'4Z6܄Ɨ{~I:ZZXm%FD_{gTP^ZZĹ꜖4M$NIA!A&D9{XG8 *h09F'8:8+̍383?d9?Mb_p}twKm^YkZ Z{ocϤoYscp;<vϒFOnw ׻vw[(dfWnt׷5 ƋE 2El)|VG!;ԱrvՌUpNX1WWX*^jܠ if NQAp47<ip]:Py]Wm+;JV!傁5UgXsP 1]Cx<$jbKpm$g5IUݓaƘ ia6Ƭ6FjConB2n40o.qѭ/r7r K,X-QlH(K/J `ؼٲF1[*v ˶\KU0u[-T%DkF)MzA=G *͠ :ŕGRG:c@lvfhvƞb,X& ֣Κz2^lc$Mc|Uכg2N,m'!:|Ȃ\lIMZ̸Im6mjDK3VloDRK)9oP%AڿXH?.rlfT8,ỷ 7j k{K/ bh./^44j{?fj>Aq.tzr>OH 'LV1MWTNU@d+.^`TϘ rAfyRJ6TMHT(;"|`08t['6TBQE**lN%cWz36ĘƲ::mުRTf3LQCKYg@vsK[!@р8qUuU PUV=JZr c@cgdCJJӽ7eю=)ʁb@60g%l۝w0 F,ᄾ('I>zPbYy@| )^:`dNF,0ѕGG- vclq)&T!"#>F;VIK Gsr[+p_3A$DDBir^Iv)^™ vNTu4L"cc_lV26qGym6pG)9dce $ _I@q,fQjQTp*fejһ's䬰V<9B;{vFO +[$GH UAA6xb)$)RG5DuMFƢ&£1&(opN:P3G0qBbg¯ f$͂SzYVܼ\c>н'rƫ;Z1u7␯QHc]^vp,rs{}DA3K "_~"Rb9$+CEیL.M'R+*]-GrWjŃjx l27g^ h:cmUNqrr?Kt'D3;ʵ ? VPDJIQ6]ƼY8ydNcaթk"֪=Ek՞JZ^WH T#q[a'a9hEd倅@< K/T`AZIwvDBj=8c<#X\,s cW&\gi\O4s:c2dѨXvnG*TanL >`_Uؑ~tZ󓼥+ N3kf_ZxZF$~P:4*$'1&!oMsc Cr *IhWĵwA_X &/ixgL-b?c>dy/ IcCkM]3!<6­Wbi^?!2~1~Y\,1_wD8 ppQithx;~4cڹD?X \zb c,/OC#c経IMi LthX1dM2ۻȘpMsT%/y9ƑfED+2x2|˻Kf_;l^C KbcZXE^qb>Bu 0!7$.ìI:g5U \%[*DR4N@ẓܳAXO<ΔrvNy+f*-+vMB#@ ^p8-_e$3q8@QRK*,Y$5qƸRUuW8Po/Oi݋4/=i~t*{7^rpRXFsn*O6s.cf8g HS8 q.R* S%-:M!T>Z4wx-!jS!zŁ5Gޝ]{rfqݟӚƝ.1tcW.F>}o_)vPw߅3}<Msdlll=8G1'MESa "$JecId="BtK 5/8.KWQp(QЮ@LƎFaFk]KhNKw[o.ѷT-E|0G>H(Cku1Wd]cfWctw&eYjMXZvִ&.X5ͦ͝Nvڑ1ZA >c#;f0cl{vN0"czZI2Ĵ}XV2~~j7i(Y21R0-c-^S;"c1ڱL+ݎ2K<6c(׎/-cؾ8۷yZVkR 2ZƀXۧa't+F2&L-@N+co<2ĒX{/8jf+3V;=t5:=ﻶZoxlg4v'8k_Ś zun>vorSޢO=4;݄H21_hNcGgeG+ciݖ(%1 ;#1 b h}4Ǝʎ_ҥ۟$Ƃ/F&J,3nLb 5N-c@,i팓a,|=Z1S)kk4P،2Ē8t7c:[)&r6x拱/CkLXScMc2_{m} ':B,oJo?R*$Gvۏ,MBЛD1fLFK̇bcP&1V -~-c@,}u^z>N;VB aQ?ޱh{y?t%o<5NSyjv!xۙ F3\LIa\}Gc`;XpSnObu[OS[ok7xݑCcycCX(czs)iX)幙;|MxLO=v8eLUn}}''npcBo7hekoo ``޽+2HnAAB~=MȜ9/W {+>s+O>k`ɇ\7bczA^dL t r.YJRKcr vD^Mv9|DLj,r9 "@.,mLKQ9#ckbL3?; }wG"< gi(nz0\\  u-%V{1Ax_+d_`Qn2\Zh:ؤ2]R~a+B} ƴǞӭ_{@c4ɘu\:2'Ƽ?π;cK~zuaБH{Q,Zђ HJHRG(~:^c5clÈ/3;hnU$;hnbi M>G-H=pe+N$TWЙʮVd.Vy2ǘ9sc^8-瞋7c=h]ۗƂ̙F̯YjpyWA c@,cRXH;桯t՘ZѩtW[FUSqHad{5:49 c1֞rƒ1G16s-dưսnplÊr$zXrgw'GNg0ճQ(*Q4'13Ș>** oX{K|3VUkU{*ߴ?H#9 诼IH촱!8=dȗ@HLFP^$(cۣ1֞zƒ4]Xs])vmᘊRcY /* ""K sdF:1aK9( `'5X`jI>XTI.%uhTUIN(B)J=ЌǴs^>S9sFF 0ȘU2np\% HòAb 6=cgl{431ҽv NMCp8FĶ|]Y!Ds`@D7k8XyJslLkڎ)Vva!B&86\XH*_r老ǖ\x&8o* 1V=T%VhB`N}\ ~i7u42؈iFv ^vd0vz%=^k[1&CėYlO ^fB6Gй|0\ʈeQ ɻ1T}RO(1z燱K'z8 cgBLh{8(oz4:xpt&KcS<߶}ڻa93Ƃ/AƖL0Efg,|#3t}xpd'u8ZZu"Fa8,|y*9D"SwԊ&X0'-Ru;eLUn6L_G,b9.cBo=|z11CG+\8/nwV``wھ--7niJjuՅw{>wTWL5Tw l #8Jvk1vt~KحdO>>`c7߮ݽ<0fdŘ]\;5_XCp<5t벋pLmiq s WW{*+s ]:9uCtl9c{`nYcR'Ѓ3Q8f`,TGVv,Ha]{ ܲ%OCcwIO3=鬬SS7p86ҪX0K3GJqφ,c3e!df"i^iLw{EyY^nXmR =Fg{Oy<.vts[}i ~o|--=':qx}HLչ+㩪 0}8r ZlfP\4I;^]{{';~[cyʕFn:6u<Ʒ1"謃pv458gqO d$1(@eSRTā 1ߘY33dc{ +~.c7І geMNgum0wsiX혹IY\l.'YmV׸j=w t9<tv ~^o9ggۏv{^嘆|s} lR4`,dP-cCt(v2` L{];3x5jno2 1 B}devp1.#"caD7c=UHRڎ2vvla8ցݮ*w{cv_?f卮ʹObsO5'1l2KoO:cglc5ia d86 a7Ґ3u#M& ױAȋ5͂wFHv&:3r'W8dBK6_NsԩCTQ3cVC)e#Ă6["ulfLY ,c EZBLp(%U@ WҸƄ{R<4 XmEHH`H`%o, )>rXuoݟWZZ}yyn_q*x'PSAo{dGrjۑʈ4f|WFRda>v^)A!eHZEܻE"3VYYBcMxr*Q),UUBU{:[bCfvW i*/++o z+BfǶ/֮X!zPVpXV깪0>wRRu6HVsna F $"Jɡ>N,s%FTQ#2ߢ쭵kcodbWp0M{bТMo*k^{2?v-#V푱m4M olłģt1ZFrquPwbYN S516tC 1FcjHꈛ~-}lG͙1(;y;?#ctp%"vU +lv؟el~uEqZ-w].S=.P6A<튚e=bT"AeB&i؟el^%1c2]%7d)q#cz c?c'2Rn9 '\z3}[o31"cLcD)ycƊ):j ƌ}<cf#˒b&&J|zwk֗5yb R3rٷX2:*^HR) BiA<2t` r~2*yK0aGÖAj {C2e1< mR!QvK5~yz#lأ=~tLa,0fP=cro=3ן> [|=B5c3&fQ;Wb#8o٧7~xw`,@g  ͨ7e>}&lQ?|uīWc;+3 c3 >2^-Gؿ~~郧,ܻ7yՉ<#3 c3F>2V8' yblSZ|W@WwɌ-11!yӉB5cO90Vdc^x>PaJŎ/[͎+F?>c_|7#R3-ҵ'* >3Vdc&خ|Ȧ1vH/n;9l#__]`&/c&ǠT:L/ ՌA>2vGGϟxk]cE/WaZC^=ywԏՓǯ| cq/c-sC271g?Fc{zzƷy!=u35Uj[[yzo'&üDvc>,o%ƼUczm9qeUghl=e5jcdfjii5Wc  mFrsa /cu43>\qc!c@,RgŘF-z3Tv<ykaD_[1c lS3v|*3v>-7R,.h#Ҷ2! ?&DIIBݡo^;KNXLZd|d jqybl[oW_Y tt0B6j++S&6 cXE >dOۍ( "18$A@oΜ%2G[JՌA0cjqybl+sيsrL\N)2(15'༂(Ůŧ+8 T8̈H}?М2LP/3N3k S3V c|~1w͎6lv؋/JxfI|WEu'IZ3eRW{c9|cG%1c[VӅ25cz0cUla%6tU3z3kٛ/d֞H֌Yo/#x{X~ASWvuugiɊBcJՌ=1جGf$;Ҷ Y/Y7H-[WfKH㐺1!IZ3&E-zTa>˾?Ej)f c1FS3Pj,di$ef5xaصEo+m XX|0fm&~FwE1kX.l1ROn(Fa,|A11hc-5 &y /{W84c%+{n5ЦxcA1ŷEŘ;dhKdo :(ƋF~ً)`%ɍ+:#/8zzvX$ fLL#E:GnRtK;£e`kfKVI֌-oߖ`bLL#|3~̶=y;%?1hdh;E渥-sQw~+c1sZX9AZ&}[|` 2k`%}_PSfb촖ض?I]ƱGw<3cL֎ co!-r]_>b5'cA17xf b|\/̘r7;?ŭkwv4]{=37J-*nX.8gΜӗ&-j%c+8H`̣XVΜ_Ԃ{,y8HeqJ,NVmt*gΛbl7=S9s`߽t=Z_ݺhJc>Ùc% -RlBXIbZʁ)'q5HZ|,7};Pۿޫzk徥Z뱖Y+:/Ș@ߔZi5huՖc#3A^B {@o]9Ee'#urͨS.). r9ߑ'򝱍K)dwظ[;}C輾Hia4htfvZmc^2O)2<7BbŚOYi7 BPŨXY{QM#~"_K^_iGuR*FWgr2G/FIx^7*v@9C/7|0y,_u9@S"e-دGFF:mjymf}oAR,<-؄ TS2MbbU* e 7K4H21_Ɗ")t8ۚGZ(]iXFdxeܭ$oKa@9 X G"˶.,AR'!eɘ8HCDp' ZGQ6؏-iA='B&WƘrKG+] S@݀AP"p[2aĊ!$:sJ%F'{ VP.'+.my`Ⴧ8X͵3$i- Φ3?8A"A8aё1.)KTTW&X,Vg{CFjc@ x1c;]6u!QPF/^hj1&vV798o=sp( EBLQ5Do3&n:]37[$ҳKf,!Ǧ\ɘRKye]9tҥ&o< 1Xd93 ѯê8`p0 0$rX] s5Dڭ951GSqצVf,֢:ί_>c^zzgA1E5Mǽce8!_#Sfx:M׫67&{ 0fg8`Y;s؃ǓqJ`>336)]u,ؿa Lƞz;IoaŸ!_T׽۵KBRvOհ=&cϛ:Im6HP`U.ió3Bbe5.1-cĘ)kJ*\j&%c.I+cP"_W &c&c[QOXop~j8Ny4C53rz LZ*l0F0F&T9 &c&c[O %&9Z;ܕ[aX`]6c5 +ۋ( ddli%!aSAc^ciRY &c&c[Nj!`c}v*Ȇ|Ɛć@r  UJGc WҒ#i&cONJ1CLjzܙSaxÓoeCMcQ]1"5( ߗ XYfRe7ɾ6j0cCwϞ]cn[L.d5K>T+71euquQ7*:+G?ˆHE-s?Yz>0z{aTQo,c2EwFnXvjO~'ߢW٠1t?"=)^b}E~'>wx꣚Sz)/k-ȇ[ m3vwϤ朆1D_qad[&cd">y4?^!FG{ "U-(\ޕYz+?W@l3f췃br(FFgq?lx&|([\oad4j) {rC,@}uaV_ Ƅ bĊ]M"mX2J|ĔaRf1bfd{[KjlD gX.yc"q !ǏUSYlvEh"b',f|dWe(X L &Ljc9'aJʘ6{q֚lc?=d!TƒɳTM&ef.1GAPwi'9g}E>*ᫎo:}ťh=z 7?$f( &  .!mm1#m 8utr%Z)\-i yA*[(#|/eQ1`X_Q  *Ǡ"Us=ߏc3}Eie5+Y"܄4D%NKAikK<4ȑdiDwDM+ q-&lA՛1։H !0\yl5vd}E){M3*q:kX Se|`q}3}/A]v|VJX;{)|Ew&@ :R5㧱~ m'f՚,b1[+UT 8bc`. ^ EI)׏ISUF)CN=hqoj..RMe "ƕ+1qG q7f2{e&"CE ViOᲐcAcnՈ=15Cf]c?&cA1ŒqE r̋ۘ1R%ă<)f-ȁv1n S12=b3Ƙ1ʸc 1f1ۆʏKC,`IG~=čV3$kXKZO7(?VW,AubוdGʔ0ٍcO3t-fc3:TdPǘq~qWnU J?<|HcѾqC b.g=wj0)7#~\jm`asQCmS GɑomҬ\6IX&c!-{ee+`N|K u ;D2XI:2BSb4XM'cBWMAx9N]ڌ҅hb{y‹ӝife`,KE䩙4j2\qDX-;hy1L<*<ƣcсcWWLkVz=QLDyD󍟭 a,L$&p|*:%~5Oγ=V/c&c/+*X7WY jԡ-bAF@#'FUT>v?1Y<6~uify ᳱߍac͛Qɍ~lSGgѷoΰ:ϰrɫDSVQ[|Ee81ASuXصwVpAuM.n7\J*WOcr1_jc* Tm526I{S;7S[ بQ+rƒce3`PAp?YZ/&c;$րSVݺ0cy_=c@FI7zazjzB.BuwaAUͻwn.3f_yٸf:y{lR'~C笆3GC_A !;(q '?XqbV؅z1=`V*{:Hݱ c?qZc2cc3|w)u&yZ3ffsLWsD|VA 8lZ>4~t;͉TOqTdl'1 }ؑSCs.|71\53fϮ7Fnlf q|>\1vM&stVP}r0Ol0fP؇Ue7^lgD *g|و|SKaO\LlqͶcNbK ccEd8ӗN\lf qFƤ0|q( ס&c3`1Ycd2}ENdkw=6Ϙ!xbc/^Nz)1u&ըkk3#xic=FNzX@_q=&uCIc>h.W>y%h"lҎ]2F&=,'OeCX8ƌ2:c`lcL=tz" D Č6m Gl3qfp{}+yZA}S5ob6ެ9(g}*lA"3OzXo1;>62v/y7*6gC&㈩0^YN2"zh3:SS%g%7cld,#¸2}E VUU5Ƅ#qʄcl珱g2ZƩ<پ"FMƔf c|XzFAd$cKrGb&cۃ# &c]ڏz@o60Q1RWtzo㊋o2Mzw4ccuq]G1 }ؽ/FY_(S2d7Fq`dl;ma~;LTU͙bRԻjo2 vO K%!s]|%$.;9ce̷*dP b3XyƟ>'7-28$3,hߠ7Ma 0tػ\Hϵ\ȏfgI9b~+.ܮ_M.;CaIoʂX'j.w1Q^~Fu0^V=2&o^rڳ{1%ZbIdIiJ&:jRaќ}@c$T^ݓ՗^,)x(4W\Ÿ=%?Jo&2?eX XTyB? ]]"~Eɤ4L%E5 0GLnZϖ#Np6,9,vxEGMfNA[+Ka_ b0`Ș,氈m~+ߖ)kYmqӇWqmc"54]:5lmAvc6I[e,ex=dMwAvsc)2r81e,뱋1a$ΒI] c#o cZZӮ'q8c5\ r81?cjXɆR&ԥrv=M04 KS^$ST8]ϴ N6C}Vץcץzu={iףa M0UW-,1ʫTdʪ͋lL8FNAQ|z#uXnкTg޸p޺T 'v=Seay*$SRNM?)Rgb&nmẾ6оZKr4ץ:GulKuӮG`fJ2TUS)1$+Nl0cjYc.0&.U٩Zxu 'v=ZrP.S^$,y`~&Yqb+AELM{2P;R%k@OӮG]R^&&nRqI egiSUjJlKքwxc3qk}c+ZD2=+dzhgp=0.Dc̘luWO8/s52~*ÕQ1CfxPu<#jģFm9[GYe>XI1<~11C|Ҟ+:dPŘpw4ώ#2e,$1g  Vh0`@lga++$TEc.pzvƤ}1F7|b>~6݋vna'4H(a a@ 1CԞi{行AX '03+@pQ3cEݽQmzϥV].cS bMMYYq&ҽ];>h=Q-`(@LQhSv-\ƴ%u5y^ֲw\23PTF:S}RuD>v$d Y:C0VocN23Dzə[Hw/՝C #s9X~2Y43Ć Q{G^-sXꛍ"c8( YcNY&q# eLU|VQ箝19;k3obdnNDLNR۸cP:chcI) 03SgoӁfI`LGF]|O:z%8FzLlcLc&GsX!ޓN-c`ceǔL}&5ǤMJfI7˘I]1ۜ0a33u\ׯn5f'GM_I]1s?ӵ1<%ݓNL&<9.U~iד1$fLUW?lpRm-9z 3RX*.;[*TQnKx/.Udk]*~w $cRCƶL7KH(ubREO'P-5 Xb ۭ1˨WՍdQł5k?{HSeqvLzcm*92 z讱'WȷOܩz͚VZ_/iů@>0i hZV k'lLF?q>y|)&kLGssEǥշ׮] z讱x| Yā>Jcںa #{C<Ƿԍ56?FbBʏrvoh&ԇ+2y\c]_sQv#ĥ<2Tc?|ZRf\*衻ƾ<壏gvy\еaa vSz6ф<ԍmCc6_hUX?ӻw1zRYwW}4Ec3% 6Z:lx>}~{BAϯm,ф|Cc6~,}\^cw NsRd׊.׊+K+GTce+{%ߜ_(`6_Y k1!m-G9M_޿g+2Mhg &ŝ 4s_ѓLj k,j<ɥ~ =H@ Ԙ1!񠴵BB j,\0ŮvJj 5F1nv8(LcWb? XQ-"5eTGEPcF5{TKeTGE(ǥn*\fQzK~,0.IoˌKelg#9Y{'uu3Eƥ2~kYqA-O3_ QhAuPOkSd\ɡko,_hťbK= n 6~kz(dRwиT󛫓RKe00׊? ,F㫞o!h,fBSq~]ӌKKe08;,)_ ju4|zbƄƥPcrHX)Bj .ǥg <.ՈиTVs??܎}3[ ,Dǥs"Ka`46w,XR7z Eʷt?Dǥ"\3&3.\+Q ػcֶ ËaT&S@A%*4h('EsJC\^NG &0_* Siyl:l s;aL0֕y6N5d^klV|Zwalycǻ0f7f_2vc!2دqcF c/O0V#sX}͈a c6c%c7}l\k؏ƚ]=#1e^H8j,d eKNIhC9_ЋЃ9ăB")0{݃a}g2mq>g CP}?XYTbژf6}{1NŘm؍Г,41t^ Nn禒>m6idL1LLƪLc'5nnc.Oc>Řed2ZKw+0f_hGv`,1=eX>ݻ0f]woGvϠa,1=ex57mwu0ɘ2y03T0RX)1{%N nMV8.۵˙h ` e; 7Ƣ˺GX2rwzA̩sl !4C6C6C6C6C6C6C6C6C؏!{PvXm( KM 4OܡOo[^ t ,4DX$ !md*د֫kG,? za^jrLx4ðc8DŽ )3iRO{ߔE<p "1Ma\б4WT5d>@qUĉv9 ww4^>vLKlQB9=IԱ0qC30b!0fbD(ٯ>Rʥ. ̎08fVװXwTXt3%&O)4㱟:tfZkb+4u;#!u-{>ǔ 6WXDHdaI#:,3;rcccvd#:36[{&ı\[m3ҭ8coNUǦ8p?}묅zMfZN+cDsF4ѱgv9Ms=籱M<4jfcΒx}WEomj][Yca_dTrRDiRx^Ok]cI>hRتº(9e2X֩ytq<9Yn*A6(c`گcPWe߆6NY{LcƛfN (tRNS@fIDATxlWvjhfw6PR|rH|QF!$|w"$o9 ) 8A$pc&-"{fdE"(W"qDuZRum͛;q٦{͌C eyI""P(k!8BaT\VF䡑d7G vB`@4 NqzwtIPiG|Q\t߼0{?K/.Q$ʏs$,b..'ݱc w9ƼRxUK+.cbH%X PU`!t(H; !a+u 1NF`ܱ(1ñ:Gc(fWـ,*䆅L QBCw̄ĝ4Zc(K|PK b SIGI-\[~=!F6Qz-cIS@, 3LM=d86Jٔ]QƝ c}z ADɋzVjCƃmWkbL~.PfJ\ NlA6]`B )4HMYV`]0R 1B=pb./R5Q"^](HQ JJx1^Ŏ5""*7RL8jf{l0#Z`Fgl#煳,@1q8˶{mA(ZzeR=8ɭ(Ǽ#xHvbŲCCф؉EkdG}='?J kEDc^]Guv0 xg^6zCXVL 5q# `tE) Z5NB'Y `6|f\&H'Ucftlo]fTyQűzDc|: pƣzG(L |g܏y$?;~ʒD)~l.!f$FNZoV0#U HdңJX(Sr\qGAi@xp(9Mh;LaH?]'5 d$P'aޔQm< WLW(J,(ƥSCXAl7+*9OpPiak#|Ay쉘2#{:z2qPO?\7áAyF"b53RJ[7CY6#9d`5Q(ZTTvFPJ8VQ(QR w T즎Q(%8 B)1 ȎAPJ; ȎmQ`\rJ=Di/M0l|1t9v==v_CxԱj;m.'M])v|xηC%*wh{ e/oe!;pC3ux1 N uiGCO VN7unκ}W?Jyn)XEaUX5K @VR) ϖKKǀxPsgݞDZKQR'uc&ts%[΍6)n: u]z'I#ݴt6҅ԏr .)%(tk4d+my`1)n?R'uFÍhݰ:^tg&Ooը5x_3Zӧ!iU7>yHEYd`Q)'(5k4Q4>Hw3 Qu:Cű75NF?ڑg.~J[eSryGm e$dtFC%imcN_:Ԥs:ި=_]5\F;tN­xPryGػwbId@9rCգNܭ@?CI[\Sy(9{)u^a}>6  kʩ7@N<̉x1&9{:ۦ]x86Uw9c1ZM _n*ӱ+EƢiޒH{o~<͜ia3 ql\-%M/]dq X݀! 8B)5nڥKTϷWX >#;;[6=ceZ"jZ]]df?vB¤}!{NgmܙױwwX2tiĢt7R^Ķ-X)[2끱OWiy! k~F{Z%'vv0cgt<ϸc aݚT汊p|A宠xdѱ߃bGX|XncVHK>QGmn󾖲Ҽ%I.ȱ8ùm_KƓ1VpNG|e˖|<3nSXG ŝy\l++σ$++]P Q^*cE;r`&`s(/YS-=!꙽u+ľɗ&<~BRYccgc@l"/A(Z5 _}s,+V3.a7E*+0} ЄUGyPulch?'L㞥'ȱ?^ kssyJ1 ܳ]rɃ/c1Ѱ_yeَ4n*.Q*Dձ? pO9]B>ǜUңС ,=y[ziy, .k."T^>>= ~ t#B߹(V3ӱwܗx󦮐dT5tyzc!(6dUq %c-*mÉ߹a~oҵ\Nås 4>D@ ˻wE4؍ wo IF{Hc<&;Ij&|Ixyr'9)U;"3:8}7K͜4ˡw%|o\衮:ێ= +Kg@[issϔF7s3  IR=a)ɱ,Ɇˣ''N.™hT%Ê-=Vzb6ױ +jMዣ9IWϗtj 9*@F'A>t ĭB";ן64K h+4 tKh6h!靍p͎L#1$@ĝ NstfNEHHH3ZiFe֩*_LN0~\uꜷέΩ9LR޷e?5RcYL1:1b[;xAm ?^gl%יy]cOƪ?&?yͅ:1+RDadV1MꇳdCg?+_}Rغt:.^իeqƶw#xq&.I߃w8/㕚>=mRQcy2O/.jl,1D \h)7_{Hǖ,ƺpW!R髹ߐqgڣkWkhl=Ӛ3ifj>]y4=|JM͋Myܳr UW>1:lOV} 3i} k١;,Y~vU_JX} Svг;F=ؼKS~flmxv\ͰP#c ;F²0xqϻ{.frcu[b1,û2y2oM0 Oc;ҕ`.Uαz>(ݙڣã[ ssO^5-I:5tqel鋹UG<6j\nca9Rso~}wѕ`B+<)ki<=s9RoK?fӍ~Y>S曫;f eW¥瘋[vX]-0{Ojx/V籗0ֆn| |1qlDA28|P {4x:So~?8-ۯ\;)txB&׎zehunaf_|թOj^<7FKWdXxMS33_q%#S4#f=\71̽{Dm33v_Īc33s@bnncas=.M˙{NLbu}LWg6fgg7fV7&fLpv K1>GKh)O~~S0Va'vՍX]Ӊ:׿-- gֈǡuc T1sb†pakYFA1#}U\VJ6֢2JNb B8Ї^V^o@δʘLKx ƪe]ŠT92(9ewkB1ERn0ۑQFdhFG7-G3(9e%*2e dQF2(RKg{'/nדW c{Ov=xEz2meJI+0nדWalo+ݮ'(V]O:^Qtt c{[v=xE/a1y,j{0A$sr{Ngsyв3/1O(%=('sһ3NP}Ԉ(z԰W[r' b{E]0fZWo_tC9$BA$IʃwfOdMQfQ ä=B/>$ߜK1͆~MlJ(]3kl*|S/~7i5Иxb?~Rސ5وgsR^b9 (G!CG>Lb~x:܈ wv6 M.G1F};{9le8K!6iS":eWʼtT67Bc~ܴ&%׿pf1pn uȈ1w6vԐ؄pF.|C۵TPTb%l亥=cLu>&Ɛ1 QȭSZ'"UmU[+ DԃvZبw=B#]pL1cʍ\q% Vr?b"`.$I5T1A)>-DpP>A&,89tl:(V]Q[Uuí]~6c~)MЙw<2?n 6-pG؁(lEjQClTsYONb!je[[[kk!s?u3h[ '@Lp )Cq"ܪ`@8C)R=cnwkc\Rk$`fp(:2'aAeP̨cF5&`,u!ƪGЄG0`F48luupDSш 9[Q;ˁDtBS!7|HJঈ&]ۏ+bVԝ-Uƌp/3bt?y&`_cH.@g(Aj45Q4W:s@ތEtQN& 1N&?MnTj"I\NgUvY!dDQԘHE#fq >GBiΘ[#d ܊( w/6J1\1ZӢ .]؂" X8P΢l`R%Z'c'ca5MMTW._WGmVASpa2cd}\;mDnޱ %0aAލ(gr ?Ro?tux"ƚ MMIcZpoHxybRWĒS| }B c2r5!L'D DBJFR)Q{,V;oRb%\p=#f„Ў)Ed:::b-rAq?P,v5VRUU#\^kj:g>zelN14Du6.x`<kE +9!118c8201-Nlň^WrNVJi}ŘߪvEI|3"QەOI0&?wa,t͉Kc܄noTv|9.yX,Aŗ.]"e9wW>~Q)t{{fwtݹLvM1VzoP`kjL= ٦Va[2V6&|9slӍ8Q򌉵"v1P\  uؙr =GAcR㷖K3Mu)85PciyX@TP[lƌ쪒fôqDBKC㗊fybkEL#/hǨ^Kq鑖72=hburxm2XBL!$FN" 4LLG롺Phd| Ү2Z~76\G@I(6vu`(px~l^RRRPoq!\YـVWE Dw^"CC:1 W^ hqRz%/ʷeeP*R_Nu XV+գ1cC 1yj* #y\f\YXl.o٤H)iQcĈ1P?OKkk^qtcXN0mi,VӋ +Gͻg m@ήq͉GKpmhaRF I С/4%:k޺|/ؒ9B2R "0b/B ՘`ROG*bPXhz4XhV,~fk&;+ܘۥx;=?`l}[BϻC'W4!L<54$Lq ׅټ:il;[cX5X{0CΈ-@N|4l 'fL,qZv61wHƀvur_PUE`KP;jgXa̓Ȓh'CCCtci+357eɓhDa ]\y\a1ͮ TVWR'CYJ0a\Ys$kOcTD^V}|<^2GQcqg#fZ9Mk3fИSJ~5!ʄdxiGI ކIT ŨHu<70Y$G"(-M2Y,\ZR@CY, I}S3D7X)im+h^aɱpc]7^xd41RǗ# tпÏoKS mHG,-EG!A~ӗ_X,],yd eL|(NBqkք2:;rWK?դ264FJݎ! #n3vF&~@â`kG kDZ}aV*~j@ADu`dI$JY{3F% P Ua@cR؛b 75,;I)m@Q_'<4.B.C6opN , x}A.Y(O8!RW-E5j+;%`",^|RcNBjyܻpmevLl6 8K-!'RW? HqwQ_披 RBeƌ׺:^ID7Ƙ@; Lt#@7|nxB+g8alo7L&zDSDO 2YqEIMmO2\|T3җ}_o;c+k+˜`Sm\/J h6x-MG [qC҉0ի: Iv->Yds=ߕ-yL5}lX ȔrC}lp̤ ^T&D-CRHyYK$+B2l K|8Ez7B99o;cMCO̯Vvj^c~.%7j<|Vl/#Vڨ4 H;&ET(N:A5YNcRשd,xӈ1Ydµ{h:saeoi:a2Y)ȔtHXT2lD!Q?U&tJG:~zZ_kO,O+ ZZ3;y|G; ~2 0vN"sEI*i쩢=PmR%ft~);qWy70){/b8܈1NB $rHPl#F6qȲ_tRˁBwبcj܈W&*ĝUJ X18ʆ XL;$$ NX[uorSÿHs:籞ylcC^rSM4#; qw5]8ʬ&0"3[qĮWV+ {JC\] cDu{< 0CʫFf;0 971H<{!=i'J%"Z=z<TbA_jnrkr}^= 8ʋ~Zz{3ka/4Y4os( }1 u`*ܚl˰dpQ(KH6T<ƞ5u֊Kڨdg}'8󿈱S'rX$N/.no_hy%4?@|dj'rSj8υk[P>!QM6)uyWn!16KХ%r'Z(TEڽG;^ /zprmm箠۷il-Le%A"X2!a5J<:SVVWxa&ΥDQLX; b\La\\ (QqʼnQ/2ѐz ck/򅊄Tu;3c0)&ؾ_nlgxwsN*_HZ)5mc :KvD Ud>df NBy|k4Qs;|?2N~=}:KQmhX~8VDTi;/bFfJ87î|-``>X讴-ۄ '̾&U\{${ZIVSҷaMϘm=VR`#2e u.HlŹܶ1l\ti~8=A˚1|%Ӄa&aPHO>$|u`:n7օO>qʷWF]~If&Ra,Ym#֐[1XbVdc;6ΘcЉK0-q 8NN3u'H Z/T|Y ΧI%Ca -6w RMA l!ƒal-E3Oc XF+1Ɉ:b\Cy؀Č,8*0Lk  c @̜Ţ&Yƙ6g9Ѹ8E /77ϴ!H{;.ITJ`˦1%qNKQVFUۄFN7h'}N{6mx?qHo_8%a0|8rD|g,kRhD b: .#Jr3pGuqao;bYhq勡F8x_x1ܟ+JAZ1uDp&1˃l0Vh͵"K< y b=,R qVA3}0rbnS.7cǞd#]0߮c|G0٠xP)ceh 7m*k30Iwn#w1ֶ5s;_1W5h+c.hnf&HQFds6sj^PeZ^Åd"G M:$5 BGD(uy{im _X 3.۷ pcP@q Icy. 0~]՜AZ6+.p300(suʩ!d=^qct$l޹Sic zƚ1 O WSVsy,/˕bj ʂ(=P ZjJUE:gt=$Ye/} 0va3'Gq5Q "24ᴐe.]|PBq8l&c/ccݺѶ(<˭[{ /1fb9Ņ|8<+u&5J"#A&HbXҖ'Ћ3<we#4y ΖBweDeAa\ƖF{~~fq?VBVC)?Tf25I-Ho A). c8z[c}6s_EfA9@M! !+ bLR2(EH5kaT D2^!Cs2UX<О˹/M /o·Cqxƈ'?ĸcOρ?(9"Ӟco`ȏw~fcCRݦAȶSyNӕ+c`OM3&,3'2KK?M~KJh{Z;-[;1gzk7MO7cu$fcVTȅ;^wK06Aƶvcd b 0{T笥u,!=<1Lw>%}~ٵn_~}Zzz3qά5cx[+ƶ:ul[)&֏c4W=䌉Ϡc9?8}=gʻ$N"&㋣׊ 3֕i>\lmyKT:_]*+Ơ cE _UU|8KʄKj!6־cw'WĚ 0y cҘk3foug2m>F,8[cD(,GD67unGLc VZY6"\/UƾhmoL>Z6oAIN }c䒉RqdV *T)mA%_dX~ɓ'՘D2x= e Ӊ0;I׸Q+qk6Ov+:|X"fL,&7m:cV4;!UŘgBLw~ ujت+X%S֢C?A=\5`(,^}l=>C/5c&o7 xx|c"01:A~Ϗ$$ꕖ nZ/1Tftȵ'Qd,@W޾ n|++~,E9cwzWl6f&sww)y XUv!E+AqE,e„ȖbXUV.3ޏVəС(8T0"w #yKg*lp5 IDW Aq$UO+$cOs}PmWmŒXŒ/`ӹ8>00~1􎞋\h0 8^9w.uvO 0 ҒSc|ush$cS33~`q^՞j﹆v:g#=ƞ~ly|g{l3nw@T,z E#l1ll@l0+>-sqvmD>Dp#ܻwrg&E﷼A4xcx)H*ŊyWܠ ǣ}E@,55c5jSK nfL@1h!4dڰ\g0u;Qjݏ=8E:-Kjp}fhJ-K*c3}k06oG-1a5d7r7wF,fl&nF6"F.vuufWYW{\.$ó۽q'|!sFlwx;eW|GyRpp.pHAńA?ٟAg#1zQƴ i/1><44\>4EҊ]ZUs$Qq576!q!mπ]+Bɾ+ܝrFqRw&W}u2v:ƂcxS߼uq Om &ؿ׊`l#gf>px 05~+ˋ2h*N#VFm#a싑+|[G>׳͝P38ʷ%Zt4 p P bIK[KJkO“yi}ęĸ$QCX.sR|;6?s~TT_1v{Sp›#:D lS^90&@&|>gs?f؄cQx=_I!1ݭ=c;cwx%MH p~ _#]q!jUUΕc &11.([$JWbtIWثW,cT{P{1M|ͳOo]G=_?طg7Ї 4a+c7/Rq@3UhaO&K5YB)/Rʋt-ȖEOԎɮ֌iJF -l.f]]|3 gA :~sWZISxWtM]LIcX˾y/,SPp@n>*["ƪ2s x£K`aXhV>*=pY1VƬծOԈۈzz=Rߥ`ۏJ\99pP09t4; h-YPd+ۋh+b_Di΅5EEDѮT 2bEhւp*z$[19ߑ$iK\.Cep7mwocIybrp19TRB BrJ &2%ڵrEVE+QnDW^LyeYGs^RmI>dlc c={ #wAN pFAN s!j&* U+) hzRмc9mc[cVD d:.ztY1}[wsvi?ϖgly$޹eɝluқ}4wޘi?yoۊڌE0ƈ弟Vvcb灉`l'_I׻WqD QV댒^/`r<۷ 1_|ݷiliĿL6Z JE"~HD$"RBPQ7myofe؋Ǽ'I-WǼ'u^?I!BbN+bpLܒX^'߫уW&Yc}֌}gE9{a %eRj7ǯ%z<e$ƜONfL7)2q`1ӧSz)jkcZ6"/|ɇLȓǭLJC#*sH`d3׌o_t}B?%ԭZ9^?V.1ccϟ HKؽ%3nwmb`lKFdlymƜ5"pFʀsNNkI^V8QY@D9qZ3%Ѝti-G8IR$< [Ẩª^J)!tBZvg `05cϟӿ5G/tޕkS49MGMm_Ky1J1dHh>A2p(pdG8E:ԣTA*8O>xx"C:tB8U2{#`|qO@lki2t L9z?q=M3f0"Û3n00)Gua}be*Lk,X_ Ýtn|7Zk&PֽF}-=-Ҩگ6LӤ_w?TZRe7Rrv]WAEK<8ߥGzѬg̾&cuEXgla0_XWπe[pf ϸ92/G^r{məcAV)U؆ GIUI;9g lb^ 3q;̼S$̜4!8cO8 *}p,SLˤWؒ!s(`QAY2M:d JXHɾcCB(5D)!Bh0L2a;;Lu1;qJˍ7DXQ[Z;qRGlo;Pg/q֙<9|9 &~vϞ=k{^I)͘s(w[x%bw[\V72npF-NoKOVW!lq[HKWK}b? f c56 `c+ӧccic&{g$q:|H&*ZU=T};F'Fs핛|0 ^_*eP(Ri|<\_0kcgod37?4SS'Hø=ZhZ+Ixwi9f<[Ngd9 ;[:TpXԋM[' SDHÜz"#񂱕6c9fنCL8fI}prd+xQ~+S5 /f#[N:XQ]f4Z77R~,gtyv 138!ZMoc~2vTFZ./B~j0V1`ݫOɉ׎N|#Tb”-!1g?fHb,}0roqur;m[cr;M&?~B Z)55V2\uLs݌XS@Mg`O>F g6rh‹@wjI-@H壢URp4DΔ6b&1X-Rb,G\;>CFC1@CvenWDyy~#5^3ʫqy)~+ivؐ Se}ކ;3rXʲXx~- @ nYm8* A )5:3Z(B27 3N(J'cWf3:Xvԙ:w̞:lWSn1AD$ZᲐt# Q  QۨHDr co ]8V'q<1ѣ-; =Ie!MC%}fQjUTq&az&6s,9)s{s8HDl$+eڬhqlD2M^m'Bsݹ+A&W1Fȥ1b Ec>eYFY0ƎH7zW #>=̽Wi!91SKo& F̑960ͅOLN :CC:%^ Z~-Ɩclz˶ϿaX,cftSa|׽3, <;$i,[mkmMQQ|%"IKP6. Em=ԵϿXXQZ ˾ q,cX+m ; 1r ;bV8djpe.\),ceXB//\dT_3W]fMV7;3MŠ blfepspXe6|(WZdآS]$AEnmW3TZC ~^9OJ6B3vǛz}wžcgw =.zt^>rgs3d&4 `#)id٨BRTg`ůPGQ5/ID1Kc1Aū}xۅa<[?uKph'۷#Q%>;9k]mL:B36u6{f|L3Ϡt|l4tjiJ;*| XF}8H;v/(oBhcDf@M2ƶoe^V.!Uk2fk 2Ea~Rǧ(ƀX,cۀ.c;tXbV`Uc61.9ƀX cocgqǖ4ecuuI2v`i31Lq kX0Z<6c?M0u^ebKŌX?*0fϾ~̞cmaI1|زX_L-AƊ뱱E61FMf6$؁eXk4o|Sܭdz7{ 3Z:lgl|kKeɘo3v{}?S{-mm.*&Ɗ2>Oo7oK1| ,$3vTᦑL&c{-cخ$˔~b l$ Jlb lx cخ$ە)ޫޫG~Yj~c-0cd&NfcLbaOI|QJ U"Xu^T|Ӆ.mf#cخt2v+=] \ИUb'C__KɇQc>I {B"Z41csjhcJ cS> v+y;Xř/bQOΜyp=OӞL߿\'o;Uf5k֮&֮E5bal31Z\&_Ol~';{rx<}3:|k{~lJcC EcUXL-buUUڌ)Mi`tgC >y B~uzGqyxpLtt,:/waLk=ۿ>,|1V*Cs5!KKw=\c>|}dЯX,nz#ft <X z𶶶g,;اeeUY*4lN\ Ě92V =۴YPs!?+vj9Rp cZA;Xa,cIiYIiIYhrUktcYZ(6TEjrHް ZSEH,t9j*BT!,U *eh\;(k椃a*0;އ-NDUfL^`/;RaٮI~HFrJ>P=DQv !&Ȁ@R*Бr *ڔPLm\;8UJ{ ƊB1xdm;R` *[+ 4ֻ;.N[([t]ɺueep%e؁88J()-%O) EX*>Jã|*HZ psS[XmIܾK=:ߥ߶hc&Up}EƇe)DhW#  1`)nRЇ7$ؖT˜2;kVֻa̖blKezXbVp)@ؖTˤ5s2cZk0d9dlG1;fNckVmY>H1ZY3'}yTw6Uۑ*cb fNץnKvyky2vxci:~,WuLY.smZal_:K3E+k-Wm~)]͞s,EP}5KcYk [ߖ2c|'Zwhf q(yaI+Nf)Qr".BC(!VcKciZ#mYߖ4can[ SA1q:KzYЏis`8޳XA c'B5P/AVaKvVc#3 &ȩT;y{&` cnP`:8p'FӁ<  pP}]QH6݉QtJ¼=\B_#9le0<K:KsEס]bwk :ɏ[Yjj)ǹΔ 57QoP/0N?N8">oj@2ŘQ˨zLci[kaB+ T-CRФK'(׃I|,oojލ^3gx08Yfvb xUTz TVWǞ DS W* 1&4bkfldtoXcbKuZ'ob;~{R`˖np~u<30etcvY$#ȑU~8Ɔ\[`)`'%G .J~q+Mq"}[,c3#i^opJuħ ޛ2KZ ؍2K׻5[&>lcYU"}Rxd_PY 9 p8B} : aTsGASv|RP` ~AsclQL;c؀Xcz>]83U83^۞OrӟO1j2.3fҴu"_0&Fꌉ%➪SsF TCiGGGlj݈8d.i\t{PD>aOm\[}4 kUcftSa|׽3,M^d Eh6Wmk?F -L.mƊiT&V0,8sRω #cS'GrԔNהwPSR=Gy9.8jk]L2OY>{tCo(@k"nƦqBg(e߅ݴ~՞iSK1~N/Pkg\sߢy:={whN DG/lo;q6\{]y5{@]^.9ƍIcژk@3&Z5=.->fl|1z__:)103&Vn4boD׺ޔG3\).v pfY=fL4Lƈu:w{9 892`GGY<n3oWy\>챢!(j>I3hhU'G魒c*c[#ӥ,,jZ "w"׆.%{.u^7,vG4: 55t659Mpx'Y JX$B>"< ׃UĊe >2|)؆@.0 @́bAY;p.W5r:  svV1x:ۻvd:/'BA.VDITl_a) (x`|)yPKse̼~,1~ sXŐdF;{YSz0xH5tE?ٱ\v:>{,|;wp>@E\ ~hy#,!" '\n!t7GTI3H0X+c2_ڌ4Rm:] ~{ >&a6;h09{^uH}R.Qwp:ߏ| !LZf.ӯm5\=#{:K>'c2wg 3[% Xv;|ǁraj*2]p Iu>i#<6QC!([QZ}1MZCd65nI}{ 38={q>{zgwKRA̛56+,0Fl)6#oC:Zhtq, X&HfVGUjv]V ޛ06υ8y䓙gy]x,L|)&H5Qh |퐃_Vkau "2,Tm3x.ד8BʯZ]W)=`1[M!4c:ɤ34mT]fRg,-*w3 0h5|$4 )&J0O%8Dʪ+)?뤂!Le|x,.Owoa+-j`ng=#cemذZO&'q Y]3:hLjF;ceKZA!lh zP Eš?6Y(>B3μ7Z!.BE'ſ1_i `Q!%WBŭ+TAi]XoFp "2CŠHi6[%lG J]P u$`!O| LwíbZ )A'U؇`Lg1cKv;)i*䌅o˒y sV  =% Bɔ 1W#jץ+;9B=d: RJ)T0^h%ھ~UhƠUbMowI kxl/8,\L(|TzITڋK |]A!ݹ#ɓ؇[uZ>v%s^rjTdUB/,a̫O ݈PFTi@ROɘ^-!d1c<|EG`IH3Øa,X~3T%J>v9س2W?KƴgE0QƜMTfi=+myῆ ?1.$Mȩ4t3MeҐk&h9kZs1]U_q~몮c1(T.y~,CWEВsfP0K@Άsc#im c'؊(]K 51̠bq^O6BΘ0Sh 31]w?ݏw[wo 1=tV-OO~)n[wq#0 cX}]{cft8eO?|$nnk?ܽ\\~yYncOiv妽M _;,3&c^ߔ}>2,'c?ӏ?~e_nnƭ~}nȌX cblk{:ɓn7c6כ%36RxӇ7`lSa,x,-?='?a ;֟DwfGwz_w_à<£aB aNcƂf秷<=\=ry>kPt.nTǖ?V@! jem?c~2F{Ǐ狷gE`\a0kr:ykzTcBՖ[|s8$+:::F d6}A}cG }~1}ϊ(9x޸൫=os ޺:1SQ6qR  I`cю\ۊQY=zw`]?a,hƺؘo8_g_l0:2<y_0cS f?CgOͪ]6̙1cN8456SRJƁbdnqҪ]JWFK Vk忈2ATɯYâ<1C|<K{ G?'ƞcd+c[bSY_hN*Ǿ*W?Kql_ͅ@,^_ƶX( Qۼd'coPcvv툒8zFf_@v͆!A;PvԷ ~c 䔥U!O?UUUG#a:BG`危E-{i+SǜQI`v$$*/?lM0'yhK8^\XUHoK]&fBG$8̙FiE]QZ)ZPFNU-=^r]l%ctc,' ;ldԹä1Z:_$K:n;[!1QHbƾůbzkqPF΁cb ͒TP?cƮ)-nkFjO)L[]6kZ%Ioƌ]Usd#xjfNw߰* ]maggWWRW'q{(} z8K[%IŒTD72 2$cRT2b\RrS^x^M2Y$IoƤg`}ؙc?}&tѢʘߘh r?ȳݒZ^۲ Ra$eu$kIҴ^-a? c9fyqR9cXe^axJ0[>|d9X {eY5I&{cNX׫ {,i`V:M[Z0kCRca?0fcI%yn`%Q,GGgYQm I"c~y#)9o(xT}mRmo>g[/.wI-${}[LaL7z~̹1}4-?6ǟ˜^>v[y Ǟ-d_=BH:2tghMCw,v@{\@&T!2EB QpUc(Y4Qe_XK+Z=N)Nv*׋04cn߻} -XonrCKoƒ̄ZNhe cQN2xѤlSk] &vŤ%'glO}D wuv8yXʤEt^C94JΓ##S1L/!';YҤ͡gD2V XO%RQ:3̒F<8Ld?seU\%8h)T5g8 L.y'u;5|Wܾ7߀G) ׀N$;Y$M;1?Ά_6뽜L:Mvɤ g"`n lp*G ` 7"ܖo򏩓8BD_"gyc, n<9QshWg4[:`AhעpdJl|ے0a@n`y8kn܀hp\LUoIkT*=E\dX dd ؜dfK⋓ LɤG*`bjoOĆ*ayz S% %eEC@},gMal^ c@XS.\)͞ ͘52"2,"C"jԭNsUL@e66,<ۘ1gK6t-22cOyt1vg}˸cV1Mu}};1D P"[^Bp5b|15!6V6dg=-LGfcZIxoEhܡ:aKkqÕѵK (c~5}2?I[9xhxT U/\ cWȦW53PƳMP-h(rV=^)C˜aTdPs$CsCKK}|=%(b-NIO̒vuYXTMZ?Θ:i*}j?,jozX}zx69Dd9UUŖsj@eY:׆ϖ)+qcQX<Œ1 R}yUUzeEyEROF,|) A+x+S!Kdg9"?kF:'L6H,fh-'pf9PDŔBdG1c1ol̈́@,zuL?yDY2[X~ZsE*|[,e 4HnPsqG@[ !Ec7E]"xJD2%$?_,PXQi4%cUOn3_&cϘ&z (4<٭x>p 9j57(єhEe!WR"NQKᲀ -VՎ{ YdJ~cXE1M_?sUv4=E/jȗ ;ȇ~D`c̍8{Aa Kx⭨#@HPӂV&Lq2t_/^*!t;EnR1f=[Ss8vRW==]C~Oea4![-au|<!GEMjKq 4|;d;sQ 74>uLӡCz[$=ӳwee7_ZttQJco'/&/$XC#bS>b5).O3WSo]ྈ%D]E)9uZ:~R퉶z-)lƍ%-K2[/2*I%m10\4WvK [B S&kev%KH@\7Q 4qkn3DGc6u{\8&-I v%ȖzePJ7KU-JCYiIP MB@[/* *X*mPqxq r|fx+cP\/FMg>Ss>l1&hfҬ@VdY&7 χL{ CeIp";Sr*KnxCYD3;c6ƘOu71l|gVL I="H :76*f~x3aN|}5v\a)'8a>Ta-Lz_ cCI29!eS)E*7@ Of7 PUZ`n?biUh\Ck9{Oce1V_K 6@K >ͥ %uj:c&c/OІ]rO[ ^z} @9aaɘتSfXK}2P ġfOg̡hd*1U0f<_2* Zj:lcc28cjɘت K-c]VIfQt*PXhM!* &c&cO9*|xd}pWig τAco2zބ^J7ȁ5# , ɘꓺǘ4O.1=BȟfXx#ae1ֱݎ|A2:˱tܠXQ79%^e2"ȭ=7d1c_dQ6 0a,R9J~]y2f TUg5&ckO+`o5 ^<ϟnuA0ց!sU)=e:Ϟ yXu썏_DޙGeQYo7mPW66W[p+BzTM֞3,)s~] Ϗ[Uy\`en3EzhDQXp*c3kF"dWFX =g:6AXd&c9䞠*'VZc6)=mTl 4ã_~ƞBz~.pOSCQ8Ͱ+@,*wͿ ƶc̆*Ռ}@,}2 Yg25%c!)-ؼ^t?0al7sW:! w;fxSah5y6D RP5bKd0c3)K0z*q%gSs,;u1bP6Vݓʥ.{yU :sNl5 Xu0ݍdN,( V`Lcbc2 K #D]E ƒQ^K^٢1-QepOb`J3ƒ>P6tmoRVs3-Xs,N`R !Ji~y, Y˔1bi9" 1& F˘#m_d cO "CHdY7cyX3tEN0L) cEIDqp[Y,z% X+vZLs:crP  >$ !cnKuL2 gdl2e]ܑ-غZ |M`bP߹1BQNjJ[cX$Ėt@# t`o-/i( WfXVVL2VW\߱)p:̑tn ϭRGFZt1Fwl~b9:V+F++֢Lr1欫*(crxlYc%.IȒ3cטDǽDc^jheޗNP3C+LbkWp b5SZQгT.=8d11a؟sXZk} # 6c,,. 8N1OƐz̋rJKk. E"ܓM#PI.ƶ@*BѱZ1ZY7r2iYN+꒞F) !*…1LEx2Hhbs^7{m-ӑYX2$ڭL1 6z 8_A/F&"@7nd\dPRbz*]MXZګƆ.Ȋ4X8te0G M"p:Q@j0QB8r`Xmgb;y0*dQh(2+ ]E9 c%kd '0W0`̉Eȋa[WI\X{1sVz8azv_M_`| }΁{ǩ9;׭&37FwB*Xwc&c51 GhV x=h8Qhҏֻћ/1_;ߎtg2Bp"W_ oXwN\gL\gYy>b9=cEY0H>Οklg2]4de< }!#RVur)cQJx?SoNwSy>*n .i߀+rU("c5Gfgffh`m2Nk*t aXe\>1]5}Ɇџb ɡRcvc; c ӗ3ؼ(j`l/ _Xvq+)>[fMgd2޳N'XSώ }ҥ1ـ`8ϸA3c}W)KIDpCYbGҍӜ:btLFQ*uzbl~:~X1q+3O;9k}RU8RY?+WlK 3qD;h XVLƌ`LS3T3d~4sHe/#fD+Q7"MFHg뜫ɘij&cKcmGzЏNF?,Td Y_#c󆟞@*u3"1Yy#cޤ#Ņ,GiKWsݡIq d!Us/a. w ^1SŔ3zXVO%S=%clc[ a1&.2VJS꓈0ɧ19?D/ON¤㥅TQν噸BY&g{fT̢ɬf'>`6c,w\NGz&ۑ *1 f%l1+zLN]Hr4ܾaqe9/S145U.aؑL?~eȇ Ķ/I 2rce1'ە D@7N$B(H!KeKg{ʹyDz;q{{M?FnLzxgns(J:28I.C6[_GIe11^ *z,1Vx~1M=5 nC8,cc<:XW74b\|&e @i9y,cMY\OuY4ct=; GAƯDzMSe J!V&>c{H-a̘Y_q;"<3cLvdWcYsOkc>u|99 v/=>ιc2^m=mͭ؎,xZs.1?cY2VpHHdcncYgxѣECjU<c#Nh&%+"<;DZR33.`՚9f楮%21OVɬ0d s5cD20v(+LYRo26q@ܗJiӳp۷&&fCRRlk|h** Wk~:@MT3j^O28,bOcH27A/ Jߜ;}qʭ*JsaC 1_w{ 77R[nb#CM|wSj_*<-cP2CCLؒƙ% 3VG2 xMRK(?:sݫx3XQco=@ez$ORա_ڗ `Xwc gY-iHDZ;p8]c`ۧvLiKb--c-Ja ?m/kz: 롯 pA6<]K4QSjD]O&݋HK3c2R32ֽ)pBA `bM+clfB!A *M0\̶M]f7&0DS8jRȪFԅgБ{ss}dr%ge,HK*`K%`ۗ*VA*~EWIKb iX^8f~-i=ӒX?f18X yCc/T8M&1dGM+W- S 3{+>{I[G> CMvdL.äM! QGURIJP0sݓ3s,ЄosMLb#pHX[< :2Vש%0< ;鯸:qAR-Ƹ {{3ii|P7&DS8jrȲFN~{Ub|{eh)xmqy0<"cIuQݎm=-fg <6<00&QV-+RGmn{a7^A d8j=L+1@k訲ݴȰ}P<1d3ey=훶 v fLxJ-qyzy#-yyzbLZ'Kǟ{kcX ˜ѫglIkS< jzv=`31@Q}\dlRyA^cdINPp]%d*Ф N\L1JD]1X:/ ܗn꼧I]12$ +[[p]%dEfTicT)j79 [G<R@}Ej_S&K׮`U/dH/RTZLQQxbF@;tPI(RNR_*T'v=,,fcaIul81QIV-11vK87>k@Dv_*8I]1aioayPFuzLJaA{/.)[!c^g]#XCVUt_*=W.1G.AzXoE{Js1o@7|/qX^JfW=F-B"gż~o)55W|JT{)|d3-.?~p]\[A쏸>e ڿ(n:2_ PEHf`}x^3)9 W)mCϘ3z2cʅ+ vڣЧZBXfXn{*<3B'jUEٓVFSƛ94 Ed5 cR3VkrV wݥwfԓk֦2'elU6Еgpg=SF5NS*YW6l,8AϘ3Ƙ?nm%=OflҦ$!U,K=SE,%P)2MPyATްm&HԆ55fcEssݝ2զLF}{Ėf-4i0nr&T{0_:T64_3c AF=p~9g jGwτé*%lL {ij Ui&׳P*q%S Nm3I{ZP2W<!6rBW}>vNeŬ 4!G~Ɨ|eni^%o&(Uz3h{e]e.ix\:8ϘE$7E,ñE,O¸3ONQX0 6k0a*3p\ׅq&FQϘI]1Ǩ2dIvkJut~*ls ]RR%2ZKߺ=*/8$m<,R_lOnq n:條&`LukkWX㗖Xo]UXX_Wj_SgN+IK%P羄;NGeJU{` p--JUq\q b;L (PÑT,,H L9@&h*-.HRK$B*#4lˆ "M6h=Sg\v,w#\xFiKrR{7PIK{ИQ;~V 3}j 6f_I Th co$祲ޛJݲb=xiӿ֠S2 FA…Mc3@>VabHbXa&/!fdZjiƹq4_>6/p]hlNMeb1nF ƼSg|¤1:G%;)VI VĂg哗5no zțf~Tw~ټ¼T48 9DZB6pk3q Oσؽks4\LV\̝+ل>#S5fs{"K&7^!/T&T?g)yxil/8BcLό-}1i3 1wkl1G]7i c6i}a&fdRx518NчI.4F0/Ui/k/k߇WmHj}Vf@^7+n{ˍ9l.&/{Xa&}Fhk/y+'8r85z:{A:WERb1py1m jLcb!I\{GFy&Ͽ}ccm3~ @&BwE Ԙ>Y>[9mǕ(u.Pc5O&RPcX]b1orFؾM"7H2GƢnj,揎ynw^*B0/U=|祲 n~2/Uy(}6/dKn!gKZ*Kz4GfF껅|i2R}|wj祲0)k,GfF黅|j,C?[۝Re(RR{sk|eaDA%(PJKە"KHKar4 A|QPcK;QvIKz@Gf#j,C!R] AE^ Ej^~},pygaD Qc}dZZ|ݯVx^*ܼT&FcX ÈN`KE~x]e^~s~,P|d0~RRz^*KabyL[_HB 껅,&=/U=nj,揎Ƣnj,揎Ƣnj,揎Ƣnj,揎Ƣnj,揎Ƣnj,揎Ƣnj,揎Md0 ~ \ATCD-1Q j AԂCD-1Q j AԂCD-1QժϤm_Qn"0gb"Ccmӿk|#sIQnB]e`(KZUoJH-Qr MPg 7W|cD9zBA&k8rx\acQg wb'$fy{Z4Klj'qBॳZjnQ^vv'i^ë@t|aiFkܣ7Fwu#MuAbVU+4;EMB ƓDŽRK~h>aF-Q^lBkVAwH%6?*$^" oZ:5Q ,ylobd McPT{#oc%N_J~sbۧ%aUfAwH`Џ"o8l&($]f71dSCo&$cexionӀ?RJZc=XUz^lD9!4 vvdgk̈́:nXkBy8Ffzk]1 8&k}[/g`q/Tj&f|Ac.D +N}91ci7ԡ+jQG_+EuQh]Ёu;YScΟ3g*5lmo\LqvAphL K_P¹d.!>^ TkdHccVɣ34P(IbN@56!!a'B3qB@wM#8N)`%E5t3'%SA t)!AKNϩM01`+Ø10 cØ6a c01i0 cØ6aluƮlV1aL01m|Wƴqƴa cwEaL1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL[]e5V4֚k|UL0VMozV/)EłQ]fokvvG9iWPQ5)x_ak\'0FvaHƈaHƈaHƈaHƈa̱ c΅1˜sa̱0\s,9ƈaHƈaHƈaHƈaHƈaHƈEG~=5'OD &~I`b+u{Rx+2ty=\wKI)nc,cݮRپy7]kEw6bB֘}_Πm$ äBeP&48.K\/-CfNbcTD`p-Bl0qo$ũؖRi5ۇ9&1zc7^C<=#`_s]{n648JAo&#N=2A:F똸^Xܶu.Ϳ{~xŲ5?&plsV;vtxr7\W&UҒIT;fڸA)cp,>tlf:vzucZ>]]Q#וIGm׮e1.\i]`AIVJԾzuLCD4^g&%Db^\Ғ$[u1[h階_T\Zhi(jTPQ l:ElYG.]ѩ1u7SX D#AZM jo?z]vg鼍G {%[,M8]sӍ 㤪秏6c18q:VHqfMZ z>WGZAҾ4t.̩qp G=+%CP۠=3)yN36:/]-fK~TwR>_v> =!Y,z3y?fCuLHX\LpLHB;<tȕ@B4wP}qE7Edp;cqI䎭FrxDZ @+q,"cޱ7XIB818ȱlrxDZn->cDX~kqcbaco8t8bɎ- R:_}=1cK}_Ld>0q,lcc) %3d66huciZ762*Mǒ%7ǒdֱ8\X"c"cc"cc"1ec%8.vL8:fjkW897 còp1q:v}"dz :c昷+9FeY\cz1s[ޕ>R9!DZclӶ( 8\Q-cNY툛1*SXozZ1&s̤m+a3 ǢSXW짮܄c + 1 1 1 1 1 ,cDuRlccxUؽ1%%} $pc޾4j}z\uh{Rh޽ǢXwBIW짜cٻX ;i+vwЍ.K<'8`v1f1v1f1v1f1v1f1v1f1vq j u:- R:/|=1C:< J:+q8WL 8W9&Þ==;::w>mQGM mC|0=LC.=$ S)RBN"u.8-6D?'QBbr7;vƕVzg<>81ͱyH)}pl c_ؓyH)}pl c[vG ej0=j}pl c[{Wi]8chɜt t Ԫ/"}Nbonǘ B4l .sŴpNz;teJ˛g5Fbz1R9XDЭcN50v;VzN+FW亥 '41=]WHi'5FbV_~9vam 0'(ctck:'x̱fm;i4$ǚ7^|%]V .GR89y/cNOλǜ`=ضlsyk<'=XR:Kq?IN;NrRӪsO1>G:GiO ǣcajͱGck:t2(~|pFȃaA7>PڵNk8 qczEd\XiTѩ&8VEt;\J cfU۟S.ת|TX1`c,mj:Ouc qYt4l$}1!'c" ?]6/v_3U'p Bw`,+*yf211xeǼifdɺϞy$$#ǛgPʼyfHGEbK998tc`JaM@??OMKXXV~ywtsroTSRhQĽüL<5{wҗ}̆^Mt``^\|WBaPnmjި؛kUdbaŷoQDµ~~}j[񶖆ƺlifdUېk[6NYgS{`RqXMnbت߲֟n%P,Y9iEvo<9ѵP {m1rnر 녖4 }|00b^]&z/XL%#ꘒz-"!o66\F߮}ꎋyS@vXtRNS@fIDATx[pWǃ}& VH6epY[#A Z -(flႲ];UTodR!**LQoy)yؗέOZowEtsJ$'H$GM0]+Hr 8ͻ{wHL*L"ɃH80|s;ZvH$&F37o@v(H0͉P#<7o߂(w. ?]Cdݜ $O.-Z'Dܼ Dc~ Ho0*Bto8y#Dj&d*|8F4@혩A_@nB‹ZGmmyDcA By%16rr[*sӜpʄT-:iJ CAI|B  as^ *)X 5iI@7iY|-,; I̓v[XdN\P/L`W^Ģ3U&J.i?eHfEy,1VApȋԂ )mo [cjM[49E ka|?!  ?奺sz3 `5d xYÛOH8N0k-hhFi0'&{;-f>Ua!L-|4+d Hiiki0?gހMcwRc&P'ȐK7æS4QNi'Z_81!32mh#\qKCfNVqShT OshLe{c{⃯p18[bzK7;r"WlFv `hC:7/QvJ5ւEx{3ZlY0Z.[$K?rHm!kƜtJd z땤ټ`3,YRb 3L4!Y<5:\9;$KL(p K4W"! 2g/XX", U",Ud9imA_.HktoA/K$Bcm_a[- "D%I~m*A'~YoH$., δUą]c|8;(BLcٶ‰/ElGo'/EX"#rl-RUtX%,-+4S2^e4H [#X Yno8'yY >gNW N X)טߴV>$ j ߲%Felu.Zsq RI_ 0=P[qx[Mif7?ޑnrzϞe9yu.vD%"5N{OaxQQٓ[n?Ms/ފ%Rg= cm߀7p5hl1Plx&fϱgFl2nqp2U@RcWNV]D%"5Vx8zQ8156hQ/VV%Q)XmdG zc5p84a@:UX7j$dOUU)D <,#CD:J/N{QIyU1"2">Kۇ4jEX[qR$OQG@EMq5כ<9lOUӘ͚򮏣tt5QnU)NEY"5cDtpgUUDYo6:jkF kKJG$OccoC H[~Q܏o('.9icקptPO}q?<:kt}-!gCD:ɮ͛'FX"5c]]CzIs~ ]Tco6w+^*)X`=I VVno=r+~ՉOW(Aj圩=5S8? O&G+eBfL{B2չx򱚚cy{J?U~D%8좺s==I[˛݊rSuZ(Xb[񡐶:IPIF,ߤ,،xRT{i^d&/aA",!vKO<=R>,X٬bDiw?j>FBy,Y(ѩ⡬<4`/H$5Ik +mH$.,КhxmD"qaiyhY^EYkE*Ycr0^YJ«1kw@U֝+⩰lyd4zOuVH-H~ lNk*isV-H )h epj@}~*r~8r[clޡ>UhmJIKcKp>¼Zƞ 8x?_K$KXۥŕ™.lYd)[5|b|Ŗcu<"[*P΢T*qCc|]{ؓ8yr5[coLeXcR`il=X8n6>z4 ^?rِ`[dnH]7[+ ivYn\ѬUEExr3_П7)_=x{ۑ5+̮HĠ7gi,hg}}Gڶc7oDHZ{~_dz t`(DRW t?ynNsjdZvSf/ZME=ȣ;X.NE02?bcbXOWzsz#ȓEf+-DŽfͧ$cыC:h/TcDel)-f$n XqΝ]cߚ@o<U_~]39UU*uŨ846FՇxXc[urmlsbRd&T"nŌ/QO4F@[FVI>ݷc3\*|5ays{Nqc7KcC2,KRd`nN-u;qqS__`9a[ƬMse!-re>H,ڵq|56='"+CtD2Gyy,n~6|6>>ZX=ri}٠j_>O ?\U_ ߡ}ǡ1*2cO<سL0}8;%rEH ?.W.p⿷'buz3twW3ÍC5 Z0|Wkh0frj,#mqƄȰ,6QMd^ atXHج ư6n$;lO>a}OJI歱NWgΜ?:+A,P($QpUо}oY!|ׂox,>>ǰ|ë>dBЖ-[MWyPQ*d85p֓OXc|C5Efw_8 y^%?$O`^Ա!Hvތ0FFJ͎!"+ەnH2Kw`6 Gv1Inhm&Z'D~[>4#ͭtv]mL?׸WwֈαG ǐ@3SǼdQ8V}ox;p az8Hhm)m~qمM[oЈ !.U{{EG*DJkZ֚@Mޞ]]=mZ*M~b1I*PpJt)<W_[e`8vDFogo.wsr~ m%{sPRZzGwX,g{{v{~yHδFE $%&c*UzR skyS( ci^z/7l+ӽjc`٘j6vBrx'Mj9):TYr1pMLA!WCcNcMK 9 իfcF"Hc#v˛c\B44F䎥soO`ظ:v=`XAF\˜ǽ5H)H<&<(0j44zǺ+>,}6xύU"]ep%͍L&Jq޷ L bv <:ičTp\Ȇ1(ҽQ1bC m܅R>zMxB]H- X[ǚ EƦ:iΖ9]M٪΁s?؊2BZ,v,^о"+œss-̶ ?1Iɘc(8^GDي\0qMr=xLEb8֒'OrLd)qر $>pqit.@X0 zJ{#MC#+Pw Ď8f+}tTq#SX1li=uLWr 44O0ٜcNk:7l"_ѹGNΥ9H-Ezߘŏ6%Ǭ;.!GQ_%|~K-P[䶴EE[n傒cō (rU7i;{^dcj>] * L6JԎ+`q%NLeͨ; UƑ%pW3O{ȷH 2 c!!KT +3*9v#n}xH9XU5`ʭ2IJ,Fh%ZEX֦!(l9tFos-/5KHgi}rX~Eaܛ0FjH?* EǤ+vCył*$DZjO!4KPĔK{ #0I: [.Lyų 3S>Иcc 3O:.)bN);b.brUHcĖ/~/,tG. E)pZI{YP@(*,IG qs N*"ǂO-:|yht`5Z}q5K8kP<ޞغUv_1HY~ *P@lJ;ǂWr+&Ǡ/5 2&|&E U C0P&K ķI18~|?S7Go1ۿh_អab f^pfQc5φcEL̻-зNF=ecwU(rUH$1d OkwLZ&uk]6 *ʆұ7o~7?Q|Kה]ܐę\p9m..<8)}IuLzuN*c7Œ䘨%A݋CS(Ljx T4!/EWr_/߼~+F7 k]t,'y"{<d,,31{7W,xTօ &MűAbQ 4qWPI,dRοVzUx &P& !Օѻ^dͨzի~z,R|ε3anx:=\RXۦF!b]u,/XfQYR^ڟ|E\%mՔbIr )Ɠ4rrA&!_p! :qayx'kX @35o1MSƺ5c+A`;żM8x&oxFy$r/<ؐspyE?c\fcë!E:{=~1<$ԗl^c%peMy^,(F%.Y&zW| ߚ :VNY^:T1 ጻ6a,ݜ}TWoFΎN{pM1ZqkG w ;\Y^ǟ-_w̳6tr8N0F.)|y7+txƇљ_'oRjy‹/\2X^۫M,pYFSutz"kdJ.BZ$6?"B"k׮_qUW&]3p"GISy,8>֣9a{ybNgt61d]ުY2 Q96|;Ǹԁ8V)|,G :!zF]CCB?cBv${DqENBHߔbt̪GA'G2yPJHuaxgQG-Ӽp%};EX|tYWyLGui2:(?z gq-Ip@;請z*u<;cfp&B e؋8f^ 34:]`C:g(ɯ3=;pκ!͋oBAw݀[!cx Q}UUVW{!LTc1*Hѳ9Fh\1\ӧ.1(ILuD1~|%U+$t2  L*h[ZBJ@a?A-twkvO_Cķ;+BxMa2NZ7=03hGqp˘ٌz&&~gXPߙ%DC' ["ՋMĜ:ePs,~%ɱ2Cj4N+SK˒Viee20H-2???=[ +ւu+C  }98&iy*D9V:ƿHQ،doH'ʎO:c032^02@9UbK2O· aX־ !Bf98V S2(t> !s+Ƥ]^J>Xx:VXniI%~PV!3JeI(#EP8D1ߖ рJ#ap~PJss4 u^nb@^ZD F19o,؟wGŗǺn( "X-nj2HK Tk!"rR+l&4Fs,ԱXR$J ,PȒP%R jqcTJ[. kgCZROVj &TFM gn/aDѳ29¥ TwIc bBu)a\jlġb6bNFzMD:hf5wv8Q9fny.eWjcP,K[#o2:}x+8hqZpABAcouO>i^*~a~'/_Lc=Љ/}-Ʊ*#h\y ֌.Pw̿3xfdžAt,ANpˉ|ͱd9ɵ/? 0ޥgU|nY{{%7=ا]Agc)q{ͱr.Skk?@q9#7r[_"ulN'r[3c`:cPwl <=|xdxr^9bs{9vHy,OXcG?ZZZcbo<νBs~]q>JNM/-5{tlcȆN೾gXcgcǬa{Px؛Xpk/i_=[s78;6`$v(88h|ܽ!uc>|2Mc zӋ e\$#C?kQ{8ys8cvR >!A Bt<7vkرͫ 흹g2VNz7dcS!_~אy0{9)cD,1IyXL=~&Ǧ4-{AUDqmgpbm0&^썪Dsnc˞: Eb;Eb0)8V},~Ls<^?{bjMBrun1p19q%ՉjcިJ4_?y''ա&Z^mcZ7pΘޚr|S9c;Oo-o jsJן} . ejGB,2k- bq89Px)8c$z3N?WjocRǾ ehmbjiޛť E!"BL܃c@HtI%ӝX86n01fܭcıȄ=#Nͱ)vxnЉcIy71sׯ9:TJ&{[];cGݢ3Zsz['sVew?m\WcMB_dcl@2H&)HkC6 jʕjj7&ɥ^ ^Jp!8( t@RB~X}f33/À?\dZ9Y6Ԉp3^yƉȖ$Ǿ&ae:͉xJZxJQ1IH*c;qKo%]~]lEP,A3]m|%wZj8dL08V]v,ֱ8K/ *;:+Fgə pGb,-r8a-}˒R1##vL:| Ccz|锔l]fK5 NhqJrLAca΃c1;sODdCƨ#2 5F]vj뭝7}sDڂ\x^4}wVGu8S1Ʊ,X=֌ OL44[>VYuSw8f,ŌQ=YV멞ʹcF"R1A~I=X<X)i-0kސ~>v 5-GZY (/.$̒r t~RHI:V$:I;X6QwegƱ˱{ICg[Ӗc̾b>P\H4 Ir,X!b8V{ǚAq e֭[_XtyyeV&WoĢ)Ѕ@D^I:8cf=ct125ڶ;LY1$ve IcU6)ݹE,oб.wJ(N6@)d\رˉYѠ6 ORxg:[o o*TCYp)j?ʾ >`JaX=6/g1 D${8:m<{1V8v{8f*bhd}hx=`ӪM!c'qL R?9aN&ӱH{8P/m<|74ᆢ8c}ABSԜ 5LDd rV!0bgDKcom'(vYұM,C5Zxl(7N!b͉ L+%LŸ!Ɋ:YSWd8Ǹ9Wt8*Α0)G c7[ 9Q\ 阧aaO1αmF?1sMosO}sc$<8ľ{fw]9)ę}lj猇&bD^c[۬b_-ZwC6m |zCj,g}j~h[tK9 \Ǯ1ɏ&z+sR1'E8l6(> LJh {kkmAum-ƥ@"eS9q hw'O0ӄs\qQhD8&<.N>Ǹ\Ž0"]i X(}58H2~rAq lVKű/d9V8Vvls(GD+/lnc2< :x.!)XEڱap(;*lpƎ{cɥ1d:Tievޱcc +{kh"A뱷^'e| Zn*|e:B)%c'Ǯ;z*c„zJNTb0|\i4]5TpWVwG"X f?͓vLc{* $29O188{r K;&۱ێrĥO!|#e>?ۉcuɁB cI;8c;r%)i|\/iǒ<ӎ])(w ОBFv,y#Qa_/H&arlWL;q́#JTmo C G5 %3I{?Xn'E#2\7 uhIcUFb4VWhJ;FԱ棘c#:X[Mt1xe˻wMwhxDLd&;f(7Z,e_Y,&vݖ`%swhߧ‰^6XZ_M3 ;&D\>fv;Ξ,XǪ ك1w3&2q}4O tyZ{Wùg ƴ)r<8"ii_rs @͍jn01=sQ\arLʱS6+!S cnc6Ӡ,.Qq~Q${昉Q)* հO LRoJM GHp+Gxh#ZD tX^i7w> 5?z:}6y{OG .ٗzD]=vX CocֱJ RkȚkl-Cu1M DZct7wF7MK&78 ͈<)L s7/LqmӧL.Sa~FHVNj19󯒕Dg4mŒ-jvP%Jȶ.KDKڻsSU vӷdr=u4ر9&?]{wlG. 121"3֦QDT+'Lr_V@9GR.r `q3?s2g>:s4[c+g>Rֱ-q/>1$Ŭ.sU'Qs=yfXה74#I;c,+ִpb8_aJ9n-<;jC\T5oB\9pTS\I9Pz=ɲڳe<#:Vzzҧq/B7ح⇶+n)Ǿ<fխcڑni@:kZipb/ hS.po# L5*x,Ԭ4xѼs3Sb#q=;U%1ܸx,d9y EYd&;wFxpl}U蹪P|I;qlƓ!Cx7 r릸`ai ˿pl>epkddg0]K1c"GyӼRy%QEKUX{|KE:V]Z v#IRvw'2qm>y,v)^~N5RXH@csιt~E Y  Pͱ]y̓{͋9,u[cCctS!>QJՂ{C:64G1xZJ`=~eaLuyI5ṢRO{'1(w쉳Olv S-J)PzբE8?vXO;?xMMXtݖT%c7e/89ڪ=HKUR۱xq2cA+cR6*CڱT@Wd ، \,ZRJKcc)Hj;fnW-G#ҘLknes&Fp/)bc7cItxc7ͪ@Ţ# 39#c{Xfw;t;؃];w죛5 ӎ%nbrl\-4=^W m8mN4NN2(mK5b߂17&qF[~k$ƱlMLN\XDZs̱#ǂEE1?܇yLe j Njc^~4bXJRCUzxX_T7_PLܱ b|džU"ϱ10 /&24`8dg*gZ}QpoJ ÄX L4JEB9(!)=<+J9k#l/\W4Au"X'u&g.}G/afz+EH'HV8V:!vVcUE\v!sQ 31Xт[86mkxݵ ?؀QnBĚCE錼 &%Tߠ{fM?mŎUwK6;TݛT=88Dsiް^J$P0q —oT LI8F _c B_CX sl{Qi{sjCnkkᓄcJj.8Oa̚[W 9ױ窷_-m 9ͭFF4opS%Ra뉯tL;>ʮǦ[{8f/$iS1ºs7J][Z;^:\Ȧ cqǶ6Yž[ 6m4mzAI&վYQm;)?vZyu^Z7|2h_qeycOv4(k zՐ5uA @xHW#IJŪ%ñ$FB6gD{fpssFCC[4E[CCdž5굶:ضR{ZcX1jwTd݅{r+lO@动%* ȩGF{{Rq"cIl^p?59HgیMco/d[w—w=ڥQ[ ѹ0cvX[K#H?;h-PvuAu 6 jb 6 qN\-=|5YPiPHfE\1E1XA8&sۋMΠs!%E1 #s g419K>ba:%%2/&sER ӟ8Z,0!t@ʖJ"TIKsr;F&ԓI^OFڱX;M!z A3Q8Щ1Ad7{V._og"1vow(}GdI8vΠbB\+qzM=hb=v5o!qSQ 1ǬinpM;F:egǃ_1/h[mFP戚Nz ܂zNcarҎUp8&PIK>y D=KV'Y*p s4v,Ihi|XXq6F)ƨ,TOdMgE/:q)#k#)êLw~M\iW8MIH@)^]T"J"+*vX,֡+uıK $$& QSPRBFW\R./Eogx|<>3cc'̙ؿKâ)Fv6o k0c4z L^wϡƹv7WI>poV]FC;?V1oEZG`RpL*,:#rLG6R <B<ᓼcdzbl8=CDŽ|7W}.s S8&n9oBS< IWJ:r,:Ho.&xTf:Ff!oΆc'6;8n43PeS8&n9ўzĎo \C/ښGMQC1O:VZj›)'tn NrQSÊaVȨc\frTO=dz ރ^?Cdq/ςN ]r }iV `9Vs-JdczL+7h)¥{aQ[[1i<ṇ_7ٝ.*{j+@x4b*ԒQJl^C_乶z[7c<~/=>%2pyoIΎzn:t̂1:{t?F)8A9V+jwԭN ֮a_dCўӧO_Hw9}khp}w?}|4oZ 7jeڱ57NdAkunwx=LyΛ>Lܦ>+". #X1)ʑP1geI|HG 8Puϒ? I~Ԏ˴ciKwTWw2 ~#kk+9&X phu1P,1P0;%F81BPrL±: 8d;"r #;"qEdjػ%Ǥ3Br̡18p5X?&X1yǬBrjUdmr4I+v'=<@ϰV;fc@cY y\d8;#sa3VV8QH8QYY1Pltl[t9_cAg(3Xx mΓy~[ˎVAWt.%ժ{ٯUK(zBN;+~cGns71.,Lc#Ʊ1g;>qNxpp')㘟^Bl&gRp͙cjΙBrWrlU9;/qfNɬ ,^=2G~^FS]a1=Do:اX .WTDŽ}~86t/$@|F>ı)D SFw"85ncuO.vIֱYޗ3 c1 td]Ӱc 7*Gc\rY@1mV=ϓ- p[9Ǟ=]|+?3kLSО 6]Gq[fߏ;:qX373ֱBrul}Z8t3̬cw> sT'qڵ M3O]Kx3ݳ"QK g1P 6J۱Qbpnt c;Y>pz;9:;;:C請WѢpI{Xs-$i_XA12M?)=kбo* ݲu%ʆcBf&NJfcſWOի>VDo覇D.9vx<&pX[ZYa wf+E`G* 1 `(#-[bYq ghS1X|Z= vag]-,|0U;mmh:}^B szaMb/!ŲXc?ENJ2Ju:{#EóF㞛z5˰Y=b;V@;׹c/9F7wxQW_ xX>`KA[`PZ/ Pةl9v^Kv2Yx-kzרۧ8@!`S7yR5I_(9FyQ}ImVxQt6_}/R[[1n/ɫc#uVdCE"w Kv,[9dc+Rl%l+|eXJ=IhTA+;6ie>MmW8%S]Bh)W&AbZ8QfNm|4Tۜcd<t '%U% J@˳{ JyLcy<7i(3{p5s :pzл13Y6rѻP'xi籚Zގy.d!M |Q>bL<'!ƐH;VN kF0;;ifyz$k6? d96 f:GS NXN@HqN`a K1pp/ |UVOޱ#8YրpȬ޼ujkw~K!с~~B>7M|A TA<kKbDM@8M+}%Ox'Mֱ#k1<BἔO}ScŎ%UT;nTp d1XVq=Yc?bc% r̴kˈ w>㊩+LVEU ZVEč+nz|>3ha pܶ`$p/R c6f. sخ] u4~'yҰH+9fȈc&@Ptm,F e`sEoE\UUKnWUW{CL (`K+L^HkhD? JJxqo w V6cDm8&Lk8L$"u.1)D&w?My3媥5cYAMPњӬD!ꌼh& 6zM#㇆(zIsDw/h?b}swwҙgw+3LR âzϊZy;t-K&?iqWF1$T cO'b/8 JKw1O 7Eg+ 2sW1̱KS"^s<x$qǮwlkqc<=X_kEokɽVJp'm9qlcZC'Ȏ=l9}(;QSwc}[%8Θc[}cdWZLoy \w_#HfܱwF9r̕|Fݱ&[3y+" = CchCkI Z?P7 ".@tcU^hvL[l ;sLj9fx/J?RyXk+* 8.O&Sc}[%8? q1mn×S^6"*c[=ss+?%>}u{&&/o3ss054lQ`i&GW3 nsl(JqWlorix]׊LرsL?EӺ#PBұ-Re?-e[&3vLf sA^.|>R ulb@UcDccnhV |li -<0p1_k~X|H>Xc5m1 'c1YA6%Z<67I.osh_xӱ^C؎g6)o9f</  ࿙n(i >@y1xI4c[\`eY1CfԁiX|{L|1FSl d7Drnr`?Xcg[{ԹlK@ıI58[/ѱo5Ӥwc y,G@#c䀟}u#?s՚pc߭wZp,8Nlm-C̱Sc#Pц)t=6l p1VYoNLH&8FicЅpDBaY 8Nֱ~>;=|96k(+ L<-|~jޜ.:Fy`yO?m:gFZ\#pn( JfUm֛Ǯh:~ 33cSKY!ÏnjF/^?3xmpbߩS|m 3s}88)7*^!3⠨^H=gdoZ`2U DaQ0/V"۱Fc.5tc9րKe\fĈ!F5TPq c;)mrVؘtsc9ŵ*ReHc0$H:2sLbnݏXG'q c;Ǥg-%T~<|oho©dwwf$eoPnyZ 4 px&쟪kxPӎ-14AY݁a`s ˈ\WO_6XՕ+B9#aѱ)#FYwh#@U9w* .7VW_j39晧9)KH/Rn*g$da$!"8_ndC1Ք>.4*6_Xg;Vh FYC0pvcH:Fs\<(4ʍnC_o?sJ㏋f'xP!#8vsZ,: ƣ4M@)x٩7cdiǸǺqHO9Ih_ok&܌϶B* M?ڿx7%n~y(7#@y񷠥탗"I?(B54y(+)1z%-E"|w5YDMH^iJLq6BvKd6%rA42+bK",+VJXXK.(_hVAAIӻ?BUһ4M/o}93Gxm8_3ԏ}Es8c('޿g|(_.yDqP*[|^e]ZTvuD?a {.!Y }O0z5;& 9O&~I6g(J%cnsW9SO|W c.ܗ2q23;Q7cޫ9wuM\*9AuVѓJƢ ۄOzܙ _p CRDd>(Ƙn,WOKuEãlQ]aUFdK-gu dJy9cGOj}lX3lhDr7F"2}O 2=W?c:]7"\d;?WŠQ/sʨ;i5-T2:yə~9bnsA38CD;HӅ?WubIcT@,rYcXu )E  :9c[ݲ$ҟf,> a1%įO al0|eFd2z,2V3ՌM!bd!d0Wca&*21Ό )>B@ݟmq3"IyK݂}'PK%cr6zg)0v/w(Her Y] 2}* 1SL6 FKc63iaŠQd#1C}جAo!bLķ· {7r6o ݕORZ[X&x=t_FMk]pY\w>Uk937QwjCJ} !L @ W1g6k9[U`SXy  }Ij;]<.\jcBVcX,/../%/C [\li2XĬꫴF3:ј(Ȥ4[Vcbl&4UQ#Coe~P݄P+Ȁy*6&ֺC(b"Lf +n#i=&Yk=3Vb2c^%c^X]>q1|($O9c-3o"G1혩b,$+`'@? Fs$1+1KmAjRWC7ƇCAZ1fJt7k(1ΘZz'`dY@ AXOX1ژ61h7NUY#Fq2v 3!#V#f{.ĘJodvP!1(1SlJt7k(36v"_tNsI9[= Kc{Nib -¨0|࡙ xWfEƌ&Uga7N&~;\o06{;t1 l=5[c2t2IbIM]g1qelڼ@Vv<1AKT&^oMVcY v$=\l6Uc}2`A(b}Z/-(nֈQ@{ߥCc,_7o-G@z g~ˤ#rfz1,l Ʉ,dqH6(Cl_c9\f0VDf2f I}Ы1GOS7؅3e=RfzTj.ڨ٭Tvjb62Q0JĘ9YY31Cs~ i`ulcQQZZoE*c7c˔*!b5~e&oMV6/Zf1+/ gAuƘM%c=d@@v51b^" sEֱ9sVp*SƆ$1f1s-9[rͯP c2XKrAӎwa-Q c0vBNFک(\p1ExŸ2wƯyTַ{ N|tO$ ZI&|~L> &AL 5(cscUc)͸o܋p%~kRR@ӧVXt VdbU_qVƘ=# =sɟ?5>4Rm3>Yzi'OÝO܆탗_>/_>>x!=ų'H~g8c_} aP#٣9۠ȹߚ뭔1 yS6Bc n\Oo|5Ol-p~p~.7W|$1F{d?&/+{. gL u^לm}oMVew:ts\8RM.'7amf}CI 8c_m}*@v茵*cd gEWf=oMϘnnɼs8=}pf,m*g%[RHgOynʌ-s]֒wœ#2:ƾg*g(RR 6㌕0<8cPr5NlpɐUXޤ2:fh2czTm%T`̖ʸT(7宮4ClA463cL?,|,1g̒ Y@ ybY@~,I2+e՛!Î1Ռs UKP!FJFRBT063c^ÎM`m XJڄ 66n6`7҉?$K8rc܋)3%7 H\z' B8cyԅ.@ G.AB"ƪ *teЩ3c:W|vpbÃˏaDREnb w{*bbvF،.bԕ([󚶃򌱒G嫩Kuh2[DJF1k<0uQ*{/o3 pr/ϸ!cG-2UJ7)@32ֳ"&S7B!b1M1܄Y>H/q%ހW~Inb w{*bbwb3k(al_3cQ4^r1ùfeCJ} !L @ >V?c $x#x;?m1={1f%>X"O'@f$-7 *#Y?ZъC:CbyIqjc,q6a аmcS8fG)ca ℏ%)iuQ}1*ŔVdLQ-J116Zc%LE9c*KoH0\q+<o쮽`m1={1?G 4d=F\x M[v\*[@WI1㤂hcE(d뱆0m˘W>!Z9/i6&XLf̫d+3bc1c@ rOG[$L2<|~;fk D1Ǐߏ20݇llc9+ƘJsƘ21LJ8ca}E)I&Cr126g *>xG>6OyEgy,:QjQooA/&Vm,XWq̳탤58왂zcX6VŜ9TW2|:c;Dn5Lke۩1bpDߎs2NK 䩋h@ɘ3_N&bTcm¼>=czzsuܬ穻b|Hgedv}5:k/ʉ19`"ssrQ2b|pQq3: ]Þb_S^i:}L/hCLɄ M#QI :c׌,xH$cX{{{br9#Ɣɳ"L$]M3TUC2UE*i LnU| S@5;wIQ$c_eL '/i/iicgwU0DTZM%seD|Zqx;' }K+<SOQh<6[ +|dz2UX-0`"r={|4W0213ٻ*:o0׊zoea…f?/S#f&" #?cVKgc Jd+U d&y`ǖԣ 3ƟeRbglұQ +gc"3OvJdZغD8o)L>̏$7g@Q1VĚIlׄ)ZfkŚb,:KT!ഄ>?QĘ\GsmԹt3c醅M1|!_Gm1F!F%so'鹟jU"$\ZpZI؟(NTĘ2uYQ߬LL$Nĭ/lϙ/Ħ1*>_kߴ/Q]~?&WEw~^|Y-cߍ*Ritz&;h PcL /c|L]2ns2goBX(UWn[OݲŸҞ1N.7Re{Ԥ#-j+:T]EOŸY 3v=w2=huŰ*`cOepՖe2EVH$c0F9 ۴pW[3ƆbCa+q1X21&0f6q^Q:nn1պɽUR%c߯?/>$=ߖ xZ!Qف~ޟIzSc{o3;;?oQ{'-;@w3:(mkh>| ڃG_cecX ت#yO#-FjEh80=rؽwYWYt!7WnKrEp>r0 j=yxM?cGaa0IRgy9k0ҽOgtwأ嘱{LG 7\Zsee =~tUuO~ZwFBۈ ;cb~TMK%,z&?øٜ&_b3IB'Jo s'>6 ecG+3BPOf{ɘwy+=`ݸ & N$xCgL79f,#؃G>ǜ3n  l91K2u& Z&tJB'JXJVļRm3f]M8/-Y("6aḌoVwz=R[M3K2ٸ &؆BvxMX71s}9XcAVzJg qexKl`/ EpC&5Q'};Ɯ6tlI} zU2uc}zB,r7F4p7X<r7eiĘ*$c""3b*)rXscMaչ7k"b"~ pZ`l8r7x- hkEWs4[scz]G-ZuNj`z |b{-aS ߉z˜څ"oV)1E@UTO =+oKU*!cu Ҡcj1eXYI2悱ݦAHƪP1w,"Vr1LlH*` eyϦ z83QXu363{,EV:` foĄke&g%ewZr[B=ڨIxd;h?g GƐD6&]Pc2` pfk'f:21y# &JgMÙ (Z,xdL2V` Yc(3;+m},} Lx@ymgvgPc4S;1q28+,ӒC5Qg&<6jq!2C& sE8Viɡ8-ڨIxdL2V }E4B1X+i$cW I$c N1XK2fکT$c*ɘ #XZLAUi5ܵTXL?6}>/2vQmLۈ&h7FΊ3C=*S"S?Mh3 QUiu`Ɵ~GSXsW6bjQKDdZm9xwVEჵ3e26pZ[r|LU{IG,ZF)rA^gڏ׋rcB7qkrg Tklj3k.8lEHMm~0qP-,ALAjbbT%يblԄcCkǥ3 Q ym?C_IIZZ+iv5_]ogwv~UXd-0z2~c0?*M1=1O93cc c3_uXiSS2,*R%c$5;hz4$12-ID#U>r(iQ|2"XfdlKF! A>i 2"ƘHFml&It?4@D0V%ϗԨ.:ewܭcn$SUkm@D0V%sdȭazS҇1`c@D0V[S̀7^۩{}cP%l)&7N 9}dvIs`JH,{jD{X ƮʞΏߖĭR2jR6waKNxad}[i3v>x/̮/Z)i05&ヱ#ch "S1r\z>6v_s8cnghe-@M8g3ngF\1S.8NX1k<\<)}є+36$m|hNO;JHi'D{XͰm[i$ c 1a7vfBB f!R:+R.^}<@D0Vq?+Iļ5~Vc^+>2%oc7R<>R.Q#ϷoЎO+#7Iϡ&f0)e>tCC018Ҧ[n8@Vspl1HO1x83[Ω)XԌn=655^H LlM w5ZKă'Uq+Hw6~;D<t|Qz !cbu.֛`LuXscB|Cz 2ƕcB`LH"Ƽ'yVWW2cQkk߭YO ޱvlZ]];{X/eY{'YNP0XJka_I%5qZOAiKZXjLbKG3b WT3LcӪVG0''Z4 tM!c\76ֵ:&;X;V:5Bƌ:]j4`h`ع9jVЌ_=, %8&ce YڗCA *O $:y +-Y: ^ߩ@xNx]_.Nk-hu{o[ b<[Ph.2kd6ug|6 Sy."d.VE:(gt bLُi1N2&׭0S~-;Z[b Phfvd*laiBA"PnL94\'R@-VBGaFxklj4:M1STod*3mYqa ,6%sOԽb?,rJj4CssY׿V1ucSսi1rYSЙ@Į6*1<Wb,U=i@uijCUbƦF#{cf:䍉mpCwaĭάeWtpϰeLW$$fpةJUUkw>s!,NK kN:M4CHUY)T>bƦḥĘw՛#ӻ|a qv&dʏo*OwPd^ è|c;JUUk`7YXTdB< {Guiy/SA*Ƹnlԍ('c>E HAm9 } ]oIT"RQ:ՠbF݈y C6J7"iGO' yi# 8N-nуBRYi*Kx Ą-&RR,b4:{Pz?G+3yb'E;tb>}f&qFR[*>K)'l&`L`3uxC$}y1=1ǎ $s}l'Q1!;1n)I;c [;`a T,U{MGKihgl,ޘ{Sݘ1Xm1c0c0{0c*ö"0h ۊ0c8c2`L`tc1-ö"iiiiiiii`̔hØI3nj-~X&ece٥Dʀ)>Ih`J%]M}U1}c_EطEFseX$7Ҽ,Řrc~O1}E˯`, w:6$RAB{nWR*,jG/1dJHc |#:fCQr4۔ +f #q L [D y^ḱ;[Vr[6 ccelX*RuG#Se M6>?yyy[UzfضEc Xk8ot;K[1V4^e D 0EU6vN7憱ĖKy1z9(I5cv,$h(ڐmhC8n,U ܵ\1pzѻ8cQڙƆ'DqbCzG"M]%zռqY[H*Ȏ4jvl䘱OjڍFO+p4c3tf"*+;"+ hIz W"QW?jcUIV*{'&>hA,.|7:y+Iet^@?{1O2#!~0 6CH` !m1 6CH` !m+|Z|KۡYR722cOf_ Ɛ1,0d۹Y9R#` rck2>Ojى1d*.LmwpόQ›{x,d͜"hN}şס1TsU2tpXl,NDa,̬Ɣ{diCWnlsv-ko|3ylοvce_@tq:+Nj,!ë`ZG>_:Y1DZoS(?YX)=ICW,3[`0>fl0:0 1ǽOj`Cc0 /?c"{l,V'UǞ2Jddo|e+>cO ƢĐcpqEd*0dkϟ?5Dṣ{O   c|\cC&ffq!'߿KDi<ڞ2 ֲB4bCWf,,~ 7X ]m G.hHRpb _/6Wl5wwbOXb!hY j'lжsrkcYnݺe5"ؠdؓikc'EZ`̬l[wDn}1 c iiJ&cLc'(et/W?21WfL^J9SOsrlzxCcG.1;cSӰRcv3Ʀ3*WGC5_^Edf)L=?;gq 18KH1ɿejשּׁlo;܌|6LjresyG!GQbuͮzYBӌro.}iel]MFEMYrj K3?Kǚ;; ifrԔ..jM;4I>yT]Sy62}΃cp,Ew칏Ǘ Q[tPvJo%Q*i^YڇzB>eRpT>[T;'G#0e0:&$p,5&;&$pl*ʱ(WrHiv}u yKn=w<ҝ#28v[K8Mql~ ;=ܕ<|X*lrGIK] v;~k"c+[z|XBĮX}?1EXDv;Ǫ~ LCuc,#cLk &)2FKTycirL^933v1!c.bE+ Y84!Ta]uO1+fܯ.28,08.28,08.28,08.28,08.28,08.hE± Evu] q+cǎ=Bc8]W$+ gc"cc"^Y`p]dXǘEcύ 88I~1Vͬ9x1Ӈc"BmP؋1ǼNW>u;.<Uyژc΁bǒe k/fƘcΓ]} 2OTFU3Eϯ_*쓞G.KcýjeR߱}b݅c'cC1X=Zp=0AVwkX*1,R c'cB{4ok h)ÙG~Ni%w̃1cA?]r5l88ul#*qYrwc옒8yv^1ydu̵WdBtǚG/7:̣7pc5*t=Wuԙ5;nͯsERg8,co/sůcΫ{e_ϠKi+;9p,L{EǘEǘEǘEǘEǘEǘE:C`d^DU>z'yAP'8RǖkQ]^1`la> p,1vrl9 z+yp絍#Ԧ!Q;$ =hC}(|Э,,#:,Q8" of7+Ww{Czx;1˱oMpΑɱPCn̗mY78F)̚`B_Z)-ʚ`BMrLĴc0-F EJj8Szب)}o++Zxtr+s3zW*GQJj7ѢwISmبv>uL .ߗFce9Kh7 +(t[ #.WTHةr }b;ƯrlF9V}^8j4ǂT涊ڕ,/VZ*UFE"newݟWOSlǢ، *UGǝՎ?/I%EtW?E8,]1U׭8Rɱ1 v^}9vlF/Hc/KsBd@ίqxY wꝋQby0.xJ]&ǂ|;r,8+Ďh!ǂ??>) Z++ ~Ͽ_&[ËyE1-Kw5Ŏ#IJ]&H"C`XD86} }x#k{+ͱCW@O W,ݩh;NͺD`Xhhय़%~dAbuiȱ.g}"s|ϒr%%KwŎSqnO+>، fFÎCqt( 'x A)plru.R188[cncp 188v[Y5ˏӺL9`ݛr&z]u FS8_1ugt*SN>;6/P[+k<z; T\p -p 1p -p 1pK# {pV5p 8r&8i2-C8G^xԺZo4\kIH1 R!8ұ,n > %ŚM:1g~lwx];i.Pfuu9SջzfLJIĨ443RPN礓L<4xtq_][zxvýbQecaΒx|yƹ~kifpolt`nTG{VEkUϷbSϴw`ShUݲl`񭭭6NYئ'O9i.]̸nGv磳fp]uc2؈lR)GR>};tP BزZ)@r<9ۖi,! sop;`n_nϺgβPb^u$߆]CV,tRNS@fIDATxmlSW'4%$ .jc%MZS9FZfK;CD* ve<8Ԧ6\J(*0,bRjVʇJVZs[f:?_<9^?6 @`G09*(AG Fk-gI+Mim{rܱY$ |M*spW{Ɏ6$U҈S}Yhs}҇> kLźhEqnyUPZcV+vjh^;^1+s4f{x_˨H;ݪ<>˿7$FS`c$"=?xy3g cWc f$Ģ,X75{E6kn;{wFS5GcYőHKmߝT-2|%؍LXR LY5v6zڣ8"1"y1zF';IF8$ hLoǚ4ۚf[9-;iυB/nnVnE [1(  X#,aWQA[z"r zЌ<'cրqn:@7#>.05#g&M}()!Mtai^;X^bvdm(Im6PkCga۲MTU斅[oY|o-ò`p*rֶ Mcuru*CIZ\*G1 ߱^G|cYbғ|5qi *8.[|;ZDXuU5=.@u%uRM5R]]]IO'51xxzx_ xG_ߋ Cp|u}W>wzbxEU'MW 9 b[h'نګX/;  tXХ`/魹t+b+Ȫ ]=Xx T*ZeU&&i̬Cl6..0Y{m 890XeF\>I<4?O\9Kj I Ђjދհ T:9JrVE4fiAe Wfs+b\}ЎQH龮O U i!`y^(Nx٠) Zˋvyai\:BYY{9+ Mcc>TzpA m\9g;*IG@A>|/tU,=k_ *]ZO0h Ã, ˃SIH(yRJ0hl*/ p8]9BW4S"ӟt8hЏxT$MbxP'˃w(]Y Vcד׃ x~{hلkg}}-K'ׯ& i> &NѹU,9kX08v2 %1h N>i  O+yRJ045qc 0Y;,RO8(|%7TٞK4IMSoxtn3I>*Yr5'qOĠ)P4p|Ÿ(?yO{z"%cYW_ Cت"XV-CwAؚUk豆k,ZC_&i"ֿ=rz;k[Pp+ʳ]#:,:fb2*QX o+ey-]kaY#Xh@ ƶ Jil@ ƶB-T t iΨD9Vzo8McO Jil@ g j'_k<C_&i?I?bVngqUum9&of=iX&1<#wW SǺߏԗad1_ӌw)Ok*D&xH<[7g.#G gqa bKG^VaNֵpBlḘYϵ-([Y.m[] ] Bifm5,T$^;Z,u Zq: Mcr2r?p~5k6*t6=^XXx6Vngzzd2=X?Roݚ~!6oA6ZkX&1xbx!O(4]耂U-G֏EԿPFcؠJ0)2I9?ǗۂƫFF_E]g}O~k◚c( yNeMxQ^'AP%%"!x6MyƸ+[8"3%Q31!fSbxN XmNgw]Fř"Сy U:SCCli1kj^UHp:1eA٬NS7Bˮ8K4%vcvvف%1'jU3D@p9эpwhlE"w9t3"k^ƒP{ 5VBP<9ML" N{|osɒ;&6{V6jl@"U24hNbMo4p\w6~kYK$~?1sQ(w3315ūW^6xn^G^@۵mfqS4֎4杞2FA7f М0&Svԕ}Iz)q10֝ۛo\ ۽emŭxD66 jx"ofvi|LQ!`!ݝI&c]7F_'Jmt>/9dpas-L\oVߐ'k,l' b׷_}; b_.z-}0hL-͛7oR JnL&3 %)@PcM6E_Rj\^c׳S 4˽B]d8ǃ'Eܔ &[ x뗷ils͛74t&$&0Fc||]dnb M-ܻ#@t{HB7w&&8Wc6p@< $&XE׬g1/eh̡~#h}4~ޑyO6t=X7Mzɠ Euز ˛Yg_n}R308T53=5M:g?$`M5 iZf }pLGie%Gr5vFrn}!D{LTYCJ!`pU`cTgIɣ%X1`BeuU YtCED4"iYGD7LNk1MS*9[[/vrՎ9c5@jئ3㏓3cZܴ(7oȦ=!bSM<4[ijzpdࣩg(g[mzyq,qXA2{R޻)^&CIf\_n*‚؂aYaYD%:&:w=|L9w$mm_ T\2h mthnZ\40x3^.C8hHh Nuɧ\1v݇e0 ))l|%z{'NN{G758qVX# :n9v$h|U!ŒX]Z^l"{bi L0xilҡAYM&dwNc}8v?ݟ5?87ָG%^X.Lx[OM`qhMj%%GLbn_spGOZ/|yG܁y\̖,/?N۴imfilt^^Bc:1c{FVXKbZܭ s^Q7$9mcq1+5LÙ)wϏ\^sXŇ˯ K}kb"||Ĉխ{څ!Ƃ,q]PP}]&&&nu ٙSg] 'k5tk=^kZZ%:XXmc;1Ą]|#jҹ.OS-/1pk>=40?Rp؟S.ܜtv;HTw#.7RVrk˭q18w8}Ը5ԔlƷp\w|:܇}wPnE%z3eNHbžp,N zw?S">  ±8qcDc,}A3N]s %QDaK^NBM#'$N Fq(C"2\7r3YbԱ̮8k#fƉ̗Wd~/Ho ò$òD%:[>plf\P{;j¼dVG'N$;'NH e >?G>bmbqE7?GqǢX۟XܣcMO,Qܱ&'(Xtk{w,=;nbmbqB8fwG;ͪڌGM-gd:1񏢀B-uOW F5:4#q̋Osޏm5F)uyQ5yi/ bSgΫaWTq/Wvr]$3sLP,R#bFt~(*-Uc̱:|oQa. ~ .ta뇈(W-\:86t~yZVeѹ$44)1q |:'0/-wKϯűTй+W aO. z9B~2oˇ3s/3r%TjUǸbG_W,:\CgYowA XcR jpЂ5R3c2G@ѩ1%ZZ+ɻ~9[HgY7w;/WFKUt:{}eiڥkKx#D/6%>a`mPbiNDDE=wTڧj{}Je;ݟ83(7Bڲ3CgP2\K*jb(y9Eգsnt?٪R):*u{(+~Ҟ=e={ *bd+OP ƗQ;96ʱfX$ `4X3U9{= 7ܣJ<+J8= ~[<.2n! T JG HF_8't\TS[Ӓ[ׂ]qZho*h mPl*SA)<zjt-nok饽usI47*K:\T?MOt>=eԭ=,"o FԊ+fWnX;1ٛ--d.Iө_V1Ĝ"aQ_pyNpAsVķGbL`P)0Y2UP1jy{}Hct͎c˗3VLuϜ_cxskѳ{=B'fٹc2hF'LFEPuO]]Os%<;+JCQG%R}d8@_1)#X r,RUTrh1U[y"y{DD+IPNC#_Z(;c/*L Ý 1bWfB&ɵʮ=#ZWK.c4ec뱋c&eދ~UH]c:l%qc]i!X3!{Kkk./Fw߆XF=X  W`vC8vW:(WUK1e(CAL{tJ1X|3Ch...x+kޞ3-Hw}i_4lxףۋCgLVL<_8_9~~ퟏׯvL(@Sq!M'l{0Šۅ0X1w1hV: r側4pϥJQx,7ͤdEiJC!1pj\LAckV6ʱl;Q}CJvvg&)Ȇ|@> ,f%B#=7=+m Kzıl]"\ )ݚ0Uads;=b|aU0l|g':lȬfXc?r+v%Vi47MZc  2Wp8{V8$A5rPTj03lıOt0PLbql,xB4B< oAj$+w%7! Z#4=;%vXřgkq ;]L+[ϢEƎV$!l'1 n+r$cy*u$0t̚f2"WڑԷՁ !-w[ TAO!fZY*R$<;,a<5qL5{"zx9*cT䈑ȱr4DXEa=aY0-,)GM9^mqV% nK2i I4ibܱ1;IU4hIV@P6kuP$`:I^:祲9+(iLwd!4+g@ Q%)4URhĴc֜}1Oi4'фwb'^32KvJ؟w x&_jJd tDh s)yV#jhyIs4ѢQHC 2%ywˈ6c cq_j0:`qAx6yhS(_#<ʶ-ql o#ıDut,g8 ,$Q-W#+HZc//okc?{gD.HF2)&d;UVHn S \kQjVw! ,PAPĈ q:NDŏKt⇭ӝNNBI8t}h?}tzi:ƺ`w\)ǐZ[.<љy'zge)CА}^*nw_{^mT8VE1XcvF ]̾j;fO-]^ɓ'EcЀ ĢQml6kMᘢ=ȱرTy--H4S AHu?^ۤJ%P70c*W f׊f]Fe6 I 0r:qE77z!UQrnvX [ϡڔ6kr$UVt;={Yb~"֗f{Jbe0B@ˆG9X3 G3txskok0b1ݑXMx[[aEP!/ިȱjc͂L)(aktjRh< єxkXmiS)TgԣyíϬP`/dj_".J"xYm|^DM50#z6py*n>kݪ r(sKc9ر4۱M 04F>٘?ɸ?TAJ*W $'zX)syo(f. DuL)-һې6(} ;18ZǘH;FK\;vP8J;c%<M1]F4q8,3 2Q\xžh~mJV+6رP>\W$].c V9 ԗx𢧤2J{>xMU8JVV1yǤE# uVYb=Y0)WfXT{=;(Rҋ[T~ة5 Z2IIތ S~\:; yrw].JCa(Xǎat:26]6#;6Vؾ8V\y:+hd4TNvALl4{3`Hr<8} ^.“M4*l+ּ3gK-3:PpTD,cC˱P,rQ±/%}b_+lOa8ŐʮTaJvJԝ8vb=jnfcJM掁0ǓU%9΢  ⱡl*y'diDzX~F^ trQ>J͚pe?p9FQpl쭁}DN/iaӖsPhvBc2yO*C+~:X#lytwk%Kw-OBso(1(Y zO~Oq{rq&ٜxh 4I 1fP9CjƱ|$L!hn>VS)/3Db%,P|l͘yiX+tl7sv0*+5a`ك1cˇ͏Ru}BԹ5򏊑UIljY%@gیx]exӻ2{O&;aߴޱXc@}vc(W6hl'>sűgKndKg8.ul\xsq݋{SN'4#U4'u"c*+ ?¬/x;mcrd(@(A璩J5 dr-lU7AFe9*U28d1G:):sXKK1OZOxIVl38{Ǣ͚3Q\QKi2d֯thmݱdR3 Aڤ ʬގ1u,T`o\ :PCCx?TSV+L"-wѼ- _XĔ'5W黢ikS1cݜ$x4fmY3<٢snfbuub}{_q ˸G9* $3EөQ[-XYvŽ2Fc]ǎXbnOx: lNݽ9{`ý@==rp0cZXHD[ۭHF8vի[;xˊO\7fo%Z jM-v!ڀױ^ z=yP0Ol7= \߂-Ɵ<*\=`ӓ;A\v\@|ʎ#VV_][XYY>yǦ/ { nO| (Sqo}/nO(y|\=NvKSR/Ioc 'Ym"q>`4vxBN("KH ;6bja0oNI±m_1O|:үI ԱB\.o:&3Q X 9ihð?Bܟ~wKv c~|sg#akŸ]%b|n4w8)L@儗Dˑi&/B' b~plg@503 l7ǖI.a&;w@O'k=5[ˆHx2U(8r4@E4 qbNjEs,!̰=2dvKe+t/+"Erٵ K'aQ(D&|>4 #M Ɏ60Z;̌ơc'p1Bv1i?[Ő/sQ_/w4}ƥڌFY #' Մ]kvDʈc@6mc89|^1ó'3zȔ1wNac8zwQ'Ɍ瑲c[8sV'!p|'X>_sc;l3|8l{ߎc_ןlpXS=短jmݾ6.obb0uC}nGǞWk=oǞX7vlVܱl?ԧxܯ>p܇Y/2'>yH\U+PXc|ѿiҐԸ氟Ĺsc$:Zps]'1cC}y/KVi"{;zcP &6L9 CAE췧10ct5Xcd7L踏J'ާ<5B\E?6tl8 ۯԄZZe|n]I5=A3PرT5TL1ȻIiy'\O6xlkHH!Q x;;+tisnZ=&ϫ7Ӳňc@cpa#Ǥ?iR/}%%c7J}F6>>Duҳ R0K0C.N8=S]vLX sJHO:c*ypJNj *Rfa^W687#Ӈ!nXZ b .c'Hr&ϣk.%M~@tu/+1d\tIqK(=y#hbSPi2yE2'7cS28&q ۳A\1$~|<]4\1-ɴcpZ w :nR`tx[!nFoPx\]p킠?2nF ec#X2eɍdP1H\i8&{ͣ -01n!C b0cq +O1Vlxf,OqLGBnn_9&|:9ok+4l6E{ a=uW&e>cC9J"IK$1v/qe!ڽ?6f44[i b ı+#CӒmѨu0r03+BG" PT+qn%l& 㶍@ϋu9"cSDڈmWf5*ˠ b}IJ±2eˍL%K##nჷDěz1Nc6DrLL1p`ʍDIDZDƥӟs56MUod&v 7t:揄`?01y?w&l`̤]sG).H8ű !zX)c2PpqT,3i5(&~ec"ɺxixya5y\&R]{TDo}ccrb hZðה{gfŽh4t+/:`b-Fc,s&#ZgZAΫ#--|cNgDRvx&/7XgE sLe\H<3^/I]JDŽ?{ĵ6i,@RBy)VΝĄw: R3Ȥq.ʝi F-F|RL70P(wAhRgcd{v,$dO=yݦko1l1Vz<3ۃvn6crmAy_Fmg!bfq{)abO ut 96)^4 hTMfe'0iHg0Ћ iS1 &5ΏL_ҋXFcc{I>)\96b6h=0[6*&L31Pf0Fi\!g7~yD䰣aFyp(P1E<\j-l3^rߜ7B 0L\CM C`~,._q;A4ȣm;\Vc^SfT0 ACI/)cPޱM$8)1iَvhOUчn~mguzvb:?ϝ}mQ^9%k XJRw9R͇JU$c^QNŕcroc[>尻.Pv:h[}zWg`r5P]m/i.WW[1,JLM vhàPVRҴSo 3moLG@J\9C1jcM*^N!iB LTn9*,BX9?ws7kr$ӾTMӱB%!XX0ef+{_瘅7;>xkA7BkN,g "6bBcJde> 1ZpQ8nM/s|;ߏߓ 9)K_2Ǯֆ[W9ތ<5hMR+^p]oXJ1OY/ /Yh<ށDnux3ۻ{HwK?5;.R c]PŮuXN΃ǃƱGEy3pH9; ߾~YKݫ#38`oy3uu'kRA{TuXNKO*cYK8V Z//\: k.,•" " >@fc<1H_?u?> C&嘮PT鰎WYM ;->zh]\:jЀ+L=O;T;6jw0α{|ftGk'yrlu^(ctt:X*i7^EjE"0>/\xk.vрN^r X)}q"m䫎xǥڱם^| s4g>6>;|_#}ocӯ^_73B;+JұJvs,ħ!2-$DRбQ!IvOr@HI)w_Pw\Σ]Kejj9R!>'gSz)ʦ (Wvc!%C5~UMu;q$?'vLx>n9v_b(ד`l @1Aع v X1~te+#1eۤϏ+Y1cf3u & [۱McV>:ulVc@5S"O,k#$t~@ 9vf3i{>JA1NY4:ݽ-491^/yJrٚu Ʊϊpl\bH9QNǹ~?p}=ș| mS}">±~.-8jsX:p^"PyfUc!H+u_8\9;6r6%3(R 9v<-Y|wk(u"Ik޷7~`zW<y0+$Wb6hv c5)ts7]|lJ9zfkGxT9sh&=<<sT!;=iœF1R2u,ٜoOئ}©D-pI8Tn6L8s-%|Ge0NB%l>-~mt-mu-g* }!x"AجuIrpRЯݑ$|q(ŒuQAI`7 >12j#KֱFcŲER2cdkQ}~ -ؖss,Tc ;rə#8Fے1Oֱ*>esHϣ\dcK_'͙#a^EJt53A3bulg%gNFW,/RN-3A3bю+O$9sdX1)oH[=($ [:&c̑ciփ6҈U6$Xeh# 41PL $ʙ#-|9Y8[I4^ ]tL ǖ$!8o[1Hz~>H6-G\?|ZJ1)T|Qd~PcZPRAx-1yk4n:rQ9)PS(kҔq` nmp`fz「:IdrH,$^|hDpt~ M9B1n7w7oI;Fc:S\˜>z6cKlIH&1q+DN[|>fgr]xpĉ ; vPa )vz3U!̈BJJxk=v-P-{ :v6ܪiLA{mR mݾ"!2M,8KAZ17ŨţUˤ{ msgNZ̀J0ε1ۀ'T;-!VQGSrfrtlwwDf{tCm'#lb.ۙĉ ǜUjuQ aX쾢ac*׭R!!v|@3Z\(,2;ڗFPhKıє1H#c0=fFsv}"{X`oK7_l<ы=TtY-sjպ{Zjv25)dEÌڔ6wG4UMD5~= i8!H8'o 9JOM[I徢7|2ғ1[i=JLm7 է1udN-s c'Ö=?.g:kwǚ@#Pȏ\N}WQț7ݻ&V4cሶ։X(Mu4v G"~9R窨cbltcLlr'ؐ#sZ;@=GA-sͤID,L.ӿ$wxpC0&Ƽ>L5ӧ s^+YinvWWw E F;&5/-طOwx˳+\#uL.9+c?HhZk$zFcX2/Dl[;4<!m  zh> szENK#XKǸt>FczQ"4;&l{c.KcQz D{d.IT8^g>r؇p@iηx+g6ĪcRp!a h cy qLSB>}8T-Soec\&`CH ^p: cXvn%%6mp pRZoqz经l/+&p?܎ӱaLs+☮ҋoIxPwr\D+c8chvr [kL!ǐ^`_2+,Z1?1iϱ'ObA)q{%gαO18iU‚4rO ҏA:9hCtAs\5܄c$2 `uEu:[F14ɩRZ}"n!tEc}u H^V1ɺrlq^)$Qho6yui/ϖ|\WGc*y}2c!d;ֱqǩسgc_\2:X( ݈ñ?w{ء 9&۱H^zw*~}y&}6z1&{aXꎎ ccǰ8v yXcrx0gYz zn长jMZǮn_[7㘿c|@sx;cyd<2;K-nâ~:du~~mr;U1/c6@2;v;\Ǫ>y_-}Ezܒޭ~M/c_Z]wc1y1@(W>`11n a I ˆ1szࡐcrh9,:*=]- Q1!T4t"&&@/\B?emհ9v Ǥ$<rLc(;VufڨLd4]֯c2c˨d2oR7J81&܋n D[|:FfW~܌#caccq`zs1;󰫂Sc= CC =Bt%cat`76r=c2;tqa),p֯WW_Y[cc\ $j0z+VlTWC^s@_UG?p&f&G1r(v XNJEs5@:cNޯ W"d*tꪈ0dqL[# &(Fǰ:;1%cu9l^Ѯ~H:I 7@nV_YY/fAnr^Q/C~qb?\83x`sh$X3t]a<6Uo4Xy]ɘsuVPLŕQi X=b',ƽN5gq9 cmQklK Ǭf@oΑ۱:<cH@ax=g튩l{tlzpt2yG.hMq~c}bƽcqM<|^!qQa nc0F+ܱ7v-MM/񝲐N$Y6o I;l|>ap,2!!R{sp0R̿.I\DGD Di(9Ȉ9LN\`_Y0@QkXAq}f.rL'sK8jW#6yGs!\ȱ@F1Plk2wn$~䢱I8'"1\wB2"YImnrrLu?20^wƽc;~ L/@/Di>umv p'[N 5%ɹp׎,MOc$<O .ݝhksF,)6Y BwGOw jѱY B!N ; M!&ݟ1'wL\ҍc o6XZj~~jxѱ+ B {p5x%.X'4HlǤ_<)ߗ==_sLr{:4_(7EPm'|c} V@ 3\1gWG԰ 6({26+:k eH[|>bQ$Ke8m# ]^n ^mN$!vJ83}wN)X+.ў]8}(>h}9Ҏ?@ pY{wG/TED}GCr_T'4&^K,a2~Fkfޅ"PDiwLhDEVǘmZ6`a$*.\b!mD&= {7lwB apQ-1HLonlĻ>8)fE8OpN̯%#ɢ4$2vij2y?ЎZЍ?@BQאPڙ[.Eаq)Ƕ?ܒ%߻a7!|EWؚ:o%l6o^qʾMn*8PȥoH9"w;2BhItEұ} ;0qy:!|EWO""ϝ;ױ0v3ccA1'o%á![R}BMOm}kZo 78&IdNN6J6ǒ0i88AȠ Z&CUUu*p֍x2 gnF({s ][Nh<9zo!@)7M 9Yqt}+[7koZ(VTV%jsl+YpF9Dn-Z$6Ljsj[[*u));QTT쮢Ӻes%"E NPۭ:mJ@ؤf8!ĮZ%ȗKo" ՒB IH԰IEREA Z!hQHDVp9gx~x I<_Qxd_>%i,s8$ukD3d@6X jT#Rܘ 1gfrpzvjnfy1kc_}Zb:yh&)ү1wf h꣙wqfgoܜ[::vkcGӐDM3}4&2X5d_C_ΈӨPG[Jrp^3|49L12iom|Ʈ+\m7z t?QAPP?22,^Rh~u?կ e1f1Xɷ#4{)(DpjigN_Υb{pi6h1.xU ]]N@0׽k'mD&6(81ut FmIJZc6URbbl0c<$^t=7JZ((R XY?g3& CgVJ~]}j]y[RcvKoʫrgסPW,v%!v) \ b[J!Z{ۈ2Xn[TrnAxί`7e}o$<}[R~?̘ XHScb>Dkm0CAjm I112dY1|~˸gV{L!bTnnxc3uF$'gy2c p t$ }11Pd`G1-jfbA!IĀٌ!b!dCLYV]۾T(R !c=PN@{ȉ{iY0VT0;]`V 8 0#梂N'D7(31nm:mE1Bh*h"C&#>Ɗmŀ7^y[bl*u_*} X7&2 I(CZ.( )̡p'aYU&1ƄX"UcL@c1#t>S棥R-wĘkiyl;U(&}hcLR,8LޮڱMoFIA.8a{+bo}RA:6PKr\b,cs"c >PE^2Rm0ʦ*:AB]9 w Ͻoq_~[cU#P!,jXFP{>8Ev ?Øt|Lت*o*o1> Jޞ{k]^Lc**ؽAcKr\b^3cAHd„.LXMY)W:?\1LCcd*sg#Z./e1G +cBt +] c $d1@WFAܔs2#rq ]VLo-Z#2 qbvmE gb€aLj+g#Z./o4**.. J[cj8h.i}߷7E(X^^@Xc{93rqXgLԷG;-T mw|$Bslc_2ͶXcYo1:mVjK cj|kzo- ރ~S ' / u1VX 7[қ2J 1vё\-wPAKNe$eJ, B 褩er$$ ņP(1Ee$2(3VMdj7P>*(:40f#yc<ҺɌ=|+ Awʍ%f15X-'-66h2#=Əؽtc_^ySc6Ȃs@d Nz5ؖOƢRTђCvX|yn -dxÂ,i}y6rng&}?b,tI~i ժO3LƜw^c .u1 ޛ&Wd"b #;cFKj _- 5b,[O {Ǝib%268 rM3ʦ[Xh 'adNL'S,iN8lt-WO c:fX'=9R23s}#ggB uX?v}Q O,-V cf0v]c-3v =/^JNcFkR-.H , \ Pms1)S VKe`̜[,՞xtVccC7uI0SG7u=%d 1ŘFƖ7"L<dx&2\)[2Ȫ_Jgc }T 2Ƙ% A|EIcͥ<bL1SX@,1{$'ij_C]cbxXl1f1i%g2X1&iRcDf4Y冱70fޞ9o`_ 0Q'D;;ګvc]]ro{SB;ub/1DcXe9csX}J* Knl,gbYM4S'^b _E;m o7j^ٮM?3>N?_a'(0oWee<6%j6/YNKDD$JbTVTjBT"iITɲm*<"6 4UET <ЭP+H̝93㙌q|U<㙌Egpԛ{4Vc1K>ҬJc͒%c~0E|Wd7pKg\9Yޜ|{~} fm1Y"dRӎKcMf疼+xD2HbJx 30yI2XH* bKrK%v yN4ȵ/aZo LpY!0#R0,&:%YajƗ'O|+2!=_r!=aT1K]|R _{+cڗ ΰ ceA[, @nN1X:c#LB '<\R]~م[w0w#1Bś7/d&T': kǗǮڗ ΰ c]es,BB]l'+%Ƙ3f2nAX͞׉ZI)2Fo\m/.}Ec_C1ԤdI˥DSq$'MQc+}NHdg_*<)c]er&cq t ʺRcu f2LeB$`,u; )EX%{Gv7I6Th&9iՈ_/^o^q+rKg0eٲ Ry I83 ՃevXm['Ʋ^Qm{tₜcT5c&WKr$'MQ|[9H1'\RKח`vDz d)0V+X22P6Ĥ,N1m#f(1yl2)Q%9jBa9M>b, IWdȤTƸHC K/ĘoWKAAd2Ym1W"J1_˘1sk15lCMr$L*TJ4Q4jDmTܼ [dk||&!e@F^kk'58@꒲ܷ@6 X*drY+%_1}6cT @vi+ Ƽ?_2v}X?H64HQB@F5I2_Ȇ\uñO"c1$2&}'tkx>`:'xV sc<5I?9BP{o59Oë91zXCڻL9t>0?Aa!lcl06glXVzYv\dHbfev=`0fl>rJϤ;{WXvicXXaMe,`8c53Ưg:rv=ɘ/C_*'iףc,nINPDJRm)B*+-SzB v3F}5wϻ/''ؗJ>C0tNs4FD NUfg/]0L.>8]ї\74)yCQNPZ`,2b,Ri1 W5e%2Ɯ% c5ov&WM%c^c/+y[4^˘d J1mlDk.߭R2:cэy+l>16G{bBXX1+i^GͼHme4=DI1@_"d>Ey w0p@Gb:"ЎY%Մh4Jz˚٫~RKtq(sŷcdd'(##z*vݐ*ihT$Θ^໒ڥmZQCEĉӽWU#=ȝ _OVE!JdlIwq-"e-mB MR)zEQ' L/YlȁBT/pK#j(Y3F5MM(Ç/L< cS8{r1Tc& Kz 7Se"f6K1aX q'<1X*U LƇ[ gYO4ŀ,aFg]$ MgQ 7E^W&_&a)m&jCI!jc3 \ƌc1GOac@󊦌1i )a^Z'a6Po,q# Mˌn^}%o&d,8EՆz^BX8SkV;\xM%_K"&nE/1?õmZlr`f ey0P6S'tWiuRRgpgic2MW$KyELd,6^BS_c)Ur[u:cC47 Lu#J&c.tj}ybюP }6VLy66jf( -8 t` i^?XO?WFgp2g?u0+HZcpŁ eBJ<*Q1[ߋ:=&i% Ye,ğ1}˜D`Oqg?Tof%V'`X@ӏvWECzycY!+Qi6k[ vEBaIٚ!4;Wa R.o\1hr|7[ҋ=2:=M8Kˀ@FkPZ%*W G:c%qaNnp 툀˘h]􉮝5閼!pP찎24 A͜G(dͺh5x1hQ2gT%R"B4tĚePS}:6YyIDKylEhњ!L@)s#u4w.M+jUt_(cY!3KwщJ+"DqCcmߠC[WE!Q^^;vw<' ټ"(Z;P,zi+).cѪn!;UrزxΎj}1> :4"6NSXz-}RR+1>gYrKy]4jļci\n$(hdSe&Հb 82lƆFm^fn|`Ʉ1F7&VmRK3iSe&Հc 82lZl :fgWM#OLHv0&rԚY x̤Pb,\Ɯ͘3a<1k#j˜uSkiu4%Se&ՀV} Turgiףc<1T$1 SWV&11̤P&03?Nc䉩|0Ue%1fXiOT[˘>Nc䉩gj¨K 3$SML-ApeyI]ϺWJKrsgi׳>ɕyy[ T_|q\ŋƥ2jXus{O!~M.|Vξڬ4$\X4cM@GhMFKzbRIKnoC c-mc=aXC;Owx磏iqn_N-0.pƞ<Ǿ@~@jpaјnQg)3-X‚ d(zdJb#W cm'k>yR\6Ts_ȸTP>GG^hj)L5M̢[۸inyJiS4Ʀ̴c/@L=4ƦdJb#0!cm[C~Kcu#/ÝYPkMGqZ߽W6+{g=2FK3:NXbѓ }X1{\85֨4JO~U֞p~ivǼ5ìKg|9rK欇ؔldrA2FOX?qy 9[&DyZjw;K]ep!VlcSfђńu &IX+ˆJ6'dk;ӳ__Q.ܮTy]|c&֥fN0ׂ(diJ?7_=LIj,Pc&k&5AOB j,Ә2nظ8*Rʂ%2#GƢlj,揌qleT`\p!?2zĥbsrKER_Cq>:7+?@䒼g`uqzwr63'0.0*/3.߸TPèhgK76HD=C}jk\KSg͸TP ׸TF #(v>hWc 5d&cƥJƥ2j@'6HDPcƥ?ݙ׬ j@ '6HDPc9.ճv * j@ '6HDPcRe]K7.QjL>A 2{jYqQXfy,h揌Ƣlj,揌Ƣlj,揌Ƣlj,揌Ƣlj,揌Ƣlj,揌Ƣlj,揌ƢlѨi A h "8_>+"hPc"5 bA!XPc"5 bA!XPc"&BD ڲ2,9L AoCÍ||_N$SFk'jljSAE&)!sh(IKQg~Gcdp:kN[D:Aklv=qnj JРιlAȕjf tv7ҖVVHJ/,<4wd]5AGOci̮TY p?b04FK v.g$t#d+WO=xb*becVi3W*aIvL{]H઱@ de N7wY p?b04ƥ >FWuH1OQ\*٭vs'ӰΒ2䫤4xk,P %4f1?f5ƥ~Dn.O=- ĮKvSa6@bYz A{ |V NS` V@o ucc&VURRKXw۹}84ƥ 1zmGކknW.Kfӓv 3ӳkk'CcH*Ƹ94ڈσP -:U,n|*NK7Vj:5t'7 Ŋv2_kQ 7*ƸXg#:?瀘R Ro584وouDhLBٵ״O )kRl$'{ټ x`zu?cu1yEby`ZE5*[c11mƴa cӆ1aL01mX& 0"91i0ߊØ6cØ6a c1i91i0 cØ6a c01i0 cØ6a c01i0 cØ6a c01i0 cØ6a c01iޖaٌU0o,0k4V&ٴopi~sOW KӠVt1 a^.ͭ/6i6i6i6iØcM&\ c1˜ca̹0Xs.9Ɯ cD0F cD0F cD0F cD0F cD0F cDږFQhn9[k2 u|rxdF~Wkt{|M9@jdnL{^1x|4;}oTȉ ay]]kcflS6D+ywG5/_λo`j],1|4H:5:W-{Ɔl؂$VlyvLnm2pVOJv^UeUg[mznlK56d1acic+QƴmXk-c[U<7 c+r0֚d,KG=WpwQ?ɥ_=/iVkͲcwF/mkqGqq<p >>0( +RC-mah1lhaIAA_$5Kߏ=sg'9M.=ͱWc|_et7ϕȽAWw۽>YbN{E81c4<DzyLL汻84]w~Ӱ+?l,vݯ5K+n*#fkמ882$ǜ/ZQsqE9ZUGԮԽhyܶW3ʬq!ddFwvwD0'*ۅBtձ\E .uahKݒY_?bcYcVm]Q{qeeu;<+*܋ڛٔj߮DETajA>[?bcYcm;acBiKZ0Vq:tRlJ^ăD}WOG$q!0,I۱m'v;_nS񡴠~rR:Wl=74G$q^pcc/8itAm.;%o3w건8ڤgJ^vS=Zpo_ꦢ,ҡ{̈vLH;M xFIu}u yҾ#c8T]َ-e8p,$^ϛv+icNN'#X18#vlI ֊q#288VATܝw7׎EB~,u$R"q}c XK1!p,%IRvſ}d2??mL(I^I6 :Kp%0_X^c 1 1 1 ,m˖Hc%p]dp :fPYؽ8:SDŽ߱I^8Ɓak:ñc"խ9+ 8\cc*CYs;SXlX@$Tq c,JM– b*Z{ ,HXM%Ǯ}ºt31y1x(cYr쪰nǽ;9fP>9/M1պp(1~\EǘEǘEǘEǘEǘEϱD8.YE~I+}cvWRp,\1\]dX`cccEyY`p]di:&X蘀c,cMZusLa&Kp)Us̴-d=V^}:2Ii7 gki'ϱi2ñ12UDr8f&)62X#j;uǬnt-8{9V>WOR&XW'd9Fp=8&OByi˾5 8&DcL֮cdtu k H6Zjٜ:v'8m9cT l9qLy8ƁcKyw5j1Cy+ c8U4mW@ǚGUO1K`̓ 3aYWt.a_ڽ 瘹T|tݵ{_Q^ip,]fݯ/>[= KpO0P'Y`<-Ƣx FDZ8T]َùbb0'1Xc9#cq_{qRRjХַ@-(5t`C {!,AȒBM]NJ^׫m5\}?̛'c 8e7P2Cv 1ñU2CfX8e Ȉcs{tpcc",/VR8ՙ$1+erbqbu'#Ū 'x<nCиuZѮf~A^-z'9=&'ns}sVyO5 \]ȭvtXv±~u;4po ɗ+Y<}ݶuĺk#ͺݗ1 C؂ JB|K7!;n\%;NC~VJlj+TIYޱN]G`=T-hൂ BY E~WPVtqyu̒b'[JU"n֥wv }b8vv[>m [JD<~aI!_˝_V,#)g1VF 7TOclñޥ[>~YnoŽVKpsӹs<5{[Cn;⊙t 7Mq.c>'*c>O$_=ϭ j±AsOHW%EJLVЩhPѺ8>DZ̎%ÎMHQ쿭C9}Ts>K]cvcp 18f8]-[-Oo`ZP9g֎6+?),'S4>1uql?uyGݰƜOe򏖽 ŽRƳR:s^Qc[1 .p 1 .p 1{cwEl%h扳ޟf12֮uib-.bBp <*cYep⇆4^k4s cg wLwx];Vyv6tVOs=!>fn>J;L  fnjMMWkdkʺkW goYIKPkOaaWL㕝ܞǡk.?x>퟿{xt*Y-Ҹf7i蹳W;෵g2 uijoo.,dNmmWWj+(=vɲMZlsq a4u繺z\z#}?42fnh+]ē#ҶWvV^y?Eݙj$6߹[SٹףkyY`j{lܮC/p] %^Ъ*,{Re69C 7s计Vvx3#4q :넾\]FyH{'q75_;~Vԙ5 _DQ/{Z"s7njZ Oz`nIM.ZMZmuum}^]2amjlh.t )9=4PWB :]ݭ;tBUk嬨Jۮ[vesDݣhVgٝ;ZEhYnYQV/QsNϮ69W\ EBr \!t.lO/<^NhWWrhh INnmɐ5sB`>'+9%˥E T5CKų4K.5,x]z@뻻C]&wzǮz%((BwffMG.XXW jBzxؼ33B$5XBNMc1|,D]u=<@NN\.s[[۰`-a򑜳َmavضtO1~+݌݈=:B^/.?r`˖F;XQawX!-8# 9O gRg"R„FPfK]a.غcD![Kp:, &+dĞZgh˄7[GC=vDl]l, N)0SͶaUf"8[U2l…xЇB.33;HHoA.{Y-p5!6^o!T x ‚B`R-,ޣ`=C cYX`:|q63V0a^!yqslUeg +k!؍cpd$+ʕrIx d1o]͟VzJaRw$xS4* }j$ӿN;|}|腜)?tBHS;\~.Y{KkBrӱ\TV^"[U7}O^|/{a7o YO,̙3lnxx%WoXs5O_z{Մ/ΐոj>䮕'lq߯70|c`>aH6+RQpz- &䓁5\sXŐxXcrYwO/cЏ'O0zAK2k;/^Zxt…{qW%|9"a^o =1C˥/<s/@^: q`)J]7npp>&x7ùqޞnRH2+Džꢏ+EӉL9^{!8%(dNM\"Vkmk_`Éa 2z.mٌ0RXHuEM$P(~P(jBFcbuEy3B(P3ĂhmWQeDS*h Y(BLS]!/ZcS,NSU`XyVYA Qxh8SEyLf,hF[LɄu$CɢJN@ )dJ A)mm6z!'J A?ҒtEBS$%#ww{;aT/s)j!O @(i1"`)Gńto {8?>Ԭ9AF!#nGOFB-0İQy7PpFe{n>=<^Ȃ`yYWQ-SW*FH{;.;|s _?3Ŋ|}R(9ޏo Ƕv&m*H:$d.&mt# fc`Fgu!:1(r' 2]:yrB,YTw |>&XT(;s왬)T =O0a]SbsT>=jI,Y4W'AH9*$"ё'urt|ˑUO}ܼ0k3P|{EtxԅcN NMv CTb~ C#xˑj!ּ:Ū,D 8x!oI<|T3r4,RTk6s_ Rf-QVDSQك߼rG)_}V@X`ddˋ { 7Qś[Y$DdhHH|:[U}>͗Bb$볯vMeOk M9,*jʋE}A}_8ԡBE,RU%)rc2XS3mccn.ťY% q %!,D;az#Wf&OMVۂ)q6{gML{_u4LmM+Ψɟ /lWCcN[kђ, /x)'f>a?\_Lp^C CtdkP*>*Se _,8 T$*B% ]3DHh2ux9\T?ug͜}}6*2fN:}?.%XCFJu <[ߝ03XmMxCñ̇E%|aBY 8T "LfL򲒰$BS,CB-Uά~NI:+u[*45 Y\8llёĒ]%pQ qƜfw+|aZf>NvV4[ssTk ;oX;8*aC8l}xO /G0"Mᔫ*r)%_x| /$K!G'Ҵ Bqi&'bs]F[J>>뭠~|| 93(6z(9 nu{t! Z+e4CVfO(0S% (!h$dz2a>x' 욿(eX>xa^0)DhV ˋQ%ib eZE*LM_o.1(b2ӥBr*5)|bFGSeX42=`NaJabL"7yg0ii 1`IJceo؂a@Bv"DGm&ǫ& ![Jcsx?2'ԧ`nBsu1Nh2 - %]>"$ӨY—s4QQI9`r -da6:!I3! 0Dҫn2DH~Q V+@ֵ-W&u\[jj@伶а&j4% rRȁQpx3 ε]@;}έQZ[~Z/aBGEV +Gjء^iB SҊFo>5V?~- !rNVyF9Z2t!d2"L̏\U0"HHF*L$&C }sY>5!\\s9c C7Z-IQC --z5˚CrR;7ܣ-bCu߫m DΩҲYO4,YH?(3kG0*UP^{a|A1v?JH ni@/pC0x8 k!me^G*`/2m>]-hfNfI!T*  YE5@K JOێ߱\4"%.d1&;' ;}5o 'zt#lB xx//}VK+㞇!ƎtmBK}l`$wvLQ:u!A2~2~M I՟g(žA0L*joPTc Y\%)"8+ZCQNOZr /8o01maBFN 9`$DC{w%(#r K5:7r/I^Ci,"^ $BGxZ2˸otN0:c77(חñ0n㸊k ;tnl{k+Vo9m7n,3r86:̡o13"ij 6[oQJckZ ^fK3f6\/1\Y(˞}k%aRRS "v͝-d ˝gTȭoI!Q%YZZ%Riejcc~Iw )O}/Oz脸UEs[ȂwhuAHֳg"DK˾߷xBkyAz)䠴 f0{&,Dn(2g*,Ӈ^HJ&K|kQ IDBJz^(M NDYVB mFBgo!0:b{ XYe$@ĤI88i!˂87MAHE*,ZZK-`;uZei[I5d5֜XIɦ!e"sx}BIeJ3EmAZbif&_OnN]yCvlcPz犰 ]ef6ao@춡.ɓ=ʒCh7H,.3(bZW$bʴn 8 Xߕ o>߼}5p|v-s3};isr:qq"HSx"J\w╋Ţ:IeqI6"!XȦN \<统~E9lL^Pt˗R |*xG|Ѳqw;6ܿ]w }0Cɛz8gO! -( EC흷0=!hN7x@c$M~tn .kِײWyM--@ Re?Nby3:!7ud cW1Rk[@s`B 8mYsG(Y!B[Z꾨k˫nYł GTz 9JA!RoL>^h%Q7bNXH7Y =¡artB8/hzyoB$`w8BJG䀲NI+EI !ծ KN0v,2V^.PLԐ"ӓt=p?7Bj؉[A>Zh!5k* JJoΫWy{/B={ˎlW MUש&BS)0VB4 D;@Gb0w%$SWBf.3'82oody-X8D S'.Ç(Wa|  4MQJNybOM'wF`9djR$r{ O)5(јBŤfʌ"J<H 43~"M}il#>q `b6ST.Idr|Z3:^֤~L&-d[HRuPQmzpbM]c0Dyݏ0ivr#VņOKr/_ؼmB\a器0Ʊ,덿m D{"&Lچ*Id6O`{59.sv}$XAy:Ap-]:-w; yZC )ISXpV?~{,rt8$bn a)4RB(BO$U.-vGg8;THm5C YymH-L/IL,-6`5} [)nV!>(QT!Y}~`] xЍԔf[H1&[xG.T^4C\3;Y> J=:z 4,ȇKŴCk`#+>}$ĕj8n0;oEҵ -U#p;8CA)&'ƣJ#K"/<$Ӏа+ii&DW~^]z)|A2EqS\.f2tb(wԖ\d-%iJGG-,_U.`;1_FI :ڳ}Q&<;ŇF /ݴv g.!Q@`XM-.⟎HؖJlQSBϝ-ŅŘV')eN4qib*r2DU BW`IGB`#G>m^jq:U\?@8d-n=kB*!PЗ$*{fv !Kα@$X%)iLJYijE&c,~P_DEBB" J rnhǐkuTan=!Q$%2Q!$\uX_&R2JDSE"RbZT/T*@DQUNK XdRwz(5_;|,JO}x}rުU~&0oThBfw$Lb^4x`2V3*$;KښեQrLn!+7|*BwL[C,*X tUhB"#Ҁ|" _FqNQ]owsuT Γmz +>F84;m߳U 4lEF~6Y_rƫZ>!ITު5 ~vff)!T`ɳ $ }잭G 73{EB$!8@rh^ԅyvw+AڽD! POt>1!&'ʚ<-+믃#>  bǀcoz҄i Ш)_ơv1M79H!'٣!ID;Hr(mv޳׆&9 MxE !YߞiyHwaI].1|B\4 yTȨw}sXI+=LnG]ądEaf0~S?"nhx +T2M`U =*(obv@2d=; i܇\tݨiӀV7mCZH^z3vrݾy!· ང~~|h|TȋHuUAFFJm4&ЦUȐ>ԒSRʒҶ n0AW:L>{VCk JΛTL])BD|TBvO3c!'dΌyHd]In ǔ3:gpAJ<ErG AۀM$T1_h@50.5wOAeߘ: ze?],wi]gs6SGQVjz MQB$N@4P} D@  BVQ]1$K* VUkՕ:◴{fU7j?b~$T_syJG콟ggl _ u73-UAnRI,0m%5̀=YA-TN|ٷW~^ū+^K9"bYPUnZ&l ]E6ۿҦU6?Lr@B4RycC:Roz)+n~U<Z43@5;1QR%6/Pjtjy6ɾ.Գw?;Y׉EX]'M}Ny+K+W\P.\u ޹aNwJZ#梅|(kJC92|L=?$ei;Q3,e,<&67~|)pT}&7R* V| +L`jv$3eerH?<4#H?hYadY ow.0;+dAK ./󪪺n)؛ zeNK%6K$|#J@2@uꂣ|,'|'}?s{{L\j{lu|ߓ[ .ϕZg(Hh*dq潠; % PsPș} oFoB:~<.UHAf``C=a. ]l<(;O~7z造ktFT:搄bj\=f^rj\3@^x*%t;ވ_D i P* 5{]z~+ o7J D 5w!(yx+ S’ݻ2V@BT=H׼wrw`|=g){H57^Z HM>X+=Kϗ6[= zW9v _glk>u ue ̊'}_F mtǯCBwHyo< lx\r|; /'&lsPx8;s@ @# {"X0A x}sTo 7[_d \Mav5r9VUu}l+ ?[_R6ۻat[~ڂJ"{^+.Gֱߘ A(/G|ƺ|~gK~shBJ q լj܀h&9: (4n`(˔`dG v;3z /IaN+iD >+?W(-ZBQ^uu{r;r1*\g+J]z@͡{Y Ь tфl̏yaes`Xs Lj6-}V}pT?mc`RgY 7]7hK,5~t5PoyClnM! )Āv34&>SbS{~u kU,;9j; -)ƻHa) 6쵶a#6DBx:~WԀ#1)`ZVHhy=oGۉ?ΥW.qKS^4Ǎ 9`S6K˱pFH @4]]>G&iƴ܎iq' .0ؠ4<-f2JBcNL6& y:BۮuメWv{J>uȺv-r_[cWP@Vqq ˢpy⋼@WWo^ie<\ u5՜ "+spp%qmWnD[A;e +N/et TXa5pƖgKK.# x#eTsC~LqULm֛1L)!udžB8i5Bk}qA^$Kd5c|`*w/~3@]a#*6 P`@9Ba ^ ށòrLi0􇵽.?bPY񛊼L/`Ya"5@|`Wt9 nxwoRv?}ro@np4R76pM O#4 ۠فJf#tոV{38h\ a2S,s@ C=  q}f')li v} XH+CިyC%0gaK^ol yi(zz5 КPWfϔI~?P wo>Ͻn}{_V=џeSxX)̓V|Yk"9Ip7H1&@ mO@4o(!W^cS>)&_#o>3lش44apX̕ic/>@ M+s0`Y } v Fe[x򷛮>qr{g֩(͆Ȩqrx;8wWΟў^ ?=k=w@P(]zq'O(Ab+(;<{C+`,e'xj2[iaXK"8-&gP˰7yZǬC2[,HtBA[?e!`cZ{1,ሙ0%c\syGMYm# d͒)8ƚA:q !g&Q˜ހ:HళWy0"x@r^5<,j @ϐV;cXva\1̀HE:ǂcV*BY?xs Em2^ sz5(==R)˪ &0;clmVCހdFǦ]u{%j1v#_Ar ,Ju!^Jb|5?e$TwBtdN3XOF̻oPIJm 1?`Pqc9mKC" @ =l<5SByr~,.N 7lU>%vΎ*#\*[0~畕>vȠ𫪿]ɿg.hRH*JATf_kɏ?w I*̬X0qiEDij 0Y\(gjRK$[D\U^8q,i/jR3,UUmѪ^>/[_CWCAԭX Ր QrduډSH'6  0+lH*X*5ϩ'Ԑ}{ u>¡K ᨻOSzvb6Ժ6mw܆(~Qj ;}4s&@< 7giغVYXA& ҈4qPC(Hqs*B 9) M* shNm:7EЧ*^ZqdE k\r9&VW!b ^ĸ >ΏLL d2Oej#L{Xp(M'L:1,boJ X"|HI5t&t5 P'^(&M&h۳WuQ䀼Ν@(_={gp'7E8ȑW*u5pREe]=&%E5X T1^1kM@?p?XRZ復R{K>rQ-Lf}v4H&Ӌ%wO R}w|8np$jLK4ͱ4j㜥c_@ i/Ɗq0F-Ek,lAX)mĩqynPSxG0D'}u6=}|iғ ih5|釉>qQƇ[cYwDy"*`aP,jN*%ybRa0Ap.9h I-Z|pW㦅djHz>Gk%jzb-%⾥{U2jH|n.Vڡ\t:{y /+(*HE#g۞>h R4@i%a0AQHH!b'T80-3Dj1Xt 2E";r@1t\ "]1< rsU [?xMxzXIq|4j_|'~7Ld|ɅDN%[}*ˉ2h rC$iB phjxqFSma[pmPp.qJkJ1|qÈ #5 bWcuTpw.&j#NζHd)Ca1@7K}urzdt1MYp"Q[3DE̊.W)bjpمLMFT ۏO "{u*5Bp0yw djOe"Uéy$"&u)>/&L9612@2@6u$U:9ǫ4EEL;FiJ8&6m圆)bK<޾#*bxT*zɕ 84{&{| s V͞,Z$xs "l~FX>bQI)h1 2tDeIv~!]߷WtW}QPw'%޿9㐧yk{ }vb_ؘR~Cj'G ~\7HvzUjpvqf&֊MH&BU%[̤opRȵ@NI_b#0R[,AW=5[̤)1:n-ؗĤx@ O\ODof^"ȌjԧQcVeZSt*0S`:kJN%MR4{ILNO&Diz|K [AjrbmhM$C}B]H'&GiL:S8,i(w6 )*ʟ E7 r ( G|QR 1NX:5kO9ۍn,S ?%EOWT Rp(zJ}[{vMT_ā*ԪrxDWO⏒&)a\>FTdkΕlZz@|('gY43* /7'$7bJ쩑I[SKȣZq2a#IOV=y R9~[YԙjQ32Y9u) zl@k{dxP|a|ycJ"6$;dP [ekjY{;{$}_{zA^QoS(ڮ]Կ}IpvIe8uIY >\ ɨ*TCZf}ᦏQBހn.He5ȂĐpкSCXh@HرYv کRAJ˪NO ̧&Mnj$qIjDܒNFRd u řTD*!K{Ҭ5ˆ=feϐ,Y ).zcAY&3!xHfv ʠW4{9J{'j!ֻ$!,BaU2,?m}OzZl_t RݶsJIN˾R*XI)C]TKpg'SI|:.,da~4 ʣqހ'T}hNB5vn|:P&"[U%Ixu:lwww2mJr?Hs,gp@|Aiu]'$=UDeAb~r4e,E|i!22s'3ĝhH}@ Ӓ8bP(]KB٭d7T'M 3n2BRQK7U" =/K-Jz4ҕqHCErLu8veRΕˮưaU,.pv xҜ.C6IpX:~`5`xaP)7Af ^I(˔SH$2I?d׊b{Z 7$c6lU{m^mf{2O߃MLi6)¯͍{~ܯ a& P ă SiI@ j=Nul?Ɯ=~% kH^N+:pW - ^l9u aIGl:da%1IOX,^T/r/hru6K9ͅ2R\I[琲PJDHS~p|4Z 2>)_xFPJD7 k)& @&#qKVhjt%6 JE[+9sp@WW. #¥ZLuJX%tH%6縤B(۲_ ۺB W#4# û5lxdaM6* Mr6R2#GY>.uaGQL jpk5l j/0vG;G 8pauq{R/ve# %uaS6売uі-e}֍6e^7owvƕ Jԥhuu315zBћ{>|=ʧ\)ߨVjzgKM}#5ʣ 40@E`R5wH+R-p9@-vkR~) Ś0o)"|0G/jnvu+e7F?f@0g!I#bt^7yjȌF'64qO I>'~PZ`ǬֵEky)qj:wfX\[KYYiaeݚ}X)˺ N/ /,~?;kTCi~sr9MrL r XmCl:r,I=2_U2{2Rϐ3c@H \["VFi44FUm X QH)uĉHur6$]p$˰jt)ۯun)b,tCH%#D)VK 50DRduT։H,#"ItEb6y4(󔰜$L{ŴJ, I.\ĒG\Mu@ע@ Ō̌1hQ.g1]dfz4]eFMigBB8KIdSʽPvnVI ~,)BM¬# LIlf='܋ɩѩ :3̣iŠ6 9ogSNYuK PM~cOpDOT .q..9s,`RUHKF20%!"D;+:42|YH؝u!\hNЏ };q/eu>q.Lm0>!փtgBե%IL$M2a&1(:fDai,[|7 OV9HY}'hrFE;2UU+MVS5ݢ@I1tm7]y7ոy0yҨ,ݳi?$s$d<`|nEq8 ݯMSo\bKs(@sN'9ch7~8go7)BZڿ5y|)ءiDurv\. |@p]ь;pL|>g(|'&/V] jakĹJϻzWpYQU-Y,dwSt3lK?4Dtb(@D4+q!tT9CCx.wL;RWp+{!prz3kHC籴{tυHF, D}n  ~ӧO) +ض ^ɐ^Bfq](5D&Bu>S*=8!^ pwq(lA!!1鑱PVQHA!NJm4\oאHY<^ \*qB9#QZ,ʰѣ-4zd]@4q5YsA,\ȥX{)6Ggs^&}@,kz/cYC2<~c~p6* D}Fs(=j,Zmᛃ9+Eoop- 9 ˒.ͭDz FO3btequeŧQ) GZ֧}-Z>eD0E5[N&.\#\?Rkw0e*\w)%Љ$dХXym-l٭_CsȰ&Qj6Ai2@HQ9"P )R!fbů RX̃Ћ@h~+`b,K!_$ /2Jz赮k59X^uGm_5$뇽MC,YQe̞Vk ]!c /Hq e6/ljK(S0~*&hTb-!>!l+1"LEEUObP "mѨ!@4 Ѝ@$  dSj@Fy-Ey VEA\Vms8{oM&`y/̚53/kkf~c߁~cX{ 9Kvv֧C_ vEFh~0l4Y.b< uSlv>e]gڅǣgo}1 Ux>`U_{^}ꧯXm,s֗GHKGGGn7kzo??I ïL诿"tQ3NP0ŵ*5}ף vt*g C>vc)[/H52BUB~:Wîk_Bsxثڷ거^8xQLޯ=Cت?UKUt5[}:jVv6|Kǟa*ʮig2l B\"Wt.ֈVzd${營'2mk0ҥk^'@c8O+>*oճ̬nI2f;` o̪JlU{=>VUI=p[YeTjdʸ#"]?EB N@ꪮWsT/8m=Ԏe CQ*m+z; Q("kOԹ iZOSOiݩ www;0!fERA?O?/8YYT$ʲZ$],eFgean2wHGabCwtiZ2(\\)Kru!D.Nz:Z'_ ԬGȍ> fT$$7KM=zO7摈[Z|w-VwgƊ=67NN8GLȆ_16!-!d<6߲87~yam XX{=a(0_˗ 99Bl~T<^~slgWDK]mMCC*_]P _:NgUU5UmϪ{]tqvUՆ*|a+l 5W`5 D,߲ 'yW;\zg!Cٸ_356UjȺZU*,i;/_\T߷-ȫZ$YVеAT]{ˡƷHiˮ^QPqMMvMqzk}x̭фn .ʆфU³way9q΁N {_|yb HȺ_;7G$>l06dV4Mmֈ>VOSJz Te 77SPBC׏ ٵ7ez#s%dw^ȑIؓ ݇DX$`7mwh$M"$oaOQ6 X6, XO46˚h]ٺ 㺣>LL#O`"Mq mZ3^_g9dmZ\4ncxˊsNLwҖ)ZaڠcNoEAi篿H)- s0LK1.h,#bLߝd8yޥLA$I>CN`--m2N+7FQӫ^AC/`tY# xLȯHX^W Ӈ}66 I_^% y q''h83N˫Xs+WB'N Y-\qЖ CO o Mس{M牑ǫ)y2rڡ[96rZ֧3;=\aB6 ,]>Rc4Sr`|E}pUၳ j8/<S< 00fh=zWlsR{Rx^:6m넳C!w\\wcLJFBG1#6}G;옳_<;xy~ʕ?%2! ,o#=lxޓ-^O>㈏./B@oo$ d;Ii-Ľl; N ?[!5jZ; 3hQ$Y견ns[sv҄KB|9)#7! d2#l`9>,rM\ p89bGRNOIR$8( {^X*'ABv]نagfY5B7̜m 9<)H b:U'|19r'ϒrL8c1GLB>H6KQUsvVg%jPG Ks2\J2td)/B@N.@*U S=$f2$3a)79ifR'NA)nLBN3]z1:52K|e6 {''kVR-SJJKcy! 'X B?CY,N,F/O?an9ݱS|v{}὚qR D70[5fB?]z B Hk=Bq%xcF,kx̲9Vۚ}HRRX,?[HD37 %1ކvE0V3wa])} {2!=xmAg N4D!cbU$ʗ$$$%T#>JD뿑Aځll"bIRC'1>D>TݸA$4;$CIcw a+C x3:juP= b!W'#CC%dM]B &Ha0DXCdM,20~$ͪH-eٰg>$؉;1!־1#Xa;Y%\h9v _Wr.,Q\dzF9jx"N>h´hbwx[B8 4Ō-!U%AE7{b"LW(%!2GUN#*u;{K}תf̢RZ6,]\.((OJș 8pP ɨLX-}@}!%U<?]3 \E#FHY䄍sTYp%z!Hp!HTN*XnK6^:wRd>E㔐hdÁgrs@SJ~ukTBbGG_0MB@[_=fc3_bv[ YF5S9RQ ǦD,'VN(\+4gBBdI=x5UY J4U  ObMD'xK BT*AuwB*ou1t~ Snާ#ܮ)oGɓn'@4r9J[(ɐKr\#epu !quu>S 92fɤgoM&bN1X, e ?2FSOa՛["񵚠8Dؗg2OzE;:hOe"O"˩V9p sZdB^\qv@!uaB!fT*q>q\aGWZ[h^I'~D Ssqc&<)!)%H4CM&pjRb!'0!!p%4I1VYR1䑞8eFShˁfK#:%CA /gV%܌9}doW[b!JZLRX(ʴAJP),9D⋅q!sJ!欄HLCӜw+᷺SշR,1-%JRɟt$A(U$`R!cNn&f 2 nT*h@?˲a4OH М7zeANh_eńikXxU( <"0DY0s# VxAԜf(o4-Q@;ra ٍ\C=(Ѕj\>HԤJ+ojlNT!Ɗ G*+逓SO* ~ ٵSt)pZub&$ߺm;.jR~zEyQz{#:P.1 ,?=HHӧ=?Z{zǫKUYC JHҍB.]JwG%'&$*0*JH_ShUa(!MW"~g8MkAo%H[oTpRw BUMg!D@PPn|QNͭ==Z+F[+L7Pif, 2"Q!҈@&Fd9D e3r FD.cizi-n~:w i^fILG T+KE\6!Wr 婵ybR$E;E"!6XYVg5cTB;Cx(4em.c ,!"/&$ڜ:DA!\N!((PȯLYurdW!U1?3!_LMj&g<^c&Aȇw NTb NH-bY vzB~8-h#cJȃ3 ڛoqoۣKn@ ʯbQ JH.!z ^pO8L -U22R*U"2*xhb$Bų񫿌n`ƫJ**$^rRfr.q 0yEBr Ӄ+f9bI"G_$GBjVGwZa,Qi<bİGXwՒIlZ`kGgN, QYRG*sSj(C+/Tp%tsHJsr8y kq=Oŕ 1V&CJԌ -&"BQ YļZ(G"ӉɄ:\ 9p˙qFUI1VYR#zNϼ}SeZEljlNH.N;kAJE>eZQ6OƊdS 9a9O0mR`!3go 2#2 i~[0sSwj(I df?d*6u 4p4K/P Wd b9)OT}-*x1 / h7Cy\$6Vgr(x`*%%#DڦC$CN/-&~wtr^cX!SĞ۲ROt~B/?CPfAzm'|J29d=`=[~T 0)7hWy'+~{`qOCSIhLCTQ"NJT7/UNC,FO%At:QqZz0K<9Jןp>'GDʇ% ]6qκ|H E\t Gj@>UQQM9+d`5":Bܠ_sq˻.JYh.㦖frxyBPel.6`,7=ͺl}z9%G8zQ[sX6Hc|PR/  4YQe05H m7%pM%B*=)KWL㑶3kXP%.\rann4ef`.ksd =Tr@o S/^@AXP,O ; >\(h=!-Nhr;D}GeV8c>BNF_c(/,|ϩ_ oS?Mh 1r0{=gOȾ=_ DwnR#0 ٵq,C8}9gQ5ɦ ;Қp!K| ID/f1a߱/cҝe&[t5~b8Ϛ+>'yB!]]oMx= *.ݿgz;eo"9A%4F$uz0 r(?BP71=[QDg\Ĩ,$;^f33b,gT OrRj^q#aTmh(On:_pˍ9d j61B 9[0~q6 媵 W BjMijN.SK8 T8eSE0lQBz+L(D J}|PZX䨯7%Ũz1) =omɌI'!kC_%a(v$¤ 29\FZBm\mT# Ws lTz9s%%QG aM 6&!I:Z.%CAəC20{FaDpaB|(HV85Ӯ˚ i #!#@o x@MA/DƂ tH$]1wC_pvfSꁄD 9kck:M^£gl!j Hʻwa6}Ǯ!/*DI^W `nkͨ+PNc.H}y95T+Qn~3=]yImߔfP{JI_{x |Ϲwws!˰.ƍ=/0NCїfhS}獂3 ٍf1#:.|:#V>j$ܭK̉t""L:ۦ^<}\t89]f̔0Sm/&˵9_] ;iQFA̕R z om%)9JBnՏ3]!1Ӝ9YHl! <| Kg9IuFI{rPW|S4᝺}__c \U:E3TBBŸ+LH)A&-1K ХrP_OLBMjjLOkYXt^tkom/j!:nG&AM>k]DWs GA:܆: v1v㞳?]qIOY \k[N/$ 7QֹԛMJ-0pl3].bF2[/fM//}+ E'OEg L +q^-[nA`z6`ի.hf&va.]k^\Zn)y9ww)X/ޯdtXи4 [kli{Mb-[qR*8t7 HN}  0-<2*%bZk@?6yx`k =sF#ҕ[JLm)d0gg*^kpW@Kq^*@.]ڞ#=eJ4{0B% b[/TF@>[2z8AFe\vc׺@4K~XѓPz. u@H%m>;5oʶ!Bե`4ZЌѬ{9mu$'5-kfV{ij l?^MM Y!wnʺߝb&y%m+a~g *'7Toxh(˥#uVť 5d?ii>'h4 oLo_ ˩\wb" -K~H/ Ǎ~tsK krVv}z , ЛH:=d 힀l-)ٵ! ԟ^ҷT?~CKAY;=ZC5]9¸ 3u_ή5xOoH9 deM{Q`2lZў;vDž7.rbkeO>V߭wRNDVOɢi2d 8LȕCPC*o_˘~5L=2($ˈpx\kx' oc*rl'L ٻG y6Bw879y w @s,@8Z#+_=m|_ H{߿;298MmgOmHZ92S"y%,j{M6QÕ>H r8.ϯ=ɻp{X#NuE՗KN܏V^Ub8m?vHco_S0haz|}yb@^/<ۅyy;"M+-vArޙu8 D2@l'>i0%G_}} A]x'wvmWH ui֗ͭFφOV[2i3>{$v/@Ē?H:t@Hws ~L|,# g8 ߋ2: 蠁A!vP8Q .)D5L| h-PWD%j_,.C8MsW΀TPI?7U|Rq }.Ɍ gRP ";ny;B}gՀvNRi-Y ߣ3ҋ֊,U:xd-ohab^skؓұc=vgЛrm˺pXwW[ɀЁ3qd8Aԭݟp*Y>f^l6I? Dzt_vH-^C?y҂ܾW>RՊG"cY @]ݪ.4X,9N~3b  fWLkZҥ: =yeϩ!ȧJҎ`(gmf p˫ : E3ZqOL# rĸV^D9q {bfh0f҂PvqT2j vj^s9گ,%Kqȯku56 NXR{c]ݹDx5D@qzb]9qGnAq U8Y9[!>:a1Ֆ2'dT9zw 錪cK8b[>-ZL}(*//ڪ;Yw"DtzamZHƯ{+TJnPO! džޱK! Nkk 6X^;(:(%:u>c'{а" /ð #yBqFj#o%{YzY YK݇ ȥND~\Hv/GVCK L%xSMB 05'K~,ќR5ɎxLN%F9[i,9 @{.}+ş]^) 5NJ4;l@۴!=1S'dn'D6%UݰrQ0::Ѝk-hF v7gbdj8fPq>b{齝 "b(Ez6 L#IOK@5:z',k/"w -vIX6Ul$)F4,/?>rs :P,H<Dh:PS'ѩt;4Ji0PwfbtG1.JOcLJPN=OȎ"gpgR?kVEAڇflg)A*Fqog@4q> 9昛IJ)?OT 5SI(nn 袥P4J&"Bs;>v܉^[kIVhA#cM^c@n9Haw;hvFLVL["t[<'FhlJ4nD5a[b!XړB5$!1 27^@D QpYAP/hr1Sr2;ڣna= j@ ttA1&}6? "VcN/X*T+E"Uo,F I17? "#f 9 ?[BH· s;i(iH^Iɫ[$LTn!E uBrĐ1[FPC2P9%g!þ1 b(X-F ϖT9@2zyj(<}_HK (!wt&bȪU ߮ep,:n&bxc9b{Cm>P[ެ:mdPLn7:Tnu!H/"wChm?O 1,[3y|8ED KXeݪE ܆Z{ 2o핆i' 9>XibD2? m>j2Rxb@~ṗY +-D VF G s46tZٵVb1Qm0rm:0qȔ(=QQ'U1"gh#JKՉTt~n᫹5nEՖ"L1<:b_b5ln{DȱyP4"6d OM61\c${IƗ%"蟛JhjE*OvDEtl(xbwRB@Ҏ8_0 }K&}eeݓ;яB4E (D}Zuq Fy`Jg4B}V$bpO[8* 4fbP3gCGPQ-qj 7=R΄"ur1t\Vp$]ڰެY[^:+#Kg|f[8dE}$'^5I<$G@nv09rAČK"ЌB^_m4afo/[Kp3D\mFewcQTr [n S@G챕UD}$w0ᦨ!933^%uwvrL33jD:&w'K;'Љ# N;/-O5;'1?A4hk.DcPǮusB|Hhֶ)ȼr,:fTSЧUs$% 7Q4V"';, y܋/)܉;R"w$B V?^͍B\@Mch(mEVRJ*Zp^0 -zztδܯN=lHh nZ' $[o/H[q0 ڨNlR\zCi=ٵr\bnµJK7&VhnEW)tGr#1{7arNdȣVv*`aq+; ">gR+`JAb]܋w x |M<[DHTW ]2Qџ噀HpJv'¦0N50ĉX+120'$Jcp+]Aϋx4 'B߿Hw: 2辔TziXxZI=. Tl@ZPcۋEuOW j2RNo]o)E p<~fj"b'ƴ?1HҙfVuhfŪnp ?U#pDcno^B9E_.tMVetXC&܇|2םtw;R! ttUSclB5сD~@fw޹VͫUUUx7{koS{J25_9Ts~>y|_ xΦݐ0ܢ u!Jhv yR>K,|P,5_=TuH_=/R*LǸA5ߑw>_@JS!55VrkR@vhRvF0@X4ѝ)(L9 tuZ+w,exuzYq RRmQ* *6!EK^,9O! K(kFH'_ < 7ɫvdPdZ Lec\cQm9VUѲ-*%~DL&iB@F:9uA4E@!ZsL(@d8V#I V'rHi`a4 KWqY2)炎/*-{ qxzkHh~x ѯ< gԍG5T/JG=8QUh.f|ba/  Ph& xWGUO+>Xh54O:l@^>YQW¬͵x/~V$Q(tZӢ)}  AWQ/e >}~Kj,ȵ@0 ^󈆳q +Q5.d_0&|`W0!5B!rfo=u~3x0oG@G=7 b*,a;HN ݹl~(Y^B_ ar,c+bb\ai2)ú ͪ(&;oh sa{B 2ozLdźG@r UBj0+U<=]"8: [8gUj]UuF^,Nu$@t 8K5G2*\M @y[,-L SY{B 6:ZFq,*ĸw$@\t4 445APvU%,q ̭tp{RY[P,Wj%ph{@jhȆGp< ,08\HC[RCcҎHnu@ H j .)/.7)]ƒ}dbG|b9mEC .2H OH.F ye :bqҿ>f.dO-^>SRA2v#TFC!Ϩ{-pa-Ɠ@LC9'[pOUly& 1NH ޤY@II8B'ky%v]ԛI,aL*xĝ M$rbrd7<;Ms'k-%9uB |/H24<.N`9YA$$Q, rsD۔a-( -ݢ`31HznN=RN$j46" M0N3uf$^#N3z$w.voY np{ 텝wǦeb?zұghnMg7𡝃wY>:' *+)we$tU; d$؇I7cwHecɱ!jmSqwZ1)*?ޤQzڛ!dqӵ r$읕VWD֕$nKo7(aݽ>k|Q0i"MI<ͬNҧe<4 >Pu2S)M{S{ ɲNHU*<4=yeW nwZC>M-N]oғd$>1yZ15hpNŊ 9 jq8a[o 1rr^͵XCLcJhf>c<=r}Do7_6i2+K:=fKOl83@eoob1X΀(y| X;ЪŒ4ӋWr@.,3)fHfXH0~$=6*Musr*JjB6M%l^l6n@{~fZkm۱2p3%D<y^2}|R'\T+[y+Da2~vĖ΄_2*Hc$|_xP_LI Q C- - Dkii9S4 |j'7Ebۆo X @X@~X K]QX(Z9<_e`%W1rw>nY/"ifr{`ZGzÛģ)lh&G^+Íoyq;P\zŬ0n zI筄 zV4z'%JDS0 _2 4DfҮnF=[-qj /< A4\_pg^ QGs!ûMi.kx.P4 ܑB =&Ƥ6H$a&"uM͍ 'рAKʺD\x$HIt0L%tؗrB7&}`]a5- b &̺o)u F .+3zR0`cInC 0z\OOI2`fc;?a _/z"k1%Tȟu[HbL uCT33F)-<%ʿ "0d8R+|a-F@%2K"%buSH73kqu4W- - ͨ&@NTl2+zuj?Tp,vT]J Ov*;&#1ЉdEt:IaЈIyadJǼSܻ/WO@OEN'yO 6\i!9#AjrgҒ 6Gŕ99@z~nJQbMߩ04Ajzқ5^zʷ?}t_ d[>Xp{v`Xs:)L@` P6;n0# 3iZ@FY =[$ 6@T$<8mԐegy)sW MD-䤑1$>ÁEI$T-iP,Ɛ} ?DKD̮3崻@_0e|fMB-`!~s@&tIŞ5hj@zK'b9z>4@7o ]e5eiGwewۤ^8€?,=P4" +; ZÎJ$6`> D5BQ.)khŢK{rIpm(-h]g9;qCpa\=s˔rԒN炆36Μ2C^ ѣqL, '^p+ZQ4s"Y3`b5e"1^Ƚ>A : i崑Xj@j&3jLQpU䘲ya=OT@td! }!`}~"<ؓtIpiR)cnU ~͇[DR(j3n<S@:-fj)U[˵fҷn~o`|w~3iآgu|~(Jrm:;)(qWWٌf>\ қ'2SZm>uH*ܷ_H$T+]SJb<_l`=G_OuKuklxXmz/fs\v5C#G%= C-oDaG8D$ PA9tF i.YYx`s%21z-3)b@I&4# [bK]B :72=mʓtYѹߒ5NדHԢ 8-~4\mo %uOuǏ DӆNKձV~.@,L`t!#!QR0Ϡx>)fg$,J%_5 ]UΖz73鍂(: _db8|O S7{M D) խl>;@F j}xTUM $mM 7f調i!]!u/{1j@ԗm2R?D9qeݻܱ#ݺ,]0wd}NG-dъ?9v4 6 <5rhP#zF5PSz5\&~ xC^燎/ǁ(>^}w; |{yTZ4saɔ9ca"6,#euK}UU*JeyPL>UL%*Uᙈ>E_{ #߈SWhQbEe Dnm `ӆB^vn, .y%m\%i_k\"PlVvwWif7%[4[hT#MuMyf;i+,K..4UkB!Jj|p ǥ%d 2Vһo-d).ݶ/)p UvǙȳJڪabH^QX]rYnU@>[#Kb2&Cɮm"ˌ&="f"%z=&%'I4wXq:UṬ^(ڕqx[L]yZ%tCN- M&&ҿ/v+IENDB`awf-extended-3.2.0/images/thumbs/gtk2-rtl.png000066400000000000000000000642401507226270000210210ustar00rootroot00000000000000PNG  IHDR`PLTEC82eG:\D9~TA¶ɯȽ̚dL`J·[Hƺ¸^IӜeM˿yUG\H]IXCbKŻʿcLǸøǽŻwŹǼʼͿʾú܅YFٽ̾ɺüǿWE̡ƶĴƿʫļ乲|TB`J;̿ڷ䨛Žuh֡~s؍j[`QuQ@Ń}w|³ȗk_ܚtczuq˿eXԫÿЗ~֚㲑iNĿaXUdȏpFMQ洅pnjfa{DžhkYFKa?r0mC:6I\򕚯`仅ͯ؎RҬo+GJzt-tRNS\\ZeQIDATx{Pi3!$!A\DQ LńK $ܑ 4m#׆AQ/mZVM:;ӳ3];S{={KUK'y>6}~w㝷ZOi$""}{*?6oƾxLͰ k6KZEu;' 7"=?PgOo.a{^&&Q7_ T`B 9ho^n^ uS^{Oظ^^S͍nx쓱ӟUsSCHpX)lؠ̛͚a^ c^^cG7 ƼƦFMMMeLMUM=haǦ5׭= >--`u/k8'#F//1U0캗ԣG57/N=7osQuTU-{:rdYHөGw9#SWg/lL7 ,n5um?q5^> {n5f_gsFc0IT<?Oݯ_2<1 S#">H}W=;;ecmsʐƱUw2J4s5;ɪ}S}%##AS%5ZeVLqq n齢;-YE7@ ~횚=|OyOه/eS#}O'Ju f|fV78u(x3ASAAE(XT43VZԧ(Jƌ 76Bǧ1ȧiQUHGЩTfTtߧ1v? Rn"F&.] cBl̈P6~[4ak[h @0,&XUT DH[xcҢty:>Mlrm&M\&ꪰc/i9uWӏW-^KA)Q!E5rKM*,Uz(W6y(y!_Nn"+?Q \Nn \nbSL<ˇRN.*nz\d)J~>RpEz}> jꔹz(F)"MXsnPAlM7p'?!SZ~v6Tk*;C&}nB_^P{W7#k|RѤoJlRZ&ŤBmU(daI2&AU)ڂI}%_T* ʫ(KUPS=Y2~-ZnimC@?ԡ, 'z#FTʛz-¾JjVoY<[ky mZ2_/kE|EeKdmM\$r)iEүkB!ՆPo-O +j rB46@x-51Z\ F*J34JJ.G @xj’Lixڊr}X&'Q6Z^S,=69)ʦʘڦPMuEsLЈʷV("Z_P! 76MT(+]+]"܊uMXh\ }Zok G6ɋUrmu@,$mfiɫ䙥/T|F%OTdbVTSF Q̥퉗7VIYL Vod!.o# z+0D&$'/ۖaIl#8"+`87҇F.ÛBÇlzRy\*h+|7K#ݧm o,Vg"[⣒ LYaūWKJʨǣ?g!]U() r3$Hyj(뚟Phptqrn%.^ě.{Iٙ%οc(1~srM> "'sTϞI(9( >pt?؅8HAUS8 D,(?g8*):\󨷆Q<;wn}H@@U;wNDK1С?>B@X'w^BW,2~h1%rҒ'L#"W  ~-N1Q7Wy՞gE! 8꽢ʳ4UQ@v^# lOBsCECa7)⏶Ebپj=/P\:a4ciE^\xLy/R$dr`He0g[%s".L*09 3qqd"-~#E ;C îV-߇v%DVIhv[me-Mh,rqf5{Z)\{ۉCoFzÀ~ =ڹ@՗HQ:z5@$qtsȯ-!EF3@j@`E؃{-X9a zzMy# ^ԝdA~̅vf@l<Ŀ?$rڵOCd gg"CTsߔNW?+-WDNLfgJ* t(t r\Yqzɭ=ӽ_BF22%Jp4{52|Lpfh$4'/?97;d7/KKT|?rJ)& k|M7bwOI7 _^r-uݕ;rEYoQ73~ޞU٭偤;!A&rnNAkdTCV k8ݑ+55Sr +ClF"xXJ`G+2L~Z^?'O_ߕNUl6:sï)9=@yV7=+NjX~\ } N;tX''N3%@` 7̺~F@|,'seN,~ZVvvER_}_[]DGRG[/5H"#WUꞺ,,dug{3-ZotVDӺ7t8-z._),hJ6K",?WJ~IlzC Z dJ(k K˅[{5 )!J `@Hن * kS5^bwʹ2BL`CE`  |$zR,ˎ盕0qnMn>zc/u45Ңs*3wޢ}dhҲ@|ϤĉsZ_`~q,-gAȐ۶ g  ڌm)rpE1F@ĝ^e!)")3)F@`>.wbGr2:5E;++%eKgC\ NkcO< X@%[쁐$@ggDB ]F;p$7=Ȓ" YRd29+A8VV xʊ]%9QG6$mYMɳr{Ҡh:vkJ%=R峍od`.CcGE!N0Fb|C E⍁XȀh7^HfI}{Q_Ԓ.YD"Q}: F¢&Y#:,CA0nVhj^@ //~#y+|i ;|?|\=-$=S%qFKgL~@X/\a ]rWOe729?) 0bRyW,8@N}.`0ZMZ@}=lQj< Yȑ.N lze&@NP `"D9q~repݬV]"y;vDx!K.̷^AvH0! ! .u&}1L"Ó* ׉0/Rapw ǯTqQ4@G+UWs qty;l]=rZ&J~nX&uoj]d4utq]Brt10b@ޡ Bi-VOh G9౐p:*@˴X#4ITqVOf@ROi!\P\8mD]$FVu YH5x!*j /,@0hb]Ab/ "k 3 CMMQ XHwRLC{8BFvøȮ/\Ytv}}UBL/jי Ct^mH$4&66hb1'1!d2qWLvg^0 34&!He)>YƷ#w7GAR7rOp[v, >[ű,V@p5myτEPَH;A1AyS*@H,S7F?#x5qY * 5kA$r6ior|OcUP0Z?裭;bA{L2Fb kac4\魋ϒ.IcHm] *?AQEIz%bháC""|ts0Q^ .4Wa!;9>(NK݄Ҧ' v<%ZL[T[86=[wn5ݪRw*kb+\*Jqzz| ZZ,$ nzlWGԣIH+}ݰkCW_DL@Mg'%jDR~YéU<&^-}C7;\}Q&B.q E.1J7[%Cm{1j&luMlyfZ+/SJ(momaFCn:9(RNϯ]n렝LsrԶ@E}((4XMޛlɪ8twN։Cch닳 4d{׻ƒalqp}%μO*g_\kRZؔ{k4ᎮBm-S///TX)xF0/xg7ɡ5 99DW.IJvڼ%~DKܽRŝ>) N6.GGMHm!zjqt!%.zKD!{ tଢ଼+rsE*o _ 毕ML3ғYnCGEDf{{@2xdQY#B:2BH!PZbΡ˒uN}[vai ']aed6J[V!Px쏠Ϧ8I$lD$dI8/pHq2Uo/2_o,+\ʬ| 2q7򪇾ehoe涬ov坭٬uwfX} K,,zH2!bKl"ZH\%ߑHʤ$сHycW_N"wRꤳe*d0ѱ#=/ dM2Yd$`-f!HOI"J 89X*or?' h}C T jifY󜭩)3I TNhx=e/z%'%T5f gksE\\YzvO^io aߤp2bWPEͩ?x+ԣH% x/_BNU\HnJizt!:[SFavx d F(tHIaK\Hs~-,^eŅꮁ U{@k]Gە*d!vxfgn"# lX|7a$a-d~7}p2|4{<30iQ?aQ6S""ZEɡ{t ?JĀBً.5n ^+}Z^<N2h'Yd}o';1 G Y=cz|zuIf5ֶUe;^!bj㞌h8ƾ)|HKY)Ki/w*ھlϲ?Yjqɋ̗3{ BK'Y]:.44m7ܼO&,dO{A1[l~1D%̍]lN62T+q̀4(tg{jQ~)N<aZf*Xj99H3^) Xp;]L& 7j=:`![5. Vǫ!%[ ^p9_ܢ1,;A I PL-gds,nuvT];bJZ׃&SC'Co(ij52^4M2 A6k3ɡM[YYv-`8نmht%-Cqum -n޹Guc:WHVWSW#^Z]FA!FF*H^``!$TX6ұuc]ǎ_y4̝1iǽk>z 2v9:g {I?}~π$!$#6 dij)}NVmDPK)3{DD@r!8)Hr `4 Œo7*9,(kZj}?AOYP%4" @Zbґt"ړHO}1?&hpI2@ MkkijadS7şvoPL=~Tq@v]/۶Q'g~Y'1 :Y<Z~UQ|& %xR0 D0z4@0I PNFi[2 3 *m1(?@= -N${ @\y P]:S_1_9!;VDTq4ڊ̋CCF*D&! gSX 6_mHɊ@zb 2"FRyv'>ބJ=:h623ϫ\)~N$_8Ɂ 6 [4ѯ}u(kO*SW6.bK}=9H߅_7J〔חK'_9y:9>v=C-%7C1u(΅I1Y'z]H?@Όφ513"Α h#e;\E߻/R!9S_؎IINxy,Q]j4 Ql@\dP%/&Cqnkz[‰5|´P _*Ƽ[k荄(I @ڎ_JX8\콸%ʁu"UxAM 1z=VU ۬3XMC1?ݢzJ8ye:o/^) 7}%|O ;e/\4x| !|B~F^  V̓m^5K@Hm/7]@WՀ ?d!m"`IpR:1:%k0vD^P˰=H^)Ҧ@ )V*U~ oٿ?9=Xzd" [?> D Wscx썪d?Pz't8* ΫWrl=$\HdDA0Ä+_jپA:L| šaq.] p HɁ@GT o#j@G|PQ ImQ%X,y< 31R[ )uAuw<ڞH *@ O*3WgO ɋ^3A5M@_^+tNXiW gNRح_oO' V%ӹn,"^T64ޢh=wxbr89m)Tf'񗬻WC@Jsۜ0O|BH]r{~?JyX &Rl ыÆ^ WRO;ot Q|OhrD= I? vC]:8 ogfZ[8[_~ RZ<dUPլ<.C:? vcb-*\~gO}؂䂄`*\"*nNCvOkMߡ7z~_Jj1K׫K!Rk Fq 3^<4U+iǰVKReiC@03'@z꿓z?w߃I+\)2 Bw1Y4\RSɒwSBHT њb o<I*&mgDȩg'%%Kb7>ҍ4(O3v5 / ]wPl]vR̅_a𶨢@@K HN7,U d [V+3M\Y34pPSc IjNyOT}R(_YP`Oc? U͐G+[_h}6J'H68S {aR$U_S/\,nALi tPϏ7 V Qoo{ԩKpůR K7Z/?EuY%@̓w=@2Au/Ij@bcXNILEq}1{Wb?$U[hȏ$ H¾DAc h57X|9n(\ߩ_w/^zƴ^ R +'&^?j }Pޏ ʈHxgĵ#:19e8#& 'f_vƵk>&IdG5luOң/^*]/(N1{ghy{-51@Fwfha|:_8dg|zqi($!f}Fc4"y΂uhd~Le#֫>$x@1HXLҽ*d#O.N~u:4d0ݎAB;> UlUS> xAuu}r.Y>ۦG;CwIW -Tz xwEӠi,[;i0}MGBՀ67wCp|gn*c=F\KV^@/EsI*A/Q8CEe!U~sie<6 :4 x&@+v7~#N >+^/Y1Q;r"Ee,~囚ۻn D^*vZ(k>WED:ND@w0ؖ-ߜm&ZL% @‚Hq8"(AH}u 48>RR8X$8@ ,4[4M3zRH$Rq$iKXnbK"Sz1*tRQ dÌYԃ>Pju Y,$2Vb+ӦH{UY׳t=$E -1[Zދii|mwzz9ؒ7Q7L3`HH񜪃ñ#[ނ $w;x $@r.ա t!fHHpM&^99E>a)9^mGCҖ[D[@^akVVef "|Hˋ@23Mû6+lY:ϿZdRd|mmS h004zy[b5FNe h LhJc8llh`6ְ;DzG><\|ą#tvf|px Z@rVB[H $Կr HZ8[m_ޒny Ҳ#Zd51#pi(TĜL.)TTjPw;Sņ?(47'~r|x(yrcV.ou {Yi5d'%KLa[^bZV! x_mdJ1D$ \bPnsTLW)QU0Yx6xK3cb8q2izA?Qmy@̕0beG{]t;CZGl5LSPX*[(f 3U |'8r& ٺmg*--hÌm ceM[ yKB׎)J&IOY9qOY d!QrAϑ J@n|HdYRtPD0ۤ!".EjpH@dD% yB;8rG]H4&hUSixePKp1]&{^^p$|$U,h %!b#D!:(1Gq~OT,覸oj̢uk_ 9_ |EbBJK7x܃%/R-?Q(X=+b ҷZ7TG@uӅIENuTڴ9!jmJ(@w0VkyՑmIt.XVYΆTܦ C-\nxuS҅%pxgЙ8%YS 8hArz?uclFzVFw9Hˀ!cujVKkыcZʬ#Zv* KuJRY[%vQsXId]x 96BHNhj4WG&?4*h4􍎞9sF}ʊsS;E~)+$@L&y@ZGfiDi56YL}L$NEJT瞆6Y+c I @< uuK> %kD?B rG> ;5qGKt$ΡM",05=nϠtC2i$̯'yTc/e6TNJwҽI@p~nJ;5-X@M=Dx?S֧8V\@@T8Nޮ2i5ӛܡsٔ&s 6 N EMmR@ ()B4ZwGHmun#c_EDǏW"#5H,ΏbƚNwt^- at5]@Hdxw`MȞk̝]q "U[:8ZțNyׂ;}7sno \z\~7K8T?9]uR^w`@)u?0D" 2bȌ AF E St"Hu4[7>>'9ƛ'>'O V/w鸤JwͩY\Jtw-jgJgq;-cP)uݤ =$1|E AG "5#kQX+Ǚ2 ??r xvh(9(%\"!gwj@ Qvz._11E o k21nAw /R)E~m0CBcHn Rj~Q(]QhiN ݰKg5b ZΝG _‰D 3.v &Kzkpn1efn6JRVQvQzi- zgBpPİjF1 4XCA0be2b#.ťC"]bUYC0CBI/a|,` F 1CD a^0b(]>Q8i,:7O\ F vF?{nYP> '-u#ʼn)Ȭ7??Ci,uH3'ђk#UVkb&gB mIT8 D.&1dUar$tC`]wPt~r4co[o@퀭vbS IΫHu-θo%pn"wٹuyvgcZIhID C"y0;o Y!bۃ-ٽ`[KRB go@` -*3ډ.Y:P{Rv@>L$!!.~ .MQ_esPR_%Z1{Kف^T*d2r髵$В,bXba611ײT>X)bie;lup#?1" @}}~G:duo7#@?"%EA2I2 j5GwS{ߜ vhfo!8 'XBcQ7g'u.TB1r};>l@]y&+Ԅ"$ygBxzC~ ?OIң6 卣Ҥw_C!(,SDW i$Pd3vtfFMfBJ*B Ph1풖^N)/txuKnT-Bmn{ɖhsfbF7:'Xn5D2 f.rƬYg 2J܋cTճ48m׻3mirA"$% u~3C֪R/ 6xEJ_naLI(K>T雱\O;As&XRo4ԯ?~,uX4d"K[KR#clm D'17v]c :M0CzP'"-j K;H_iiRI *P}鰩 5ETϽwwq\ 7O3ЅK_|y>\5X0\sT*qmCA'^kC{d>cw,?J2uD[tD2=9lznѧȝi [8yoّ`喖+)! x-$uzNv{Ec7CF3Fk*:XÃdG0"@>xܛޝ;޽{݃{lҧTZʒ)uV**h]K)T:{f)*zD֙9*XjSqyE@m \bI:@h(rܝ{_r֝swܢ;d=gw9cwR|T{q_23@ZL:PszU.G.=.@ l1SC7 tzcel_q 52ĝ[wnws{wnݽ|{qf]+Vi`A 1CE@~5 D螁 ƲL\X0*n,;B귾޽{n׷n M @"~M'e&@̵$5Z4T)@4iވC|OYܐE?Šy;ͮ~H dT9_W<]QZ b`{Og`)V("NBO@Wԋi;f zqFr8):$ 24ŌQx,0yU\ o`TxIaڰf3ɐQilhP12蘈(G [\#XHlvXZڄ)#**îR oG+-*\#0db*ܐ+J @48f1E%)H 5j etçJ :QŒs2X܉inf„`3qb@wfn;NG$g6gU{L~9ܶ 1$<  0ڴ ΫC\n/u\>Cp(3)W:KOQJnd L%W܄ņƔPݔnKII><:SC,WrH%*eq3ezlJGlIeE%x|V"<,WMp`%IɁ[Ob^)txaKULcdcAm; c" "az- ԀP16*oAr&*6!#r f}F79e 8!^).n4d 3 +s?]tP-q OdL*H K"tҥSadK(OǭCR{m VOiS,8\fͨYꇘR70y}Xa#KhAva6U^srB8\P$FUƄspNF"Ρzs~w7Z?tg6{l)TI gJ(ۭ~_Z@Oqt1E74_fgC׳wu;f o*bKܝ\*&X[TK}02`VR:#KsZawΥ7s +R:}VXa'* JT WDie&d8ڕs>d|X@*xt9u៼ tp/d)JKD1q !rFraOfhNjW^"Qٗ䖺1{V,~۬SKL4! ¹)xo 9u" uA@|z[vWItʒXY_*斁>;ov.[ 8pY0){$ĉLS'q~q=ΑQ ^!AN%.~\!S_;5ƏNs\^Rar>!wfD~8z>W `v˩\IQ;>?59swUdsf΀0^N}uxM-@sAS_33.έýX13؝g`[y9zL}&?0sC/Mxbf f+BΙBW|s+u -ϩgA:b|&Կz=xBg9UʩcC76}! Ͻdn;$P1?`̽W^C,~"kgxb.lOP{|=?zr 3^Ydr&B'p͵aAo OM=@rX~bxB|! P|!& Xr}#BP>+L\)˧Ǯ!>k/肐V˚Gm>&i`$>r}OCgcqz R)-võ~"Iy]>t-{ &ilZ=Z éOtvLv~m%欃mGcr$Mc**^%5FbY!llbuXpz!a<ˆr8V[eKU֬1U:cp9ޑ) Z7*U̻ab"f,`X`q VazDnpțF ,&T^° Y{\ Q UQp ,Q.  ml)0ت %mx,(, NtYP(rH2@, K6Y-&b;EҁmkdIPjO:IE7aS%%ġ9HViU]Ņ),%5]*ˮkpzv eTM+d$<4j."ҹ ܉®k;):?DFvKI* αx`"Ӊݲ\ -Sp^~&iզh6ϯ2PZ >e2"b1bR +DM8lU ews۴ nOe\Q4]#h)124 r.g!"S4:ٜC!xLE1R2n z]%!Jfɖu%oظB@VvnxZ /#l0bi vB]e{WPp qiWMOk޷@ &|!DrHkRGnV0jN6VTbm (0oWI!IC̆)J 8G _-(*O' $xYJWkf)'iUO*N+z*sT݊8dp= q$ 7(L)z(3>2S{W I ۔%kHp9'GAÝ(p:i<k19|DU}(7BQiFqt=Bl^Td iݩBCCC 1]K`55??@(|rkܽ???55ݘ`wO.,:v<5OA2/B@SLz=&߯B/$hC9cBn*F~0[ 1ߜ- wsES/YQuV:C)FH9l+Mj3#BS ^J.=: zf6{]S\]~Aj:Kh:eY rkNόgЀ5f l/?_n|! O?3waEK[PV^ATʛ`tZF&598 Š"6Y8CVc+?(CʛSkʋk$d/_|sB֪;oEYV3R8bc^VoEUT/7v׻|3zKҫm+n)Z<ν3vHg _"Սsϟ_drZ>d&)N<+n$dd9tiq6\FٍLd| IngJ2ͽxWy]ISLJ. n{G#H;Ų9+fv=dex^ǝX1{*&.d}A/S]BĽ1 +~3-)W-<|XE.CMu,rf*1&%*W=*dnǑ W/CH81p: VB2j"8K6w7B{{{dM .Ia\iA{䧛.dvI_+gɖxLIA}OG6.qDMJ;5CD5O0 QSgKAHsbݗא@*lω6L yT棆 ?S,}ںeUaxoٟ)χB)d%b ,@Fya| m5k#H!.BzCHx/!-#k( mEQH͝gDE)Yu Ni8*\f3e![3H;~0~|P{kwF]{ZHV$k%y*[>fK_lμ"bn dMH/T,;lO ъ^i=Kcp}w |mo |H !9#!.TvBʲ=_YaYR9K)$<:ۉNS16Bw B{GDG'ʹ !%=[R/E$o];ї(ըG;; Du%IP kdv!k$-z6YtaWlCjĨFRC/F"U5YoYHt$JL<|1rBZeY1//\eY:C xZH59#*Qx4Z#rg/իYVy8뙗:,pj̆^} cv7(q#+{[K!ŝeh9.$388]^GtFSҴ?.z<ک:(k4?Ϣпԡ//.,y0rVYց2a]HJb(ʐlRhIFncX7nҍBk,4&M6om=_kW7BE)rKG(NH[BNe.1˲pbb6>KH .r>Afb –֖G[, myc$فN1O,eȎֲҤߢ\/ 1|!=/8.dU:.dU3矲[Î 9p$^ٰSAFh>א<`U9MsAA`1BhWaS/9 8; a#9،gGޱO%h[7c;~`S|d;[so1n$)f<} ˟#'lzZ 8 ;0=%'L.ѩ)jt;S0EAٝw5,I8=2#IoZo {~80,l~zlq~TJ}gjtT8V0&kOdSSZEx~jzZvm}1BbüqU68=66=?Z蒅n5 NՁH,"g$) dWw_W?{ m [ EMK0^ko( JfǞv->+o_,oɮ-LN-?CK E״F9 {i!>I[}F9܏ʘ%%n~OW>C$M.|4^^}faxarL4*G6jHWM&[ 0hؐ4~(pQshᾏϬ,p4d]]ijy4txE5;Jj LJۓs-ڙr ;xȻX]N^M=P?>4ռ`0>XLWͶW/L%.&,K-,'ԁEo'{KGnneWܹ3 BBY ez4))|w}N i IJnAHRsRkp\#(zmN AO ړE0+ME_;I7}FT |+?LgWΐ8߆+71<52gt߰~,i֍o[Xo B8߇N/KwZe:zlcNN]j12ߵɈGy-˙va]-xK]dMzih?PWq3J^E١W<Z䡄)^Clu^%3$9h{uMsSg;xM5%Ðih⥫ц"sF]c,94[~Qꦚ&$0]Z^]@HжꛞvԨ ZyXUl(wp<&uQ(RTUZ@3b i-CgNMGAz=1V E2(;;j9yK(7ܪ+j,.r]S~ѥ\.Tn)Uʉ肎C+WODߪ+'OtzwF$q D"mܺܯNmz42E8 ׂrLQUQjfc %=]o ?mqqq7~!-%.9==I̸^ ~r»w6&ڋ>ߎms *N^twy^a$$ Mq0t$"!NN>860#' P;` {j˟z{yɌ}7>-t!nw·,33/$g;$@BG=_>#b_${EjC[mm%} 1aOpɢ?y&xPB.C^s*6v#A5;=Ixfffd9OZȕFcMRnb0={6QMLpu=#7b˿!(5C.9G]LO?Fi!ݒ?ݯa{0]k9]9-eDzCjGDoFa%'ED6Ux{zc B@ JXu=kBwaڲ/܍Q]6;Y:/e!FȺ6Y\rB\5Xw!u0^vR"HBCpE2F|"2ުqT`(H`@X"HJfBj$f"ĥ}d͈RbvB?%ĥq)v81/ȸt~X>-/ 8HNi%X5 !vV^^^^1v;tL#Ze``nL) Mzzz%zy`a'l799lX^lݡ]37S@ZѽͽZm2ULRɮO {`O%B쬈 Kx/hGO*?;JU )1dvdpC|{E !6aM|^II/ģGm=a=&Nݔ{+}VMVm PsG+c߁p+ݽ*yAxd~c #qܾ{ %J;\$rj}}ft^WoCf8^ժ'ƲBr=7=l%Br/&}6m!\`f ë 99Zyݚ.pO8'>+_nѤkTt|Ӷ@pV;B;U6ک fB.w5T *vA@W/}j˃lLn%`;rt!RwЮQ 7"hp+H ϖuv8b+qR'\$@g\qTV*`+ ~l+k$= [ ڻ5Ū'N|X}{ g"T|qRk?k ҂{ 5hS-,QIq[n2b(WK;C[)rn"Kҽ{mEq<֙zK|5` hX[{x߾# r[\PX &B2@ʼnE4품hiX,@B6DaJ=ࣱk,\/g`~8Xv<PXr!-U "=$4b*?!sgjH{] U].~m>#*> L=վ6'B@ulwEuu OayJ !b0NYϨq_heDnϹ``ϼ0.?z_MHO347bxGB&b>V3!N>K]<$~ax%!PP}6~,/zȪ{ibIY~հ B;{8B+5SȻp,.*,1~EWE\ủ > s"%`s4 ʂ_\ O?w@,Ր<$MVH\|1!'dSpS:1(ry{kuu7q!˺UerB8l8f0@[!qkTB:E+)r)iۣ kTh1KғÁ+bA؀pά)Sf0h J$z{ YŠq>=88CLr0Et,'ĝ8BP{;%lBSm~xc$FRm%uD}%VD,tSA2xJUa0CtiȺD՚Ln1QBao1X\ϝÅ. ޻ !_C3:N!Pw,J'gy6yqڲL oP@?1"ɟjmjtfBlܱb Y6^90`t"Ò9_7F cfK,^E5{3]"# np7F Ӊm-k M'{_dMF^pC<1vB4|{>C%v/FPw޽ۚϡ5$@oR5Q5oJì!,2tBR| tx!ס]| < TPfx`[3{3]{18BCjNgi$q\qW]e֚4z֋azYQQ`%^|띴ʣG)Ê\<O/+8)ܖBNr|~*;/ӹ=Eb(zMS[t+V!<C%O!@!2 W:v6M`I20BӲc!2:w{sZhL:S/)$[Lhz$t%!JNxgaS;t(:jX2BL]sއ+_b00IYRCꮭ4[V %ڲJ_-VE"$d㢹~+f ʏ`x@ 4 O7bR3aRƶkj۶}kն1?o6 V[Ԕ/C$U lN/g5%KN͏j\CVR_Br:kVNT~hٶ랕sO4`Gbexnht3q^fUA[+lu=616U3|3~7Փy0 # (KK dȑB)A!zBUA&cÅ>BBpޮn9-SWɩ+vjUߌMظצMTSkѱ8B (Tn@t:SɦrЃy0Ŵk=8~AEv 0+ym` >8@%Ɵ:UGQ!J"#OAU'` %pUXrݹK]~RуbufF^*{ј P([8^^С(.ieUm} CTVV{uD!nsBh9)5kT55kiiSSxӭXm8e`! x<ȡaporB%Af&D֌m* ؙrA{AaHV)y98unjfGXّ8)۝ב̈́`aNP1L!eh/L5[n-;QslsEفͱ'3i rrK9 }9s̢t,&=I/ nN/nsN`s.!}A:4\H@0!2 /Ϗ5dN !ܖ<ֹsT䢹ɫ6߂K0"([{7=%>g9WlJ7S^n0=k!Tje#QĘv{˭^ZY!饅D1J'hS+qWo`4Y>z .-=y푾t{hgr&aVY茅+] g ݧ.Ѝ4t6MY2r,Uq~-+&h%рØ?P)2~/ɗ|g1"2:;{b6]""i#W$C"7F(J!Ť$Y` TwjҢҬ MQ^Q~vy)25]x* : H}et(8vsvRE%}W.7 4\G#jzn$ ?"€ גX%Eagg^B$WF%ʓщǗ3]9Pj\D*;v9jỽBGI. js!\fq|ht/W-D3 7T| ByIY@%!_;8(Um%焊\; ;#{\QGxY;_&z Et᪃<`k2+N,ׂssM^ʝ6M=%,=m^!<ty2Ok+$\,ŲgₛMJjh~NS$B!?F(<ۓogeÓ Qwp["Njj –@rWR\ZOQ@PB&Z~_d&kw;@!F6BDM&,ĩdq8$J-r5EfF62 N\f֓~E}sj mmm BP9O v1\*JL$ P;@Fto5څ%ř26R6j,˛,"~̟2PثrB8.džn O!Q'y5{C IZ! s),'U:iXad5X &%\tkoY\ݴ O߃JÙ z㄄rQײ!UDK4U 0|EAI+T1ٙfA7~HBܝZȗ5p 24Jh#[3!70 O=q@bBԅpu*C踺UrÀ֯|-rp߈5'4T7%d3Z i(zh2 ]HaA;9DjAGO]]=uJl =n~eYH ðs {0"t9ɒ^Bw>Nm\Yjw7F`6*FC"y*̢8l,aÀK2Ȋ #~< Fhi8X;0 k]xY8+&/v6Uox~#ܾ?sdr.&a5 hw:ܨ'nB'٤; M;/޾yFʃqux (;*Lq?^ P|}(U^ rxW޽i䬙kYi0G\G(€P{/ݾxjJ,i ObpQh=%^"u'9thL~!޻A<ѽBA.Ϭc-B9[CpKRV8TVTC#A @|q,M.w w~{ r,N}Rk0 ri^uvm Mt ?!T:gP0x%yY ^ B~},Tr@P5zv@ x}>dRhe''3;j-H6HO:333o|Wػ\pN^:"H>C6Ԧ_X,W~VCYRr!'c4 %B,l]6?U@NdO+a{(3zbъC(D/ \oo$'9Wm>PZS&*?U)4St6+>kU^%M5)R{pY Yf=HMCI5F~Rk}~c(Z 9y0 jJp~Ʃa x$aY2yxLK?$Jvc(q(̅}JU GF "'vQAཌྷQqΉpƸ\ΖLAٹn,] !"aWue+L9"8v@I뵖W3!?63pƸn((H0,]@a rq=ew0:CclYo߳EI! Liď bUrt)H-#UZbҶ#háSS?EY Yv_@_ij_y( 'D>2rk$S$@A 2T;=߿g﷞BSAnqo!_VQRCgPl s;'yᢅV @ Cw5w^>32x0?ZߐZ˞tLI[cŮ;Mq@"lRLBx0R6jP߹5dV_v H},~AMT6|:ԋv\| ӭb,r`hU@"Es (Ma Xߣ5-s~N {3Xܲ%X{m&h~. h\)& E*F B=9/P^U!CoRlj’FHbE_~rʴN Qub0T|) R WZ[l]'Ok+r2zH(Wl/e. Ɂ 6K 1CڕKÒ 9 ~%CK..RB%zu]@jɁ,H7Gpak9t(@_\ [!# O]l<]R~S'$p ?C1/Ȟ8Y"6MzU&'4I?~LH JvUĒOisO!$*\*OqٌuoIgL*~`-/F`e\ߟ 'i3lb}5g hBKEܵFǟMhJB @ŦFp8{Ck?C^|; D ԣgMclD8k5 Wew22T1[MA ǒ)'`G('7 /# /}W/zT*23Yspٟ??&,Gئnd\)9|C\ތ*A(nw/`2bu8Z\krQ7*>lX G;Ⱦ1iojawZ죃nM^@= wr:\e~" Qev[Swc}@Do+oktwp@2jjU5)&UOs}IN9# ݂!?뿨ο~Wm~+/>V d3 v}Ú[MWp(Z !aaԀl͒6KCMfU_ߎa,P (vن=CPÿ.=6z'B bXoWQC҄ &{|BEe= X_I-+% 9uMxks;7(ጅa#  eo v~6d|g|T/HMMXxӮ# X@8u 9 n# VfI8lJ'AGPN/X?.tS=ϿN MLZfRX6# D+-{l2YCsj@Α%, dB~$v\ σ@PTCȎƎ~AlflU -7b, 2U-wfT2es ?R:}vHOWWȮ& nZBs2ywFX7V :FtaODl-a+\wyy[䤜vq%3 <4`\yA+:N4bt>\|eyu2vj2O,1,٫ܿ?i@Sj엧>ԈmN:drI}j-QK S%_"^D/'{țodТ@"5Q o83ȱ7;S,ЁƄ2+ dݕQ'XXvbWQ>@3O1oXzK:}xe@;̶ӫX H-g?;uJ|,ʨUY_ K1#LRJD.A3\ ⢢oCX9Yj/- 04VT@ *D TR刈hqjWpC! 2j, vN' BY DnHBjT-ǵ[K#ۚ?1NAaeT!(! '3)=IqٟG;T/<($&+#5[M/+Ģ ֤ d: MDTPBS: pHDݲM@c]9+r'39v-X#Q!_AMj@3JpHy7;%x@m7b^ X^ջ, v93$@gn<7%$&}-55[=њ_SA޿4͐bVیP0qĢ9nN[z}pVwID $Rdy-aMRA'&.sN]@@s̜ y(NNZtuW[Aq5[B@[po]3@hCD`k0) y Ss[ D)5%խ^?[E%〜xj_oYmvuPg6Z1{1 _ aTCkz=S5XW'JcjL@ណ x hVVYY xU[ d'UJI$b\,>H*6)q.TiRCݣ3b8XwW&%r)ZHH9li$uy K#<-c@fO@7{uSiYϴtʥ\NmzM;\sM]Gk5fl  f ca;9J : K],,61|u-bMV[||b֏{|YI'BAYsh` F0Q4C9Wcbc([cXbYc([c8=+F Wfs!i hwf S Sy!nC3ZTBYt0t5o qq9CHO+uNiwA pYiwf-9c+U/9ɫ;o6e"yD>9ζv(zT5C:{z)اX9nYcfiYӄ uQ \ 7;{Uˆo`T0ԕљb;'ED$Z=J>{0[V $?xJ" ,BˑW⎠@|<jhЌczT2.cpq8%V+'xx CKR9I]==-+]L:=E9߉ëvhk]J^iy-]mv@X L'Lcȓ׿ǐfT8r|Jʁs#%s AMWV 0ݞi wR*==ROF;Xs򍀈V'Z?% n >u|6U$y2Bґ?%_s`Wi /mt-h,f,n' [ҡ)Z b^  4j@M I5J]4h44db ch"\ֶzLMٍxV*ήg H덾9gmvfpn9`Bڳ<<(tni+d2|BM N ? >8邉!$Cjz{'aR.4i멙hkj{fy% f F}]ɡC4r̊Z?#K#\bƀtbh>3&4Sh4:S'L]0 @?ߣfm5L+2S7XOb (^_oċެj?o<gu>d_rs73> Σ4WmC BMMv5f6[OPԖij 9 >[=>Gi)Ɇ<@)0`cAe,mm LI *9_LFClfa»TY $Pj,L"R iVLG6Aņ{:x^k$y {1?&CBP( +*Q $_'UM嶢K]՗O> }C=='_b~~Z9Y+1.KHBNݵ[\.QW+gm;-t6Xx3sX+v6;k})ڣ[3٣N(n)?h[6:S!OgNLCv3ONR/6J߫5yJ׌3U<*͈H?@1o#W㇏H W=|xP! Za..7Ix7rfl[`!P IǤ~dKK+Y̚{g?LjȺ }ɸdZr', /b@ʽd =,ÛbyO=zOO=~GɓG_B(W7>> ȅ\~P8ZW&᎗IeeB(JF' @^i@# ~kQHv1Y@<hIxU#4(UqD4K:"8{Mss"琂 qN n[<SjGb R+nD>w)zKp8FfQp.(8C е{qQź 91 `a%|2 J]Q @ 18ʗTژ~QS-``\.{PJY5eokiC@$ ̾q>~ Ed.h*@{wCRIABa~GȒwc}ao ?K@TDH矒dEKyO3Dkkr`RE }pL8!,T9n0ViBu1(Fw?K@U!#hmË2HTKZ},uǂu%,C,FU;s'9>GpEŁ[5"DLXS蘂X8968 J=E yk9gMfǩ^I.M^qѯ9=z$RSm z٘ MVad^g|Oˮ9|F7F',j\6Nۅj{ ywEXIրSrtr.6C&]]jp/zjbX27~1鬸XoXpm'pREV:g!Ndxy#5VQ<x.hMkoΝ;s!=$6ñQ'kQոutx T4ʪ(|oE& Q13Wae|8eV)#݂`"N *a(&t)4S?+zGG`thˀ.?|rA ")"|3SquNߣupò2D֢$y)[X9Ի[% v-OQ3ub,{Dy 3J BD7ᎁ۲oH[]߲&@zoezFo@lEvtj֬ IfMjR>4gv?zo ^zSE7`X{?..,~I9-jݐ1*a5p$Xt5 "|cj̐oUSk4v~0XPٍ70;|Yv4q &Ӣuڙ5='47W kw` l6PpXK-UJOO}60SgؗGR;r9<4tգyϳ}IZ/IiHDma|KȉSJv, 6 nѦS,%d5m`y&#%!4A`H{&j- -~})iObj4# ?fB>˃-窐o3CXPzλdEEψ]>ԽϾo| oe<6?}߮S Fg |G柮|z@Ht L(EC{"Άk?50*NOIjOt1t䥣ƏPP}*8 >ѻkAU$drԏ=!HUxsC3k#~7fX ǃn]#wܹ~ dFO[ NTkm&K*]C \y8ԃLn'~+t W979Ĩؘo$> y!n0薝|=s7 rEL<rzs;A{c\>}Lfw2}=@ ܂k'AEIzBF\t쾺 TNb0[ j^:wa,y~|xB"ոi)r4$7: QŴiw.(3Z6ϗAN/qÜ*J+ Qs?% y[!]%_9.uG7|4$oYȖ0ܒ/Dz1ºZ00"QR%Vme(ąT%!q}ɓ[kkONίRBFCY-"O!%48?438HAE8?Y!kkgEHG/Wtz헧K)ۉ',N{GUH4pOȻiÉjΟ?,{$$FݨQ^8Vڎ.w_n']Z!a)'!$4 $\f^.NGđ i?rRezF1۔2cXID&EUxM*_a٪Yj3A$4:a!5)!+/@&5hv!' J(h9h`BzمDV6f$!JzjV2 O&ձl Y4PŴ4\9Ȋ7ZThBF lN;b%!bZѮi0b%4UPz8  ԙ8 _"H譹x2Pr i^L,6=]M6\ӧ~- d½-/<gJfՎ! I]I>BB.X I٢A#B$!"+,diU!{.NI$ ]85wk5\]G4Qm;ۊBHV3퉍h~!5y~"|\!lKkr_W@k kB'zU;rB@ڤd+>BgCljqrBp=d /. iޅ=!5γ&$x5ugřzVf~3WIT-j˺z:mY Mfa)UoBꉏ4t=~Bxxp' mAۉw|KAHl\<!EϏ7C&pqMCw%k R*A? IC!D._r۲iY7ٍʋPbkmR؜J^!-g~J *΋塊 U櫍Wϟ[Cu~⠯`x3|ETfWo7xhfxa I3DBfo6xn[b'(~<׌E1lQW&9t}}EeHԑ|Ȕ{##{cפA/## ›g-*d ;N-+ۛTKGߺȳ`e]Xޤ2Yd31 ]Hi 樤_Xed.ΩԳTͨE@kŭ!FU58%I"mle4ҵ-rAfdi $) ▬cl:.+(hVRez 0Nc$RnIF>BrJڲt /FK xުyn '.1FUܘb 1d:ta^}S6ez: ),.fZի13_HA)#i>5=,<EDW1l>_ i]]>o i6>'&1oIENDB`awf-extended-3.2.0/images/thumbs/gtk3-csd.png000066400000000000000000000673701507226270000210010ustar00rootroot00000000000000PNG  IHDR`PLTE¶ٯȽŻwɻǼτXE̿yUFɺ˾ʽʾ]IޙgP؛dL[Hn`÷əcLøȃ\Jƶxe̽¶Ǿƿ`KcL\HҕbKȿľʿpaž¶ȹĻ_JƼֆ^K殧Ǘtd䦕Ϳzgóû»n[Ǹϸuc~WF㴴éȿگ`MiZϾZEuRB̹eS]E:dUbH<ʢԐk[|wzª|zuھyk}oq|upНj\Vmdk]rkhiQј~Ǔ}YA6gPEtƛ㈃COUHrشޝ׌3G^70-Ӽw\{rwFFguqU|DkIDATx{T#ABpEF0rrBQA% U+pPA.  ^h-"h)mu˲Z]z8<<d/he{/v0;&3 {Y{vxӚwN_6 5'wO"s }|4;OK_>99U-㻗I$J ӰjN''[P3㩩5Ov?zr 3 /Tԙ-}{ҝ3dkwrKrv<K0Z31Q3:=ulIg /$8O&v:$dx鄄5eOlNR6<1P0s`dMޙ 5jf&3OǽPm&tNNܜ213%5"]>;h$A={@+~(D4iUMTt٧9/=+zF5ڲCq?(hp|^[I[S7de)3m#`5''O3NN=99-9072z&R*tRY6#겙Pm%7Z698DA*K|rG;զIVmQOM2w&G CNߚ=1$;qqʹ!~?ib LnjM+CC7B(f?}㧭)F:|c@PrO@m^7{m#t?k7\zH4ޚ9:z(DdTy%$dj&Еѐ[C>rh:E<2zj3<25:1kQ^ 7Ou}u.ةӱ!CeqCtc-}r(HiU=!{Uy!!i@~+EmXHV;1CW58']O1Ab}g&5GNDOl 4}J^uބ6zF4H=RL'Wy @_?1qC2q|ϭ=u}aVh1k#K{E`WŶ?v5"ޥm_󫁶 0f-E` _$((ڥ(WplR6QϚZbV#5>VˊbA|R܉cɶȲGd^%mg~;b tvKJg-btj; ~nlv^:ˤJ.܎{_k)d%cu"%[gVƲ\vU"p]Rit;/Iԩtyv"]~؜"ޮ)^rEtMyv&XCv펱v[%@bJI+stR~.*JWư_jW%*)ҵt(s+ -L<[c_g;twٲ) on:nWRt?AyNmo((sd%cv~NUJJgX6'Q]{;VmzP"v;nKrrRJ4;1=+'ՙ}.p00HS^vJmN8F0, eZ0o6 稫xzD~pAԛ n|SRu./vNi.p9QwTٞX2Ynds9U: r2JrX.NeXNbADrl#uXNO)(uc`*KrY$@ Ι򂒔ap,M--f?.F@0q,ۙ˱d:33 A, ,!6JoPjX ۿW BB08\ _&h~,FX*mƲ֮!k۲Tk_.>l CƋ 4XVRK3֭[XE AAvؚZg,[Ӱ$ǿWvs<K^#03h^߭׈3l鬊J6N y)؜2 HrZHK@RUJ٤gٮ" = ;Hڙd$HS?#$/}C8>YWiR*k{A{WW?^&R0rOnjJV_w ȅgb7^_>}8T;99y[E0ɟ|ڨ6WE+>GdD@DΞIdMekų]uxpŁ-)ֻD`i+ nwĤ{hRbIUاh)W|>e=4$È=EwKG`8ӊOC7cV~~&dxJ9P>!H1jyqNn!8 _ [( r+#S^|&S)bXa@ IQfpu%B5F&Qch=`_l_P( Zuou3q% >)L.'v'-PFj\ ~npH#AސpgjyAarlAjƟG HA\;Ovܻ` Wxcu_qsR ]O'jbA[ϐ%z3-h0>1/( oa49U+osS%XV2T0zEShVQ7SA@JL^3QeUiMnW}]4%AF> 8@puZ % < 8H\xF?:&s #)(:JbU}QQPmН$AʥXіq˥XͣQ N,v íbtKr*AE֠lxde]',. [3/rC>Fg,BX"=.IisXY :`9TAࣇT5g؂V(:}noZiyt% WK bN>-R&T\ f;; j}@!Q +n`7&pԕ\}{ 6\UeR ӽ`uµUC?)Jew  =>Oo5/\]A,mDvvf54ShbI` w+-ÖL<$#JSkVHYqR,# Ewʽ˞"yXCk;ӠF t|~x\vN#%PA!XI>x JaCn`q?|cYA$.1"g $}# bJPyĤ)|O5Ph9/>Tx^VN Yy# ZМ}lr#ntXYL.αYr"7kG>@ѶрP `F]HL:Z1ƂP .۝kEJx h V`FD ŒZ0I5.GEl6 D|7hph;c]n|:Vc /ZSA2wKȋ{Q;  嚚-q5-DUSVyAnB3>"5\kO`YlAaY^ <[;H Ax  ea+HoѼɖ&c!>R F @ϵ}% .0A|  &!a؞"j×7i0+I#AXBmD"0a@C"!PF\ HƂE& kxz?f4}> 쯻ؕ^\5Z#+`m$:+\2K/EcS.kiB)#Q.t0(bKg0|l.fH2$"??cAL@` XuB"WECA);dhpJ%B€g|Ef bNݣ_n}}hB_ʮ+38҄"z5'r҂hi4ML17na4dH4Q2K4)$jn%jFқ ëؼ'!/R'1j ᤁzw^Ts^m90hA`Zى z]K> x1\QpEKՀ"d=].<$qe&Ri` . J{վ"&_\뚔$˭d`ڀ &22<p-x;s~1\ Ty^ _uʒG8K %Y"&zHXj0&q Nzlzׂ^9AxTA& Gd5 LSNdi|".K#A5=dvst#ؑ?N"3κ\_}'/^տ}R r,AhR%!2 D~^=s-"jMn+x9S0pu??cCX k|_RRNAKMty{!ʝǾn'R [T\ObC@'xvs5]Ej"7~+cb `oʝJ~ 7iKR_RK0J0sDΗ_[VAHSyI\L a!XYa+P={[YK~!A(CPy9r6r:l.A2pٸbk!9{m'v377\ ڂ %8JyA"GMLpqt<(-XSɍuX~íJ ╔$ R99"eb$.sw E`Z }(rƨ-v;:4y\r 82NA//'U^N^''-h;Q*.fYYww+6/ 1XFl**.񐻖xU(t(}YRP"v{kNqrKMʭ;> ex6WcSJ ۷{@222u=kw,N{19h24+hJ Uێ@ ?t4xb,H:u>[V|NF@'i=7jت7c;Vr޸JL `",V|L]A:kSbr;ovN3@ɡn솺g@dh9xMTb,=$˵/* שy<:兀ˠ'Wy.*zT-32M2ABX8 s4E ?{FPaƪUi}5ƪ]i' תּڿK[/|Q[>9isXb.gϛ: %DŽ}mC,WQq9.se .tB h_cQl;6L%ƜI*P*UT*8bRŘ/,;-Q"h >ݣ@پVpZk810|!zqAzg b64 ^V5G~!QmRLQL 8Ciu-E<ҳnZDZGZDB c,p{DVWMK|5lo:( )0N.=j o{?Dm\cY}/ :eWqpq | 43Kc'F0ŗ\9?C!=t1Xg8 #9xI#g e~@9{Qytw xC88މXeN4 ~<< ,\aIKt׍THoX ?5I$?=I22y&1dD;ٖd>܂0 Lwb|(wYP)/ǩJ8~'[ A'1=ls ]cS4z @"2R4~W1OwûYWB(LwW`wl"ÉAnT`N}~JmI^gZ\L=:w~b$?|H9 hL`͋Bx1@iFX+@ZEѦAˌ zRk$ȩxţ_ħfMឭ#{nz݁ƻ؜zC}5d<5)/76bE=hC Z"z z0j)?"C2F9#`EF&6`p/]ڃY.SA~wbc,T';9cNNl]i6 N}6Y/W\7'HRR TK{K5Tg:Й~tB. 0rvg1M~ 8mI P=W0_SBc.XY">U ] Lf?@1d|Vt7C~IDRS]d"x<)U4~7"M +I H42V1ͮ5:sg/l&pj>\bҫ$=CΰwPDIx Idof|s>BKj}hKlmnVNY{L,A^ {XC#ȸ{y2_-7!H*& p~= ]ՍX`? @L{V/  Zz`l>ԍ{bؠ3lC/v-Orj-ᭅ XwxV_x"|\2Z{^`-h0#w, ^,l5*؀7Zۂ:"Ct%&͜8:Hi|V]khd&ԔtDhG~g;˲o!_ ,쨠,X0Aa 9 wr 1 (܄+q%B!ڃB<3i)|$eN-ZFE5mƓ=v){,`-"trh@|099DF? zC`xBfD3_)K.:sHlNs-٬pzYo!eI ? K|"7hp7/ Y}wB bMzX#';C`h?99|ʘ wQM]?P‹ LF fJPE@,x7FRP$t01#%5]]:kՊiG>N_޾gwZo71wMr>O>{}I|)9hҰv;aÕr Ҵ~P2K!FayvrQJԀ%K3P̘=a@T8À"#kj C =z̈"U0*cwb? {xtRd3)A"D SB.mKG߹ͺ"errܹʇDk޳yYyA uk%:jKU-Z`2ZsA[Eí:d\P H.jTD@joGH9104y4>V[rzr0:_[ 9?&R ŀ<&,ƼRXv<֎)2= #i @ XF-Mъp$x=8L!p3VFVĸxɍ4Kօ}\ ȾЀ'u*ҥ@&m3r8%;0%eDHt %[Q+r@rŽL鵂h"żnچzp &q)9,mFDi q{z/۞^*Y';wPM' PeECR c$4hAY 5 CvìR d ȑm ~@}>Ҁ9F<@P0w>5NYNLD[̔\&ФfDLt ?&cX[h@G@@ Ǘd9m[~OEA(1jf3Fv&39X?ptƣ L䩘j} 6}C}si@&a@߷nᚼOa@8ȌSڳ]# 5~f{*uΠlt _d}Ao\n 7}E$!d>Ч>-pOvͤr9k?9i:f}G@@U˥+nm\G+é)rtA]N=+Lo 0@CAʗXB2>9HgiE66G~Aǭ-+4D""%/ Zӏ3t󵻎[ut+X7z:*A]@{c b}a pEFrQ =87/K!iq$iD^ )сn@pO_yk@zN_+/;|\s\7UppI| gߏq@Tǎ>y̥фPUZB J9s؋uB¯Ϗ %ju~Ks}됒2"%@qlz.=ۓdն|?X>!p6C{R{6ᢻBpP z8q!? :<);mcYDdSzaV9@\ O(b$&☒ޮ!dC+ TUЇ$G\*GΫGx,!ԧ dё3; Hj,R\@%IMA$qI eaѦqK'sˏegH=W}yᾀ4oy 9\SE], F|Lb'h빞Ն{ ,R{uQkU 7[AF 6 X"y.a[+^H {w'?:?mʄKUB@iI<b&,, %MHx{saY>A-˽ [I -\\ȅ@ Wy w?.2x/#S91f ԟl2gsP g~xtᘺc7RT򹩋yzU ۮ9CDTm6QfL0٩0C&BHp254u>ֲk%#/;^{|t*%O, dY gٶa?o (!rĀS`K>Ok<W jו6RX46WfޭX ;|l}U4٬}"Xp>}]JRL4H+ -C'{ZRsqaAesYaډh+)=X ?L-nNwY=H -+Zg.?§4 H6{*k+[[[[ȖR# Jq$jJ&PHMl/d~wXqp G@\H t.BBv"<)Z-l%KRiP%qp%ni{|fW{clooE)+- << QΠ #؛/dPx!aɱ,}W"l v|2eQl*aH@/. fУYQ,۹Ο׉XS9.Y :q<uk<B,P]R oJx " KxSxz,t'pJJEG9p<| -vG[-UCL6󨨂]WSS,"SG.d朦DF}w" t- ߏ?!O: Sd) aWtd]o-I\[2\bw-x@@rꇰ࿵<"׺Ẍ$:,\7Dx:Qt]OG9'ue[]-8 &"Hf&Danb|ݗ o@\8, (A4n}sEM.h 'qL+/p{~K"4QDzc;b,ȓﱄ pj fMvy)sS $ /zFzz~LÃҫfj&V暒x5T%^vz:ڥJ/gtl{@2 |DID4 H)V6o g=?!arHFBN@Hf^mC+ab;>: WأM,>Z⫭ZjP>gpj%hG/Y˭Z^JCMP"šSXHdފeQ6e"8 %}ԔVBv|tDhMz6jao@I .HO5yRئ HV >DO*;Tg"sdkzL(YLPE-* ) O{CuI^Lu!6K$gs|H4e]NW̬'Gyz.E0` k l!Hl`+39n @B.ȾA,~f^o ]x6-}\2#"DAz qݼn=1cKD:6)р(YR:|a3h0 $T51@ #34-G? KH\S" p@.zNƍE Ͱ', ?ޭwۺ{;:zZHjRMDXQDyq > d@$Nǽ@}OǾ"q@~{w Y7:Q}TBZ߯mu3zu--]%bq;U^ @Wo}VVu[?OEMG.5A;}ɢx @.{UXB׊-nk峻Z *wPtWBiY&k͚ǡ$N. d y0ulEEd )Z$8oyML0'7iup?;v{ qyQ~F!Lc'z` Kp3fZX5{ P&zI/wn4$)La s<GBKLjf&񠟲&*0aͮ]dV>ޘ]l>+IJCЀGEZ)%W_ߌIJIaa4XNT~J/rݚ K/%t ^ͻ^%$^@^E4jx,RTJH3z;'ZTf/+>$]}>̟,ײ՟`{(i_Fن)F AtlE'IYÑ$y"~8n?h%1IYHDL`3n 2y bY0إBmvB 7/<[ǰ@yG2{[Ob p y)><[=@ <@RyPXmRt߸aG)&vSPtXN8MtNL;aBYG,;em\ DY[J!tI o_yu:VOjFw-qV>g3L lYa2ZWn3NYzVa˝F^~1A,ds&sbHn>xQ n ׵6OBpRBiB`LvLhS;YzDXi9kOʠh0 $K[՞ٮbAjwUGD-:$*6eoDs&>X )M %LYt[ӎAIoKh@Tjӊh4@;&7x5>$䦺@x+r6oPvMa.¬3FGs¢3;FeldF&zĀPFjIms\C g|p]m =Y3UBl .\'3VɁXN5[v*!2)7pi߻B@Vy9u*?o 78qx;@ dj RÅ$GIh/E;`\1Oݹ"l(0',sI9q@p)\70X ?ZYGrHED"($RM23HVAl~sOI|h8<%@O]Ӹo3uhwu^, @KZ=\Wƣb?Yy{z<%G Og7 L?~ۋH*|??/n&o=~RYL&t:ee^(,}W# x'w*P#ԵIeee1$N )4&5VLCd_tP=upjF-꩷O2 zyScnwj@ADHeR $`^v֧Z[xQWmL٫oh+;|%:).[֓pjky\4 1,C㰬H:<~\t&ƌ<~2q3E @jOXM)(Fi+cIQ@޻[MCD@2 xI@GclB &]d7djxKA6dC&) -1LFQJITVI5N$TbV:pE(gI9zf>)   e:ڹb*ziuF LLS#z qCt I$"D/,}0G۽U'!xJH\ig,+E:m!V*er%6{;/V|@JͮBjxfX"~׸҉n_/a$Sc5cIr{{,|(4{&zф$y/:)>w\'qWo'6x[%e$@(+C[H ?)ywP:[uvG_=T=7NuJh]im4(`6o|B wrOKHvRvFF&4*]!TB ܊ո6dU*Yӄމ 'S۝>St#6U+3PQKmRJBJ,}|k&=R8޽o?|o71,;ClTUx4$;y/K˖6 W٫;# 9aL'9M @#grF Yf2G@Y ًʼn62to{'*DUGQr w>_߻[װD`I9wNXX9X76oJqE#  VXh*@46 *!F ,LhdiX 5[%{u*-Cp*oāLU6H NI3|_] DŴa%L- -naLXeT٧&tiJ3Nm F\ j!jR(*q)@u\ok3Udg@_|n`J8Pq]VRq*J0 @:Crbƅ*&1gRX@TFMR Ω nRRQ#!P$Rei,jj+$陪ai󈒍Q!' ĢPu)|ՀMd(1@l8F{ʒ7 T1ol=3YeB LN{&vJj!{v,?|,9ٷ~}AzŨ7 smjjY8ժU{fݿ47; 9N9 3 YrCv;蕝5)ε7z L L9uFKAGٞKf;) @s̍IE8Bv5!o=&޿y$pi66\})E9p-rRɖ e!S=nNVKNVMBwΛwˏS9S5 }F'! rѥBԐNV99eO݅?)i5 HQ/[8\!GU;9jlXx  !ωOlHRa6/`%6+f3fOHd"/yK+Pۢ_>0lBrR84?>ֺ^'K^uY_\]HgDHHhR]he!]]ǾѮ8vPs(Y!ֿ󻫿+x9o'vˆ3=}{_mWEM]Jh>8P cj&k'+D͆HL] *DG2uz9/V=2;:ɩ3?<왛>0`$͞z87457x%AHS0j(4 |Mk6eMb0q~,F>f!KU8@OLr1q;vKBa毩ϫ!kצz4X.?I$~aW!|͈Gc"!S3\[#UwÖy6#B_yQ:= wN[܀.[?g[ϲD h`W83\_.$a Ə~7x͸KscއhӷcvF8;n/ܞ)s:/d`צ'%~p QD3pqdҷdce6QW![βdi/tҍAR:g}jsғx&"t,5 ٓ0:ٓpmRO$`,4B47gXlxϴJL8*l/F%)|C1.}}ѣjXbZc|QW}x_5ցw !~p14։\SG^tj]-5MkaYK(s/y<>_ $#jaCVftjo?ޙZZq$yPc buvxYp`cBeuaax n?6O?e~lOT<+)W9DqDlWd;O{4H?dQ .î>5#~o5ρO#˧ɇyf`0xPCJԟkLF{ˊA џv!!RWz G#58۲4.KG!}5}]lnYB Mo>'π竊x!Q|iFǕ4F|4noR@ n@Q6gt" C#C7ERW$?f]B5I6|:f>BB1i硄${r˔F.RRTT]eׅ\@K}?* ST(! eT ev P?)3~N0&RHg0EH$[ V9eczk"'_S̖Mgm-_7v@$6CJ/pˀ%-Ì2k ~ϟR *Bܶa&OB#fY &[48|a7 I֝pq,A C/! ~]a(D8ì͚^tsnVB9|ۦmi7,$sMɰ()9mF.=RViln,aKY<;cЫObH+muwC S0`:c(&M<{%!A.H$ʤ$!#d7m##P[1}Sy)2c̥3r&b#!'/ FIX~1(P,* Aqeo4-;AG2ٗ"bZ&L;hw |D _v?Y!FbX(iδ²Pbű+ʂe?AGxƖb4qRr(MX=8`X%)BGH؊╄$MzX8JZpT:,:Re LqD_?1mP?u$1N$%p*T,!6* Si3K <%|<֣{K $aV-0G1Z_kIw4XcN?6dC ~pb'K%MXE-Zm%!.脇ϙw>Lie2Qh¾U2A[¦$ÐM LB!cșbN&CX08a&$hGr/F4!֋Ll5$b^w_B0l @ŗHo!nsES7i Ҋh&W!XJbE ; OtДM 2}H7vH@ S"Uwq/Rΰ3-h;Mg _r.YMQa 0TKKP?Lρ\M e-&Lr19њ7_e%@JQ,"C7S`={ &_Xڲ/ŝh4 鐠WGZ|3B_*B^G !!;"1H+B*B*B\RFBp"T!!!!!!!E""dw4kͯ'.D6[K|k`N"c"|7δDVWW4QVHq]rA.Pb k1ETJI>Zptd9[5\a;!̟`!<6硆D&}8אڤ(2m%ҚX*p 5Ғq4JšTZș=ݟ'B 7FX1:zikLLzQm :F~VCS"=Ri[<φ<}΍={֮2V\gCCvj, SZ*9GC֡!Ju>tu*U\|71Otk?m#ʾ 9@چchcOmCǩyPZulés9]!C j75h8T4*'Dے{c"Х/ֳ/>T4)Xl['dxIY:?CEB1` U*jTZT)ĺ8VHc4J%ScT 郧]d\*uf&9=}b p-Z'WqQ4=ºSU!|܅Zx?[‘8Sw@4KrѼX3e˒erbki`P RP[T:վ8zUKjakf !{.W!!e!)k'#Z--E8whUȯN -u!U5B PC~ knsP3t%-B <:Ր QLeD!dG:RBˋ%JM)%/>hB~i(-1@ d.c!f"\vWRc N6JLyt*r&-]iYmŒ*B^Y/ yg'<5'έMۇ ZK#ki_KD?Q8!P&qʙEX*@Y$1{%h%0t!4LU>KLt*B(N4&A`M@>8Y*h+SAY)!%BJ='hbX2fAب>L^J;*qҤKᔞGKCvG“n:ţJ^H_a)eLRi/[EUeNEHQRfE eYEIENDB`awf-extended-3.2.0/images/thumbs/gtk3-menu.png000066400000000000000000000620601507226270000211630ustar00rootroot00000000000000PNG  IHDR`PLTEC82bF9aP¶ϯbKǼcLƻŚdLȾ‘`Kۍ^IyUGɺݜeMXCʾ[HwŶމ\H]IʼͿĹ˿ƾσ\Jɾn`yf~VE̾ϼȹ^KxeڲԒpaȿl]ſֺĿϗfOŭó٩gP_Iҗ¶ğubżҲ̘sb`LfU俿ŹϠhQYEmZuf̝p[{q~y|wdVi\vQ@|\NshϚpwspyjTqsgfciNXPOR4MXJ#)&$1‘Tڿ3Aه9/t<,3|6 GώlI^+)}G]~upc`ǫ]\Oo|uqMf>#/gfR]vQs?L?>>AvxxdD<2=29<\dh/U>.MF@!u7€ ²_!>>O[^e+zX3kĪià Hv XaգRG-#>>a0fPhjrQOyUKzG gwƏ*租??-;{h~UX"H!ޛ}R%je쪀av(/KWj4;6 RY}i'OwJ;j{/-7>Oj ] [w#9yo_U`矠egӰ@(SqLQF*OA†UUOĪ#%}auXTa#%pabӀք=+l/>Pȃ0 d׮~ڵܵ/0 vYuƃh.0 #[gx 0[L >~,2>~x*O xJ{ \<~0{GRKĪޱcǫ8Yfw,!gWyư; u-?eq6Gs_loG +cCPBc1S%D"1)+ƝmO4"(L"̊v2LGK.%տ2#rб v89LM64Nơg\IBB#5B{06%'g X%dI&'{}C86ZAnʲlE7 cuyB|B̲/h( ň #죅I|{b=b0^Hq'\ib5_}b wrrh/鈩Q4U&(Kk:\䚤YIM5u5d'{'n}aRES}$kpn`Y` ǡ,BMt>T%ڞWTT#6MMA'|2x:k:B#NdRk{`hS|lGCUrMG]{El/L~s&7)}8-m2|u%2ǐ+ʒ;2*bcH\LPTS% C;c*HM݃51eBi}}LSZ|^M 9f (Q$yhYĭȨ wT%b)#Wd;=$BcԁQ8דdZ08hm6LFٺ Ct3uc4{ʲ_ P Z1o p(MykW*k1`Bv5X2>BBFTpPgdeoJ}ei yV`KE 7[[`;%;aD"mm n {\h'\͞; [Z~9ȑ+`Lnl4a+| 3ɱ&]X֭iYX Y^G+&![Օ+m'||NԵ_rJX[caب MxWn`7||B;5`f_@/O×~~ߖp`0wWLO y./,#   0t0xQqq;>B\|<:A^(a/7Hgޱr6ټ q^6ZR0c\P, w/ŅL^ 1k Skl1q^N!Z@Sʤ2{ =U@RUPh{|&&l`3B"DbxUT)s%*Ĺ*ThRfʕiA Qɴb6# De8.7 nJjr+Z20Z_)`&”itB Y BvXFxAi:2ёσSsfA17K$e`fEQRP+su6ʐ a( I-V1:0$r~./.+VaM瘍^HC_H;Өj?|>gvDt3`;s,26"Āxs@EpMMO2}1Bxo [3"ѵ=G'Y胊VP\hd={"1hH*Cġ}{*c4IWi8g3CXBj7@+Hbi*H' dT۠O,(Mp>FXB^UM&q WC4Vh:+ f3:Cio'DDE4 $RatFD!}hUP͕&}B ,f[ũhER>"+vP' I>PWT JeMU)TpAr>l{ /+uǐ_ԑeX$伯ܗulK";}7QKIN\JK sEgNpP6Z $s5*u9O*ЦC$5^L@#Trn$IJ_s#")HȃX}q9sk~نxцTJqiK&> ƒ^qL7NXytNwM**4ia[&`gN3f`aT:4fEs"RRQP/{Srp&GS!JTc T! 5%16I֡6BE4>xCC\\DBfqy#{-Lsrr2D>&D2hwˡKb/\Y29 *Λ_ ABSZTjU\ H3GŨ%j-JPQN:O'5|) %F6c!}<<:dr(6|,d}ku<'4z&fM,Hb?7'Dn*]^)I+ DJD΢\f.*rl >(]HӺrМq0GԤ~ 2H6K+7@odjy.g%Nn"SA27*x&SvXNp(+.tg&d9 :^O6ZorƜ+$!E/u>xWK6%  EL-oW[z6d^- ZqE&B8@o85]_. <,āw8b544Gǭ!. #!"\)PXa2&^o|!R0!L,k7U*Q6p@". ͑÷n2|gFi H^D WOԻwLH^H$szIKuk]0EP"CeG-8*9_͗ c>iȓ*Ҕ[N i᠞IbbJaj;"j5L&t&VW}5ZS^$DHR}ǎl* [*i%)^J9S#Ȃ ApZ>o1tܑÃF HZSl^nnԝ3P,rkJ)m'zS!\H*<"rg+)o)<m<?T bMhz5JBwڛJ&)m]/]LVC\He:N =ۖ7LJB1nl1tR7'3{ګ89+vBQ!O"麣JXvA- BԄv*XZOu,S lu%A;[ƢnՁF7~x{`66 ys3fBp($d*1ZZ-WAD"DULF"]!j*d,W7 !K}4^C9!vvbnR80J;Q1B>_BAӀ.ݞgp7rh9 nJyHxΚi}PB={C,鯟Ka hh]-% ل 9^qB>w0֯ύ Ja\ǨB6򽡄$OypKs^U\^Ζ;]O B@!,pUj(!G&` ?柞`W7`nge^*#mo4$*d~BZG?=G-㠴|]=Zv?s~B7K0$]KEhZ`머vLFKȀtb~;436LM-+S"7„rP VNG\BrtLK# gd3˅l}n/h]VYPp($*xڲa}vR_ӱ} ce!s O=aad-XS1d xKwcKyY[lkeİx`,f~쎶opLljBl#MC;I$-L@c(MAB 1A`&9BWMޔܽ{±e6Dմ8Ao40.!p."tu޶ԝG9Vg"dVC ͜49peWbJBo۩`Ou]WBBB++8+WȑՇ\^^ޝagw0l$~n"$4k6qEi (=c<&6]Wy/AՆ6eˊaY`<`#Mep-/} n(7}P߽aKy[">ϰ>pP$$pjs<ȡiԖhnn~u"PE h p&ʇt0 abZ 5 7*$xj`c%jICjحt]?ՒȻ6R犤9\TzQ*ਵF*ph""ω#Ӹ!dvYh% 7\ULыv)SS);JH8!(&=)ӹ\3".\ =JJnl'JUjqOP[Hǒ y^Cw,f}.f*RV2eZ"VlV..@{S7 aVI,TKKE2~Uig"ަ~gKzx7 1 9^C[,cWa2NJv-}7ꇯ Vxtp&332UHo^KW\袈)^ms~:f8,Yr˨ 5`s]xzBmE׮u,rPN];vk:=jņmRfe˄7`l@Hs}5. r{lҼ~6_oCvWu^II{0u6,? &ՙ3¬,9!V۲㳰+{ܨO&(84`l9l{@mӚpVJƞ𲫵ئ|8X~לFQ9~LN[nnv.{{<"ٰlY,1Ŧc4#*c+S|fYX>XS!/_9<1 Pىg' kvDk{v6r8rouϊ!32[`eR:h;עiE.K1i|h}'b)|/ oG `d}ʧX v.~hoۣC}Al&BBrno_*BppP2˗0n}e|cHQ\ףhH=b&;y;{U#v a$s#0Jz]kC27_RU/P=MnD*UkJXkj gQRV%K \iCYUu9JmW=Ʒ7F;|errvI]wE:R8l.BZ-z1ÒT\F-"JvB,P9:YAź IdD{$Eзmvq#7sLG(&B==̡ #1.vsza}}ۢsȔ)BZ:;uB!"6"p(kJT*bp }jN!5[ըհ?A\i65mLюiy'[ϝ(eM/!PG#v1*T@gmi$T%M"*eHnL&DjD.0TKnRDΖ2?B2F.0DH."BwYQĹbFKxAJh13BW{'(w{}h;Ha0ebyv߲Nwp 8a%\ZB%\ ~HO|s Bwdo-[]klXV. f9$$N|w?a@>p?O !y,1vu%ЦoSE$jbCkɽ{߃ӫa5] i8cV^Wם o1g´cǎ#tf-pRWB B` &rN9$EءA9_^.gj@7-)t61,,QS+3"iN0xۦ#n,eQ_\Lb16|&LGa"4}eܣkSK :%IL8%Hm hښX #[O'4mwb6e:N2y. 1PdD=TpZ# \2HG)Ոl@$oNLGN0Rvh CC^u ܓ}\H,JI˵}um~0gӑ;7o:* ԣ ?͕'Ʉռ^CVKj"ߒctg|z,B对w pђ_+i ET+AL{_\9/!LHĕr +Rs"LR-vΕN0Z\KmXL^TH\X0n鄄C(eVI5NJjK]e fA!\[45R+/ m)-~T*TP u)0% R"?,nBB[L!FW)YIiy'U_a A=v"n2+47Kje]y+2jD"(1q ::tbuԼiBrC+ۈK83!lzc'?{+#0xT8)`NCxS-5LY4 &2}uy!NrH|oish2Ut˒#o')DHګ/ ::UH^U7Vrx5dl^[(g*IB|NNt6N@ð? 5lPTQG} !L Et!~< !O0 kLdo˖Lo:!X R?|cҬTШeB!k!g%Em^BJh5 rxA0ɫWgS_tp I3'DZCkC]gd~Eb:eYMpzv1q!V&dgx~B^0駉x$GÀ E-4~0F::խ~#Μ2kf* Yx@OZy0^9Z `Cn %?F} BrqviB!:DLcm73enق'ObߜGosa8i  .A3p|Q@HWSEW r+M"7rEiHSXoFșbiGgQ-w>炋i pVN0v*WK@;;TL-zB\oVH U'p4wQFW̝@;ze \,F\3d ds$26؛ yu) uYu3t%5eNHϟ(F͐88pu݌e^ "0 &Z:LA]?SRVr%Rĕ~ܣtle}O5@>y!g BxJm%^'N!P7Ҍ޾ y#W y maA(`2G]gn.NrXn*a2J@.}be2'~tڵ ,_7B.w2=9' ]ȯ^y^s6@P{:BUwC-4o'M/>ȇ^Gf< ?$ Im `շo"|>wv0ȓV\%%_*C5Wi8!!>)!8a05 U"k_럾_;aqz{jEҾ]@bԊ!F$At/WL%_[{V4 (i@/KГ۫PI*9FnŹqN9u`"HCs霃sڼ:9w ":܉[1 Yl:'y XpSibP/*s?t\8W_}u/ k2ORv,0[ mh]~; Z{ɖW1TAc\jl(vXs:lzx9ZМcVlNԴ`V&&T DLT߄V/@^EOlz矏fm~;Ⱥ?p?e~ChiҡWdUXl䳇oHх7 .V؜^Z;8f;jWs.[ 6HJNHv7BB"ìok%Ot.ZșHC ^}3g-j =5ơB;h  tuyxs`eS1}⬵ siu AKHgEx,K@D2޻ߥNv8܁cԈwW'os2t𴺙٢Uk m]1ţ͚fLS:S3iR$e1lәA(D"%,hC`j6=u6GN3WT "uΫt[ܯmr'm.kW[:e6ʐ^hPJzA!ZWސP>8pW >b;2œ|baO G6 n \p-xD^\ۗ{inIrxQF47]"-h!-~{t^M^z M{C϶vAUoJ{G=8Cr ]cARe'm)3/~@BIBȁc^WWT֩N셈BbX2$ÓX.z%YG\*JJ{,VSI.@w[iYI*= n:9_N uB5&?a-nḎʉ UNY\Bw(7benj,Xd,y@=ښĐ,)qbY\.WbM}r=8 2Y]r 9 9ΐ=^Lvgeub߀d-K>q|--e=k%p߿+\:q A Nb۬D@,fq@hK5Gl/? \'6`mm5 ʊv8-:KZpXzY缃}]!@Hjfmrb(<.lpЅ0q8&XP,6y9-M' S|YQ&?_1 N]Hש4ee/3H.mv@]ι}GmVC5xAC ٵe3a1r̤1?*4QNDs^! "̊@^H^~>!K:t^ y@@rW䜸hmR]JVZ;^a9K?șg:|}o5p؃eܻ]-[]_&/Q&xQ+6 Or=pM >}Y4,V40elg͌~GbmZ -b(V9F 0F5kGqc55`eZr WR@xxY5@ܾ}.ՖC`׉E!Lěbu<}"H 3GRc嬂Ì3S]*xQ_򺤖/j=W[#kCڃrPry݊\>'dQ6;->wU&kZN&0D.nDYJcW2ҁ K@4n'BOQd&e'Gw$)ﻡ}40kc$ 6Wj  K V-Kd d1x>GIC\ 5d(sqz X2PB۠/N=_]FFz_^z,b3S*hDJnY/INɃ䝇B8 J) {TBg)3}[,TMddCWڡ6D)=;7W.f{  $^2K.B[VAHYsP&Uh)P*\ + RJ |F;Quoyߔfeã,J3Ld8d5HG'^ \I> h'S0)a.yZE mX{Eː 8xR @vnaw˟f5G.~mRƹuĥ U PDF> u &rGj\I <:.!4aegb;O4{ 0Uҟ(g}8ݞdcOm!U@r/$ N|-QȚGCaA4(p|Te;JEQ#[J\V"R5J/1RPP$ ҀqdRL*d4F*&JI7TttRQ2& Ug\*tɷB@J.ST-D9;j- |zN009pC'HxwxZ ۢ[V#08@($ףEW\GpN//c-ir-=Xt$<2KS;b>AMا{b z$S'ON l~XZb{nY*{x7B{L1@f7bD@4 -ۑe4A-G;m& +@55mb4_@g@7^=&*=!(paqܣ=Xԇ9`B@:|WfHI+*@72هJ}=-П 'H 5 DںOʱl$rI Gifq\ή<8,<ST%kdRD b.{U0/B kk Q嘴E[VSx2X@o-@62S'_i5F޳rq)q.y”* :Gs[3$EZH!rGtXɆ:uV #’\ n*ts.FH1}OhV*BqIi LK{oY4O-,p8;  .d::4RmPt{T!2KI%ƼJ[X_j _ֽao V3i-y|o"&({`ɼ"_/33#zU@xU*f-FG'F3>Cq( 4U(tn|!n-L=aߺ@446V 8ÀV\'ӣ%'T3fGK(Rxˁ "R( ƸԌq@vVSA*Jbpܧ2 M_t1?[f }* Gpo@sa/=7an 'P:{Cޙ@$)V[%d&*:@ P|{wЇW%tCrwI"+k͔8B:zr@9HeH97J_yI(~&lІ3wH=Cΐ:KnHU& Rێ/怴vE{[X:0 CԢv!݀ډRZKUmѵ6+%*pXQ=T6tI.ƊKGT_bgϾpgID펑{[ȵ @pf ]x`yʾ<1e4g`6@ ^K_Z4 yA8jA@j(Vw%snCKh ZC}j7ObߍؾKRxpO h!Mcbn?K$kZ}Y)S#qϨ "rp8U-e ړe{}&;'|Uo (&3R3J9CL|D F4{TF!،lN[z\C[kU1PxuFg<H #oV["5$u\hڰט'jIj&$7 [dW@4 OI wϬAҁ'"O䯍BƕiPmgeaK5:Q!OֱRl![87HOߧN2D =F<0Ԣ><1EK=@k}s>1w7 tNDdj !E.d\ئ@J.5fʟ&[]c {'8cOc t}WFzKS\@XJ tʲD0‰#Obsu⚛u; xz7wa}~pV>7i:DֹX0img( `d|EX#A/]`|C|K3KЍY.933@uSf-zZnwQU\ݙ ?o_HT*rQ53Q>iG,,̰ʋ,),fY0.O|t[ -~e]ls0WnYvêo ]=U}ww-jsq$b~v,3 Nm㹝:faPYP.wBD.& nϻc:uZ*_cA[X:/" CGJ;4{m\ؙ|;rVGБ g d+@~sMЕ}H֛g,Hx{׊r\1.]$2%OTMyԗ '?#s( 6 $bƉ0rMwE3gD!>4e <?WüPD!T8BHi`ξ;t/}w/ R@`惉94S7#@}wļ8e 4! 'b Ló;0FHC_Q|l!;lZ\,ijl#?vՆS)}Hdfjf f$F|h1|b顩w$ȴ[DIXO1E{|.F P_?'[ r9q vz5rY* m5\E)0*{T&S #(FYճA1M$i <GE$ol[*ty}m^fk%\:9VjtVK'!-c<;@k8p`uVҾvip[41Ckށa"ȡᢳfwcj;alκ61zVvJc\` [oINJD(QHc~чmA0_=ǙT;V;@tsYs`3 @0 5v:h9> Kpb5oP}@.m\>N ( B:6ڨ 9u$u o]yctgy 6Ѝq3p@rҘr;`xt맪6?ܻwϔN>#&c]2dHc{GYIYD]$Yՠn!χH\Ew WMYi1b2Gρжh.+E ;O7à L5*dBJ1Z+UIGn%Õ2  2eOO08ˣl)7,52>\>󣉛M[5q`Kߣ؊?9Gߜw"ehO(8B!N$N-a䳹?°3nq~n>Id}!IEO4l؈\$ɔ?FSa( EDϦCP%w0=Gv07$p|"e$ف^}̜)Zon )RLQ0uB/N=E9 j'dx^0}",Z"WϦCűX +W^Yk l2[xNc$Yp,DC nAb Q5# !˂e6WHXiE8gOI @!P)BC[HȟIƆ ^?Mxe2 S4QCt iQ*(eT5[ZNJ)%RNaˋӶ kiNlJz ~*MITM T[R(ս$jIQ>V3J|Sj+I5(n+@j0 |N."(`xqP{ABXۮiG/0p1p&'-iTqM% Z5dMSy}E*q8OT1,]rVEK8V=(DBIIVhLܞlJBX  O}"g= [> 8_\mQ_9RS֢ [S.Ԧ42IΦ餏+5H0dO9NP!ؾ2,E;a:`ңzp+[FPe+0BL! _/!SH^/M(lkw)\F2!]3/ &Y!2,N #"<tDu CwQs5LtB<0{De.f 9G">Âmk1^ XR)'I,)* Z G#@h_6| YI;i\*A= FRv@)Ke"谧Hdxd;:,b1@"[!ŀ3L'AlEB\FvNȣeW~tk}1QϖjpHqFdx~!uzseB SHq6hpa t!ͷ/;ȕx>$;/ _Bjo$#_jZB߽dsaw֐'@]$l8^6+O~_. ,qo/ ˈa45YkM !\;g"$9w ?#P(GChK CGC(}" {3缓!B/î"C1BBL!9w $dtFqġg"ĹnAWw?2rLMwp ?uQTl$QN9sk{]Tg2%d2tP wQʹ*B^ߝ;##a'j ܹ A3B\FU\'L߿a)dS=}:!_}۾!ǸGA/ 10 l>cXo (!TwVVdkn2e ڬVj%ՓBxN&81:pV.dA=ƪ9q0Mi^b=ODnuٱOTn{THژ6 kQT)#LO6YLɚZ^FNQxEzɂ`arcFYw#<v!v)+kሱELO?G H!裏A =B`GHW/ 6.rS#xǒ~!޶~ jz_U~CX [uWE)725y5!V"m=+6<{ ],da=VZͬu~UFhjMiBc z?)n[8}sM.$U2 _n?Bfoh+ZU y 0Ha--db{s=zN11:=LJd!]%e]^+t1uI{\1Wr9g:Zdz.KM' 9Z9\8GuS' &''l^p39[G{GYbG,!Q֕ y uk>8#i xPѠ77C^84ºs7+p:M'/EUz]J:V[N!i!XLe<C׊}0yW(,gMu$kڜhK z^W6Wtt0(7W0fAU/[͉z0P5S4*eI}b8;m'_e.$g8uYD|b@zj+mEz~h׹Fk?T.5Sۅ_فjr\T!' >GHN{F7! y^yysYŹR;m&f9bZr{tS79:`ŪX3JUP<ˁ*7EmQ(<~Pb ބ\.dSs_Gq]Hϟ~9Gq;q/^&u f\D῔yח~A,YFGO/ 6<8b0`;2؏}b18/DIa 2L!])ˀB&] YLo,Mp:tB|\+: L.C5(6 H-dj"Бd:4%ΐmaGo aHQÁN]d tղnp#,6AVJC˫dMB4JYjZ(Ma궷=O^(=PHRlC)'oE J\,x{ &5X(+$ȴhA)5\ `+M Pː{#!i .fe`f*'yJ0BdYbr [+ɖTK)B!6@bJh+Te Ps9TXYͦ&˽VT&[*8;f0"?.dBʪ,R)sI+e@"dŏzii@`[,"lȄ!L2, P&#qKg6LK%{:C6`bv9.eWL_|<IENDB`awf-extended-3.2.0/images/thumbs/gtk3-plus.png000066400000000000000000000655531507226270000212140ustar00rootroot00000000000000PNG  IHDRPJPLTEC82bF9~TA¶үɾɻǽwźƼbKLJ[HyTEޗcL`KXC̿šdLeMŶʻʍ^Iċ]Iȹƽ\Hƻž֥yf̾ĺļ_J¹Ǻ^L¸ûɽ棜鲫n`gQ[I͒oavcҗwjð~UC閐ՖfOӺԺrcƾđ{ҸsэiYȪ̧ĸy΄dV֏ymќnZ}́|ytQ@|wrXSPyqpʔxw]OtokºݦkMKsyٔbgc`40.ᷱ9IQرKaXT3ptuLz棜~\eӹy3]ȶ_eje"tRNS[۳!*hIDATx{TSW; $! Zy "P$"ӠG H!VTࣂok֮u;]uךfYY7wyAsg>'{7կW_ |5[n Y*-"*WowV}}r;WbQ--D#dX2o4u F0h&#Bg@N7rq=SA+Cka|82tjǷV%~hȖcSSAqq]'t˧CW#((t?^ 0Rzh{PЩ=NMiu{\5֎4l 5j+4S)]1n^75:u@mԞSmBjML4Ol:V% 6 HH::.:>9(!7t_І'rdWt{4q)t&O]jt}|dЩ\U`"VϞH OM;'l:Eq!~ۑBy!ա?_{T^:]zJjCDSSu+SWʍW8uh'&wL4+`4}0^ѿV~|{EDcit2eDO89VBBH"uO]uuHIHǿb! /' ! S5+U<;r# &:tSٍ- Q[gW_Ix&$BESx򹩄w^6[hq$ݎ)R]}}zj#$?_tB`o:B`PuUp BHG(K D5kh=+ (SMr?. %ĽEB޽'WSOOP}"߆'UC^3t`.+ćoDpye,!s YRG=/6_y ,+BSqPdIZa yMiX)3+hXO\XCyxbKe- 69p!iViuTZvdu kHݜ 1jaZ\ߟvo65Ź]lujn{:n;ZPU+vQ. %q~u:YX+S7r]]TaY R]!l,YΦI^/heK= !u]I՝jF!QӨo4dݨv5B!do7w65˴iM:3a&Sڔݩ5 ey,SSg5嚺IJvїzf6h\_v;٤j**EڦrB"xH1C\(%iFf5^ӯHɝ7L2i+o7`5dFwCޤӹ6FE,r-"Z u6zd21JS>թ:;M 6e2wKsrcMjvuzw*=g1 @+I7LFoMNΞxCI/s(tC21*LZ i&쌯٦$V4"֒ZEPdJnrs(luZ]n_/k6iLFx Ez:m.S&3t~OjkMN(zōNS| A&kL27?4i~!`!b _o棉 TkazNτQ|Ejj?p31`!| %)*J/%Hk^%.ye!׼2pzB J l[\9GY!kjRsVFDMP lm?X \a:\]]D3/ mmBN/^ؿ-m5/E9ZCι Aۄ[#ڴgFj{;u*2ru a/rYOb[wQ*>mt0m94uh1Kŏ~=Y&L .!"5Һ ~6]ެ=>ሏjxq\OF[Z&Se*~bGtD_;E},~u\SS]9fBxB[^wpfu<]2$ɩrwX{tEFs#RS q̈́pm&BBO%_JnN.@sowB2b,LHW߿(!e-y.eGvgP9~By]];_>*i2]uiuȪ>>b""“2JYibL6HF#?3wS(?!WJ)陛 DVck?GEBP2bKW^qq1'C.B<٧ǀSn$27o ۴Z6X);~Rc*>{|b$:eDzj*bBWHb3!7[÷5t{HcP:-pI"qX$ΊƓ&٫WSL.R65댚dj{J}_A)|*> R<b6!os6E|=x$ϽC/B+㿢nz Tye@B<2 %1@yH_9yᵐB^^J@mB%[ss%L70G~tp؎K&-1B~O I-%$?i?? oHBdօ yy>}Pqvm}mut,?6M?~a55ƻM;7qrX_USޟ~Iօ ?^Ji^*>C'=5d>`'݃fngl &ު0@ky\ncwɯ7.x\d4N?g?93DRPS\.|zL֎l%aF`=ŧ.t;rh j%n|(J o.b9B/%^a[duI mcnY٘5ys{(5tlKgKϖ),; fkߎJ@gg$$ZČK8'KHL = <H$ jg\{3k}cvX6H|%hexoB`LH$3G=ӳA_B5r7\+gd&]Z+*2=A+WV75]6@; IzT]&6 u/.$%[RJK6]M e<`bz/v\H/ D\6 d _ڍ L[\؋t{?zZɭ .賹 .@SCH&nfB&I IFSqt\&IhН Z. E Qw21?Z.Ie.gdn|iL^!kk鰥hqlBͽDyt4Nw@O !:d loK[s B6mblǻ&fh!®2:/u@oR# U1nW͓A*N+{L!.|8XB<(t<+=6`cܘ(љ%D65Nqbb}zQ;δxCNt `gZqѵi!G 5bw6ȴ{'Ql[ex/2R"J&2N 0#_' ڒrVU`1BŐFK=>m" ڧ(FpR/IAԽ֬ut4!*Omh_Q]QtQt ZW)\pEWyԅE +z"aV@~U*cfBӢL%HSoIT)rcrzpT TRU(')D_hZgc#'i#dUek/9}U7;]7]>a˔"c6-q ƫ+)Fs'q |u}q!Q6v#O+z .ui9j*re0nL7RR(.z 4.6 +_vڣ|} 4SbWo_!ky~bma"URԾ"g~ m5>a>E28$-s8YUT=UwwF!DIx%DAԸs9K@@Fq^sQr]T*LXSKb뢺 ^NK`~d.{V!MjcG{ttϞf䨙]\>!j!,`"RAT#v'C?j)G'rqO%RLyeK`3O8ܭd8s2TE} SV^Ka iFBN|ČEa% +6ȑ=. 0if!Ht@jX0̄x@z" -L`@íXP~# @kM )[֧eJ91do"w [vʠwCQ,"@xs̈́cS 3!+ߋ#A+o9u|-(HRI6}j#u-PH9h)DNh;jD"Zf$LB.qޅ[$/uk /.+|s!7 sCƾ⋏&w`W=ݹ;{^Vz{ףUv*p e ՓBXlz_`Oyi*%K[!=)CC)d] ug)!B'F}N+HHϿ/(q㚍+АG &(b,Q,9yyX "k@n|Wq04nW}A'=?ե)7u:.q%D&DB5"S!*28g֤p!]klMdomp` ##BA4G"bP n )!<|ڰ`~NL@}1!ǎ003()gxausɖa< I? f` d/$G҄ڎיg]D% BLr1Oș鉩a}R00,&Ƌ Q]n| 9}͞Jg !.SwR=ߴ'fߦԱ-eiH 3ӱ{.!2I:90ٱae\hn}Qn`lg4[ښPg<رa9:Lyvpt! o S0^o]l876꿶bŊL` JA& M懬R`9]P-ZW>_14u]s#=U/\DpN|V,dk5))%.m DV#;N^~RHH (cN_벳 1^:gpk4P\ ~,-h@o:OEt((b 6 .\3j} =:&cV[.g::h ^m2Nt.>s<9)(z/G`v"BΜ=ΔtnE<=(~2hWY mS%$MkjȱVB6M]e<ݠ7xSCsQJi"lE9JJ[]r:[D wyǤ1 -u==#op* K!=s`M5H]f'wZ7֫T!Ӧ-6|&Qń;-|~ΉiSO!BBMsLק% .F&4hq՚TnBwCJU7f V8uTh9t&d5ftPYd2EFtNW6,n e?5օ8.Ӫd dr27ybvi:j su|+)9P'uLr-)%~0|RVV>!Qi~AHzZ2K(r@)WB4"5UQsOW#W! 4%AK(!۱kuYϰxn0Y46QU'hls|rL v𩤷=y qԇ`!b A,z7?;z Hi!/:=`s>ΣD;Tz#j)&rrrb ޝ/C*x10"eiQ%y~#~r'5.5b7u?آ6u+όx%{[|G0;o4g$d< (bZzf;Y- 91@''Ư6R7}-N,#Ї) $eJ'+#@w~c&|Cф}x8daG㌐/^Hj=ڋh9_>E2Sy 9C Ii*U~E3L]!0= -c|@hC9o~7&RUMqtA5 X%]^R ?3H!3o8'pIPN_Wҫ.U-=scNH u:^9rx! J,xk*6U T:P#FQ t&r;+'[\U7\TߐUfIFJ373慪I%@LH˽3Wz_~>?F݀`֡Ka 7o2Bz#P )RB]BobXUp-Pr|U*h/KT|upd0u .0Ǒ/JM+.8DA74ý#s"cΩypN `[psYRHжYusd;(;I]0u=KH @  ߜ)>ꛯGq\핉g/\e%HvLAgJyS-')8UIuI0nH˃ʊ%a/4*=}_1 \ ;Yo^5qwΑvK1+&I(;uuaOҬxGCE3/ʰ-?~F~G#f'b;)DI\+2k Q5:ЀU,) cr D @wNC9O ]$$2T0.`dRTԗ3aQ 'XX)GI $^7 1;Adve"x} _2xBB>^8 .iNJNKNr.spi"R&i Hꖇr_p]s@!gzywz︗Hd R[W1pXF8r](jeV'u>NfV? >kk ]y,vsجqօPo \je7u,!\g$>b@qD(V$!>S>i Mj"](@ 5'ZF.#c bmd+AͱD0E;ˢ3ha2떮}}0NKǭVp/g#gz S݀6u{5(y)XN0rtmi% 8/i1=r5q+PbK;f2%-]b~j~Aط&105oA {)ZˋuE&W-:pu#G*&𭐠g0r4Zn{ P%=}{&lMi CV޾st7 6Z=d(|B>)gB>$ EМu(uݵ(C RH"\T l߲e2707if[l!/&Dİo5I[H!G! _r=Oembrdtu!孭pߧ /K!B8j !#O[0< 9.5eX˴ͼ B7B(yDM[Ӆng)3>.%w--Sz R,MD*4rk'%db6!;O;zNBZ:A.\II DIyKgZm[Hlol'26)!# u` Lb UBzbգ<#t,qd$,- ڎ6Z}w?o$c^+Ly￿E,l?eаno @c,ia½vrG!*/`R@XY}$\v,x܀**I W=F#;I~9J pGڋk|8Cr3'{>UwЬ5-tv-xqb$K^E^^I2b 3syVq7 +y>܉Qn8b'PD,/Q(6tG ݐC,Bgu{̹7^@~=>q)@Hw @j ^Ǯ'o9 ~p#8w @NQtн}]e]%x,x (EulVZ{  j4.(Ҁh(|}~" I[6HL:w V2[KԢ$YT$\Hπ~QgIt%cR wDoR B-+2u#f(FS xHˡ!}g [kx3eC y:jM $?SY~ų Fsv\ly~@)SZH TIh]_kE^u_N1qnq1~&c(Ayo9wp mji^prCdSqbH,4*6n瀜WNuLQsz,Q |Ocna蒲_c59$m:U 0 ~Y<@Zx|xsN5:?R~ӏN'>=f4*az8Oom,@p0c[G@"xo O:r5Dz%JDc"DTj[$*&%s]k⹂vvaaA$ЕUd8ݱ%ʕ>o7Ry,r gҒ5?h\!&N jDk*C[Aʗd!"W@ UCJ+W!@NCj\[ a3~ 8WmptQ31GhwK}r]0g ! ~ ^U'n ȿKm4/>@BY#+ n"pGM>D{29,M )6m9z; /weFS[) W$7$䙠@N٠mŖԗ%Xl4x8Z05ӺTy_H=nJE_j \vI~ Lx@ $ @y ?lS==.ڄt{Qu_.H-IםkE.·7TAy \~\>>Hgtx{T;Hcmp#Ioof/&7[ԙoXKIIHGQK.<#o5[GSq*L~g6ȗ! #PCh)kj dl-mj>锦T3^&f?˹]93e.~V8uaWV|Y%ii>/ik47]S ST@6{br:i3$!=qݕ9l]忄{VasC{$ aSFrzŋo~S4(uQoD'!;2"(N1Uh~jܥkN=RE~ҧMU=O`R(Um6?|n WW4s&56x{ $NHwg'uyJE =|B9 _/xb}=jwbI"طV'߹=M? NA*|\ᖷ UIN~ x,,A:S4~@ԩ`޽.;_xPR*%p\! TDDl:?:+ cRYG[I{LEn}G"ezHnyPCL7n0/aa)!>F d#\ LHؘsʾ2GFsFǎ?G8dA^֕ R@wĄe6Z>Z5z_o@pu.h^% aN;{S-Kۓ pWzV"Vc_b3+2W Dl )RTǬ5 LQ O/`B%aV|=1pR`HB^yhT'_U7U|N2@j512p12ppaSs&k/Ns5dm7&- @*+)qܱAU@^ Ȏ5*yScj, wfWd'3HbGn۠;= c渀py@َ ^_Y Z)h-(xZ?  nO?]. Q/45%7'nޗ 5SY~ډ{|ugaiJJ5$-ȴ/Wt?OWmdR|hž[> 't5i} G"*+/=I΅nk"&k*6W(d+0Wb#+ed1pNx?ͼ<@N0~y6Ot6I `gONH+}H48a?V+ZVHx-$eG2^e$x@ZE zVcr5Y(`I+9qB j8yW,O&b\asPV$P11I IrdD+%~*)Aar$AZ U\hJf\^f,aa蔭nIfJt,SS=ph.0v;gp6}؋.IPQF7^BV怟j^Q9ųpEt| 'pY=Z(M$ȑ^r gDGnqXԜ ,PI1 !$ɄY$ɹl*kn q0h]<8(X 3ǒpݕ;ٵGR}IΪb"L ]dp9pa\L.;4(-$8ǡ 䩧2. &c;6溪SDב=s3XX,uE7a( ~O5(2o{*Ż n10d!$7&435,DLUҌ cȑ])bX=FgDd҅L{͝k^Jt0h|_r9LWȎ俞o #p&(_(5S# tb)I[(`xL.S dtq6m4H4xr|jA>3홍 zKCZ۔6jk&zFGhPnd(LCQl<~_]K>CTIJC!8+!ώax!I(mtjadvUN 3=f ]s{蜴5?mZ406d0_8jl]It,(%tm¨xFYܠ,<`/UxGYP nF@ȜhqBtOC63 ll$ckɟ]×Ԓ-4@!͑`CvĪl)4Fo)[eJ˩;w_3&}\uuMrU.:=d5:,9 *goS!lUTz0}'80 $JdЂ4a@&T npcږXH)zkɢaT `f`! @RIB:xޛ:;+Ǽv6 ٩6E @ %P \-O_nm7d~L'QwC3VAFw:H:*Y$h,c7̘Fc cPxXۋ>FهBxLnJ2_ +> \ dgs^i֝[qfgII>VUyČu H0;dk 饺rPw#oJQ4T&iSP ة͘r  @\~@p|5@jdvT$!H&bdunƻvL']niU&Ku 3CӎdbN N4v\@k4 \v}W>@HD}!XJ5h& HWwcvttn< TEݳ!]N;Q#4h\!qYf:ǬCވi!G:=H3Arh@(et7*;6B*QV0MӖt6MԆL֐+O%/9d(Г$jw݉a& XؚA*5)3@nX`|>fleXbr1<^@rv9 -"zO?sWt8KQ;oL,O?$m=O N7ѝ,:#XjrX5 AN4Z;?6~4ibk2.F(]޹x#HJX' Ϯab(Agx>2"$5S8;D6x2 ]MS)I,m0h47^t˧arRni1F wWSiۖAr%˄ըXWxN g&*z4T H]Ha d3 /Г͒V(.wH|9ڬ4$c@xU:܋6VYcjgJBW(1|ݤ?l30SםG3u}1$ij8`ؽ8Bƾ`^>8alĭ58 g2W!څy9m~PXkhf+_KݳE30MN5-vMʧfhڥ IrB֐s]t;kU0S+e!"3{-髟 YC.i$:I@Ɗ;\s-T D a\ Z-$"xĭ)ź4=FMHڑ)tnZ:;5kT}V;82ѳ@'GYw?{bL(n*O-jSss⡨I&6,isIdT %vdMC]ũ 4%ᗵ5sk G? \m}`갔 $Qmש*#M{a>{=SYmvL ;Znfhn{@aK>dh\`HdS׬m`{cIuev`T(,.)sm \0p2࣐gA:+ ][Ӄ&gӧOpŭj-X˰ч]BQ3}?|3 "T(?4@/>SR^s3ċ{%E{[?9|>8}\tesbSVX' @** U,aUW=z/ =SH* 0g܆pʣFQQQriQ]$v #};F~ks|]US-k z6}Jufت @r 'Ha*PŖըahT[$HТ @cʀ:QX*hF=ч~oD@|}|B@H4i`UeV 2DD@!JgdN͚GYU d11dhrL94G'mvp1ORA:Ruftl#]0wM $c "|~?@___~ڵ' [[+* [O^Vpm. 6a"np'jN#uz C=hdnr1 znYB#],4j%j:a!ؓN@{RI. Py̦\"o%orAT(H5ܜXw\/*XspEoTbNvM NډETC&#MpSȌB d`5@c tXU!KrsK /,؃yUCPp =-P RXm.MR8@`TUD+@XD&]E\ HTMjhn3&#;?|jYaNն .֠jJn<<@T](+5(+]W:0:@ 7H`*Z`$6b[Or=80ƛP޵F&1BT&4(iE&܏U?q3Mpc,̓d8'3s̙sHdVVvZrela7cRBF_d"oޔ*xx i[YLuD_:mDңs6J ($Co!sIg-NçRsH(>`},$H'ff7/B%F`gdB߱'&Ճj2t3rv{ZgPKY:yvpg2[bQf>eGCvkՃAnق0_$Hf3Ҕל#B372y~cW !·lۺsR+[&~R ]y!$!9gSV|O%0 ^2wgx"uJd"roz^ wo>?Y\)DO]B3L.ؽPy]ąkqf$g$f?SBWۉExs|i 4˂V]W l$"y>\,[}B;Ti92z#'go.?8Y݈\]\qXAHq"2S,B^bEht|ށ:\|P'д􇫽8B/_Y"_%_A`;BN 1wӮ{Gswf(Z!}OnBWMӳsӣW@˸CwHϏOR&Bk.wɺCNJQi̇{]uJɎ/yKWv Tׁ L!()Dkc5ZFEȗ?yÓD8}-s:V|`ȏErvrJ+w"#OG ,w]}!wF'FtA63:銟.h V!?O!QMTCEɠBPWlYZ=dqʝٕp]^*}2 >xDZMW;}}VgG?Zo]tJVq"dy<;z7_ )-8M/T(쒐ڞ|ӈmqK"Ng' j:y^i[NHHTf:K$RaO+ l%)B#Wf -)7 /U]bZ)_"mo?v>x@գQm+Q9 ~T֏Ka Mİڭrǘg?)7i@kc$ t*Ρ3A0j-gPSQj{Yn``MefO3æ#[ln8Ɔ<•FHeMPSWVjo Kzԍa#ƀuPSg<ԡ=APSwW+ 34֙O!.!52s`y/=@) IXHSLuau{4X%|_R ޓNt [rR/P7˪V Zal7e $/TC9s0(~btPGB܃PS^]|v.?!2H 5ua\RA5ց ]K*;LPơ !Q(" Q(" ق]@ƔVdt]RXHȞaNY"{"" D1҄l2ц'T2)m OXGZdNL5rloCԘjPCJD9q"B[b^ %t4}KLoشmKYCBQSxK9<}A@!}s)YY-[Os8s_H$:2;K.6jAN.[A{}l@Wk]xp z9LdG|$kZ:Rs[B`mvbjޠxa_.d:ޠ| -EXki]7^C//Ct[>^-^^Ubnd ,Z]<5{ЫϬ% i켏cZ8LޫYd<|fu;^LFϪ7G* .ի Zc<|YZ=1ZK  Lx?kVz*qv[qki%$2ɣFQ] 1>e>Ѿƺ.fqbvbD}I y} [iN#R |Mʯ5/Q/T tq] l B\ UJi^U/^>S$n4ilK==s1^&i Acn7 U!E?F%QEc5eP5r(ZF>DѣG(A>ku{;7*CQcNy7C{51֪9r6;B7`y=59? jb 8_ج!Yrȯ hB>c s:!å)e?ld=.z7ǁg  z~ (}ȭz~._6 |FE S!D_dؐ҉lС; ' *0!0 ʆO6u#c 2~͆Dr 6%M| %S(؈).:N"/yL:BIN֡4 uZ#C)$M1Fsx;T҆+zXdqZIoAFV =)/!|%w ѣ5|(J+3/EG-,џ^/ Dr0nIA"QABr"ijE!{HhD!{Hȱ6(d ֖B. BD!Q($/BD!߂n+BKwD $;d߼R, Gj5Cȱ̃@,.k/" cB=~R[{ sM!7>`7B=(dxcjnVNMۚ}u>[Y֒T.uK[sF ǥLsܖ5&lQ,T_t+)+}N4vBOS"yB]t!_!/ׅ׃)?$}.$O}Pן|$9Bڿ;uU` ߯t{HNYϋLMGモ Y0kۅ{n~nr#E 9ẏγjB:nW&5 ׷!A2}`Bޤ3NYL7wͧHQsDf)NWt!-D$2KY-SYHuݡS-/E;T6d,  'sBvM2g e^2u%EPB@;-hBTT=L !BBkʍBSi0 9Q`61EUOJKua^U-} is}!LCAW] ;n&ZH '!_k((p|=<]G ~n#-Y3iT"h)^\+7. !^j82ZWC1|gրzS P/^# ߄/o+օ1k֎hd[Z- xHCȆ6k%7zk $|I뢬 o_Do 5hh͡ CҼ0ԟͲτǺ]K9;?pǐ v=A".$>ҍjEs.Mu#®WA [Ll&5!&ax5?/ CLZ%?Ud8NDh #,-@d}dCAZG},CiY=΃/D,UhY xh@O%G9S!V q;u($o+wݿ~'q47IENDB`awf-extended-3.2.0/images/thumbs/gtk3.png000066400000000000000000000663641507226270000202340ustar00rootroot00000000000000PNG  IHDR`PLTEC82eG:\D9~TA¶ίŻ˾ȽɻwӐ`JʿʿyUGɺXCeM‡[Hǽ˿ޚdL͗cLۍ^I\HʕbK]Ixeȏn`ùü¶˽ǽŶº÷ǻĹȹ\JӢpa]KgQ·˲ŽǸl]zgfOǿtd͚ó_Lԧɿ´بͰvdbOՒcNgX䤒Ύ}TBmZx}XHńXEeWq]t|wМ}znھsftP@nޫ᫊y{vqc|_Pɔy充YQNGkvqmkfa]ܜՊۮ4MX3ڿ70-wHewF]bqlk(fItRNS\\ZiIDATx PGABH\6);V\&`cs#$ C `l ` |>؉rBͦj[׫W_ϡIc_F=iFUO3ڿ_=~ ?{c Bx#ވ?goί>퍗xn~5pa> "M5O^xcż≙=x̉   g+`{qqeqnb>3W|(5o91? Sޛfc&6m72Mx?鿣c^4&fvK'c6\:lw\YY3}x8VRn塊QYCmEKk8lgw;E36R !ґVdꎏwl A/7}/ Y oY6m€je:P~ڙy4{t Z\&{6>AYڣ:u|%WE3b@MSk6 S]5~?o6p5t6>)=@rU@l_ 񹣏8'j}n*3s 6 =:S4Uu<@ztӦSGhl&_Q[tjӋf?x4:q[NM1rmԦO_()l띏HkF:\#K:_)ϞUd Yͣ[ϏnZܽyf'f 'FOyʩ |wwl~Ll<52)<,< ׅr`тHQNQEVka_8Sn H+dG/3웫 _։O16"ܚ__4>}/ů0^`a|Xϒ e`jZf6$SZ[6RKEanj+;GEmJ-5L㙥R%fYbRm+; H/ ψ@Xiu[nbjEYf%VdZ؝L˕% qJpdI(+TQpTxi$(ex^6K2-J!fI3&,Ov\B[IeNيjoĥtIViEAx0MTU)M{L +~4Oc)HД*ğ)v3zEKUg˴&@կ&qf]U>E+U5Uu̙:i]McūȾȬdElաYE`a-rg` Xl  xiB}KHxa2aōe1x>C{V9Zvz19CਵnO-,+N1ٍٳn2_ biJz~ccj:.>t_t弸YjwZvc(2P{fYZ5%ٳk >.]4{1>l}xylت}?ʑwN'\_;v\w;k4׸;I< Z=I0<*td( F{A}v?҇C&q2`Al9>^EIcrTϵo+\+^cΞu>fj!y(M*ޒT(Y( F{~ r+yl{`~׎.Dt ,cb+q_&yDrWX^Ԡc}cκu>*կ~$Ϻ]A H2U¤RޏJ/S Qc7B xlk/>]G )|oׅ`!쵇h*,LH A׿ di{#Tg8Ƒ@ww=x+4t7تp\=.1JNʴ' h.d@ | ]ԯ~*BodÆɗ_?܀Rfo ؝;44tOhz"EXv6*iuuLnTKeH}5d$a1P(~ Yqb80Ef"MJT ? w<1::w k\RURn2].8ܰ'S3i9wqwSS]R;⒚@+STgȽҴl4-"Cģ=dƮ`)t uiN'ͫzZ{ڜI=7+ȈˢQ$_knڕ/ &eT*UlX? sGpVB@1N[(dɔ7o쭫$v(r5UynD[GR#M'b< ]U~!07qpD<>?H>?Օ=4>2_!3!@!_tY@X{Q,Wj1\Ix3,$~_ ؑ&Gm" υ lir bi0WRLj NפˇGe%/eIϾG{$i(6ڸXvksiH~ KHZA:f,$ʢ4';΍_l{`6X4 f:02iF)4]>@3 ZAB=ck o4,[AJ 0hzPI7Pݫ M[vXԚ 2} ,'b#-ɲD ҁ;qZ} h'fё' rS n ~;'H$-vdE5Y;J7-Ds]UYW`gU,8r/K#/ɺMM®EEm} Bi}yZHCoroPXPAɰiX !49lA\&OG^Jd$D8 ]$\nYUN|R%Krj+E\B"~6Yw Bӣr;AaI>X .5ȪA ώTf "6Hzl^6c,5\h6ٸ'ĎJe}ɓ9 S'ǪMc76ȴ\կn㘖p=ƇĂǎd0"ټ tA\|`U&n5gZ2#NUU$EҠF9(ddEHEUR+'Jt9pi4=-Qevњl>a:JG {8X+F*YCZPs>HM"n EUԱπCߐ , qh\G}qy?ڮNZ3g!yeEq|ss7,<ہedT!0&М>hE j s7mI4AxkFINRI?&2, Ms,LJ`@؅ڎm6"Tkk>%??n277 CdE\XVK[NKo6\GFGQ혘*$pIgP.B#M6C+'H5'tsA8 ~ApAu,d.'SnAnˇr#3(Anop ~ױcU˒M-/ r'"EWL!D/S>9tĵP@+@^Q„`,:PMjuiI㨎O{Aݗ!3y|&7M+$I$I9 a,(wWթs\ ,oܸq 1dһdUSVB(-A>0TO$Ģژ':ԗa.~a"p%xJ!/$g@~UcEr"MpN B85e?VpVP_+H Tb(ӒAe#paY2D*5 յ4Aܸ0Amŋ3D&Ȯ"x nSz?,,aQǞ>uaCͭ˛C3;poN=(pt r27(<69x '/ "L`X:1&% &l*W_:!+k7 xc_kkfZ! ,sZh뷪KДP A.  s_k/}l1"u;un{|Pjŋ!|NjyG2. }MLKAy>>yй%%;Q$[u^\^|`I MG y~#@>I wo|@p IGщ.f.{#h8\/^ 4 Ag77!Cs g0 &htwvpItt1 ΃"#\(&awPcNUWCYIT_ʶCTaf'x$ALD (nIkGR%'( řt\/08e&nZH>BA|Y&&%%|gK&#^|xEuV ^ "P p3B`b0C.˳fg`8&&슚;N 53b @hR(=Mh\^!d2I-6d}C2w0 tƮ4a LAOdd@"D oːX,ADs"ڧ.Qg 9< ]4@7!ƶZJ Ck-CA`ǒMՒ 5$x\!xJg~aI_ :$"Ԩ1A9 @,)԰ _BpAXAqD+]G+4uc/ {c{"`g"|VV RXϒLMN^Ldj!5_ݹsgVEWw'23phc:_V3B>mpuJO_K bvő΢~ \,>yiBLoQ-dxkү~Γru4ۊZ[9񢡍ߓlZHQALv.L?[DA2#EˍC .SVB.U>DZ΃ލ= E {'|y;w*g}휍rl?A|ß ^.MbŠ 2~g\B۞kIOs0sXڣ,nSV+8 cCD T4 wF\lx iW:XxlӒ2)A``~\eMx2$ WYrqiU^_QGK@e#A9[/cfx0?t{:b }>~/Hqi&qp /?SS@ -;U 9Tޔ:+D< IKuBeTϒ.ZAlʦNfU3))4[)xrҠ<<#a#3M Q#3#W4@XlXz ?{%>D{2Zh JxϊHn7M7IФZ26$U9 芔IȂmP#nz7"'#jU|6r[1}wGݼ@wh|לի0lhĀN%!<}$%+~wD^.܀e>+B( b?B "4ągLa75qv> #&ڬI Pn!]EV?^?GShE&0. 83qn vիKV#up}Bg +(;׮)%#BCsZfB10 JJ`' ][\%}l,9v_Z!փ\+4&"90DG܅~ 3)9fvM3B>& be]+U7)f*Țd ;-="˕(EYY"M5|.SB"pEaÆ*Ur]`OT7#T..Pݍ6Aq>]qYl$25/ 鵐^ΜXd CX[IΩi1/{i!B>LybLTfg#Mdd ̩02,B'K&DP0NJx6Fr#ħ5k\=]W!:RLyꂞ̝zp{kvρ%tnL]d$500q'' ؤ&Ha!B3nd '$eI@^S TA` G9`$AvC=i`F&&HlTPx Swiow_Xyo)6I>4.m# ^VL~P4wxf>AJ+\,NY_w?*Nt! w\ i0/?\V]%56u0\aF{, ..GZw؉Ljpҧ;Ip1_*V`5e@ǕTiqޢ~(rVa2 fBGP'fyPpso-CYGzˤi5?hN"Gh "R L[To/ꑃ/,yY0( *&DS/Au왲FSv." 7)'kfpslhN}CwrxqL[H2C5vS(%T_iTTU;۸𲑝Υ։2-v:[EmhO8_x:_ΩOqz?ŝ:;$܀ZZ7l !%tm?T N;6o-ARR&r76oPd9i-xx<6,\l keMpƤ޹C#ߒ؊W<%y0RF99 r r$x ޔU\K9C "gùpԔXQ},0̜7L654c=G7|aQ\ES # ɋf9G0G޺V9R*3V$/.F۫u&zP_ݼ]vPstAED'F%pUfyHKRWh)tC/Kmŕ0^ D0m"0J7ZAÄtڃ7ebjx Xh -``+TV Y's2:yFZV2f&C-xnZE`;+; ̟ wX[@R>E@d!M{9B"Lao1ؗs' Jma[)Gdm( mvXAER !]xUF] 61@ >Sw"rr' (!+_~m#B=٦pcɁ㝷FZA,KBm~X;rl!Ԝ)Ѕ5ɰnywQ ܧ':G[sGi<AdA{nowmCO?:4_n;Pʇ k?B)Wg,')sЩ"Nai$CȔ_n<(Vy{އB9gtsAb_NBy\0a゜2Qѐ.O3 r>,6|-ut#GOd6.}8LdcYr C:._.8=cɽp2A$8J=O+o\8/ȶ3Kv-j N.kゴA pKr#H2 ~ +y@_< Ô׉0-%D&rǿY7NP0a#:zl}TSW9(`"/ A(#R+k iY 4\L)5:)ФjSF;ejmyJ3fuuA@PD<g'@v1l@jXDes-;ȅd}( ӳ }L_n}j\6M\> g V55䰚沉 (Ncurp@@pԱvd9zo4z r@&av2cqPrRWr?r WA/+D,_dU?Py혀jǎ26K [uo0 0:2cCP1x@L I&ZVWHre``X!H =.`^~T|EZ\E\ /v/dCCןܺK9~')\MLO <{0!  ;<ޭ)2m$A))?RmԢ#m9oC-:SQ.{Qə@~P&)䰃YˮB6рtw;:xnA ~Ѩ@6ro5 ȫ;>0l $Mc?ևZ!UNY]I@9˺qHg)VRoRȊ.5-NgȆSSy&Z=c F[rKs..9LzeoޚC&&38`;X~%IK}lW fw+և%8 RRȩ;emʝټɗ&w~8'wj3H4-WiPD ͇]Ni/J8SR]nH6^~2N:O&y$;˾AkP4֧P,?Y( jT6-;>m_0e/?<ԭ{{X=D|*"HW s"p!PNɞ*M")XndFW~߉B}̀ }g^[ 5H! n/_XDBJمDe9P*UT2ARD-H4ÿ h[t  $cťKEU)c=#qWH \~g ߽žǺ0ݏ9rv@ לhK hM*bxK<o/S my^M@.{x; ȎRFt VB [$fT3[ & cҎ:|v,@B.V:Y( @*]EFrL@uvJ,@E@"-GCsOh%qse?n> /d{@@o]Ε,U DxЖI?؃ThӃYWHwW 歗+<0KOy0lU|@?޽8fj' Ͼ61FuH}ۈJl$!Ah p ݗ#@@EĔv2AZb q땡;7~cM*yˮ] ^@^Bw8{Ȁ?JQk{i#B{1c_}.o ,ҺMU>Lh)؆(6>cv. 9{>6 ??/JGmFs4Y!g_jW_|շ` p0{rrS_ҫ,0Yӯ?Xo|r8f>Y^ rՇ1r$6C-UϿbT չXnBT?կi4tGT]5ɛGBK<oH1V޵\@ 4H/kۑ;z%%׃|"ŞO?C.Fr5Hdu!͠Z#ѨJ&NH('Ђ)~ `.0!6O)avx틷q.^B@v"/ z9hi`=L0%kSbRqniP'd^K5$u^,^C ("]@ F4nݾ dX\:1waXOuqID==Ŗh pUWHfe}-CF4ɑqb Dx!A"I,B wsy#9p,aCR |@2.-bi! iJIo[M$~KEV:33^KQ0dt|Цi:E}3"&YQS!i(Ǐ?w 3|LR`[ '_޹# ZoJޫH緒B2y@8؊)矀D$b1~*R,߹(BASPW]EYff`[! { LW@U^GãEk&F9٩Gd;Op`΀||ޞƶD #O%!!{ ŕ=A%JMmlH9,r#-]~߻Q|-HG& I+yj^ wnk|Jaߟ^(^>TRҥ?}'K:99zt$(#XnzZBxhRh h > qf7E)6@LM1K"}]B .ܲRjH~OU((̖UOӧoI/+Zq&( S@FL"l"8Λhj R͉H~[vX%kOh7U6 ٻfHKK6G8ݫl$:]J kDeO r[r Ĩ(miQa "_;qLv<hlo -V{+ uRaƃoBpBCOdP $vw-Sa@Z|+qlA% 3d?@҂^zVP;(ZPƿg -wDd5>V "O$=Ty?՛IKFNa, H6txP͖-Y;JgK@򃁤s$秧O~~;w̜` '?jEϦ}ҳ ńMt OH7; DnҀI1fluΠc26ĖK rK ϕrSDg5g1_{p& =LqNJ߈A~sGh03 ' @01{W "pus98p gi@=\4QO4ܥKT v{]lVI,=\0q> t*lrG8v) ߟȈ ׼- x $$O׉>ESyimRw,Z;f@W/ īD2/\9Wk!@B.UP yp@0xQ -d٧*ZDmؽ+vgz(C\C4 `q5)iݺGQȳ9k!OD/C dQ$o^DсfƥF2-[޽zEwě;NgX8Lr,T Q1_UG6U7̄lDyx=D/*ٻ)eKfzܖ T_D@񵐆,$&:O H$ 8Ke7D8<P̣ gK7iV0xCkՃ $!_ ѭ ofđ֐{]\HMeqpVVh@N~N_~B($Npue̾Q+~lH-;Qt@=; l~#L yY#$Xj xiZ< )(@rDd;jBqX(M^ |ZXH(/ 9D QI.]E!XZg(+F{H X$J[ŪLaw~ 1QZSBfoJMB Ma}njz,@ P. [ Y\<6WϰcVBn8kLf0`rMG4ZXfNtall l4\ _LT"WH""?gNYbtbg"MWm30DM26.˘e@q[)~F aibZ Bl3yÊ ㄂TJ<oſ 08ό' GFV7B1gzp&f6 y\+sxtYk=; ducU0U^ /|YH/($zXZ+ZdCYܜPBUvgZnӜ6Xs&m S… ѣIyh"%lj 'J_.\%$<֓@ p6B$;mp"t">J:)>FG>#uCARvNvncJd5 ]FL~$$dUH0Y^OX6}@C%f 𷽀@.M4 v7xT 4ܱU*njFu])L;j#]נ. 7NV䰑+7PWHVVbnI^zTWRDfF痟~?e5ptJqN'@|{>eTK@kh5֚LpOzIWaWE4?-OWz(u>piFOaQb-wo}lңi)Q;2 6گ^'mF2 ʥC(=ĝI7Q&@XDzn:ZNHP,$ÊBM#c4C4AZadoO i8vX>)/o=u ~}dSA{.R>zcx> ֕`!ԍHTw du"3$#.?eoVх8YK-)O ,HĜ1a !y똰L3?2pmasӬY;5v[]Y&hq,f'D+?oݭ\N/py}!uN ,({ t+m:ONYj}]")@mc`~󰌸G#؊H61?„T2Cefj쇥Ul# .+!:j6ڔ0"M:-Јlpʊs,0 #zt_PtE7飹& BQjn]̀`a \ !C8Ġ {A ,ԏKy6TjlX\tO*?Xٌdfw:kgHf=Nqm:fpB{g.?hddLOMLP[< ]צc:X!jO!8ZHnA^;GQH!!s6oF8jF+'>/QJoԅ˲ߛ[ؼ>_/HzFCl@M1/ ))+; Cs.հ,ne(퇿1_!B@~1V+O2ڍhvud Ǧ-*/Z[0d`.v蔫bi`jv˧Ƅl?m ~*ՠ.x8\$\a֣K&ް\{«N0T A&1ݐ#v9lZm0ˁPLW,9䲻jg@rm@6:t^!}ӏv^醮±UXcHC`_eo_M=KqgmV Si4RpY i8ZH-mDiNɧc ݏ|#uMHo1ɪkF_vb? FC812z$bVeEJy@ĈgL\[,p5MO808DYG KHFɒxk"ZfFF lPӥpzz:u]>*6#uf.$Ba;JOt䣳^ ^yBֿm19iQn;P0`H`#ׯ_?]cll\=˘ 8Ļ;08qܨJ׮_j7Kq R^h:x8> 2iF " itU/DiFn,@~ @t YA&fUoU'(6-ힱ1xl@qlBWZ 6 iV[' & ‡ ͛7nJ' Z ʂm;/AJ$OA6p8 B_%0%ƌ)yF+~sNǬbb:6krk9~[oQ726n40+^TVA|zTa}DϒՐEfNHrチsMxw& tN+謮\Q j!;:Zj]r׈a"ڮB2 b{Qu[.45Jl@Xξ9k氡$JJ) N $@b‚z @`iـF+ȯ8WN>_*z7jEXB,mDtBPr X{FDAQձL,RAc^9s⑗ )uӇl LqKvH,TeQSZHP{iksRkzp;J%x:R:v ϜE:y_ zuNA['?JCHWY,u,6Z;~AanuX\v1jB Gl0X-bЄ@ Y|uv Eǻx +(/iEX: Nsunbm٦SV5GX`.,PLƦ8=g V;\MrS9-/ 3jݦZYM0ˋ,:V ˭cy$@W"'^ Q`6+W@fdqr\'o2cphġ_{6'{nH$PHLT !ARZ;Q*j ťMDxWΥNI)Yn%ӢT=t73( d?B?>0cҤe8q}MnVךd+:>@c2TI!"Z7d-:d0mh8޺04!>a1P;!ާɾtί\X[H)j3.ypOAH_T_B|o8 ~2GVqWgcw׿aݛ?'YdjD?.gm$B6-)9\VcXb^! > 37 "P~= ;h%h sQ?OWs+9?{xT.)oxj&{r4LWY_ 4̿%r٩e S"85@ lN`Hkv5&'} z؇#u@B뗫-T T!|<@Hw)~xS!wܽq(N/ҽq5{u/>Ti!oݼ'ݿsn޺wz{୽'wFN)9h,brjі9`!FXH3Wƒ cfkEp#6iFtFnF9wj0^O1h)e>.wF{Z"D!=zJ㽎߬r՛7g~lࢆcpw?A!z:}Aw[@ .zp5~(VyЇej[^אLޏBGy!m}ݟVPy/./]ze>zo]rp'C׻װ3>>3swFIrAș{7+zz^ȭc@sc$z| ISI!T!ox en|rr*BʉӐq Tn|rd T>xkvo ?؉cWO~!H^YBu D = nǨ Oy(pЕ|rsa^yq 0S=~Xq{#5RkB,RMΩ#j΄WyG2훬_=^9M+('ܷ,.|[Ăf;Է@TG7?Oގz%R|UL>ZsadmaF#Ԙg&fuFl[r@iC1Da42  7l+˲+Ggzw3l!بM>BsaDt+\~~,1K3Zf>eȿ' . kxu| em1BT![*DR^T!-e B0JpUCvY*UֆBv&*DŽ5TZ=̦]B"MWy5aҬ~9nlWcM hf_Ol%x7m!^J0nRBP)~OްLfYy]+"LmK[}K_-^,1o}Hu+5# P  #A"HK"#RgCQ*OkC *2T" EEH|I`c0 3BAFK" Sn?<$"PV X4ih8DzVqN$ʗddH2I/ix!>2Of2E14E~7Ȩdi0AzIC"ZBdi*-1MG<bLAHFIwKiI`ɔ%R6HpE DB"8IJHEQ!|! %D(!dMH8`y: lͨHB2/4%%Z%EnvL`5X2 )џGv|+H"ƉR6%s1,jB; #Y6:!–h&E'Q2A(+R20 SN(_dTHX@, y-!iłtŨ0&qTTD QQ K,yD_Bb"RBYkH{f||VK`iEdD#&P$j2X t4| VrxԇB"GI]B,b=j0@RI,a"'Y*n)B2"V3 c:d@>6$_d$$(ϝ'MDFN%Zb ,Ea!M M DX E>0 <7˼̤RAVX Zy)X%CPc̃-R #(JHsIb>>%R|ܓ+ô+Yb@ʋXnwۼSx1QP~Y?d䯕nՌ!B/Guئ_HJ/ի%8:_ fG zEDї疮T!o"DU*%hV*D )%?TTҠ "!j QBT!U*,BT![#`CoV Ă-<2j{#\ܸ=!`) yPmrU*PTEH~pz!UrϷ5]nbq].PhnkPT*CRe i(\Zְ`B!c=B"lϱ`^VP;{=USSv;A1wP].z{naU{xz OA45`RjuqV0ZN1}2tCS>pQnWWסCLê LzgS 0mOrvOx5!N i$+pDWJk/Sa!`q[)]8Okw'Ou\R I9 BliS:INzufs"(7bfMtA &J &>~3!ݱLBOJgDԓM_tzjG>ԐNHRlGt“HԳ<e2T:հJ 9ӝ"Sl3-rkOn9j;ոlUSuuǻS]+sZ(dx@߹Jkt{F9t=}mBhUDIdy)e]t9G; (!߮DGi9Ov!m+thx7 )B|_Brz(pJ袣d8^lˇ]K|yOK_7lޥBb|JYSNV!CKB*)ٕ,=HHFN=痫^}$e7<;wY@Citas쌣gXYC8dۅhl** Se2WZó"sN)e~oV*v-=b^WCj 6!'; eB5pD;CHNmxr !d9WjH,}![X$@~b1B$v&5sRF8pqR^BNfsMd斲a]{ w]8C wdwY ʧ.D흙]"$LtFZ:'$8?MͥҒgO]'ƫkU.iaڧc#uBvao.io^/]Q*ƺx9uBFq ;/kJe]EB\Wjs.5?5@kTϗ ym!?[p5!<y Ƌ4B^RX*vjc ;q=$ &L \v K`^ngִ~ eAƅMw~t.iӪ˂85|@/k}Yx]cr&o7q۳ayo)qqy޶ټ0/Ɏ9aGKƟ9{*v)6Ep4̙t8 , iE }YluN` |' o:{6z^:gk'"BR⍂e״jk51ai":/kkgkk-t +b@HM$ly!0U/ ? wN/Xzx!}v^Gq[2Hp7iC[ /1?-ҙNW;7fᙚBOJz{I(o&$,--vB_"ĺ| BWH\ ,Rsl/ӗn[ʶm.V(qqGRsu4[_t w /v4Knw#arՈ*PT*h,*UT ]UIfs Lv Y#4&0R)цeI`3BB/&Xgh!C D\R!B =yaUSAL4]ꋮ)6R&jԥY,`#P EM@mJT m@-$!挐PT`AHJD '+O υ O2O/|nJ`2 [Bg ^Y@"${F >1N mBd,b &4OrbE&Me"kINgBH!6){X!JPB4`DH!ʳ^D01*C,b!-94ґTPD,,RrD$"c BE)AɁ!(1!OTR^)! 3(FL" Hhy|#>Ȃ4)n!ˡ$,9#=4 "9,J4~HE UH 2]J sW=IENDB`awf-extended-3.2.0/images/thumbs/gtk4-menu.png000066400000000000000000000637061507226270000211740ustar00rootroot00000000000000PNG  IHDR`PLTEC82bF9fUO¶̯ǼϕbKwcLɾŻdLɼ^I˾`KyUGќeMɻ݊XC[Hʿ͉\H]IøՎn`xe˽ƶɾ^L\KfP_JĹpaͿ̼ȹǿ¶Žzg}WFɸǾǾĺtdóvcŢºúʽþ㳳ܛhQ縸ǸӑcNָþϞ婚o\NJcRژ⫝фYEtźΉi[Ē|q}TAˉjZ~dWth~yumXyuqϚuP@ޭsgMhhfLHF{" H4MX_K#Cjϑ߈IWfMolh+{Xո#HtRNS\՗%drIDATx T׾=uT@0@&EVEւ h!b%& P@8#^@\Z_{ι>}{#?dϞ=c2?=̚_;||gp;҇X*`,վwvvm`_X N[?#>o]۽{T_\R~_c]f~PdwwL35xƞ~m '>\_o Xxͭa{.8}k_^>Z{yoV@۷\\~R NNgM.K{?yؿ(^ߍkMע4> n65_۫_+sGpqyܫSi~.3MVS` ᡪC>.@ߑ~oufI=?D{ՅI{ט޲6P^ge݂O{e^gOŽ~~M~??32Xxϯ4)XOY|mL炽!> }!OOgw:GQkV1Uet~P)O-fwi!_IDO HbvjۂEJ.g]UU#<}޾ vog~+*$xUy*|)jSTª]$0-NppN8SoDw=t?D.Vrhnmj<=r޽v dӑ{Bziz l?׿'|MdS;8y/Gx d'k'7UhNXii' S_&]N|`[Ab3hrdYEL#7g1\Ƣ{ g1gB0wB OO?g1p-!& SD0I/8Ju+9|~x,m<<-1rò9z!n/,A7=܄إښ:g- 8R ,ES֚xҞzBB5D<%j~3dޚ 5]|~: ly18s4+~Ћ󇇶%vv mPA-QHI$PrcA2eNiPqycr]J}PZ~ tÆ ^r~I,!d惘.C.g GcHPIYC\ǠB6,Za%gQ8*pBڟg }0Cn){/̌rx;k?^ qv~fi=#;\qE-BFȏ$"G6M~.\xoL@+{a˄3y%zАyJduTHb* d%p{ AV"ҩb)qP!{::;:zwIL!2?=| Ͽ@$6[nÅn 6&ٷyW JTD~7ڹ&}dE.<;J ҪT* *d4dУcv,D@⃤xAr/md*dGȴ@3m 7/)%AAMCslFJ6GYn4gKN I `-gMPmG/o#`/t ) VYS c"Bb/xDԜqC#c@L4SGYbCW&|c ,ܕABSX9d\t1(BVB-)+?b0i 8[tj ȟ!@1X =HdrYPHG +JA+#@H ­H xi!-A(==lG :c% \ 8aAH(8 a28 YgΠZ[8YLq!àqiCXrő1{Z].|b0|/'zݔx:Z2Bq&w 8?c~03,+ }i6H!+^ f$͡8l(60VB}[l(W*Cx28۴eXPWC"-BOc8ba-ypc|F LrVcpTI(F||1I!G {Z*U$=!ZWZ DFREZ6&(HM.5(n-9+H!ױ}b#<8ܱyBҶnA+99H"lJ79pO|Rs>k/a?,ˉ8H0˅ .CVTZPȐ)eRJk?4;mL/7{j(#I A,;h_B݉$b eqq'@J*` ISvfUaw{BhZD’ K<Qxx dzJx| d N\@_<&Y@fH.$B ]8>JwT)ӄXBP#2Ybw|,MuC(Me^ &TuuUCVO*eJY*mH;%Y*~ˇ2WG /kHUTĉS:;"f!w@s}熾A~{BdNNj~ثVw!'isV RMC.E8T"W+9'G+Vp* ք T*B:B(d85fMQR aFSYk-[5XAx.qʝ~ N2$l~"֤/[O_| <vc'΍8OvO09!΢P`.svSYl)lEsWJ6|vg'd^IӭL6By!a5w9ni9/ ȆI[/O{޺<,?Pirr^iyn6be9'W֦\2`?u@;ryWlAde z̕VI%~hT7g$Dc~9эݓkgi^RXX;io[ O{ە$}%e)op~\kuK)}fVA \c[+Α@l8( V[s99~dG1!m3b>?`:8P4H$f'AR~c`GQ p1<12ϤRTB!@/>`q,cGBflPu4ӃΎ̻k.l ;P@-1cG0rASBdII=2"$KLtk\F[Øחx&t Hs޸jêUK"3B8WarL,8]fH}[J@ M\=JMYJ ]J Z-ׯ`4NI,OVь.)!EZ:Բ 6)1x?crɠd\!е)!uu5fC<jKei.Zˋ,!3"dE32Bʯ5D%>~ !]/;LzTܒt;ZꊋzZb(DY!"oj֯wV!FgY]IKKbLI33,kkmľ%c>5Ֆ`xΐ"1 q$96y{%Y4q7*$݀3Yb/$)dU *V"j1*=7~sX񝰐U`)KW~Jү݄Dax+Dd*;bFլ xj J%llh70-YloGi?p_aFaП0bC WDQIT_Vj$lS]YSp"7$DY%|%,ϫqѴzu;pt g(a80=rޗ >>16B@TȕJkRͅ:t&G/t:&"xzѨwvdL%"j#:%Ů.z!FOv8V+''3HHWy]yP ws zGpk=*&G W*^C0![p4<)[Sʳey~TR[hTo+dW. jU<󰾪ޡC[]UÚ}  ^0>흗yY8|y||אaԁp<ȡ~b}IE E˹=,F%vJs . }S˷ gN‡oyWEaޛU=! +k[p~p"f-U2FdȨPB`eI4!~0=lp<\Ri MW +7QSR%+*._ԓTYYLՕ[)q*[3ΨT1xNHX%u` m7{Xp$![&d`u_bYTY?d9:_D:L;qWx%8r=`(Ĭp*3JR{"y PGX(ȡjW1舼_li…_l:ԐlJ'~9ӰixE4݊j2:48lnB`X@0њ䯌dB10b(c߭^~9>/ y\mX_A .7 Dy$4 0|>Ĩ`fB% dVlq˨A1jC<3n]wVO.c\2> ~۹ڐʓd xхV7 &[.ֵ\lO[-[zjADgy^W/dF`kvA^'=gY+#VR@ [ĪPD;lhsxxᕔ7ĸ6r~Aet;|BlPj(U}/ূjя%Tii!R!SajX 5yt\!Pԅ,S dr@ f8%]He+1ઍgX,0#Y,D,E5;x{L2}I) YA£ N,p'{!W'ϝQ't㌓:/9^V7 `]8K u4X>vD,7L-,9d4À!FÀHXX'u`0"tQ\8LB=0}XGA*2!f 9J]fcgXxP)/~t§#G&a|0KeX4,D9ޝ |~޼sjHsKu'H6>X&uMj,:fVZ56c4M3,$eRRWyyiF'Bۢ#B,_T/P!@Kf !I'09&Qw 6y-e;lS?!ބ^bcф SC1B2B"Å|qci!7F 2'Ù$#LQ64|48&8YNNDig5)($TBO)#diZȓ#C t_Vn#m9ҔzScrE"IaRS!FI!wpiog?d@h 1D(qdZݶWKs6Ic$A@ I[b$M)INy 9shܫ}Ng;a@ V^vbg}g։c~γg qPp /~_֧KWY% @:mMz iLl@Y!L!@sq5-.fbY45iݢ@j-:[+KڪvB׊\G=u"\e%āfn:6P]|I[(!A7ƺ)oVfC@|Pķo_%*o4.i.?͝%w9sZӆ€fW(ȡ؎PADd{;tXkb+=5"> _h`mk|JP5G0 <"n|ҀA%W "{i0A;ꝔxGѡ,D0֣ yXRe@/Bpt;MV@omªvmP5QSW0՛Lz>RsJ\bU  X!V dj!Pj`;L2sN5'z;?g57}WA`;[L_;VըLαK6O7GZ^(@ƚʀT4?4 mmm iڞoMQ)gmMPC[TDjrVٛt۞^PbMYZ ti5z4k*фQk>Br&,(x3xDwWd6vspts >=*$YNwci~@rA%-*9@!q Rnݸ }CDK~z~'Kl@\k .F 9`L8y瞟ɍAgP-Cw4 F^ Μg؛7$^mq 'C~VQ <`xR窹!'R?%7 @^i6/_&YrNDǹ [a寺"2{Zhw2?Ł}7dQ2W0lZ;2{W<Aj'Cz'L+␎ 찤&H-ӡ6 ̿7 -Yo%ZY@>|9^ Q8;|QBgEB٢ 0J(Eag >'_.&}Q /޹ Ugv Τc!Yhk2Fׇ=(fGk I(*N^ȇi_?Kԭ#0U+Wv*yr7ۘFy){0Gצ4a/8-SͯB@0ru12qQ zt4uZuNBGD.T&n-c6TuZDSrRQ|OcAHy&e*B0T]l<,DT UJC&r|$g 6**.dqBnw$,\#aB^B0^Gy| >4(zAb3(Z Uz/t֛Myw57TU)LS6Q` ){ iΚU>Hj@CK?+MB|/- X /ܾu / "k6GbjZvtl Y]#T_odUAIUߡR_cM#R hq :G~>}àD}A>)mM*!^4Q2$R}g@^?((KV@2ZlBz/[@^_ުxُBcsl=rPeP _ 1/]D~ d6ey'¸dɳюV[k2m0%"}]HI!X~mS(VNR٪3;x9ٱ (jbrd_x}ӻwUhM <\ypQĺRm>S\jqŖl40YW@>k7xf69.*#!p! En߅@$R!ٮ4Tj ^LUT\O;*B ٢ QBg; yR(QF$ z{F取 *7sUp)#5eyg՞ ܢn4h3&t;pZ4I"c, ȩɤ I.`%wO/~4v$!cBWTRx!55elHOfgMX5GViL ЪM*!4 w+ ƞAEP&CBgRجƸ06(Ƶ[ χ܎p@uT P=u&+2~# vBca;mV0tܴjMZPg2܄ x, ]ksEܠ1AG򿣜wd-WCE?/c+έ] " pūjP~]%szKSw^ xAihLA?f Cô6Lëw(|0b8E./?K19>8 ]G#IR+R/75ary2sgCx%8B6D1@0 l /'F9q" ȡTٰGg"=}e@ M(=sib=JP!=tfFvOF#~UP&Mޔ-[Wi4')t"LOTA@ƽGQʝ4Ja+폏n~šԣw^=R5#AVlzTmXNI=}P:y:\4_1UcIOύ$5=k9@7o6ťC28-tF8g2 d\$W0=UX#X"Y_EU (Qvo "f[_yD% k_,$@8R]SK1^%cإj`Qy *y-N+=/yb,ª[iyt)H%D2"ԙ>Do@,il[ XT!au w%e-$/#tckA6eh/zrn\f1H.ͥ%^󁔖 ȪՇgx(Pܛj&Kδg )ÊγeBh! I~wyAt+wq{Darq9ٟ_, yg}fo*Z*;#=5AKIbΓ',>P**>Y]sS*4[PS/(uK^@/9x "fGЄ!ddrB@n,~GUYj,UUUj>ST(:+`gN) ,agG*/- A@.JXȉUvZWŵ]`}[Ȧ%Hv a8gˢ ).g4(Uiʪi+yỗ0RٗGx)* Bnh dd9wmAp˒;u'-.Ux+\.mZc }Ԃݛ02މ^C; ;RbٺOYK.eUp8;ŭHYr~_{WOQ}SF ^6H= H--e/)?Hή]A|VV>3ԛfSV*mKp dJ!gͦS  1[L .5-SΖ犣IEDoGx5=9+)TmowϫϽO(pXWꅜݡۏB#ʐr,'w/ ''}nw}~{74eS^}>ό9 @v=9; ^r:1|;Cqsj}<<jD5 Ƨ~ʲ| K.eF*/Biq.G/}DF_PGt4}(TE ȡk$f-T\/Л4LiW"# 1@rԸiD+Zt\|Pq 2\-:Ho'j1"CE\gB@. D(3#&8;|~0LP1wG*X?Q{̜8@@ Pn9@y{Nn5ߴpNW!аcf' ЋYs~s⚌Hr[q8Dvs{#0Dj;F=a\ZSP'MP -5dN@<J6}@ YǯK؂P yia (Dd=Nzi{0H3hewxWn#ϖ}:-jΡ.z\@z+[0˰ 7! tT ۾@  뫅H!Aӌ!:C2't8-L;d^Y!ցBM :D<^1a~УpHZȾk 2TCdU v2椤]$y)FvbTܧF%^ 𻽰P JYw^{EĬ%HԴ-9<1cgDen$=7ˀ(s܌Dy?RFN54%I8<С CUpj~0aY\g E{5\u wmHP"=,E_IY~W}Gi gg ${Sư>[, 72* ;/Z'Р| =&%Y%EGMDݜҳce%^0R;f)7)@8]茣w+IHdAw$9dFvRaK4[MRR"'p" hY{ꆱ1aJS镘UX:1L`(ZU0&IeU&fªځ~eN2{fŨo,)53iPt]IFG, {zSaJe :90҈YL6\ÛZ ҩ7vʭ_=Jtk ѓ4b'գhwY't@t2%^'%;F&%陨4&\h2%hlU\_+j` mzAa v6i:,nV >w=D`.>Iqpߕw6J`l{>]6w:&:u^] }H͍a>6*x1f#ֱN(445rHԧA? </7 Pf-4JK9ba`4ݡ.AD6h? R_&tC1qC%iI8V d@00b3PV' d2 GҗѠFEvhD8 cv>y Z4nE OSOO{ O~~'(߂9RjܖZEqQZE3G.`rȼOn9G=~O߉S'P&f7(mL}DL4mR`fӟB>?,<{<{ߩ)I?X]Q:TI?ދ[Wt#Q}>qQF{ll9+K\!֬mC#vb4ty7J Aj3h*@Xf3A{MH| j; hxes>HnB@gүhB`y 0B7 D*7E۾֦=!x肏oP}i*7 l1+& -M ¨C٨Xz[au)6Aza[|9~xO(H]!b9i ABM['@^/}<Ͼt%fYZ=B)XtL' ,\%&- kR_w",7NXqÀӃ!K ävɨ HxZe¢ퟚ)LoBd4](i.%B ˡ)#,'r'dx(68= I0%4`dE7`mT . UG<2uV MMX@ʇfJhU++4ZbI:rwe@}XL}~xGVC2&rN۝^X\.~KnHg1z".\qk4x=S6[Ԁ{0A m6{:WC#ծ1XW.Xi9Q^~5o"D pF$3td5@df_쮙$XO56C+2Bеk&39`-ty6OWb^H%gX%HARө^h R} K9}ȤCc[3|k rYWī+& c)UHi7FS]ZƬUek d2t2z[7" H=55|Xʗ קx:ӎ錰E:F${d B]=!1oJdԐD!dHҷ(ÍiNO >;Qv}~*{}QUX@)oө i:1&-7]E :q{ݎUc>(h!q2:FM k r |1L8aj uu.v :%N]۪Cpl1ٟvNnR! #B;#BШn%b-\P[%Im3fVl m u! ~\$eޯc;(vd &0J%yOj* Il&e O},JRRe1&+C(-&\ ]%J8-*I!H^Ii I)D1*|ċyIV$<#% bCt"8%SDTqOQUlE!$BrH@Ȅ(ī&A5+f&(22(4(c9|%y)ST (5^ e$DK gYDJxf+1*U$J٢h4+%S_`Kj<.%$ (g2]E>=F%%q* 6$y! E̓cQAI#)JTbDXB,gR.;h_ 2lqH DZ`P eT6JBr_"͔ٗsM7I#*Ug,j(^HQ{lhTyϊ<h 4P{X|VP<*̩: x1Y?JLqB!JQxIB ##CI$l]%-f8K,={)i؃GnãB.MLJ,Vm_k Pq5Q+]_ dog[MA̢"Lj-v.󥮐^02_xC!gTKe^,`fӧ 9u Yx|U;ns X\4tȽH҇mcD6-r>ѭ׳ڒf(&)BKw'1uN |Ѕ|o6YWg_=7Oٺm>sfόYoWO&:qY_"X9,7C>E5#chhٗCB~F6oA7֮푪7A>TՋe3l.Dr88=KRHi<)߿̢~BV{c~yoTvvc[>gzx?[(-}\Ⱥ)BV~)wIxF>yF^d.62'Gg-ex/oݻwA,WΕGO}ޏ~6]{]~ 9?wߠ7E' q||kWS x'CpoRēg Y]sև<ךe]ȩ_\'^|1o1xvFP}ͼvI[p K^9k 2D2H LaG| OjXB"kGȆ|JJus#19\Seiia6 ޽m n#{wwag:ږx} 9r.;g-k#mx!K!UCk*t~a'!/Dcʛ{-.?x;$&XJh)901ejQH`\$:0,g2b0"y0{',p[% / ]2Z.--&R +P@v%)i%Vz)37 Z,<)RvH @_52!΂K?noH!w}]vp!!gt܂"$3:Uq\xm Bt:=FGGxƖ24(O 3Bwvr ԅatmE!xXn~BSosR.lBW+ r16VV;.$7{.(O2y WbVUHdj"Oݷ2P|e,3dW8փW^`prvJk}rB\=!.)ƛ{35۵h_k^oO/&|oB-&NTӕx_uGdeĔ,VCr%{.BV|690J4jBFE 'r>H$&2x {OûeImxAǔ{ ̀a,{!o 0A ,M2j>\{"095$+ ̴d :1#-LAMF-d8`ވj2qׇ?gYCk.8\cYW yҒqbY9Xֶ xu+iћ1X` {(u+ׅ|ojf VvtPz9HbK{uB&s_zlZsbhޮTNͭP9{)7qx*:9U`B;Zp1,?kzW .R J'QD=ޑJ1UkM'<)+| -=ڕ@AY.p^K S޶=bS)O$T:GB0IIJrI>(VKy@,+qmYէ+sLbX6)׃pugU*pLwzdQ "Q,zpwww8!e%<w" eդ /V>ѹD1ͥΛ*q3NդW*Rs9AUXmurVjLwa3Z†XVNb!˺sG =]c5b{3BrQ=jB0 v&1 ${x*21H&1m#Ĉㄬ_նphB @` :QoŲrʈ iXye'd0:t[pXsɞ:{cY]u| zmDBL3aeGOz9`vS8!xm¾kÞs&BdB ]HB\uu4 _W5>Y~5U]r6A(k4vV {Cw(v (oR BRu,]fjjREҐ_Kser= ѩש yrɆ-+RR*bزW b60 MȔ"t.PkWa,r,'ix1&l2-gĮ#- D1 -!.3CR D $8\TӖt@W29&ibx>)+%ECUb)U)$,CHW'B\q! &㕐"Ix!^A*6p! BGDѴym% GL,DG)E8>JH HT9VH-*EH$R@!BZ$!""3x$LȠjqQHL2fx) 0 ҈Z?}sK/׿{s¯|k(%_KkݺO'r="^oMߋ xជG7x/uFL?1o<{bה@&{k`Xe<<iY'NdJdFLǀ=ܴt퍇Wxt)"<iKX&UӺ%Ł<< @Qjdcdz;vAAA=ҫ#n $ `ؾ{/B?s[nXIW7V g߿Vս*\ېTI-n޿Vo!`qc#@UIIi^^_]]{k4Vw*dz$?;`?[}߽ ;@ }ho$J%;(?lU i `c؆zϜ{~<ֽWJ|6um}ASD $^z^Zsĉ)<7P!tUlOav}-[6{! HC)|c9 Q};8 iEX3Q"-N|V:abMrLХHX~ N󏂅غ:a V:. P1FvɵH_P7(\EEE 1Fi#Ur.)s1gH!ejsE2pkf}.?Uܪ||[%/)|y&։q@9TXoPB̖&[?b@ JccK [vg܏0k2P%+ϋWUSߟ:EDסW[RUfjkٌ_6XoMgח&FC|P\\52KAr~T 2ouF\goU\13 Q_ `$XZ_٢e;r(rlOwBGL_7-WK&XkPu dZZ"o3{'?4'"[/.2q I/BSr<^vW (Q "o-?/\H~Wg.#·jias6LvUj3x*@I؍/yڢRGlȩ4uWl4m.!$^qrgVYL%h`g&"[/?0BcAۻkkw?haanN Kls3gChs3'} 4+BpDA7JH<5*ǿ(j@Al2LP(X!ll>mm j9<^OLJ9乁o\?wAiO i44Xg8򛿌 %'+|VnDDS%Ԋ2I0K&b=YX_^__?0{ |I 06ChQIrPg SYҰcǎ¡c>at}r"1WT[fo_ J4GlVWS]&we@y$݇j*QJE2_cHuMh8cuE،/F+=אW<2h0s[s±ń'G4bVzq  s3ݒxDb,[PV?26!}VOU<*SbR.zntPSFy( !/<~vB kAؒfBLu}785Z\ܗ;s|pR !̰0]La/ňˆ?$ nDsBH=H I,Cā32|9^ NזH7Dy)V))Gx`0J!A>;8YrI"#K& G Cr TmButvv~7b|z RėDeRH5Aw _66>$!C鹻ECzzΞe$&zwľFM+$r Ow$0*BKi= 'd8V@w($NO>K;+sqrG/{%4;X|[3!dOPSdeB]@;9 HXuz]V9}}HD5!הqezgB{ݏoۢ..GN#IAIwɑOJN#@?{gJB_Ioᑪ^v!A fL]MmkId|2>z={1aB<]]\="D& .+ o.JFmYuy0̐\1Ź{gL[aN]lXR'W{fäĭnU*inuD G9puz%u5'W-dq٨'ͿK^9jo>׿˙O/kbWdCb`A_5]qQVW  X`{cggaO_|HBF?>qVUOaJnyuuAͥ+Bf}1n23@˃ŕr0?< $fwF&SzPP"װxl-/l6Qvy?X=nnΏ,ds7Iٙ$c\RXTkA#KF1AX' K 88t5iJgr:k8Vk?|@IH 26، yH-۩F҃oO \4M)|%$#&|fS ̡0,r-BX'#uGI0}Wr`Iݽ, Q2!=;4v.6莓00O4\ۂ-V #J2-4L"3d0+49RgT'0Ugꇧ%~a[QiJ©jMSwWHs҈~ !^D֗gIx Ok_UY8"B g;}mHZR;*\[oIaEoԊT%K"a1u :+GA˝xS"Lݘ!`0xMNDn]r8=!YHbyA BNtfC<\G{fnoT mAF*Br?.+)fP p'-K =A&T==ɕʼH0T?B@]p:8JJ+\>ߛ+H tb<@3!WPQ2'Ä-B}oo vBەGGfFF·H @6T!QH9H>(=@{1҅p&bl\-rIEȻIIo)qkO2lp6BE|33Fm=Ao_ F<ZO{[b*2 I,ve[|(~TƜj}Տ b~8~B}%)ل6Đ7$2x^NCϱO58 ]C phP6!D١x8e2 ÿ bQ.?DqM0M7cJ{ 1S|/5Ŭ XS B^XFjaSl޹~~ ~ . Bw_Ώ)r0͒N:IU^v!& C2٠ {52amKmLȞ MB(vhYPBAi+[K9<;>rL38ږQtgBI#[ "1E,t:8&HB駽s-u!B/I-D׾C8mv*$*;^9aE]0 jW @`lRVۊLN\0!?Yг_eQdh4I 8` =eM F֌} !İc$8))ʬ<d!m"7"wV269V%o.B"iĄxnµMf8M4B6Ѷ[0qNi2.E%\e,@7oYÚ^7 Iqsi3# dRU 'Crl/MXb"1|X' {}~o*IpZwϚEwMBMMw!JC:ںV%i䤢p|LCplc/ |Ȳ]W,m>G.s*D0a@ %%0@:ܳKXHf&޷ _IBko(TK2@jW^/Z2Gr~k$A@ށM:ܨn>6l pBSㅓu:T>;+qPxAt=Pl'EB]<<0jon"ihIu|gk E Bkf_*$4YBUcT. }Њ},Ihᩡ'b Pn(!DZ\DvFfW>"d"c}`b- LJ&$  iy *nlP_d k_5B=j#Ez)9j9>!H䢘8d}/())[z2a2σ h"UbB ayiEc͑M$!XݓU!?Zxmvkْz{y|㴋ڢ#-ZG8aaE;QNt.>Gsf{N3 qNNS"h r vTbA,o܎xjDآ@9"j'UosVoqxL .믿^n}/SeA]ƪ NP AqVJqVl}@9ؚ'"BX{0s |Ӄ DZOR_~u{b#ܖ~]<5M;05y| v ^+h~瘩TvxMI(*W^7+U~!F+g1,tm,D9aw.Љo 1pzt… jůV!4P{e\y x] 7^ 7?J%}`Pꙝ^$+s"w/d!Խ^Tkxdz:>y3rw~9}yaA\ hLKAxڝ)oQbh Ћ 02{P_vޖn|g}*j"jTCj5U3l$8++xE gizvIvm \p}xvJhS"?G!;ry{%FHgrOrTO0, < n>~~t't!?5-ۏ5*Q=Q]b kKD! HIe# >fq({m҅aN)iCpw8`3-x-f"9}ܨ9|8ZUe tM&ݻ[ DF@ 0M"$c!&~d!�5!xڨ?6BM:Tp?ds<]y3|z.uC [ !1:3B0_׭/L~"!'<) h`Y➮=i`nt$@urۀrٞ *B|8QE[pF#[ ȶXɊ__{2!ÀΝ9ؒ~2"F&#ں>oxOz@>mB?%2r!Maxp= {*?+b?eAȡ!updmQӀ꽯؟_~}I^+:|CRGQ6!TɧEѹJV6AԄ|U՟vaxH*ooo? M wQMyc-5 TqXKD c5A|$ Nmz?ivM/}ל A==l+ówO@3I-8N9.U@@RDGoyO|8eH{] f]e]Iɞ@. 䦟Xօey4u+CQC{*rp#d %N y8!9tӛ[w= UfC~7HE^ ' ;<rW ֱٍȭcK?.ri{+%cá%wZo!nG%+|n@@m1, sF{XRdܺM*rB^G"?^ $Dm"( K :"]Wp(}o!殜U[_z8s7A<a2GȔ]D+r6~/p9Bw)t'}(Ws_"@"Bt1R,\rpX`AӕƆVںau׮+:qxG6f>5vb6r2_lAr>P> d<[0ZY䠽mG8(hU'sTU=ҥ7-DXѡq!< P>³?ԕRዬ,,l>v*?x`ODވڏfv\ykWNקG8~ Fه]dN]CƵ'_DG?#zPíM؂ŲwkwG$(;T|;::: n֠WZ]j!MWϫ<< |w; ɀTG,_p+ 7+;MSGx*/y M\;RU" w H9k&Ћ.}IվBbj{X;9S~HKrS!I+GV/NwE + +6XS}@>4 /# Q|,\)@vN% @.F9R]0^v{x+ ;R~ؖS1K) =f Guᒲ(Ϝzt(ʋ] Hov$-KfI8GD7#LϿhp'^p^\{~l H~iEi!hb@?x aش(r? ~*=Nw@450ݾ@vPD"•3l7 C5(;RM> I_ȯ 7}; KygfFaTS jЇX5ȹe9Դ2 T4Y yIO ;/<QSaYxk09|_>~w3pjK7~㮮|Vmsy@= 9/ ~! 5&Bω53B/䳷,jp޶B4v'Ʋ[/o28:Vڢ)xPTطɃ[Gv@8SbbG:z"~濾5*xxH &Hkmt7>|y džǚV5Z` ӵ .OϋR A@#GPA߰FV׌W\ E+18RƔJGHm-gv6mhl)nR%Ҫ]vG6:6@h',yM@̞=gkӸ!S$&BIJuu"a@V*-(PSOyiuvHJ"@CȾ&nS}-~^ qU cTDzTQ ⋇r7ce ~^؎8D>? [~x;Μ'.[ZL:vbK"Ky1s @RA1Z?7=mza¯x7. я0ʩ*8M@Tܲ( 6(Hc I$q35'Dt {t  $-f@Rwߥ /L&UʥxE$f]=+ﴠ{rus'>V^n ;EII\',DXTb9ΨrCd|ObEC]]_wC>ᄍ,V 볎f-hՉ9!D!TXJe ߂|p!#%X"6M#8HOhSkoc7:q{.֟ص HO?a).>B¥p뚲!9ag~Fי]7PSֳ/5tzyB#C>ۇL,(}zO-Aw޽Ân*᠆%x }⵵}ؒb]o 2 q2#VH ˤ; ߑ@KaDrtC8 9?U ^@<,x>jxZ᧨HrxGLb@imoVtwoh'(5~Sk "O^K&bc+M u^E,tΞ C[}xL B 嗶mKb>@shX" Un 1P ZΞiłR\In^ Bm $'G@vH  +t B[ӓmEE%^ZtֺO@|-keN^_qJaC59Tmsrb]e㜇 O)&;"IxCs3) >3J3Q H[WfBzOj]z O>y߳3:h$t Q  9Y(Hh@X@"ҝHPH,^@ְ%z_XB@o 'GY9,ݟֻFH󖏐OOHO qo{$UZ.VJ0<[^2r#%0_)HsGMO>˟>53;!  ^/c{G=w<`[G`$sS $ޞff6r{q5U;.P3pDa,ӁH1p3x.n' @ H?,Dck99g@HNNut&@-'~@ ܗ_9 FH<҈Kt @$Dv"%kגˢ, `ZA+ ,&2+!2/E1̊ d<, ]a, %H %5V'>MZQQ=%2@8&@qH6z/E E<_BYK@1= K@nA(b*ăƛo>@ʀH\2%({ M "x$ *^ $%h M,k 3~%D:ͮ~TCH/n{㍶G$sOIJ lgO]Ueɨ@g.?<ЀJV+K@5&SrOQ/pw=\ eIr7yDReK,oۑ2r9&kma czG<8J +,ԒQB%M)Ԡ2 |/Фj؁:U j;'pɁjIq}bK^/ Qa~!? 8O}`/ܶt[bh{l-N24~D$\b&3& &;6^T`HWY0[ /R&Z4t45h`-{ze hp@xX.ܖ`,@`X#RVKS ^4[uDdLGsKmFi j|% e _X:c:s>@Dɰ(JoaԸJg ${+I݄zFPA=Ѭqnc#=N?h{"P@!~vNtMk~h+ڎ#M,!;@ AZPp;9ө+;I$d'!$C+HR Jh+IDTG%PN֢DMR 8 $9O][+bHXc(̡!ˋ)!RҟG …>sn\b0@ HFDF(@ިrɝO4I\BqZahHQy^gGn:yn1Mk4 l˨Yaa-|h Ֆ@\@3A-k@TY3z6mbat߲Y iFyJW3j2~KQM( @0ƚQHŦGP=0( 8Qf:Q&!NpB66[m63ZbgjޙriYPof 1B A 멇V{FH 4 ?$~Z4ZT0Uh>a˝$:zk`kIГU,L, $fB?^&ݲXJF<6@4XD$@-O@Ikz Sߋ(rUǔ_*AcNU{M5$jT-J^*t~峫}< 2}rj~96KTBgrs4Xe䈖1HNYr`xanEUFiv[͌)Ӡ0 aTR!/4 QA' $!O324̂T~&`lGez W%(AѳBW=,x੯eaLFNAUFv!xB3iuqh5ܩ]93xGn4w^4gq{(ǐO}CzQ~H١3pmh{ݯ"?It`-2Qw@}OOm~PqC3 X]lECSSFY=9/7hmL7Ul =èioY 9( S<~#OKNSo eTNk!I Ze GCjJr^o%; 湩(8Lv9I1j^m/ĸ0J2ׇ4BU#ET7Ңx`BMyƆFQ(O]0>e@,wwȡaK. s> t_:ыH7ۯe-{ vĤq+x ƒW^=&EJEȰqLaZ&KyJe2Zʯ^}%zä!SRs]*/j5&*SӡT.'cRv0@^މtӡ:N<}:RܲtB a df\ e{b>Ïa8/;lD?>LJ@=-8}yq bv^xyD~\xݻ|uݯưonH_Y-$b<Kʑ* ʅBVݻO=ݔ?u8^,g"P(w5?S3V͢+ !w4_}3#~_ֵ~"I20BǑKcJ%<)HLe*ZeUE3ΒR{,*((kL5JQhT(qeFAUxI! 6{ 5Q[#rd/wsƾA}lc?@uDS& D4Ñ&IXb 3OVZ!aIRXNkzY;=eYI.={C Qzy n( Mmv4g 7H|zD;QoϞ$mt_?Y:"}F5|W_ݿ_?ܿo懯7LxT>--+,)MN{zrhrD$|$@:͐1wID@|FFHSsfYmZN+t .k-Q uЄLd,+eZyPrZRE>U$+SVS _.>O %-G3Blƨ}1;UvQAiѠg41`(SpQ8ʵJ*;FO1()F+V,pm%"B"d2埖JEL%<}ܲjTZ+̗&JIp嵇aՇ/":X EU'25, DfTMɉ$_<^QŒ7U01ǡETK%%X B-U$ !MΝ;w޵>>(0 jV>=k*5gl8Y'6Z0u@mC߷ۯ"ݧ}l?|G/|w/.ۿ/.}?zZ/nu!8pG_|Wa~Wÿ~ol|c$ּN]X1ދo~omk2n&靋.}޼x xCCc~Lv?wf?z L=v)O<~V! ?=W7f%?YI-ڟЍ{&?m8ڄ8.5Vmز{ԟ?8ik}Jtr{ȷ/[>wA|z/G||czzY~Z9~l3J8!f H;|z<+c\ KJ `zeDNȵ~M~׈No"8A{B9q͹-/}76^^_:sbPi:R?0+Q*5 '^YP1}d1,B??5⯠2yHB.cX׉MAMC5+k7WPN,ce֗XHŦldzv[z//_[+%waq~`V$٬U7'w(s`4";9cπߋC)e=gz#9b p~䈶+h@;Z v'h}hlg' [YSS{8QRp sقiFh,6;8Q}2<}!;y G;ǜ2i yH~v_-:`? 40Lv¡T)yBģU`%O|d*'b])R%RLlUC]f$U~-W}3U6^l$STMU(ɚTNM)Q3Ō9aI2bHebU5ȑ9xDž$)IYIe$l)9˓u5syLxjƽB:/%YO%t1CUI!yi(8cIJb1`Ƽ0 1s0X~)S82 xMb_m![-b t[-d_! !Ã"!$  / GȞ^'ԡohҝ!q=[Ha 3E?1@ Gowf:dEHd#< "d`>gt֭B$vyZ:`?cK|DhS6<'[БDdrN v ?B` bDI q$1K#q$\A`EHhJΟ u gΞ?A?)dOuJQt>Hg!W@Z!q5X|H]{9> m)=reϝVƕ\ re)v*8/˜Og.T#.9KHXq7$s\Eb$+z-N<"B^+̭]￷v룵˕R%V3UĔdբKqJW]8zi|+EkLB|ZX授䙡O: :w;wOsn:wnycck}A)/3RztWVH9T[m%oll7JDPTy!ͩ Q;wD嵅<#3D^% i171NI-J?B)J|EGHњP9eKK|ې=LA|\ff<3 ˷o\-D "꥗6鹥9&bni\.Aļ9/o7jl.]X$ {*+"{,yyDxF~xBFj#J1 po P7:s8߀^"vJeYZZ]̝;,!IC*b[ږtsVY]ŢNH<Y<^8yqIk!ͭ(.2'h{|8x#,dv[S9N|NS^+&G-=k˚m^lÝR)o0{c7;b yf!/ ,=O48ދ{n toC`v!'MA푙*+-x;P]]AuZI^؄XLΫȐv=x_/BQA*]ZYoˢy۲b}ÕV[Vzٖ5#F #3##4ۚ[Rj"#¦n>n{%$l߿?#>X.Vbޅe?SsU,!AHRoˊP{zpU{nuw@>˸Fb\h2O')uZC'H26rOH`ºoA[V7.kȳE _i[֕6ܵΪtJ Nwǥ}L_XST=GZ袻_[ Lsg'A?X%15TSʆE{wn.-DV_#N3#>gB M !m7lGo}X~=X!c,j'D0RaÁ,IdšJØ4ɂ!: U.iH#4-th˦<됛aopkOhȦE]; wUJ%"NLVTA5=AN@HEpd*Q<$g**d,=]fTy চJ֮)Lj A%(("(T$P|ZˊR.HNda9 r&"+ɴGNy)Ɋ" %#偽*RëIٚs-g)##dVBeLK5p4d2'Aa)^ɔYYZ*1g1)P*YsFy8FdYjW'h+$NCBp9Tr7SӨ*@8!fʃcLBP)1叿 Pqk(DQ(1'Dϊ#/2XNcKƮ9>g3MQ_p2IENDB`awf-extended-3.2.0/scripts/000077500000000000000000000000001507226270000155575ustar00rootroot00000000000000awf-extended-3.2.0/scripts/archlinux/000077500000000000000000000000001507226270000175545ustar00rootroot00000000000000awf-extended-3.2.0/scripts/archlinux/PKGBUILD.gtk2000066400000000000000000000032731507226270000215530ustar00rootroot00000000000000pkgname=awf-gtk2 pkgver=3.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 2" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk2>=2.24.0' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk2') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("...") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk2 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done }awf-extended-3.2.0/scripts/archlinux/PKGBUILD.gtk3000066400000000000000000000032631507226270000215530ustar00rootroot00000000000000pkgname=awf-gtk3 pkgver=3.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 3" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk3' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk3') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("...") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk3 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done }awf-extended-3.2.0/scripts/archlinux/PKGBUILD.gtk4000066400000000000000000000032641507226270000215550ustar00rootroot00000000000000pkgname=awf-gtk4 pkgver=3.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 4" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk4' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk4') #conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("...") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk4 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done }awf-extended-3.2.0/scripts/archlinux/PKGBUILD.gtk5000066400000000000000000000032641507226270000215560ustar00rootroot00000000000000pkgname=awf-gtk5 pkgver=3.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 5" arch=('x86_64') url='https://github.com/luigifab/awf-extended' license=('GPL3') depends=('gtk5' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk5') #conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=("...") prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk5 make -s } package() { cd "$pkgname-$pkgver" install -Dpm 755 "src/$pkgname" "$pkgdir/usr/bin/$pkgname" install -dm 755 "$pkgdir/usr/share/applications/" desktop-file-install --dir="$pkgdir/usr/share/applications/" "data/$pkgname.desktop" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" install -dm 755 "$pkgdir/usr/share/applications/icons/hicolor/" for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/$pkgname.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/$pkgname.svg}; done cp -a data/icons/* "$pkgdir/usr/share/applications/icons/hicolor/" install -Dpm 644 "data/$pkgname.bash" "$pkgdir/usr/share/bash-completion/completions/$pkgname" install -Dpm 644 "data/$pkgname.1" "$pkgdir/usr/share/man/man1/$pkgname.1" install -Dpm 644 "data/$pkgname.fr.1" "$pkgdir/usr/share/man/fr/man1/$pkgname.1" for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 "$pkgdir/usr/share/locale/$code/LC_MESSAGES/" msgfmt "src/po/$code.po" -o "$pkgdir/usr/share/locale/$code/LC_MESSAGES/$pkgname.mo" done }awf-extended-3.2.0/scripts/debian-gtk2/000077500000000000000000000000001507226270000176465ustar00rootroot00000000000000awf-extended-3.2.0/scripts/debian-gtk2/changelog000066400000000000000000000004751507226270000215260ustar00rootroot00000000000000awf-gtk2 (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk2 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian-gtk2/clean000066400000000000000000000000301507226270000206440ustar00rootroot00000000000000icons-gtk2/ locale-gtk2/awf-extended-3.2.0/scripts/debian-gtk2/control000066400000000000000000000014261507226270000212540ustar00rootroot00000000000000Source: awf-gtk2 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0) Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 2 version. awf-extended-3.2.0/scripts/debian-gtk2/deb.sh000066400000000000000000000115171507226270000207410ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev cd "$(dirname "$0")" version="3.2.0" gtk="gtk2" mkdir builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental questing plucky noble jammy focal bionic xenial trusty; do printf "\n\n#################################################################### $serie ## awf-gtk2 ##\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$gtk/* debian/ cp scripts/debian/*$gtk* scripts/debian/copyright scripts/debian/metadata scripts/debian/watch debian/ head -n -1 debian/*$gtk*.install > debian/install ; rm debian/awf-$gtk.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata if [ $serie = "experimental" ]; then mv debian/control.debian debian/control mv debian/changelog.debian debian/changelog rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc else # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mx debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/experimental/'$serie'/g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S fi cd .. if [ $serie = "experimental" ]; then echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic awf-${gtk}_$version*.changes rm *amd64.changes elif [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD/"builder/*.deb "$PWD/"builder/*.changes printf "\n" rm -rf builder/*/awf-extended-3.2.0/scripts/debian-gtk2/rules000066400000000000000000000011241507226270000207210ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk2 execute_before_dh_install: cp -ar data/icons/ icons-gtk2/ for file in icons-gtk2/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk2.png; done for file in icons-gtk2/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk2.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk2/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk2/$$code/LC_MESSAGES/awf-gtk2.mo; \ done awf-extended-3.2.0/scripts/debian-gtk3/000077500000000000000000000000001507226270000176475ustar00rootroot00000000000000awf-extended-3.2.0/scripts/debian-gtk3/changelog000066400000000000000000000004751507226270000215270ustar00rootroot00000000000000awf-gtk3 (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk3 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian-gtk3/clean000066400000000000000000000000301507226270000206450ustar00rootroot00000000000000icons-gtk3/ locale-gtk3/awf-extended-3.2.0/scripts/debian-gtk3/control000066400000000000000000000014111507226270000212470ustar00rootroot00000000000000Source: awf-gtk3 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 3 version. awf-extended-3.2.0/scripts/debian-gtk3/deb.sh000066400000000000000000000115161507226270000207410ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-3-dev cd "$(dirname "$0")" version="3.2.0" gtk="gtk3" mkdir builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental questing plucky noble jammy focal bionic xenial trusty; do printf "\n\n#################################################################### $serie ## awf-gtk3 ##\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$gtk/* debian/ cp scripts/debian/*$gtk* scripts/debian/copyright scripts/debian/metadata scripts/debian/watch debian/ head -n -1 debian/*$gtk*.install > debian/install ; rm debian/awf-$gtk.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata if [ $serie = "experimental" ]; then mv debian/control.debian debian/control mv debian/changelog.debian debian/changelog rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc else # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mx debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/experimental/'$serie'/g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S fi cd .. if [ $serie = "experimental" ]; then echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic awf-${gtk}_$version*.changes rm *amd64.changes elif [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD/"builder/*.deb "$PWD/"builder/*.changes printf "\n" rm -rf builder/*/awf-extended-3.2.0/scripts/debian-gtk3/rules000066400000000000000000000011241507226270000207220ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk3 execute_before_dh_install: cp -ar data/icons/ icons-gtk3/ for file in icons-gtk3/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk3.png; done for file in icons-gtk3/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk3.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk3/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk3/$$code/LC_MESSAGES/awf-gtk3.mo; \ done awf-extended-3.2.0/scripts/debian-gtk4/000077500000000000000000000000001507226270000176505ustar00rootroot00000000000000awf-extended-3.2.0/scripts/debian-gtk4/changelog000066400000000000000000000004751507226270000215300ustar00rootroot00000000000000awf-gtk4 (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk4 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian-gtk4/clean000066400000000000000000000000301507226270000206460ustar00rootroot00000000000000icons-gtk4/ locale-gtk4/awf-extended-3.2.0/scripts/debian-gtk4/control000066400000000000000000000014111507226270000212500ustar00rootroot00000000000000Source: awf-gtk4 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 4 version. awf-extended-3.2.0/scripts/debian-gtk4/deb.sh000066400000000000000000000114631507226270000207430ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-4-dev cd "$(dirname "$0")" version="3.2.0" gtk="gtk4" mkdir builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental questing plucky noble jammy; do printf "\n\n#################################################################### $serie ## awf-gtk4 ##\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$gtk/* debian/ cp scripts/debian/*$gtk* scripts/debian/copyright scripts/debian/metadata scripts/debian/watch debian/ head -n -1 debian/*$gtk*.install > debian/install ; rm debian/awf-$gtk.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata if [ $serie = "experimental" ]; then mv debian/control.debian debian/control mv debian/changelog.debian debian/changelog rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc else # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mx debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/experimental/'$serie'/g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S fi cd .. if [ $serie = "experimental" ]; then echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic awf-${gtk}_$version*.changes rm *amd64.changes elif [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD/"builder/*.deb "$PWD/"builder/*.changes printf "\n" rm -rf builder/*/awf-extended-3.2.0/scripts/debian-gtk4/rules000066400000000000000000000011241507226270000207230ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk4 execute_before_dh_install: cp -ar data/icons/ icons-gtk4/ for file in icons-gtk4/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk4.png; done for file in icons-gtk4/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk4.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk4/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk4/$$code/LC_MESSAGES/awf-gtk4.mo; \ done awf-extended-3.2.0/scripts/debian-gtk5/000077500000000000000000000000001507226270000176515ustar00rootroot00000000000000awf-extended-3.2.0/scripts/debian-gtk5/changelog000066400000000000000000000004751507226270000215310ustar00rootroot00000000000000awf-gtk5 (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk5 (2.5.0-1) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian-gtk5/clean000066400000000000000000000000301507226270000206470ustar00rootroot00000000000000icons-gtk5/ locale-gtk5/awf-extended-3.2.0/scripts/debian-gtk5/control000066400000000000000000000014111507226270000212510ustar00rootroot00000000000000Source: awf-gtk5 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-5-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 5 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 5 version. awf-extended-3.2.0/scripts/debian-gtk5/deb.sh000066400000000000000000000114401507226270000207370ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-5-dev cd "$(dirname "$0")" version="3.2.0" gtk="gtk5" mkdir builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental questing; do printf "\n\n#################################################################### $serie ## awf-gtk5 ##\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$gtk/* debian/ cp scripts/debian/*$gtk* scripts/debian/copyright scripts/debian/metadata scripts/debian/watch debian/ head -n -1 debian/*$gtk*.install > debian/install ; rm debian/awf-$gtk.install rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata if [ $serie = "experimental" ]; then mv debian/control.debian debian/control mv debian/changelog.debian debian/changelog rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc else # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mx debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog else mv debian/changelog.ubuntu debian/changelog sed -i 's/experimental/'$serie'/g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S fi cd .. if [ $serie = "experimental" ]; then echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic awf-${gtk}_$version*.changes rm *amd64.changes elif [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD/"builder/*.deb "$PWD/"builder/*.changes printf "\n" rm -rf builder/*/awf-extended-3.2.0/scripts/debian-gtk5/rules000066400000000000000000000011241507226270000207240ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk5 execute_before_dh_install: cp -ar data/icons/ icons-gtk5/ for file in icons-gtk5/*/*/awf.png; do mv $$file `dirname $$file`/awf-gtk5.png; done for file in icons-gtk5/*/*/awf.svg; do mv $$file `dirname $$file`/awf-gtk5.svg; done for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-gtk5/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-gtk5/$$code/LC_MESSAGES/awf-gtk5.mo; \ done awf-extended-3.2.0/scripts/debian/000077500000000000000000000000001507226270000170015ustar00rootroot00000000000000awf-extended-3.2.0/scripts/debian/awf-gtk2.bash-completion000066400000000000000000000000331507226270000234250ustar00rootroot00000000000000data/awf-gtk2.bash awf-gtk2awf-extended-3.2.0/scripts/debian/awf-gtk2.install000066400000000000000000000004421507226270000220130ustar00rootroot00000000000000data/awf-gtk2.desktop usr/share/applications icons-gtk2/* usr/share/icons/hicolor locale-gtk2/* usr/share/locale debian/fr.luigifab.awfgtk2.metainfo.xml usr/share/metainfo usr/bin/awf-gtk2 usr/binawf-extended-3.2.0/scripts/debian/awf-gtk2.manpages000066400000000000000000000000421507226270000221340ustar00rootroot00000000000000data/awf-gtk2.1 data/awf-gtk2.fr.1awf-extended-3.2.0/scripts/debian/awf-gtk3.bash-completion000066400000000000000000000000331507226270000234260ustar00rootroot00000000000000data/awf-gtk3.bash awf-gtk3awf-extended-3.2.0/scripts/debian/awf-gtk3.install000066400000000000000000000004421507226270000220140ustar00rootroot00000000000000data/awf-gtk3.desktop usr/share/applications icons-gtk3/* usr/share/icons/hicolor locale-gtk3/* usr/share/locale debian/fr.luigifab.awfgtk3.metainfo.xml usr/share/metainfo usr/bin/awf-gtk3 usr/binawf-extended-3.2.0/scripts/debian/awf-gtk3.manpages000066400000000000000000000000421507226270000221350ustar00rootroot00000000000000data/awf-gtk3.1 data/awf-gtk3.fr.1awf-extended-3.2.0/scripts/debian/awf-gtk4.bash-completion000066400000000000000000000000331507226270000234270ustar00rootroot00000000000000data/awf-gtk4.bash awf-gtk4awf-extended-3.2.0/scripts/debian/awf-gtk4.install000066400000000000000000000004421507226270000220150ustar00rootroot00000000000000data/awf-gtk4.desktop usr/share/applications icons-gtk4/* usr/share/icons/hicolor locale-gtk4/* usr/share/locale debian/fr.luigifab.awfgtk4.metainfo.xml usr/share/metainfo usr/bin/awf-gtk4 usr/binawf-extended-3.2.0/scripts/debian/awf-gtk4.manpages000066400000000000000000000000421507226270000221360ustar00rootroot00000000000000data/awf-gtk4.1 data/awf-gtk4.fr.1awf-extended-3.2.0/scripts/debian/awf-gtk5.bash-completion000066400000000000000000000000331507226270000234300ustar00rootroot00000000000000data/awf-gtk5.bash awf-gtk5awf-extended-3.2.0/scripts/debian/awf-gtk5.install000066400000000000000000000004421507226270000220160ustar00rootroot00000000000000data/awf-gtk5.desktop usr/share/applications icons-gtk5/* usr/share/icons/hicolor locale-gtk5/* usr/share/locale debian/fr.luigifab.awfgtk5.metainfo.xml usr/share/metainfo usr/bin/awf-gtk5 usr/binawf-extended-3.2.0/scripts/debian/awf-gtk5.manpages000066400000000000000000000000421507226270000221370ustar00rootroot00000000000000data/awf-gtk5.1 data/awf-gtk5.fr.1awf-extended-3.2.0/scripts/debian/changelog.debian000066400000000000000000000016671507226270000221060ustar00rootroot00000000000000awf-gtk (3.2.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (2.9.0-1) unstable; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 (Closes: #1096351) -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 02 Feb 2024 20:00:00 +0000 awf-gtk (2.6.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Thu, 09 Sep 2021 20:00:00 +0000 awf-gtk (2.5.0-5) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian/changelog.mx000066400000000000000000000013761507226270000213050ustar00rootroot00000000000000awf-gtk (3.2.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (3.0.0-1) mx; urgency=low * New upstream release * Add support for CSD window * Add --enable-only-gtkx and --disable-gtkx options -- Fabrice Creuzot Mon, 05 May 2025 20:00:00 +0000 awf-gtk (2.9.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.1-1) mx; urgency=low * Initial MX Linux package release -- Fabrice Creuzot Mon, 03 Mar 2025 20:00:00 +0000 awf-extended-3.2.0/scripts/debian/changelog.ubuntu000066400000000000000000000022541507226270000221770ustar00rootroot00000000000000awf-gtk (3.2.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (3.0.0-1) experimental; urgency=low * New upstream release * Add support for CSD window * Add --enable-only-gtkx and --disable-gtkx options -- Fabrice Creuzot Mon, 05 May 2025 20:00:00 +0000 awf-gtk (2.9.0-1) experimental; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 (Closes: #1096351) -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Fri, 02 Feb 2024 20:00:00 +0000 awf-gtk (2.6.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Thu, 09 Sep 2021 20:00:00 +0000 awf-gtk (2.5.0-5) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-3.2.0/scripts/debian/clean000066400000000000000000000001431507226270000200040ustar00rootroot00000000000000icons-gtk2/ icons-gtk3/ icons-gtk4/ icons-gtk5/ locale-gtk2/ locale-gtk3/ locale-gtk4/ locale-gtk5/awf-extended-3.2.0/scripts/debian/control.debian000066400000000000000000000021501507226270000216230ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev, libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 3 version. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 4 version. awf-extended-3.2.0/scripts/debian/control.mx000066400000000000000000000030431507226270000210270ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 2 version. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 3 version. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 4 version. awf-extended-3.2.0/scripts/debian/control.mxo000066400000000000000000000022341507226270000212070ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 2 version. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 3 version. awf-extended-3.2.0/scripts/debian/control.ubuntu000066400000000000000000000030431507226270000217250ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 2 version. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 3 version. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. . This package provides the GTK 4 version. awf-extended-3.2.0/scripts/debian/copyright000066400000000000000000000047041507226270000207410ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://github.com/luigifab/awf-extended Upstream-Contact: Fabrice Creuzot Files: * Copyright: 2011-2016 Valère Monseur (valr) 2020-2025 Fabrice Creuzot (luigifab) License: GPL-3+ Files: */fr.luigifab.*.metainfo.xml */awf-*.bash */slackware/* Copyright: 2020-2025 Fabrice Creuzot (luigifab) License: Expat License: GPL-3+ 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 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Comment: This license also known as "MIT" or "MIT X11" however FSF consider "MIT" labelling ambiguous and copyright-format specification recommend to mark such license as "Expat". awf-extended-3.2.0/scripts/debian/deb.sh000066400000000000000000000123521507226270000200720ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev cd "$(dirname "$0")" version="3.2.0" mkdir builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu and MX Linux for serie in experimental unstable questing mx25 mx23 mx21; do printf "\n\n#################################################################### $serie ## awf-gtk ##\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian/* debian/ rm -f debian/deb.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata if [ $serie = "experimental" ]; then mv debian/control.ubuntu debian/control # yes mv debian/changelog.debian debian/changelog rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc else # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "unstable" ]; then mv debian/control.debian debian/control sed -i -e 's/ --disable-gtk5/ --disable-gtk2 --disable-gtk5/g' -e 's/ "gtk2"//g' -e 's/ "gtk5"//g' debian/rules elif [ $serie = "mx21" ]; then mv debian/control.mxo debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx23" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog rm debian/*gtk5* cat debian/clean | grep -v gtk5 | grep -v gtk6 > debian/clean elif [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog rm debian/*gtk4* debian/*gtk5* cat debian/clean | grep -v gtk4 | grep -v gtk5 > debian/clean elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog rm debian/*gtk2* debian/*gtk5* cat debian/clean | grep -v gtk2 | grep -v gtk5 > debian/clean else mv debian/changelog.ubuntu debian/changelog sed -i 's/experimental/'$serie'/g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog rm debian/*gtk5* cat debian/clean | grep -v gtk5 | grep -v gtk6 > debian/clean fi rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu echo "=========================== buildpackage ($serie) ==" dpkg-buildpackage -us -uc -ui -d -S fi cd .. if [ $serie = "experimental" ]; then echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic awf-gtk_$version*.changes rm *amd64.changes elif [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD/"builder/*.deb "$PWD/"builder/*.changes printf "\n" rm -rf builder/*/awf-extended-3.2.0/scripts/debian/fr.luigifab.awfgtk2.metainfo.xml000066400000000000000000000013131507226270000250560ustar00rootroot00000000000000 fr.luigifab.awfgtk2 awf-gtk2 GPL-3.0-or-later MIT Theme preview application for GTK 2

A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk2.desktop awf-gtk2
awf-extended-3.2.0/scripts/debian/fr.luigifab.awfgtk3.metainfo.xml000066400000000000000000000013131507226270000250570ustar00rootroot00000000000000 fr.luigifab.awfgtk3 awf-gtk3 GPL-3.0-or-later MIT Theme preview application for GTK 3

A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk3.desktop awf-gtk3
awf-extended-3.2.0/scripts/debian/fr.luigifab.awfgtk4.metainfo.xml000066400000000000000000000013131507226270000250600ustar00rootroot00000000000000 fr.luigifab.awfgtk4 awf-gtk4 GPL-3.0-or-later MIT Theme preview application for GTK 4

A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk4.desktop awf-gtk4
awf-extended-3.2.0/scripts/debian/fr.luigifab.awfgtk5.metainfo.xml000066400000000000000000000013131507226270000250610ustar00rootroot00000000000000 fr.luigifab.awfgtk5 awf-gtk5 GPL-3.0-or-later MIT Theme preview application for GTK 5

A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.

https://github.com/luigifab/awf-extended awf-gtk5.desktop awf-gtk5
awf-extended-3.2.0/scripts/debian/metadata000066400000000000000000000006101507226270000205010ustar00rootroot00000000000000Bug-Database: https://github.com/luigifab/awf-extended/issues/ Bug-Submit: https://github.com/luigifab/awf-extended/issues/new Documentation: https://github.com/luigifab/awf-extended Repository: https://github.com/luigifab/awf-extended.git Repository-Browse: https://github.com/luigifab/awf-extended Screenshots: https://raw.githubusercontent.com/luigifab/awf-extended/levelup/images/gtk3.pngawf-extended-3.2.0/scripts/debian/rules000066400000000000000000000012311507226270000200530ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ --with bash-completion override_dh_auto_configure: dh_auto_configure -- --disable-gtk5 execute_before_dh_install: for gtk in "gtk2" "gtk3" "gtk4"; do \ cp -ar data/icons/ icons-$$gtk/; \ for file in icons-$$gtk/*/*/awf.png; do mv $$file `dirname $$file`/awf-$$gtk.png; done; \ for file in icons-$$gtk/*/*/awf.svg; do mv $$file `dirname $$file`/awf-$$gtk.svg; done; \ for file in src/po/*.po; do \ code=`basename "$$file" .po`; \ mkdir -p locale-$$gtk/$$code/LC_MESSAGES/; \ msgfmt src/po/$$code.po -o locale-$$gtk/$$code/LC_MESSAGES/awf-$$gtk.mo; \ done; \ done awf-extended-3.2.0/scripts/debian/watch000066400000000000000000000005071507226270000200340ustar00rootroot00000000000000version=4 opts=\ filenamemangle=s%.*/@ANY_VERSION@%@PACKAGE@-$1.tar.gz%,\ downloadurlmangle=s%(api.github.com/repos/[^/]+/[^/]+)/git/refs/%$1/tarball/refs/%g,\ searchmode=plain \ https://api.github.com/repos/luigifab/awf-extended/git/matching-refs/tags/v \ https://api.github.com/repos/[^/]+/[^/]+/git/refs/tags/@ANY_VERSION@awf-extended-3.2.0/scripts/fedora/000077500000000000000000000000001507226270000170175ustar00rootroot00000000000000awf-extended-3.2.0/scripts/fedora/awf-gtk2.spec000066400000000000000000000073151507226270000213230ustar00rootroot00000000000000Name: awf-gtk2 Version: 3.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 2 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893321) awf-extended-3.2.0/scripts/fedora/awf-gtk3.spec000066400000000000000000000072711507226270000213250ustar00rootroot00000000000000Name: awf-gtk3 Version: 3.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 3 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893323) awf-extended-3.2.0/scripts/fedora/awf-gtk4.spec000066400000000000000000000071451507226270000213260ustar00rootroot00000000000000Name: awf-gtk4 Version: 3.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 4 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial Fedora package release (Closes: rhbz#1946092) awf-extended-3.2.0/scripts/fedora/awf-gtk5.spec000066400000000000000000000051331507226270000213220ustar00rootroot00000000000000Name: awf-gtk5 Version: 3.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 5 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{bash_completions_dir}/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - Initial Fedora package release (Closes: rhbz#...) awf-extended-3.2.0/scripts/fedora/rpm-gtk2.sh000066400000000000000000000032101507226270000210120ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="3.2.0" gtk="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/fedora/rpm-gtk3.sh000066400000000000000000000032101507226270000210130ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="3.2.0" gtk="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/fedora/rpm-gtk4.sh000066400000000000000000000032101507226270000210140ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="3.2.0" gtk="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/fedora/rpm-gtk5.sh000066400000000000000000000032101507226270000210150ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" version="3.2.0" gtk="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/mageia/000077500000000000000000000000001507226270000170025ustar00rootroot00000000000000awf-extended-3.2.0/scripts/mageia/awf-gtk2.spec000066400000000000000000000061641507226270000213070ustar00rootroot00000000000000Name: awf-gtk2 Version: 3.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 2 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-3.2.0/scripts/mageia/awf-gtk3.spec000066400000000000000000000061411507226270000213030ustar00rootroot00000000000000Name: awf-gtk3 Version: 3.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk+3 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 3 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-3.2.0/scripts/mageia/awf-gtk4.spec000066400000000000000000000061401507226270000213030ustar00rootroot00000000000000Name: awf-gtk4 Version: 3.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 4 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-3.2.0/scripts/mageia/awf-gtk5.spec000066400000000000000000000052231507226270000213050ustar00rootroot00000000000000Name: awf-gtk5 Version: 3.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 5 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - Initial Mageia package release (Closes: mbz#...) awf-extended-3.2.0/scripts/mageia/rpm-gtk2.sh000066400000000000000000000030541507226270000210030ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="3.2.0" gtk="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/mageia/rpm-gtk3.sh000066400000000000000000000030541507226270000210040ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="3.2.0" gtk="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/mageia/rpm-gtk4.sh000066400000000000000000000030541507226270000210050ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="3.2.0" gtk="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/mageia/rpm-gtk5.sh000066400000000000000000000030541507226270000210060ustar00rootroot00000000000000#!/bin/bash # Mageia: sudo urpmi --no-recommends rpmdevtools rpm-sign autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr enchant2-aspell cd "$(dirname "$0")" version="3.2.0" gtk="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/mageia/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/openmandriva/000077500000000000000000000000001507226270000202425ustar00rootroot00000000000000awf-extended-3.2.0/scripts/openmandriva/awf-gtk2.spec000066400000000000000000000060571507226270000225500ustar00rootroot00000000000000Name: awf-gtk2 Version: 3.2.0 Release: 1 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later Group: Window Manager/Utilities URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme # gtk+2.0-devel gtk+2.0 %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 2 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - Initial OpenMandriva package release (Closes: #3166) awf-extended-3.2.0/scripts/openmandriva/awf-gtk3.spec000066400000000000000000000060331507226270000225430ustar00rootroot00000000000000Name: awf-gtk3 Version: 3.2.0 Release: 1 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later Group: Window Manager/Utilities URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme # gtk+3.0-devel gtk+3.0 %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 3 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - Initial OpenMandriva package release (Closes: #3167) awf-extended-3.2.0/scripts/openmandriva/awf-gtk4.spec000066400000000000000000000060311507226270000225420ustar00rootroot00000000000000Name: awf-gtk4 Version: 3.2.0 Release: 1 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later Group: Window Manager/Utilities URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme # gtk4.0-devel gtk4.0 %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 4 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - Initial OpenMandriva package release (Closes: #3168) awf-extended-3.2.0/scripts/openmandriva/awf-gtk5.spec000066400000000000000000000052611507226270000225470ustar00rootroot00000000000000Name: awf-gtk5 Version: 3.2.0 Release: 1 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later Group: Window Manager/Utilities URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme # gtk5.0-devel gtk5.0 %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 5 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - Initial OpenMandriva package release (Closes: #...) awf-extended-3.2.0/scripts/openmandriva/rpm-gtk2.sh000066400000000000000000000025071507226270000222450ustar00rootroot00000000000000#!/bin/bash cd "$(dirname "$0")" version="3.2.0" gtk="gtk2" mkdir -p builder builder/{BUILD,RPMS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/openmandriva/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. mv builder/$temp.tar.gz awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) cp -a awf-$gtk-$version.tar.gz awf-$gtk.spec builder/ cd builder/ abb builda rpm --addsign RPMS/*/awf-$gtk*.rpm rpm --addsign SRPMS/awf-$gtk*.rpm mv RPMS/*/awf-$gtk*.rpm . mv SRPMS/awf-$gtk*.rpm . echo "===========================" rpm --checksig *.rpm echo "===========================" rpmlint awf-$gtk.spec *.rpm echo "===========================" rm *debug*rpm ls -dlth "$PWD/"*.rpm echo "===========================" cd .. # cleanup rm -rf builder/*/ builder/*buildlog builder/*spec awf-$gtk-$version.tar.gzawf-extended-3.2.0/scripts/openmandriva/rpm-gtk3.sh000066400000000000000000000025071507226270000222460ustar00rootroot00000000000000#!/bin/bash cd "$(dirname "$0")" version="3.2.0" gtk="gtk3" mkdir -p builder builder/{BUILD,RPMS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/openmandriva/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. mv builder/$temp.tar.gz awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) cp -a awf-$gtk-$version.tar.gz awf-$gtk.spec builder/ cd builder/ abb builda rpm --addsign RPMS/*/awf-$gtk*.rpm rpm --addsign SRPMS/awf-$gtk*.rpm mv RPMS/*/awf-$gtk*.rpm . mv SRPMS/awf-$gtk*.rpm . echo "===========================" rpm --checksig *.rpm echo "===========================" rpmlint awf-$gtk.spec *.rpm echo "===========================" rm *debug*rpm ls -dlth "$PWD/"*.rpm echo "===========================" cd .. # cleanup rm -rf builder/*/ builder/*buildlog builder/*spec awf-$gtk-$version.tar.gzawf-extended-3.2.0/scripts/openmandriva/rpm-gtk4.sh000066400000000000000000000025071507226270000222470ustar00rootroot00000000000000#!/bin/bash cd "$(dirname "$0")" version="3.2.0" gtk="gtk4" mkdir -p builder builder/{BUILD,RPMS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/openmandriva/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. mv builder/$temp.tar.gz awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) cp -a awf-$gtk-$version.tar.gz awf-$gtk.spec builder/ cd builder/ abb builda rpm --addsign RPMS/*/awf-$gtk*.rpm rpm --addsign SRPMS/awf-$gtk*.rpm mv RPMS/*/awf-$gtk*.rpm . mv SRPMS/awf-$gtk*.rpm . echo "===========================" rpm --checksig *.rpm echo "===========================" rpmlint awf-$gtk.spec *.rpm echo "===========================" rm *debug*rpm ls -dlth "$PWD/"*.rpm echo "===========================" cd .. # cleanup rm -rf builder/*/ builder/*buildlog builder/*spec awf-$gtk-$version.tar.gzawf-extended-3.2.0/scripts/openmandriva/rpm-gtk5.sh000066400000000000000000000025071507226270000222500ustar00rootroot00000000000000#!/bin/bash cd "$(dirname "$0")" version="3.2.0" gtk="gtk5" mkdir -p builder builder/{BUILD,RPMS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/openmandriva/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. mv builder/$temp.tar.gz awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) cp -a awf-$gtk-$version.tar.gz awf-$gtk.spec builder/ cd builder/ abb builda rpm --addsign RPMS/*/awf-$gtk*.rpm rpm --addsign SRPMS/awf-$gtk*.rpm mv RPMS/*/awf-$gtk*.rpm . mv SRPMS/awf-$gtk*.rpm . echo "===========================" rpm --checksig *.rpm echo "===========================" rpmlint awf-$gtk.spec *.rpm echo "===========================" rm *debug*rpm ls -dlth "$PWD/"*.rpm echo "===========================" cd .. # cleanup rm -rf builder/*/ builder/*buildlog builder/*spec awf-$gtk-$version.tar.gzawf-extended-3.2.0/scripts/opensuse/000077500000000000000000000000001507226270000174205ustar00rootroot00000000000000awf-extended-3.2.0/scripts/opensuse/awf-gtk2.spec000066400000000000000000000071741507226270000217270ustar00rootroot00000000000000Name: awf-gtk2 Version: 3.2.0 Release: 0 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 2 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-3.2.0/scripts/opensuse/awf-gtk3.spec000066400000000000000000000071501507226270000217220ustar00rootroot00000000000000Name: awf-gtk3 Version: 3.2.0 Release: 0 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 3 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-3.2.0/scripts/opensuse/awf-gtk4.spec000066400000000000000000000071501507226270000217230ustar00rootroot00000000000000Name: awf-gtk4 Version: 3.2.0 Release: 0 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 4 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-3.2.0/scripts/opensuse/awf-gtk5.spec000066400000000000000000000051421507226270000217230ustar00rootroot00000000000000Name: awf-gtk5 Version: 3.2.0 Release: 0 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: libnotify >= 0.7.0 Requires: hicolor-icon-theme %description %{expand: A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme. This package provides the GTK 5 version.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle affiche les différents types de widgets fournis par GTK dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit la version GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install install -dm 755 %{buildroot}%{_datadir}/applications/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications/ data/%{name}.desktop install -dm 755 %{buildroot}%{_datadir}/icons/hicolor/ for file in data/icons/*/*/awf.png; do mv $file ${file/\/awf.png/\/%{name}.png}; done for file in data/icons/*/*/awf.svg; do mv $file ${file/\/awf.svg/\/%{name}.svg}; done cp -a data/icons/* %{buildroot}%{_datadir}/icons/hicolor/ install -Dpm 644 data/%{name}.bash %{buildroot}%{_datadir}/bash-completion/completions/%{name} install -Dpm 644 data/%{name}.1 %{buildroot}%{_mandir}/man1/%{name}.1 install -Dpm 644 data/%{name}.fr.1 %{buildroot}%{_mandir}/fr/man1/%{name}.1 for file in src/po/*.po; do code=$(basename "$file" .po) install -dm 755 %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o %{buildroot}%{_datadir}/locale/$code/LC_MESSAGES/%{name}.mo done %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - Initial openSUSE package release awf-extended-3.2.0/scripts/opensuse/rpm-gtk2.sh000066400000000000000000000030531507226270000214200ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="3.2.0" gtk="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/opensuse/rpm-gtk3.sh000066400000000000000000000030531507226270000214210ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="3.2.0" gtk="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/opensuse/rpm-gtk4.sh000066400000000000000000000030531507226270000214220ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="3.2.0" gtk="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/opensuse/rpm-gtk5.sh000066400000000000000000000030531507226270000214230ustar00rootroot00000000000000#!/bin/bash # openSUSE: sudo zypper install rpmdevtools rpm-build autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr cd "$(dirname "$0")" version="3.2.0" gtk="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$gtk.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/opensuse/awf-$gtk.spec chmod 644 awf-$gtk.spec spectool -g -R awf-$gtk.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/licenses/*-firmware/GPL-3 builder/$temp/LICENSE # * = kernel cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$gtk-$version.tar.gz chmod 644 awf-$gtk.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) rpmbuild -ba awf-$gtk.spec rpm --addsign ~/rpmbuild/RPMS/*/awf-$gtk*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$gtk*.rpm mv ~/rpmbuild/RPMS/*/awf-$gtk*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$gtk*.rpm builder/ echo "===========================" rpm --checksig builder/awf-$gtk*.rpm echo "===========================" rpmlint awf-$gtk.spec builder/awf-$gtk*.rpm echo "===========================" rm builder/*debug*rpm ls -dlth "$PWD/"builder/*.rpm echo "===========================" # cleanup rm -rf builder/*/awf-extended-3.2.0/scripts/slackware/000077500000000000000000000000001507226270000175335ustar00rootroot00000000000000awf-extended-3.2.0/scripts/slackware/README000066400000000000000000000002701507226270000204120ustar00rootroot00000000000000A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.awf-extended-3.2.0/scripts/slackware/awf.SlackBuild000066400000000000000000000104071507226270000222510ustar00rootroot00000000000000#!/bin/bash # Slackware build script for awf # Copyright 2025 Fabrice Creuzot, France # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=awf VERSION=${VERSION:-3.2.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-extended-$VERSION tar xvf $CWD/$PRGNAM-extended-$VERSION.tar.gz cd $PRGNAM-extended-$VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # action autoreconf -fiv ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PRGNAM-$VERSION \ --build=$ARCH-slackware-linux \ --disable-gtk5 make make install DESTDIR=$PKG for gtk in "gtk2" "gtk3" "gtk4"; do install -Dpm 644 data/awf-$gtk.desktop $PKG/usr/share/applications/awf-$gtk.desktop cp -ar data/icons/ icons-$gtk/ for file in icons-$gtk/*/*/awf.png; do mv $file `dirname $file`/awf-$gtk.png; done for file in icons-$gtk/*/*/awf.svg; do mv $file `dirname $file`/awf-$gtk.svg; done install -dm 755 $PKG/usr/share/icons/hicolor/ cp -a icons-$gtk/* $PKG/usr/share/icons/hicolor/ install -Dpm 644 data/awf-$gtk.1 $PKG/usr/man/man1/awf-$gtk.1 install -Dpm 644 data/awf-$gtk.fr.1 $PKG/usr/man/fr/man1/awf-$gtk.1 if pkg-config --exists bash-completion ; then install -Dpm 644 data/awf-$gtk.bash $PKG/usr/share/bash-completion/completions/awf-$gtk fi for file in src/po/*.po; do code=`basename "$file" .po` mkdir -p locale-$gtk/$code/LC_MESSAGES/ msgfmt src/po/$code.po -o locale-$gtk/$code/LC_MESSAGES/awf-$gtk.mo install -Dpm 644 locale-$gtk/$code/LC_MESSAGES/awf-$gtk.mo $PKG/usr/share/locale/$code/LC_MESSAGES/awf-$gtk.mo done done # cleanup rm -rf icons-gtk*/ locale-gtk*/ rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a \ README.md LICENSE \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPEawf-extended-3.2.0/scripts/slackware/awf.info000066400000000000000000000004231507226270000211640ustar00rootroot00000000000000PRGNAM="awf" VERSION="3.2.0" HOMEPAGE="https://github.com/luigifab/awf-extended" DOWNLOAD="https://github.com/luigifab/awf-extended/archive/v3.2.0/awf-extended-3.2.0.tar.gz" MD5SUM="..." DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" MAINTAINER="Fabrice Creuzot" EMAIL="..."awf-extended-3.2.0/scripts/slackware/doinst.sh000066400000000000000000000005021507226270000213640ustar00rootroot00000000000000if [ -x /usr/bin/update-desktop-database ]; then /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 fi if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then if [ -x /usr/bin/gtk-update-icon-cache ]; then /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 fi fi awf-extended-3.2.0/scripts/slackware/slack-desc000066400000000000000000000014651507226270000214750ustar00rootroot00000000000000# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. # Line up the first '|' above the ':' following the base package name, and # the '|' on the right side marks the last column you can put a character in. # You must make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':' except on otherwise blank lines. |-----handy-ruler------------------------------------------------------| awf: awf (A Widget Factory) awf: awf: A widget factory is a theme preview application for GTK. It displays awf: the various widget types provided by GTK in a single window allowing awf: to see the visual effect of the applied theme. awf: awf: For GTK 2.24, 3.x, 4.x. awf: awf: awf: Homepage: https://github.com/luigifab/awf-extended awf:awf-extended-3.2.0/src/000077500000000000000000000000001507226270000146575ustar00rootroot00000000000000awf-extended-3.2.0/src/Makefile.am000066400000000000000000000020121507226270000167060ustar00rootroot00000000000000bin_PROGRAMS = if GTK5 bin_PROGRAMS += awf-gtk@GTK5_SUFFIX@ awf_gtk@GTK5_SUFFIX@_SOURCES = awf-gtk5.c awf_gtk@GTK5_SUFFIX@_CPPFLAGS = $(GTK5_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-5.0/unix-print awf_gtk@GTK5_SUFFIX@_LDADD = $(GTK5_LIBS) $(LIBNOTIFY_LIBS) endif if GTK4 bin_PROGRAMS += awf-gtk@GTK4_SUFFIX@ awf_gtk@GTK4_SUFFIX@_SOURCES = awf-gtk4.c awf_gtk@GTK4_SUFFIX@_CPPFLAGS = $(GTK4_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-4.0/unix-print awf_gtk@GTK4_SUFFIX@_LDADD = $(GTK4_LIBS) $(LIBNOTIFY_LIBS) endif if GTK3 bin_PROGRAMS += awf-gtk@GTK3_SUFFIX@ awf_gtk@GTK3_SUFFIX@_SOURCES = awf-gtk3.c awf_gtk@GTK3_SUFFIX@_CPPFLAGS = $(GTK3_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-3.0/unix-print awf_gtk@GTK3_SUFFIX@_LDADD = $(GTK3_LIBS) $(LIBNOTIFY_LIBS) endif if GTK2 bin_PROGRAMS += awf-gtk@GTK2_SUFFIX@ awf_gtk@GTK2_SUFFIX@_SOURCES = awf-gtk2.c awf_gtk@GTK2_SUFFIX@_CPPFLAGS = $(GTK2_CFLAGS) $(LIBNOTIFY_CFLAGS) -I/usr/include/gtk-unix-print-2.0 awf_gtk@GTK2_SUFFIX@_LDADD = $(GTK2_LIBS) $(LIBNOTIFY_LIBS) endifawf-extended-3.2.0/src/awf-gtk2.c000066400000000000000000002722131507226270000164540ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated D/05/10/2025 * * Copyright 2020-2025 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtk/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-gtk*.c * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7.0) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.84 + Pango 1.56 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.57 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #include #include #if GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE g_strdup_printf ("awf-gtk%d", GTK_MAJOR_VERSION) #define BOXH (gtk_hbox_new (FALSE, 0)) #define BOXV (gtk_vbox_new (FALSE, 0)) #define SEPH (gtk_hseparator_new ()) #define SEPV (gtk_vseparator_new ()) #define PANEH (gtk_hpaned_new ()) #define PANEV (gtk_vpaned_new ()) #define GDK_KEY_F1 0xffbe #define GDK_KEY_F2 0xffbf #define GDK_KEY_F3 0xffc0 #define GDK_KEY_F4 0xffc1 #define GDK_KEY_F5 0xffc2 #define GDK_KEY_F6 0xffc3 #define GDK_KEY_F7 0xffc4 #define GDK_KEY_F8 0xffc5 #define GDK_KEY_F9 0xffc6 #define GDK_KEY_F10 0xffc7 #define GDK_KEY_F11 0xffc8 #define GDK_KEY_F12 0xffc9 #define GDK_KEY_Delete 0xffff #define GDK_KEY_KP_Delete 0xff9f #define GDK_KEY_BackSpace 0xff08 #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Past" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP NULL #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(String) dgettext (GETTEXT_PACKAGE, String) #define _gtk(String) dgettext (g_strdup_printf ("gtk%d0", GTK_MAJOR_VERSION), String) // global variables static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *volume1 = NULL, *volume2 = NULL; static GtkWidget *progressbar1 = NULL, *progressbar2 = NULL, *progressbar3 = NULL, *progressbar4 = NULL, *progressbar8 = NULL, *progressbar9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = GTK_TEXT_DIR_NONE; static gchar *current_theme = "auto"; static gchar *opt_theme = "auto"; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme (GHashTable* hashtable, gchar *directory); static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2); static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata); static void update_text_direction (int direction); static void update_window_size (); static void update_theme (gchar *new_theme); static void update_statusbar (gchar *message); static void update_values (GtkRange *range); static void update_widgets (); static void update_marks (GtkScale *scale, gboolean value, int position); static void display_notification (); static void find_and_update_labels (GtkWidget *widget, gboolean special); static gboolean find_and_check_menuradio (GtkWidget *menu, gchar *search); static gboolean on_notification_action (void *data); static gboolean on_sighup (void *data); static gboolean take_screenshot (void *data); static void create_window (gpointer app); static void create_widgets (GtkWidget *root); static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing); static void add_progressbar_and_entrybar (); static void create_toolbar_items (GtkWidget *root); static void create_combos_entries (GtkWidget *root); static void create_spinbuttons (GtkWidget *root); static void create_checkbuttons (GtkWidget *root); static void create_radiobuttons (GtkWidget *root); static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels (GtkWidget *root); static void create_spinners (GtkWidget *root); static void create_expander (GtkWidget *root); static void create_frames (GtkWidget *root1, GtkWidget *root2); static void create_notebooks (GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview (GtkWidget *root); static void create_scales (GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar (GtkWidget *root); static GtkWidget* create_menu (GtkWidget *root, gchar *text); static GtkWidget* create_menuitem_tearoff (GtkWidget *menu); static GtkWidget* create_menuitem_check (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled); static GtkWidget* create_menuitem_radio (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled, GSList *group); static GtkWidget* create_menuitem (GtkWidget *menu, gchar *text, gboolean disabled, gchar *accel, gchar *keymap, GCallback function); static void accels_load (); static void accels_select (GtkWidget *widget); static void accels_deselect (GtkWidget *widget); static void accels_change (GtkWidget *widget, GdkEventKey *event); static void accels_save (); static void dialog_open (); static void dialog_recent (); static void dialog_save (); static void dialog_message (); static void dialog_page_setup (); static void dialog_print (); static void dialog_about (); static void dialog_calendar (); static void dialog_scales (); // run run run int main (int argc, gchar **argv) { int opt = 0, status = 0; hash_system_theme = g_hash_table_new (&g_str_hash, &g_str_equal); hash_user_theme = g_hash_table_new (&g_str_hash, &g_str_equal); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/share/themes) awf_load_theme (hash_system_theme, gtk_rc_get_theme_dir ()); list_system_theme = g_list_sort (g_hash_table_get_keys (hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.themes) directory = g_build_path ("/", g_get_home_dir (), ".themes", NULL); awf_load_theme (hash_user_theme, directory); g_free (directory); list_user_theme = g_list_sort (g_hash_table_get_keys (hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale (LC_ALL, ""); if (g_file_test ("/usr/share/locale", G_FILE_TEST_IS_DIR)) bindtextdomain (GETTEXT_PACKAGE, "/usr/share/locale"); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); // init static struct option long_options[] = { {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"help", no_argument, NULL, 'x'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; while ((opt = getopt_long (argc, argv, "vlt:s:hxyz", long_options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf ("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup (hash_system_theme, optarg) || g_hash_table_lookup (hash_user_theme, optarg)) opt_theme = (gchar*) optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = GTK_TEXT_DIR_LTR; break; // --rtl case 'z': current_direction = GTK_TEXT_DIR_RTL; break; // --help (via GtkApplication) -h case 'x': case 'h': default: g_printf ("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", g_strdup_printf (_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Start with text from left to right (Left-To-Right)."), "--rtl ", _app("Start with text from right to left (Right-To-Left)."), g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ); return status; } } // create and show window // code specific for gtk2 #if GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add (SIGHUP, on_sighup, NULL); #endif gtk_init (&argc, &argv); create_window (NULL); return status; } static void quit () { // @common accels_save (); exit (0); } static void awf_load_theme (GHashTable* hashtable, gchar *directory) { // @common if (g_file_test (directory, G_FILE_TEST_IS_DIR)) { if (g_getenv ("AWF_DEBUG") != NULL) g_printf("theme dir: %s\n", directory); GError *error = NULL; GDir *dir = g_dir_open (directory, 0, &error); if (dir) { gchar *theme = g_strdup (g_dir_read_name (dir)); gchar *gtkdir = g_strdup_printf ("gtk-%d.0", GTK_MAJOR_VERSION); while (theme) { gchar *theme_path = g_build_path ("/", directory, g_strstrip (theme), NULL); if (g_file_test (theme_path, G_FILE_TEST_IS_DIR)) { gchar *theme_subpath = g_build_path ("/", theme_path, gtkdir, NULL); if (g_file_test (theme_subpath, G_FILE_TEST_IS_DIR)) g_hash_table_replace (hashtable, theme, theme); g_free (theme_subpath); } g_free (theme_path); theme = g_strdup (g_dir_read_name (dir)); } g_dir_close (dir); g_free (gtkdir); g_free (theme); } if (error) { g_fprintf (stderr, "unable to open directory: %s (%s)\n", directory, error->message); g_error_free (error); } } } static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2) { // @common return g_strcmp0 ((gchar*) theme1, (gchar*) theme2); } static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata) { // @common 50% gchar *new_theme = g_settings_get_string (settings, "gtk-theme"); g_usleep (G_USEC_PER_SEC / 2); update_theme (new_theme); find_and_check_menuradio (menubar, new_theme); g_free (new_theme); } static void update_text_direction (int direction) { // @common 80% // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (((direction == GTK_TEXT_DIR_LTR) || (direction == 1)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); current_direction = GTK_TEXT_DIR_LTR; gtk_widget_set_default_direction (current_direction); gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_RIGHT); } else if (((direction == GTK_TEXT_DIR_RTL) || (direction == 2)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_LEFT); current_direction = GTK_TEXT_DIR_RTL; gtk_widget_set_default_direction (current_direction); } } static void update_window_size () { gtk_window_resize (GTK_WINDOW (window), 50, 50); } static void update_theme (gchar *new_theme) { // @common // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; // we can ignore the signal when the menuitem is deselected, but no //if (root && GTK_IS_CHECK_MENU_ITEM (root) && !gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (root))) // return; if (strcmp ((gchar*) new_theme, "refresh") == 0) { gchar *default_theme = "None"; if (g_hash_table_lookup(hash_system_theme, "Default")) default_theme = "Default"; else if (g_hash_table_lookup (hash_system_theme, "Raleigh")) default_theme = "Raleigh"; if (default_theme) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", default_theme, NULL); g_usleep (G_USEC_PER_SEC / 2); g_object_set (gtk_settings_get_default (), "gtk-theme-name", current_theme, NULL); // @todo? force reload of ".config/gtk*/gtk.css" gchar *text = g_strdup_printf (_app("Theme %s reloaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); if (opt_screenshot) g_timeout_add_seconds (1, take_screenshot, NULL); } } else if (strcmp ((gchar*) new_theme, "auto") == 0) { g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); update_window_size (); } else if (strcmp ((gchar*) current_theme, (gchar*) new_theme) != 0) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", new_theme, NULL); g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); gchar *text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); } } static void update_statusbar (gchar *message) { // @common if (statusbar) { char buffer[12]; time_t rawtime; time (&rawtime); strftime (buffer, sizeof buffer, "%T", localtime (&rawtime)); gchar *text = g_strdup_printf ("%s - %s", buffer, message); gtk_statusbar_push (GTK_STATUSBAR (statusbar), gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "gné"), text); g_free (text); } } static void update_values (GtkRange *range) { double value = gtk_range_get_value (range); // range (0..1) gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), value / 100.0); // range (0..1) gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), value / 100.0); // range (0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale6), value); if (gtk_progress_bar_get_text (GTK_PROGRESS_BAR (progressbar1))) { gchar *text = g_strdup_printf ("%i %%", (int) value); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar1), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar2), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar3), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar4), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar8), (value > 50) ? text : NULL); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar9), (value > 50) ? text : NULL); g_free (text); } } static void update_widgets () { // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), !toggle); gtk_widget_set_sensitive (scale2, toggle); gtk_widget_set_sensitive (scale4, toggle); gtk_widget_set_sensitive (scale6, toggle); gtk_widget_set_sensitive (progressbar2, toggle); gtk_widget_set_sensitive (progressbar4, toggle); if (toggle) { gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar1), NULL); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar2), NULL); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar3), NULL); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar4), NULL); } else { gchar *text = g_strdup_printf ("%i %%", (int) gtk_range_get_value (GTK_RANGE (scale1))); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar1), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar2), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar3), text); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar4), text); g_free (text); } gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar8), NULL); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar9), NULL); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible (progressbar8, FALSE); gtk_widget_set_visible (progressbar9, FALSE); gtk_widget_set_visible (toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0.0); gtk_widget_set_visible (progressbar8, TRUE); gtk_widget_set_visible (progressbar9, TRUE); gtk_widget_set_visible (toolbarentry, TRUE); } gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), !toggle, GTK_POS_RIGHT); update_window_size (); } static void update_marks (GtkScale *scale, gboolean value, int position) { // @common if (value) { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, "25"); gtk_scale_add_mark (scale, 50, position, "50"); gtk_scale_add_mark (scale, 75, position, "75"); gtk_scale_add_mark (scale, 100, position, NULL); } else { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, NULL); gtk_scale_add_mark (scale, 50, position, NULL); gtk_scale_add_mark (scale, 75, position, NULL); gtk_scale_add_mark (scale, 100, position, NULL); } } static void display_notification () { // @common if (notify_init (GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new (GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action (notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_add_action (notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_set_timeout (notif, 50000); notify_notification_show (notif, NULL); g_object_unref (G_OBJECT (notif)); notify_uninit (); } } static void find_and_update_labels (GtkWidget *widget, gboolean special) { // with ChatGPT if (GTK_IS_LABEL (widget)) { gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CONTAINER (widget)) { GList *children = gtk_container_get_children (GTK_CONTAINER (widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels (GTK_WIDGET (iter->data), special); g_list_free (children); } } static gboolean find_and_check_menuradio (GtkWidget *menu, gchar *search) { GList *children = gtk_container_get_children (GTK_CONTAINER (menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next (iter)) { item = GTK_WIDGET (iter->data); if (GTK_IS_MENU_ITEM (item)) { GtkWidget *submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (item)); if (submenu) { // process submenu if (find_and_check_menuradio (submenu, search)) { g_list_free (children); return TRUE; } } else if (gtk_widget_get_sensitive (item)) { // check menuitem label const gchar *value = gtk_menu_item_get_label (GTK_MENU_ITEM (item)); if (value && (g_strcmp0 (value, search) == 0)) { allow_update_theme = FALSE; gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); allow_update_theme = TRUE; g_list_free (children); return TRUE; } } } } g_list_free (children); return FALSE; } static gboolean on_notification_action (void *data) { // @common return FALSE; } static gboolean on_sighup (void *data) { // @common update_theme ("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot (void *data) { // @common 50% GdkPixbuf *image = NULL; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window (window); gtk_window_get_size (GTK_WINDOW (window), &width, &height); image = gdk_pixbuf_get_from_drawable (NULL, root, gdk_colormap_get_system (), 0, 0, 0, 0, width, height); if (image) { gdk_pixbuf_save (image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref (image); gchar *text = g_strdup_printf (_app("Theme reloaded, then screenshot saved (%s)."), opt_screenshot); update_statusbar (text); g_free (text); } return FALSE; } // layout and widgets static void create_window (gpointer app) { GtkWidget *vbox_window, *widgets; gchar *text, *value; // window window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_name (GTK_WIDGET (window), "AwfMainWindow"); gtk_window_set_icon_name (GTK_WINDOW (window), GETTEXT_PACKAGE); text = g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title (GTK_WINDOW (window), text); g_free (text); // theme auto or from command line if (strcmp ((gchar*) current_theme, (gchar*) opt_theme) != 0) update_theme (opt_theme); else update_theme (current_theme); allow_update_theme = FALSE; if (current_direction == GTK_TEXT_DIR_NONE) current_direction = gtk_widget_get_default_direction (); // layout vbox_window = BOXV; gtk_container_add (GTK_CONTAINER (window), vbox_window); menubar = gtk_menu_bar_new (); create_traditional_menubar (menubar); add_to (GTK_BOX (vbox_window), menubar, FALSE, FALSE, 0, 0); toolbar = gtk_toolbar_new (); add_to (GTK_BOX (vbox_window), toolbar, FALSE, FALSE, 0, 0); create_toolbar_items (toolbar); widgets = BOXV; add_to (GTK_BOX (vbox_window), widgets, TRUE, TRUE, 0, 0); create_widgets (widgets); statusbar = gtk_statusbar_new (); add_to (GTK_BOX (vbox_window), statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); // go go go allow_update_theme = TRUE; update_text_direction (current_direction); g_signal_connect (window, "destroy", G_CALLBACK (quit), NULL); #if GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), NULL); #endif gtk_widget_show_all (window); add_progressbar_and_entrybar (); gtk_main (); } static void create_widgets (GtkWidget *root) { // @common 50% GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progressbar1 = BOXV, *vbox_progressbar2 = BOXV, *hbox_progressbar1 = BOXH, *hbox_progressbar2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to (GTK_BOX (root), hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to (GTK_BOX (hbox_columns), vbox_column1, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column1), vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries (vbox_combo_entry); add_to (GTK_BOX (vbox_column1), hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons (hbox_spin); add_to (GTK_BOX (vbox_column1), hbox_check_radio, FALSE, TRUE, 5, 0); add_to (GTK_BOX (hbox_check_radio), vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons (vbox_check); add_to (GTK_BOX (hbox_check_radio), vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons (vbox_radio); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 2 add_to (GTK_BOX (hbox_columns), vbox_column2, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column2), vbox_buttons, FALSE, TRUE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns1, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns2, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns3, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons (vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 3 add_to (GTK_BOX (hbox_columns), vbox_column3, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column3), vbox_progressbar1, FALSE, TRUE, 6, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar1, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar2, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), vbox_progressbar2, FALSE, TRUE, 5, 10); create_progressbars (vbox_progressbar1, hbox_progressbar1, hbox_progressbar2, vbox_progressbar2); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 4 add_to (GTK_BOX (hbox_columns), vbox_column4, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column4), vbox_others, FALSE, TRUE, 5, 3); create_treview (vbox_others); add_to (GTK_BOX (vbox_others), hbox_label, FALSE, TRUE, 5, 0); create_labels (hbox_label); add_to (GTK_BOX (vbox_others), hbox_spinner, FALSE, TRUE, 5, 0); create_spinners (hbox_spinner); create_expander (vbox_others); add_to (GTK_BOX (root), SEPH, FALSE, FALSE, 0, 0); // paned layout add_to (GTK_BOX (root), vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1 (GTK_PANED (vpane), hpane1, TRUE, FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_frame1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame1), 3); gtk_widget_set_size_request (hbox_frame1, -1, 70); gtk_container_set_border_width (GTK_CONTAINER (hbox_frame1), 10); gtk_paned_add1 (GTK_PANED (hpane1), hbox_frame1); gtk_box_set_homogeneous (GTK_BOX (hbox_frame2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame2), 3); gtk_widget_set_size_request (hbox_frame2, -1, 70); gtk_container_set_border_width (GTK_CONTAINER (hbox_frame2), 10); gtk_paned_add2 (GTK_PANED (hpane1), hbox_frame2); create_frames (hbox_frame1, hbox_frame2); gtk_paned_pack2 (GTK_PANED (vpane), hpane2, TRUE, FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook1), 3); gtk_container_set_border_width (GTK_CONTAINER (hbox_notebook1), 10); gtk_paned_add1 (GTK_PANED (hpane2), hbox_notebook1); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook2), 3); gtk_container_set_border_width (GTK_CONTAINER (hbox_notebook2), 10); gtk_paned_add2 (GTK_PANED (hpane2), hbox_notebook2); create_notebooks (hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar () { // entry toolbar toolbarentry = gtk_entry_new (); gtk_widget_set_visible (toolbarentry, FALSE); gtk_container_add (GTK_CONTAINER (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 10)), toolbarentry); // end left // progressbar toolbar progressbar8 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar8), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible (progressbar8, FALSE); GtkWidget *alignment = gtk_alignment_new (0, 0.5, 0, 0); gtk_widget_set_size_request (alignment, -1, 20); gtk_container_add (GTK_CONTAINER (alignment), progressbar8); gtk_widget_set_visible (alignment, TRUE); gtk_container_add (GTK_CONTAINER (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 12)), alignment); // end right // progressbar statusbar progressbar9 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar9), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible (progressbar9, FALSE); GtkStyle *style = gtk_widget_get_style (progressbar9); PangoFontDescription *desc = pango_font_description_copy (style->font_desc); pango_font_description_set_size (desc, 7.5 * PANGO_SCALE); gtk_widget_modify_font (progressbar9, desc); pango_font_description_free (desc); alignment = gtk_fixed_new (); gtk_widget_set_name (progressbar9, "progressbar9"); gtk_rc_parse_string ("style \"progressbar9\"\n" "{\n" "GtkProgressBar::min-horizontal-bar-height = 15\n" "GtkProgressBar::yspacing = 0\n" "}\n" "widget \"*.progressbar9\" style \"progressbar9\""); gtk_fixed_put (GTK_FIXED (alignment), progressbar9, 0, 2); gtk_widget_set_visible (alignment, TRUE); gtk_box_pack_end (GTK_BOX (gtk_statusbar_get_message_area (GTK_STATUSBAR (statusbar))), alignment, FALSE, FALSE, 0); } static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing) { if (GTK_IS_INFO_BAR (box)) box = GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (box))); if (GTK_IS_CONTAINER (widget) && (padding > 0)) gtk_container_set_border_width (GTK_CONTAINER (widget), padding); if (GTK_IS_BOX (widget) && (spacing > 0)) gtk_box_set_spacing (GTK_BOX (widget), spacing); gtk_box_pack_start (box, widget, fill, expand, 0); } static void create_toolbar_items (GtkWidget *root) { // @common gtk2/3 GtkWidget *tool1, *menu, *tool2, *tool4, *tool5, *tool6, *tool8, *tool9, *tool10, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); tool1 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool1), "gtk-open"); g_signal_connect (tool1, "clicked", G_CALLBACK (dialog_open), NULL); menu = gtk_menu_new (); create_menuitem (menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem (menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem (menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all (menu); // very important gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (tool1), menu); tool2 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool2), "gtk-open"); gtk_widget_set_sensitive (tool2, FALSE); tool4 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool4), "gtk-save"); g_signal_connect (tool4, "clicked", G_CALLBACK (dialog_save), NULL); tool5 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool5), "gtk-refresh"); g_signal_connect_swapped (tool5, "clicked", G_CALLBACK (update_theme), "refresh"); tool6 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool6), "gtk-dialog-info"); g_signal_connect_swapped (tool6, "clicked", G_CALLBACK (display_notification), "refresh"); tool8 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool8), "gtk-add"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool8), TRUE); g_signal_connect (tool8, "clicked", G_CALLBACK (update_widgets), NULL); tool9 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool9), "gtk-remove"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool9), FALSE); g_signal_connect (tool9, "clicked", G_CALLBACK (update_widgets), NULL); tool10 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool10), "gtk-close"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool10), FALSE); gtk_widget_set_sensitive (tool10, FALSE); tool11 = GTK_WIDGET (gtk_tool_item_new ()); tool12 = GTK_WIDGET (gtk_tool_item_new ()); gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool12), TRUE); tool13 = GTK_WIDGET (gtk_tool_item_new ()); gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool13), FALSE); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool1), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool2), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), gtk_separator_tool_item_new (), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool4), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool5), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool6), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), gtk_separator_tool_item_new (), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool8), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool9), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool10), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool11), -1); // = 10 gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool12), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool13), -1); // = 12 } static void create_combos_entries (GtkWidget *root) { GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; combo1 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo1), 0); combo2 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo2), 0); gtk_widget_set_sensitive (combo2, FALSE); combo3 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo3), 0); combo4 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo4), 0); gtk_widget_set_sensitive (combo4, FALSE); entry1 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry1), "Entry"); entry2 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry2), "Entry"); gtk_widget_set_sensitive (entry2, FALSE); entry3 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry3), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); entry4 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry4), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); gtk_widget_set_sensitive (entry4, FALSE); // layout add_to (GTK_BOX (root), combo1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons (GtkWidget *root) { // @common GtkWidget *spinbutton1, *spinbutton2; spinbutton1 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton2), 1); gtk_widget_set_sensitive (spinbutton2, FALSE); add_to (GTK_BOX (root), spinbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_checkbuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; checkbutton1 = gtk_check_button_new_with_label ("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label ("Check btn 2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label ("Check btn 3"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label ("Check btn 4"); gtk_widget_set_sensitive (checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label ("Check btn 5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton5), TRUE); gtk_widget_set_sensitive (checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label ("Check btn 6"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (checkbutton6), TRUE); gtk_widget_set_sensitive (checkbutton6, FALSE); add_to (GTK_BOX (root), checkbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; radiobutton1 = gtk_radio_button_new_with_label (NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label (NULL, "Radio btn 4"); gtk_widget_set_sensitive (radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton5), TRUE); gtk_widget_set_sensitive (radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (radiobutton6), TRUE); gtk_widget_set_sensitive (radiobutton6, FALSE); add_to (GTK_BOX (root), radiobutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14; button1 = gtk_button_new_with_label ("Button 1"); button2 = gtk_button_new_with_label ("Button 2"); gtk_widget_set_sensitive (button2, FALSE); button3 = gtk_toggle_button_new_with_label ("Button 3"); button4 = gtk_toggle_button_new_with_label ("Button 4"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button3), TRUE); gtk_widget_set_sensitive (button4, FALSE); // colorbutton GdkColor color; gdk_color_parse ("#7796ba", &color); button5 = gtk_color_button_new_with_color (&color); // fontbutton button6 = gtk_font_button_new (); find_and_update_labels (button6, FALSE); gtk_widget_set_size_request (button6, 186, -1); // filebutton button7 = gtk_file_chooser_button_new ("GtkFileChooserDialog", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels (button7, FALSE); gtk_widget_set_size_request (button7, 180, -1); button8 = gtk_file_chooser_button_new ("GtkFileChooserDialog", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels (button8, TRUE); gtk_widget_set_size_request (button8, 180, -1); // combomenu GtkWidget *combomenu1, *combomenu2, *combomenu3, *combomenu4; combomenu1 = gtk_menu_new (); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu1), gtk_menu_item_new_with_label ("Option 1")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu1), gtk_menu_item_new_with_label ("Option 2")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu1), gtk_menu_item_new_with_label ("Option 3")); combomenu2 = gtk_menu_new (); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu2), gtk_menu_item_new_with_label ("Option 1")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu2), gtk_menu_item_new_with_label ("Option 2")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu2), gtk_menu_item_new_with_label ("Option 3")); combomenu3 = gtk_menu_new (); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu3), gtk_menu_item_new_with_label ("Option 1")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu3), gtk_menu_item_new_with_label ("Option 2")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu3), gtk_menu_item_new_with_label ("Option 3")); combomenu4 = gtk_menu_new (); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu4), gtk_menu_item_new_with_label ("Option 1")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu4), gtk_menu_item_new_with_label ("Option 2")); gtk_menu_shell_append (GTK_MENU_SHELL (combomenu4), gtk_menu_item_new_with_label ("Option 3")); button9 = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (button9), combomenu1); button10 = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (button10), combomenu2); gtk_widget_set_sensitive (button10, FALSE); button11 = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (button11), combomenu3); button12 = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (button12), combomenu4); gtk_widget_set_sensitive (button12, FALSE); button13 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive (button14, FALSE); volume1 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), 0.5); g_object_set ((GObject*) volume1, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu volume2 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume2), 0); gtk_widget_set_sensitive (volume2, FALSE); g_object_set ((GObject*) volume2, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu // layout add_to (GTK_BOX (root1), button1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button8, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button9, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button10, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button11, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button12, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button13, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button14, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume2, FALSE, FALSE, 0, 0); } static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // progress bars progressbar1 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), 0.5); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar1), GTK_PROGRESS_LEFT_TO_RIGHT); progressbar2 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), 0.5); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar2), GTK_PROGRESS_RIGHT_TO_LEFT); progressbar3 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), 0.5); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar3), GTK_PROGRESS_TOP_TO_BOTTOM); gtk_widget_set_size_request (progressbar3, -1, 100); progressbar4 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), 0.5); gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progressbar4), GTK_PROGRESS_BOTTOM_TO_TOP); // scales scale1 = create_horizontal_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale1, "value_changed", G_CALLBACK (update_values), NULL); scale2 = create_horizontal_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale2, "value_changed", G_CALLBACK (update_values), NULL); scale3 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale3, "value_changed", G_CALLBACK (update_values), NULL); scale4 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale4, "value_changed", G_CALLBACK (update_values), NULL); scale5 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); update_marks (GTK_SCALE (scale5), FALSE, GTK_POS_LEFT); g_signal_connect (scale5, "value_changed", G_CALLBACK (update_values), NULL); scale6 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); update_marks (GTK_SCALE (scale6), FALSE, GTK_POS_RIGHT); g_signal_connect (scale6, "value_changed", G_CALLBACK (update_values), NULL); // layout add_to (GTK_BOX (root1), progressbar1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), progressbar2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale4, FALSE, FALSE, 0, 0); } static void create_labels (GtkWidget *root) { // @common GtkWidget *label1, *label2; label1 = gtk_label_new ("Label 1"); label2 = gtk_label_new ("Label 2"); gtk_widget_set_sensitive (label2, FALSE); add_to (GTK_BOX (root), label1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), label2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners (GtkWidget *root) { // @common GtkWidget *spinner1, *spinner2; spinner1 = gtk_spinner_new (); gtk_widget_set_size_request (spinner1, 20, 20); spinner2 = gtk_spinner_new (); gtk_widget_set_size_request (spinner2, 20, 20); gtk_widget_set_sensitive (spinner2, FALSE); //gtk_spinner_start (GTK_SPINNER (spinner2)); add_to (GTK_BOX (root), spinner1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinner2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander (GtkWidget *root) { GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; expander = gtk_expander_new (_app("More...")); gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, -1, 120); tv = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv)); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD); gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), g_strdup_printf ("%s ~ %s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")), -1); gtk_container_add (GTK_CONTAINER (scrolled_window), tv); gtk_container_add (GTK_CONTAINER (expander), scrolled_window); add_to (GTK_BOX (root), expander, FALSE, FALSE, 0, 0); } static void create_frames (GtkWidget *root1, GtkWidget *root2) { GtkWidget *frame1, *frame2, *frame3, *frame4; frame1 = gtk_frame_new ("Frame (shadow in)"); gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new ("Frame (shadow out)"); gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new ("Frame (shadow etched in)"); gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new ("Frame (shadow etched out)"); gtk_frame_set_shadow_type (GTK_FRAME (frame4), GTK_SHADOW_ETCHED_OUT); add_to (GTK_BOX (root1), frame1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), frame2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame4, TRUE, TRUE, 0, 0); } static void create_notebooks (GtkWidget *root1, GtkWidget *root2) { // @common* notebook1 = gtk_notebook_new (); notebook2 = gtk_notebook_new (); notebook3 = gtk_notebook_new (); notebook4 = gtk_notebook_new (); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook1), GTK_POS_TOP); create_notebook_tab (notebook1, "Tab1", NULL, FALSE); create_notebook_tab (notebook1, "Tab2", NULL, FALSE); create_notebook_tab (notebook1, "Tab3", NULL, TRUE); create_notebook_tab (notebook1, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook2)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook2), GTK_POS_BOTTOM); create_notebook_tab (notebook2, "Tab1", NULL, FALSE); create_notebook_tab (notebook2, "Tab2", NULL, FALSE); create_notebook_tab (notebook2, "Tab3", NULL, TRUE); create_notebook_tab (notebook2, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook3)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook3), GTK_POS_LEFT); create_notebook_tab (notebook3, "T1", NULL, FALSE); create_notebook_tab (notebook3, "Tab2", NULL, FALSE); create_notebook_tab (notebook3, "T3b", NULL, TRUE); create_notebook_tab (notebook3, "T4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook4)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook4), GTK_POS_RIGHT); create_notebook_tab (notebook4, "T1", NULL, FALSE); create_notebook_tab (notebook4, "Tab2", NULL, FALSE); create_notebook_tab (notebook4, "T3b", NULL, TRUE); create_notebook_tab (notebook4, "T4", NULL, TRUE); add_to (GTK_BOX (root1), notebook1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), notebook2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { GtkWidget *headbtn = BOXH, *btn; add_to (GTK_BOX (headbtn), gtk_label_new (text), TRUE, TRUE, 0, 0); if (!content) content = BOXV; if (close) { btn = gtk_button_new (); gtk_button_set_image (GTK_BUTTON (btn), gtk_image_new_from_icon_name ("gtk-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief (GTK_BUTTON (btn), GTK_RELIEF_NONE); gtk_widget_set_name (btn, "close-button"); gtk_rc_parse_string ("style \"close-button\"\n" "{\n" "GtkWidget::focus-padding = 0\n" "GtkWidget::focus-line-width = 0\n" "xthickness = 0\n" "ythickness = 0\n" "}\n" "widget \"*.close-button\" style \"close-button\""); gtk_button_set_focus_on_click (GTK_BUTTON (btn), FALSE); add_to (GTK_BOX (headbtn), btn, FALSE, FALSE, 0, 0); } gtk_widget_show_all (headbtn); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), content, headbtn); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (notebook), content, TRUE); //gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (notebook), content, TRUE); } static void create_treview (GtkWidget *root) { // @common 80% GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; // data store = gtk_tree_store_new (11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "gtk-help", 8, "gtk-help", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (view), FALSE); // rows gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view), FALSE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (view), TRUE); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), 0, GTK_SORT_ASCENDING); g_object_unref (G_OBJECT (store)); idx = 0; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 1; renderer = gtk_cell_renderer_toggle_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 4; renderer = gtk_cell_renderer_progress_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); // scrolled window scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, 200, 200); gtk_widget_set_size_request (view, 200, 200); gtk_container_add (GTK_CONTAINER (scrolled_window), view); add_to (GTK_BOX (root), scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales (GtkWidget *notebook, gchar *text, int position) { GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value (GTK_RANGE (scale1)); gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); // vertical scales scale1v = create_vertical_scale (value, FALSE, FALSE, position); scale2v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2v), FALSE, GTK_POS_LEFT); scale3v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3v), TRUE, GTK_POS_LEFT); scale4v = create_vertical_scale (value, TRUE, FALSE, position); scale5v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5v), FALSE, GTK_POS_LEFT); scale6v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6v), TRUE, GTK_POS_LEFT); scale7v = create_vertical_scale (value, FALSE, TRUE, position); scale8v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale (value, TRUE, TRUE, position); scale11v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale (value, FALSE, FALSE, position); scale2h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale (value, TRUE, FALSE, position); scale5h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale (value, FALSE, TRUE, position); scale8h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale (value, TRUE, TRUE, position); scale11h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to (GTK_BOX (hbox), vbox1, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox1), scale1h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale2h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale3h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale4h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale5h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale6h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox2), hboxa, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxa), scale1v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale2v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale3v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale7v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale8v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale9v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox2), hboxb, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxb), scale4v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale5v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale6v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale10v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale11v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale12v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox3, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox3), scale7h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale8h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale9h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale10h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale11h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale12h, FALSE, FALSE, 5, 5); create_notebook_tab (notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_hscale_new_with_range (0, 100, 1); gtk_range_set_value (GTK_RANGE (scale), value); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_widget_set_size_request (scale, 186, -1); return scale; } static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_vscale_new_with_range (0, 100, 1); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_range_set_value (GTK_RANGE (scale), value); gtk_widget_set_size_request (scale, -1, 100); return scale; } // traditional menu - @common gtk2/3 (except one line) static void create_traditional_menubar (GtkWidget *root) { GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new (); GSList *group = NULL; GList *iterator; gboolean ok = FALSE; gtk_window_add_accel_group (GTK_WINDOW (window), accels); // options menu = create_menu (root, _app("_Options")); gtk_menu_set_accel_group (GTK_MENU (menu), accels); // very important create_menuitem_tearoff (menu); create_menuitem (menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem (menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem (menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem (menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK (on_sighup)); // G_CALLBACK (update_theme) create_menuitem (menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem (menu, _app("GtkScales"), FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem (menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem (menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem (menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu (menu, _app("More...")); gtk_menu_set_accel_group (GTK_MENU (submenu), accels); // very important create_menuitem (submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem (submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem (submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); create_menuitem_check (menu, g_strdup_printf ("Check 1 %s", _app("(unchecked)")), FALSE, FALSE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 2 %s", _app("(checked)")), TRUE, FALSE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 3 %s", _app("(inconsistent)")), FALSE, TRUE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 1 %s", _app("(unchecked)")), FALSE, FALSE, TRUE); create_menuitem_check (menu, g_strdup_printf ("Check 2 %s", _app("(checked)")), TRUE, FALSE, TRUE); create_menuitem_check (menu, g_strdup_printf ("Check 3 %s", _app("(inconsistent)")), FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); menuitem = create_menuitem_radio (menu, g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); create_menuitem_radio (menu, g_strdup_printf ("Radio 2 %s", _app("(checked)")), TRUE, FALSE, FALSE, group); create_menuitem_radio (menu, g_strdup_printf ("Radio 3 %s", _app("(inconsistent)")), FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio (menu, g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); create_menuitem_radio (menu, g_strdup_printf ("Radio 2 %s", _app("(checked)")), TRUE, FALSE, TRUE, group); create_menuitem_radio (menu, g_strdup_printf ("Radio 3 %s", _app("(inconsistent)")), FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); create_menuitem (menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem (menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes group = NULL; menu = create_menu (root, _app("_System themes")); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = create_menu (menu, iterator->data); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup (hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } else { menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } } if (!list_system_theme) create_menuitem (menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes menu = create_menu (root, _app("_User themes")); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = create_menu (menu, iterator->data); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } if (!list_user_theme) create_menuitem (menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu (root, _app("_Text direction")); menuitem = create_menuitem_radio (menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, group); if ((current_direction == GTK_TEXT_DIR_LTR) || (current_direction == 1)) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_text_direction), (gpointer) GTK_TEXT_DIR_LTR); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); menuitem = create_menuitem_radio (menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, group); if ((current_direction == GTK_TEXT_DIR_RTL) || (current_direction == 2)) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_text_direction), (gpointer) GTK_TEXT_DIR_RTL); // help menu = create_menu (root, _app("_Help")); gtk_menu_set_accel_group (GTK_MENU (menu), accels); // very important gtk_widget_set_sensitive (create_menuitem (menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL), FALSE); create_menuitem (menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x accels_load (); g_object_set (gtk_settings_get_default (), "gtk-can-change-accels", FALSE, NULL); } static GtkWidget* create_menu (GtkWidget *root, gchar *text) { GtkWidget *menu, *menuitem; menu = gtk_menu_new (); menuitem = gtk_menu_item_new_with_mnemonic (text); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu); gtk_menu_shell_append (GTK_MENU_SHELL (root), menuitem); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x gtk_widget_set_events (menu, GDK_KEY_RELEASE_MASK); g_signal_connect (menu, "key-release-event", G_CALLBACK (accels_change), NULL); return menu; } static GtkWidget* create_menuitem_tearoff (GtkWidget *menu) { GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled) { GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic (text); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), checked); gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem), inconsistent); gtk_widget_set_sensitive (menuitem, !disabled); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_radio (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled, GSList *group) { GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic (group, text); gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem), inconsistent); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), checked); gtk_widget_set_sensitive (menuitem, !disabled); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem (GtkWidget *menu, gchar *text, gboolean disabled, gchar *accel, gchar *keymap, GCallback function) { GtkWidget *menuitem; GdkModifierType mods; guint key; menuitem = gtk_image_menu_item_new_from_stock (text, NULL); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), keymap); gtk_widget_set_sensitive (menuitem, !disabled); if (accel) { gtk_accelerator_parse (accel, &key, &mods); gtk_accel_map_add_entry (keymap, key, mods); } if (function) g_signal_connect (menuitem, "activate", function, NULL); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x g_signal_connect (menuitem, "select", G_CALLBACK (accels_select), NULL); g_signal_connect (menuitem, "deselect", G_CALLBACK (accels_deselect), NULL); return menuitem; } static void accels_load () { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x gchar *path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load (path); g_free (path); } static void accels_select (GtkWidget *widget) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x current_menuitem = widget; } static void accels_deselect (GtkWidget *widget) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x if (current_menuitem == widget) current_menuitem = NULL; } static void accels_change (GtkWidget *widget, GdkEventKey *event) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x // @see https://gitlab.gnome.org/GNOME/gtk/-/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (!current_menuitem) return; GtkMenuItem *menuitem = GTK_MENU_ITEM (current_menuitem); gchar *key = gdk_keyval_name (event->keyval); if ( !gtk_menu_item_get_accel_path (menuitem) || (strcmp (key, "Control_L") == 0) || (strcmp (key, "Control_R") == 0) || (strcmp (key, "Shift_L") == 0) || (strcmp (key, "Shift_R") == 0) || (strcmp (key, "Super_L") == 0) || (strcmp (key, "Super_R") == 0) || (strcmp (key, "Meta_L") == 0) || (strcmp (key, "Meta_R") == 0) || (strcmp (key, "Alt_L") == 0) || (strcmp (key, "Alt_R") == 0) ) { return; } if ( (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace) || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // crtl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; if ((event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace)) gtk_accel_map_change_entry (gtk_menu_item_get_accel_path (menuitem), 0, 0, TRUE); else gtk_accel_map_change_entry ( gtk_menu_item_get_accel_path (menuitem), gdk_keyval_to_lower (event->keyval), event->state & gtk_accelerator_get_default_mod_mask (), TRUE); } } static void accels_save () { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x if (must_save_accels) { gchar *path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); gtk_accel_map_save (path); g_free (path); } } // dialogs static void dialog_open () { // @common gtk2/3 GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Open", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_recent () { // @common gtk2/3 GtkWidget *dialog = gtk_recent_chooser_dialog_new ( "GtkRecentChooserDialog", GTK_WINDOW (window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_save () { // @common gtk2/3 GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Save", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_message () { // @common gtk2/3 GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title (GTK_WINDOW (dialog), "GtkMessageDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_page_setup () { // @common gtk2/3 GtkWidget *dialog = gtk_page_setup_unix_dialog_new ("GtkPageSetupUnixDialog", GTK_WINDOW (window)); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_print () { // @common gtk2/3 GtkWidget *dialog = gtk_print_unix_dialog_new ("GtkPrintUnixDialog", GTK_WINDOW (window)); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_about () { // @common gtk2/3 gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog (GTK_WINDOW (window), "version", VERSION, "comments", t1 = g_strdup_printf ("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf (_app("Remove %s file"), "~/.awf-gtk-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2025 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", GETTEXT_PACKAGE, "logo-icon-name", GETTEXT_PACKAGE, "license", "A widget factory 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 3 of the License, or (at your option) any later version.", "wrap-license", TRUE, NULL); g_free (t1); g_free (t2); g_free (t3); g_free (t4); } static void dialog_calendar () { // @common gtk2/3 GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); // info bars and calendar infobar = gtk_info_bar_new_with_buttons ("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO); label = gtk_label_new (_app("This is an info bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons (_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new (_app("This is a question bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_WARNING); label = gtk_label_new (_app("This is a warning bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_ERROR); label = gtk_label_new (_app("This is an error bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new (); gtk_calendar_set_display_options (GTK_CALENDAR (calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to (GTK_BOX (vbox), calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); add_to (GTK_BOX (area), vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", 0); btn = gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", 0); gtk_widget_show_all (dialog); gtk_widget_grab_focus (GTK_WIDGET (btn)); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_widget_set_size_request (dialog, 350, -1); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_scales () { GtkWidget *dialog, *notebook, *area; dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); create_scales (notebook, "Top", GTK_POS_TOP); create_scales (notebook, "Right", GTK_POS_RIGHT); create_scales (notebook, "Bottom", GTK_POS_BOTTOM); create_scales (notebook, "Left", GTK_POS_LEFT); area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); add_to (GTK_BOX (area), notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", 0); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", 0); gtk_widget_show_all (dialog); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } awf-extended-3.2.0/src/awf-gtk3.c000066400000000000000000003465041507226270000164620ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated D/05/10/2025 * * Copyright 2020-2025 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtk/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-gtk*.c * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7.0) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.84 + Pango 1.56 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.57 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #include #include #if GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE g_strdup_printf ("awf-gtk%d", GTK_MAJOR_VERSION) #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define gtk_major_version gtk_get_major_version () #define gtk_minor_version gtk_get_minor_version () #define gtk_micro_version gtk_get_micro_version () #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Past" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP NULL #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(String) dgettext (GETTEXT_PACKAGE, String) #define _gtk(String) dgettext (g_strdup_printf ("gtk%d0", GTK_MAJOR_VERSION), String) // global variables static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL; static GtkWidget *volume1 = NULL, *volume2 = NULL; static GtkWidget *progressbar1 = NULL, *progressbar2 = NULL, *progressbar3 = NULL, *progressbar4 = NULL, *progressbar8 = NULL, *progressbar9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = GTK_TEXT_DIR_NONE; static gchar *current_theme = "auto"; static gchar *opt_theme = "auto"; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme (GHashTable* hashtable, gchar *directory); static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2); static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata); static void update_text_direction (int direction); static void update_window_size (); static void update_theme (gchar *new_theme); static void update_statusbar (gchar *message); static void update_values (GtkRange *range); static void update_widgets (); static void update_marks (GtkScale *scale, gboolean value, int position); static void display_notification (); static void find_and_update_labels (GtkWidget *widget, gboolean special); static gboolean find_and_check_menuradio (GtkWidget *menu, gchar *search); static gboolean on_notification_action (void *data); static gboolean on_sighup (void *data); static gboolean take_screenshot (void *data); static void create_window (gpointer app); static void create_widgets (GtkWidget *root); static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing); static void add_progressbar_and_entrybar (); static void create_toolbar_items (GtkWidget *root); static void create_combos_entries (GtkWidget *root); static void create_spinbuttons (GtkWidget *root); static void create_checkbuttons (GtkWidget *root); static void create_radiobuttons (GtkWidget *root); static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels (GtkWidget *root); static void create_spinners (GtkWidget *root); static void create_expander (GtkWidget *root); static void create_frames (GtkWidget *root1, GtkWidget *root2); static void create_notebooks (GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview (GtkWidget *root); static void create_scales (GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar (GtkWidget *root); static GtkWidget* create_menu (GtkWidget *root, gchar *text); static GtkWidget* create_menuitem_tearoff (GtkWidget *menu); static GtkWidget* create_menuitem_check (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled); static GtkWidget* create_menuitem_radio (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled, GSList *group); static GtkWidget* create_menuitem (GtkWidget *menu, gchar *text, gboolean disabled, gchar *accel, gchar *keymap, GCallback function); static void accels_load (); static void accels_select (GtkWidget *widget); static void accels_deselect (GtkWidget *widget); static void accels_change (GtkWidget *widget, GdkEventKey *event); static void accels_save (); static void dialog_open (); static void dialog_recent (); static void dialog_save (); static void dialog_message (); static void dialog_page_setup (); static void dialog_print (); static void dialog_about (); static void dialog_inspector (); static void dialog_calendar (); static void dialog_scales (); #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs (GtkWidget *widget, GdkEventScroll *event); #endif // run run run int main (int argc, gchar **argv) { int opt = 0, status = 0; hash_system_theme = g_hash_table_new (&g_str_hash, &g_str_equal); hash_user_theme = g_hash_table_new (&g_str_hash, &g_str_equal); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs (); for (opt = 0; dirs[opt]; opt++) { directory = g_build_path ("/", dirs[opt], "themes", NULL); awf_load_theme (hash_system_theme, directory); g_free (directory); } list_system_theme = g_list_sort (g_hash_table_get_keys (hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_path ("/", g_get_user_data_dir (), "themes", NULL); awf_load_theme (hash_user_theme, directory); g_free (directory); directory = g_build_path ("/", g_get_home_dir (), ".themes", NULL); awf_load_theme (hash_user_theme, directory); g_free (directory); list_user_theme = g_list_sort (g_hash_table_get_keys (hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale (LC_ALL, ""); if (g_file_test ("/usr/share/locale", G_FILE_TEST_IS_DIR)) bindtextdomain (GETTEXT_PACKAGE, "/usr/share/locale"); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); // init static struct option long_options[] = { {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"help", no_argument, NULL, 'x'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; while ((opt = getopt_long (argc, argv, "vlt:s:hxyz", long_options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf ("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup (hash_system_theme, optarg) || g_hash_table_lookup (hash_user_theme, optarg)) opt_theme = (gchar*) optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = GTK_TEXT_DIR_LTR; break; // --rtl case 'z': current_direction = GTK_TEXT_DIR_RTL; break; // --help (via GtkApplication) -h case 'x': case 'h': default: if (opt == 'x') { #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) break; #endif } g_printf ("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", g_strdup_printf (_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Start with text from left to right (Left-To-Right)."), "--rtl ", _app("Start with text from right to left (Right-To-Left)."), g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ); return status; } } // create and show window // code specific for gtk3 #if GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add (SIGHUP, on_sighup, NULL); #endif #if GTK_CHECK_VERSION (3,4,0) GtkApplication *app = gtk_application_new ("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect (app, "activate", G_CALLBACK (create_window), NULL); #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) // --version -v g_application_add_main_option (G_APPLICATION (app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list-themes -l g_application_add_main_option (G_APPLICATION (app), "list-themes", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option (G_APPLICATION (app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s g_application_add_main_option (G_APPLICATION (app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, g_strdup_printf (_app("Run and save a png screenshot on %s."), "SIGHUP"), ""); // --ltr g_application_add_main_option (G_APPLICATION (app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Start with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option (G_APPLICATION (app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Start with text from right to left (Right-To-Left)."), NULL); g_application_register (G_APPLICATION (app), NULL, NULL); status = g_application_run (G_APPLICATION (app), argc, argv); #else g_application_register (G_APPLICATION (app), NULL, NULL); status = g_application_run (G_APPLICATION (app), 0, NULL); #endif #else gtk_init (&argc, &argv); create_window (NULL); #endif return status; } static void quit () { // @common accels_save (); exit (0); } static void awf_load_theme (GHashTable* hashtable, gchar *directory) { // @common if (g_file_test (directory, G_FILE_TEST_IS_DIR)) { if (g_getenv ("AWF_DEBUG") != NULL) g_printf("theme dir: %s\n", directory); GError *error = NULL; GDir *dir = g_dir_open (directory, 0, &error); if (dir) { gchar *theme = g_strdup (g_dir_read_name (dir)); gchar *gtkdir = g_strdup_printf ("gtk-%d.0", GTK_MAJOR_VERSION); while (theme) { gchar *theme_path = g_build_path ("/", directory, g_strstrip (theme), NULL); if (g_file_test (theme_path, G_FILE_TEST_IS_DIR)) { gchar *theme_subpath = g_build_path ("/", theme_path, gtkdir, NULL); if (g_file_test (theme_subpath, G_FILE_TEST_IS_DIR)) g_hash_table_replace (hashtable, theme, theme); g_free (theme_subpath); } g_free (theme_path); theme = g_strdup (g_dir_read_name (dir)); } g_dir_close (dir); g_free (gtkdir); g_free (theme); } if (error) { g_fprintf (stderr, "unable to open directory: %s (%s)\n", directory, error->message); g_error_free (error); } } } static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2) { // @common return g_strcmp0 ((gchar*) theme1, (gchar*) theme2); } static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata) { // @common gtk3/4 if (g_strcmp0 ("gtk-theme", (gchar*) userdata) == 0) { gchar *new_theme = g_settings_get_string (settings, "gtk-theme"); g_usleep (G_USEC_PER_SEC / 2); update_theme (new_theme); find_and_check_menuradio (menubar, new_theme); g_free (new_theme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string (settings, (gchar*) userdata); if (g_str_has_prefix (tokens, "icon") || g_str_has_prefix (tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix (tokens, "icon") || g_str_has_suffix (tokens, "menu")) closeRight = TRUE; if (g_getenv ("AWF_DEBUG") != NULL) g_printf("tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free (tokens); gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_widget_set_visible (headbarCloseRight, closeRight); } } static void update_text_direction (int direction) { // @common 80% // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (((direction == GTK_TEXT_DIR_LTR) || (direction == 1)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); current_direction = GTK_TEXT_DIR_LTR; gtk_widget_set_default_direction (current_direction); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook3), GTK_POS_LEFT); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook4), GTK_POS_RIGHT); #endif gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_RIGHT); } else if (((direction == GTK_TEXT_DIR_RTL) || (direction == 2)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook3), GTK_POS_RIGHT); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook4), GTK_POS_LEFT); #endif gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_LEFT); current_direction = GTK_TEXT_DIR_RTL; gtk_widget_set_default_direction (current_direction); } } static void update_window_size () { gtk_window_resize (GTK_WINDOW (window), 50, 50); } static void update_theme (gchar *new_theme) { // @common // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; // we can ignore the signal when the menuitem is deselected, but no //if (root && GTK_IS_CHECK_MENU_ITEM (root) && !gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (root))) // return; if (strcmp ((gchar*) new_theme, "refresh") == 0) { gchar *default_theme = "None"; if (g_hash_table_lookup(hash_system_theme, "Default")) default_theme = "Default"; else if (g_hash_table_lookup (hash_system_theme, "Raleigh")) default_theme = "Raleigh"; if (default_theme) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", default_theme, NULL); g_usleep (G_USEC_PER_SEC / 2); g_object_set (gtk_settings_get_default (), "gtk-theme-name", current_theme, NULL); // @todo? force reload of ".config/gtk*/gtk.css" gchar *text = g_strdup_printf (_app("Theme %s reloaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); if (opt_screenshot) g_timeout_add_seconds (1, take_screenshot, NULL); } } else if (strcmp ((gchar*) new_theme, "auto") == 0) { g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); update_window_size (); } else if (strcmp ((gchar*) current_theme, (gchar*) new_theme) != 0) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", new_theme, NULL); g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); gchar *text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); } } static void update_statusbar (gchar *message) { // @common if (statusbar) { char buffer[12]; time_t rawtime; time (&rawtime); strftime (buffer, sizeof buffer, "%T", localtime (&rawtime)); gchar *text = g_strdup_printf ("%s - %s", buffer, message); gtk_statusbar_push (GTK_STATUSBAR (statusbar), gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "gné"), text); g_free (text); } } static void update_values (GtkRange *range) { double value = gtk_range_get_value (range); // range (0..1) gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), value / 100.0); #if GTK_CHECK_VERSION (3,6,0) // range (0..1) gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar1), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar2), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar5), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar6), value / 100.0); // range (0..5) gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar3), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar3))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar4), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar4))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar7), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar7))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar8), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar8))); #endif // range (0..1) gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), value / 100.0); // range (0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale6), value); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar8), value > 50); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar9), value > 50); } static void update_widgets () { // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), !toggle); gtk_widget_set_sensitive (scale2, toggle); gtk_widget_set_sensitive (scale4, toggle); gtk_widget_set_sensitive (scale6, toggle); gtk_widget_set_sensitive (progressbar2, toggle); gtk_widget_set_sensitive (progressbar4, toggle); #if GTK_CHECK_VERSION (3,6,0) gtk_widget_set_sensitive (levelbar2, toggle); gtk_widget_set_sensitive (levelbar4, toggle); gtk_widget_set_sensitive (levelbar6, toggle); gtk_widget_set_sensitive (levelbar8, toggle); #endif gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar1), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar2), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar3), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar4), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar8), FALSE); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar9), FALSE); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible (progressbar8, FALSE); gtk_widget_set_visible (progressbar9, FALSE); gtk_widget_set_visible (toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0.0); gtk_widget_set_visible (progressbar8, TRUE); gtk_widget_set_visible (progressbar9, TRUE); gtk_widget_set_visible (toolbarentry, TRUE); } gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), !toggle, GTK_POS_RIGHT); update_window_size (); } static void update_marks (GtkScale *scale, gboolean value, int position) { // @common if (value) { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, "25"); gtk_scale_add_mark (scale, 50, position, "50"); gtk_scale_add_mark (scale, 75, position, "75"); gtk_scale_add_mark (scale, 100, position, NULL); } else { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, NULL); gtk_scale_add_mark (scale, 50, position, NULL); gtk_scale_add_mark (scale, 75, position, NULL); gtk_scale_add_mark (scale, 100, position, NULL); } } static void display_notification () { // @common if (notify_init (GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new (GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action (notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_add_action (notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_set_timeout (notif, 50000); notify_notification_show (notif, NULL); g_object_unref (G_OBJECT (notif)); notify_uninit (); } } static void find_and_update_labels (GtkWidget *widget, gboolean special) { // with ChatGPT if (GTK_IS_LABEL (widget)) { gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CELL_LAYOUT (widget)) { GList *cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (widget)); GList *iter; for (iter = cells; iter != NULL; iter = iter->next) { if (GTK_IS_CELL_RENDERER_TEXT (iter->data)) { if (special) { // @todo for button8 int width, height; PangoLayout *layout = gtk_widget_create_pango_layout (widget, "Test"); PangoFontDescription *desc = pango_font_description_copy (pango_context_get_font_description (gtk_widget_get_pango_context (widget))); pango_layout_set_font_description (layout, desc); pango_font_description_free (desc); pango_layout_get_pixel_size (layout, &width, &height); g_object_unref (layout); g_object_set (G_OBJECT (iter->data), "width-chars", 15, "max-width-chars", 15, "height", height + 4, NULL); } else { g_object_set (G_OBJECT (iter->data), "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); } } } g_list_free (cells); } else if (GTK_IS_CONTAINER (widget)) { GList *children = gtk_container_get_children (GTK_CONTAINER (widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels (GTK_WIDGET (iter->data), special); g_list_free (children); } } static gboolean find_and_check_menuradio (GtkWidget *menu, gchar *search) { GList *children = gtk_container_get_children (GTK_CONTAINER (menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next (iter)) { item = GTK_WIDGET (iter->data); if (GTK_IS_MENU_ITEM (item)) { GtkWidget *submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (item)); if (submenu) { // process submenu if (find_and_check_menuradio (submenu, search)) { g_list_free (children); return TRUE; } } else if (gtk_widget_get_sensitive (item)) { // check menuitem label const gchar *value = gtk_menu_item_get_label (GTK_MENU_ITEM (item)); if (value && (g_strcmp0 (value, search) == 0)) { allow_update_theme = FALSE; gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); allow_update_theme = TRUE; g_list_free (children); return TRUE; } } } } g_list_free (children); return FALSE; } static gboolean on_notification_action (void *data) { // @common return FALSE; } static gboolean on_sighup (void *data) { // @common update_theme ("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot (void *data) { // @common 50% GdkPixbuf *image = NULL; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window (window); gtk_window_get_size (GTK_WINDOW (window), &width, &height); image = gdk_pixbuf_get_from_window (root, 0, 0, width, height); if (image) { gdk_pixbuf_save (image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref (image); gchar *text = g_strdup_printf (_app("Theme reloaded, then screenshot saved (%s)."), opt_screenshot); update_statusbar (text); g_free (text); } return FALSE; } // layout and widgets static void create_window (gpointer app) { GtkWidget *vbox_window, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window #if GTK_CHECK_VERSION (3,4,0) window = gtk_application_window_new (GTK_APPLICATION (app)); #else window = gtk_window_new (GTK_WINDOW_TOPLEVEL); #endif gtk_widget_set_name (GTK_WIDGET (window), "AwfMainWindow"); gtk_window_set_icon_name (GTK_WINDOW (window), GETTEXT_PACKAGE); text = g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title (GTK_WINDOW (window), text); g_free (text); // theme auto or from command line if (strcmp ((gchar*) current_theme, (gchar*) opt_theme) != 0) update_theme (opt_theme); else update_theme (current_theme); allow_update_theme = FALSE; if (current_direction == GTK_TEXT_DIR_NONE) current_direction = gtk_widget_get_default_direction (); // layout vbox_window = BOXV; gtk_container_add (GTK_CONTAINER (window), vbox_window); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { // enable CSD for dialogs // except for custom dialogs g_object_set (gtk_settings_get_default (), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated (GTK_WINDOW (window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new (); gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), gtk_window_get_title (GTK_WINDOW (window))); gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (headerbar), FALSE); gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get (gtk_widget_get_settings (headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix (tokens, "icon") || g_str_has_prefix (tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix (tokens, "icon") || g_str_has_suffix (tokens, "menu")) closeRight = TRUE; if (g_getenv ("AWF_DEBUG") != NULL) g_printf("tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free (tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name (GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class (gtk_widget_get_style_context (headbarCloseLeft), "app-icon"); gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), headbarCloseLeft); button = gtk_menu_button_new (); gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu1 = gtk_menu_new (); create_menuitem (menu1, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem (menu1, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem (menu1, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem (menu1, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem (menu1, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all (menu1); gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu1); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn1"); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn3"); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name (GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class (gtk_widget_get_style_context (headbarCloseRight), "app-icon"); gtk_widget_set_visible (headbarCloseRight, closeRight); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), headbarCloseRight); button = gtk_menu_button_new (); gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu2 = gtk_menu_new (); create_menuitem (menu2, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem (menu2, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem (menu2, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem (menu2, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem (menu2, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all (menu2); gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu2); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn6"); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn4"); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); gtk_window_set_titlebar (GTK_WINDOW (window), headerbar); } #endif menubar = gtk_menu_bar_new (); create_traditional_menubar (menubar); add_to (GTK_BOX (vbox_window), menubar, FALSE, FALSE, 0, 0); toolbar = gtk_toolbar_new (); gtk_style_context_add_class (gtk_widget_get_style_context (toolbar), "primary-toolbar"); add_to (GTK_BOX (vbox_window), toolbar, FALSE, FALSE, 0, 0); create_toolbar_items (toolbar); widgets = BOXV; add_to (GTK_BOX (vbox_window), widgets, TRUE, TRUE, 0, 0); create_widgets (widgets); statusbar = gtk_statusbar_new (); add_to (GTK_BOX (vbox_window), statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); // go go go allow_update_theme = TRUE; update_text_direction (current_direction); g_signal_connect (window, "destroy", G_CALLBACK (quit), NULL); #if GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), "gtk-theme"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), "gtk-theme"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.Marco.general", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-decoration-layout", G_CALLBACK (notify_updated_gtktheme), "gtk-decoration-layout"); #endif gtk_widget_show_all (window); if (headbarCloseLeft && headbarCloseRight) { gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_widget_set_visible (headbarCloseRight, closeRight); } add_progressbar_and_entrybar (); #if !GTK_CHECK_VERSION (3,4,0) gtk_main (); #endif } static void create_widgets (GtkWidget *root) { // @common 50% GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progressbar1 = BOXV, *vbox_progressbar2 = BOXV, *hbox_progressbar1 = BOXH, *hbox_progressbar2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to (GTK_BOX (root), hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to (GTK_BOX (hbox_columns), vbox_column1, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column1), vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries (vbox_combo_entry); add_to (GTK_BOX (vbox_column1), hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons (hbox_spin); add_to (GTK_BOX (vbox_column1), hbox_check_radio, FALSE, TRUE, 5, 0); add_to (GTK_BOX (hbox_check_radio), vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons (vbox_check); add_to (GTK_BOX (hbox_check_radio), vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons (vbox_radio); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 2 add_to (GTK_BOX (hbox_columns), vbox_column2, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column2), vbox_buttons, FALSE, TRUE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns1, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns2, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns3, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons (vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 3 add_to (GTK_BOX (hbox_columns), vbox_column3, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column3), vbox_progressbar1, FALSE, TRUE, 6, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar1, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar2, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), vbox_progressbar2, FALSE, TRUE, 5, 10); create_progressbars (vbox_progressbar1, hbox_progressbar1, hbox_progressbar2, vbox_progressbar2); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 4 add_to (GTK_BOX (hbox_columns), vbox_column4, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column4), vbox_others, FALSE, TRUE, 5, 3); create_treview (vbox_others); add_to (GTK_BOX (vbox_others), hbox_label, FALSE, TRUE, 5, 0); create_labels (hbox_label); add_to (GTK_BOX (vbox_others), hbox_spinner, FALSE, TRUE, 5, 0); create_spinners (hbox_spinner); create_expander (vbox_others); add_to (GTK_BOX (root), SEPH, FALSE, FALSE, 0, 0); // paned layout add_to (GTK_BOX (root), vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1 (GTK_PANED (vpane), hpane1, TRUE, FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_frame1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame1), 3); #if GTK_CHECK_VERSION (3,12,0) gtk_widget_set_size_request (hbox_frame1, -1, 50); gtk_widget_set_margin_start (hbox_frame1, 10); gtk_widget_set_margin_end (hbox_frame1, 10); gtk_widget_set_margin_top (hbox_frame1, 10); gtk_widget_set_margin_bottom (hbox_frame1, 10); #else gtk_widget_set_size_request (hbox_frame1, -1, 70); gtk_container_set_border_width (GTK_CONTAINER (hbox_frame1), 10); #endif gtk_paned_add1 (GTK_PANED (hpane1), hbox_frame1); gtk_box_set_homogeneous (GTK_BOX (hbox_frame2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame2), 3); #if GTK_CHECK_VERSION (3,12,0) gtk_widget_set_size_request (hbox_frame2, -1, 50); gtk_widget_set_margin_start (hbox_frame2, 10); gtk_widget_set_margin_end (hbox_frame2, 10); gtk_widget_set_margin_top (hbox_frame2, 10); gtk_widget_set_margin_bottom (hbox_frame2, 10); #else gtk_widget_set_size_request (hbox_frame2, -1, 70); gtk_container_set_border_width (GTK_CONTAINER (hbox_frame2), 10); #endif gtk_paned_add2 (GTK_PANED (hpane1), hbox_frame2); create_frames (hbox_frame1, hbox_frame2); gtk_paned_pack2 (GTK_PANED (vpane), hpane2, TRUE, FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook1), 3); #if GTK_CHECK_VERSION (3,12,0) gtk_widget_set_margin_start (hbox_notebook1, 10); gtk_widget_set_margin_end (hbox_notebook1, 10); gtk_widget_set_margin_top (hbox_notebook1, 10); gtk_widget_set_margin_bottom (hbox_notebook1, 10); #else gtk_container_set_border_width (GTK_CONTAINER (hbox_notebook1), 10); #endif gtk_paned_add1 (GTK_PANED (hpane2), hbox_notebook1); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook2), 3); #if GTK_CHECK_VERSION (3,12,0) gtk_widget_set_margin_start (hbox_notebook2, 10); gtk_widget_set_margin_end (hbox_notebook2, 10); gtk_widget_set_margin_top (hbox_notebook2, 10); gtk_widget_set_margin_bottom (hbox_notebook2, 10); #else gtk_container_set_border_width (GTK_CONTAINER (hbox_notebook2), 10); #endif gtk_paned_add2 (GTK_PANED (hpane2), hbox_notebook2); create_notebooks (hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar () { // entry toolbar toolbarentry = gtk_entry_new (); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text (GTK_ENTRY (toolbarentry), "..."); #endif gtk_widget_set_visible (toolbarentry, FALSE); gtk_widget_set_vexpand (toolbarentry, FALSE); gtk_widget_set_valign (toolbarentry, GTK_ALIGN_CENTER); gtk_container_add (GTK_CONTAINER (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 10)), toolbarentry); // end left // progressbar toolbar progressbar8 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible (progressbar8, FALSE); gtk_widget_set_vexpand (progressbar8, FALSE); gtk_widget_set_valign (progressbar8, GTK_ALIGN_CENTER); gtk_container_add (GTK_CONTAINER (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 12)), progressbar8); // end right // progressbar statusbar progressbar9 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible (progressbar9, FALSE); gtk_widget_set_vexpand (progressbar9, FALSE); gtk_widget_set_valign (progressbar9, GTK_ALIGN_CENTER); gtk_box_pack_start (GTK_BOX (statusbar), progressbar9, FALSE, FALSE, 0); } static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing) { if (GTK_IS_INFO_BAR (box)) box = GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (box))); if (GTK_IS_CONTAINER (widget) && (padding > 0)) gtk_container_set_border_width (GTK_CONTAINER (widget), padding); if (GTK_IS_BOX (widget) && (spacing > 0)) gtk_box_set_spacing (GTK_BOX (widget), spacing); gtk_box_pack_start (box, widget, fill, expand, 0); #if GTK_CHECK_VERSION (3,20,0) if (!GTK_IS_BOX (widget)) { GtkStyleContext *style = gtk_widget_get_style_context (widget); gchar *text = gtk_style_context_to_string (style, GTK_STYLE_CONTEXT_PRINT_RECURSE); gtk_widget_set_tooltip_text (widget, text); g_free (text); } #endif } static void create_toolbar_items (GtkWidget *root) { // @common gtk2/3 GtkWidget *tool1, *menu, *tool2, *tool4, *tool5, *tool6, *tool8, *tool9, *tool10, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); tool1 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool1), "gtk-open"); g_signal_connect (tool1, "clicked", G_CALLBACK (dialog_open), NULL); menu = gtk_menu_new (); create_menuitem (menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem (menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem (menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all (menu); // very important gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (tool1), menu); tool2 = GTK_WIDGET (gtk_menu_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool2), "gtk-open"); gtk_widget_set_sensitive (tool2, FALSE); tool4 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool4), "gtk-save"); g_signal_connect (tool4, "clicked", G_CALLBACK (dialog_save), NULL); tool5 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool5), "gtk-refresh"); g_signal_connect_swapped (tool5, "clicked", G_CALLBACK (update_theme), "refresh"); tool6 = GTK_WIDGET (gtk_tool_button_new (NULL, NULL)); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool6), "gtk-dialog-info"); g_signal_connect_swapped (tool6, "clicked", G_CALLBACK (display_notification), "refresh"); tool8 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool8), "gtk-add"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool8), TRUE); g_signal_connect (tool8, "clicked", G_CALLBACK (update_widgets), NULL); tool9 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool9), "gtk-remove"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool9), FALSE); g_signal_connect (tool9, "clicked", G_CALLBACK (update_widgets), NULL); tool10 = GTK_WIDGET (gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (tool10), "gtk-close"); gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tool10), FALSE); gtk_widget_set_sensitive (tool10, FALSE); tool11 = GTK_WIDGET (gtk_tool_item_new ()); tool12 = GTK_WIDGET (gtk_tool_item_new ()); gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool12), TRUE); tool13 = GTK_WIDGET (gtk_tool_item_new ()); gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool13), FALSE); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool1), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool2), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), gtk_separator_tool_item_new (), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool4), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool5), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool6), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), gtk_separator_tool_item_new (), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool8), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool9), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool10), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool11), -1); // = 10 gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool12), -1); gtk_toolbar_insert (GTK_TOOLBAR (root), GTK_TOOL_ITEM (tool13), -1); // = 12 } static void create_combos_entries (GtkWidget *root) { GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; combo1 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo1), 0); combo2 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo2), 0); gtk_widget_set_sensitive (combo2, FALSE); combo3 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo3), 0); combo4 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo4), 0); gtk_widget_set_sensitive (combo4, FALSE); entry1 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry1), "Entry"); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text (GTK_ENTRY (entry1), "Placeholder"); #endif entry2 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry2), "Entry"); gtk_widget_set_sensitive (entry2, FALSE); entry3 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry3), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text (GTK_ENTRY (entry3), "Placeholder"); #endif entry4 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry4), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); gtk_widget_set_sensitive (entry4, FALSE); // layout add_to (GTK_BOX (root), combo1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons (GtkWidget *root) { // @common GtkWidget *spinbutton1, *spinbutton2; spinbutton1 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton2), 1); gtk_widget_set_sensitive (spinbutton2, FALSE); add_to (GTK_BOX (root), spinbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_checkbuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; checkbutton1 = gtk_check_button_new_with_label ("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label ("Check btn 2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label ("Check btn 3"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label ("Check btn 4"); gtk_widget_set_sensitive (checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label ("Check btn 5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton5), TRUE); gtk_widget_set_sensitive (checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label ("Check btn 6"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (checkbutton6), TRUE); gtk_widget_set_sensitive (checkbutton6, FALSE); add_to (GTK_BOX (root), checkbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; radiobutton1 = gtk_radio_button_new_with_label (NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label (NULL, "Radio btn 4"); gtk_widget_set_sensitive (radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton5), TRUE); gtk_widget_set_sensitive (radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (radiobutton6), TRUE); gtk_widget_set_sensitive (radiobutton6, FALSE); add_to (GTK_BOX (root), radiobutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button15; button1 = gtk_button_new_with_label ("Button 1"); button2 = gtk_button_new_with_label ("Button 2"); gtk_widget_set_sensitive (button2, FALSE); button3 = gtk_toggle_button_new_with_label ("Button 3"); button4 = gtk_toggle_button_new_with_label ("Button 4"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button3), TRUE); gtk_widget_set_sensitive (button4, FALSE); // colorbutton GdkRGBA color; gdk_rgba_parse (&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba (&color); // fontbutton button6 = gtk_font_button_new (); find_and_update_labels (button6, FALSE); gtk_widget_set_size_request (button6, 186, -1); // filebutton button7 = gtk_file_chooser_button_new ("GtkFileChooserDialog", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels (button7, FALSE); gtk_widget_set_size_request (button7, 180, -1); button8 = gtk_file_chooser_button_new ("GtkFileChooserDialog", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels (button8, TRUE); gtk_widget_set_size_request (button8, 180, -1); // switchbutton button9 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button9), TRUE); button10 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button10), TRUE); gtk_widget_set_sensitive (button10, FALSE); button11 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button11), FALSE); button12 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button12), FALSE); gtk_widget_set_sensitive (button12, FALSE); button13 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive (button14, FALSE); volume1 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), 0.5); #if !GTK_CHECK_VERSION (3,12,0) g_object_set ((GObject*) volume1, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif volume2 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume2), 0); gtk_widget_set_sensitive (volume2, FALSE); #if !GTK_CHECK_VERSION (3,12,0) g_object_set ((GObject*) volume2, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif #if GTK_CHECK_VERSION (3,12,0) button15 = gtk_menu_button_new (); gtk_menu_button_set_use_popover (GTK_MENU_BUTTON (button15), TRUE); gtk_button_set_image (GTK_BUTTON (button15), gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GMenu *menu = g_menu_new (); g_menu_append_item (menu, g_menu_item_new ("Popover item 1", NULL)); g_menu_append_item (menu, g_menu_item_new ("Popover item 2", NULL)); g_menu_append_item (menu, g_menu_item_new ("Popover item 3", NULL)); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button15), G_MENU_MODEL (menu)); #endif // layout add_to (GTK_BOX (root1), button1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button8, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button9, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button10, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button11, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button12, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button13, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button14, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume2, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,12,0) add_to (GTK_BOX (root5), button15, FALSE, FALSE, 0, 0); #endif } static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // progress bars progressbar1 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar1), GTK_ORIENTATION_HORIZONTAL); progressbar2 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (progressbar2), TRUE); gtk_style_context_add_class (gtk_widget_get_style_context (progressbar2), "awf-cheatcode-prbr2"); progressbar3 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request (progressbar3, -1, 100); progressbar4 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (progressbar4), TRUE); // scales scale1 = create_horizontal_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale1, "value_changed", G_CALLBACK (update_values), NULL); scale2 = create_horizontal_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale2, "value_changed", G_CALLBACK (update_values), NULL); scale3 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale3, "value_changed", G_CALLBACK (update_values), NULL); scale4 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale4, "value_changed", G_CALLBACK (update_values), NULL); scale5 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); update_marks (GTK_SCALE (scale5), FALSE, GTK_POS_LEFT); g_signal_connect (scale5, "value_changed", G_CALLBACK (update_values), NULL); scale6 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); update_marks (GTK_SCALE (scale6), FALSE, GTK_POS_RIGHT); g_signal_connect (scale6, "value_changed", G_CALLBACK (update_values), NULL); #if GTK_CHECK_VERSION (3,6,0) levelbar1 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar1), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar2), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar2), GTK_ORIENTATION_VERTICAL); levelbar3 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar3), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar4), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar4), GTK_ORIENTATION_VERTICAL); levelbar5 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar5), 0.5); levelbar6 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar6), 0.5); levelbar7 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar7), 2); // GTK 3.20.9 not working levelbar8 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar8), 2); // GTK 3.20.9 not working #if GTK_CHECK_VERSION (3,8,0) gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar2), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar4), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar6), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar8), TRUE); #endif #endif // layout add_to (GTK_BOX (root1), progressbar1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), progressbar2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to (GTK_BOX (root2), levelbar1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar4, FALSE, FALSE, 0, 0); #endif add_to (GTK_BOX (root3), scale3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to (GTK_BOX (root4), levelbar5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar8, FALSE, FALSE, 0, 0); #endif } static void create_labels (GtkWidget *root) { // @common GtkWidget *label1, *label2; label1 = gtk_label_new ("Label 1"); label2 = gtk_label_new ("Label 2"); gtk_widget_set_sensitive (label2, FALSE); add_to (GTK_BOX (root), label1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), label2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners (GtkWidget *root) { // @common GtkWidget *spinner1, *spinner2; spinner1 = gtk_spinner_new (); gtk_widget_set_size_request (spinner1, 20, 20); spinner2 = gtk_spinner_new (); gtk_widget_set_size_request (spinner2, 20, 20); gtk_widget_set_sensitive (spinner2, FALSE); //gtk_spinner_start (GTK_SPINNER (spinner2)); add_to (GTK_BOX (root), spinner1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinner2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander (GtkWidget *root) { GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; expander = gtk_expander_new (_app("More...")); gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE); //#if GTK_CHECK_VERSION (3,20,0) // @todo label 100% width //#endif scrolled_window = gtk_scrolled_window_new (NULL, NULL); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv ("GTK_OVERLAY_SCROLLING"); if (config && (strcmp (config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (scrolled_window), FALSE); gtk_style_context_add_class (gtk_widget_get_style_context (gtk_scrolled_window_get_hscrollbar (GTK_SCROLLED_WINDOW (scrolled_window))), "discrete"); gtk_style_context_add_class (gtk_widget_get_style_context (gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolled_window))), "discrete"); } #endif gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, -1, 120); tv = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv)); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD); gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), g_strdup_printf ("%s ~ %s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")), -1); gtk_container_add (GTK_CONTAINER (scrolled_window), tv); gtk_container_add (GTK_CONTAINER (expander), scrolled_window); add_to (GTK_BOX (root), expander, FALSE, FALSE, 0, 0); } static void create_frames (GtkWidget *root1, GtkWidget *root2) { GtkWidget *frame1, *frame2, *frame3, *frame4; frame1 = gtk_frame_new ("Frame (shadow in)"); gtk_style_context_add_class (gtk_widget_get_style_context (frame1), "border-inset"); gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new ("Frame (shadow out)"); gtk_style_context_add_class (gtk_widget_get_style_context (frame2), "border-outset"); gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new ("Frame (shadow etched in)"); gtk_style_context_add_class (gtk_widget_get_style_context (frame3), "border-groove"); gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new ("Frame (shadow etched out)"); gtk_style_context_add_class (gtk_widget_get_style_context (frame4), "border-ridge"); gtk_frame_set_shadow_type (GTK_FRAME (frame4), GTK_SHADOW_ETCHED_OUT); add_to (GTK_BOX (root1), frame1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), frame2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame4, TRUE, TRUE, 0, 0); } static void create_notebooks (GtkWidget *root1, GtkWidget *root2) { // @common* notebook1 = gtk_notebook_new (); notebook2 = gtk_notebook_new (); notebook3 = gtk_notebook_new (); notebook4 = gtk_notebook_new (); #if GTK_CHECK_VERSION (3,4,0) // gtk-scroll-tabs for GTK 3.4..3.24 | so same 2.24 - 3.x - 4.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events (notebook1, GDK_SCROLL_MASK); g_signal_connect (notebook1, "scroll-event", G_CALLBACK (on_scrolltabs), NULL); gtk_widget_add_events (notebook2, GDK_SCROLL_MASK); g_signal_connect (notebook2, "scroll-event", G_CALLBACK (on_scrolltabs), NULL); gtk_widget_add_events (notebook3, GDK_SCROLL_MASK); g_signal_connect (notebook3, "scroll-event", G_CALLBACK (on_scrolltabs), NULL); gtk_widget_add_events (notebook4, GDK_SCROLL_MASK); g_signal_connect (notebook4, "scroll-event", G_CALLBACK (on_scrolltabs), NULL); #endif gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook1), GTK_POS_TOP); create_notebook_tab (notebook1, "Tab1", NULL, FALSE); create_notebook_tab (notebook1, "Tab2", NULL, FALSE); create_notebook_tab (notebook1, "Tab3", NULL, TRUE); create_notebook_tab (notebook1, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook2)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook2), GTK_POS_BOTTOM); create_notebook_tab (notebook2, "Tab1", NULL, FALSE); create_notebook_tab (notebook2, "Tab2", NULL, FALSE); create_notebook_tab (notebook2, "Tab3", NULL, TRUE); create_notebook_tab (notebook2, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook3)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook3), GTK_POS_LEFT); create_notebook_tab (notebook3, "T1", NULL, FALSE); create_notebook_tab (notebook3, "Tab2", NULL, FALSE); create_notebook_tab (notebook3, "T3b", NULL, TRUE); create_notebook_tab (notebook3, "T4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook4)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook4), GTK_POS_RIGHT); create_notebook_tab (notebook4, "T1", NULL, FALSE); create_notebook_tab (notebook4, "Tab2", NULL, FALSE); create_notebook_tab (notebook4, "T3b", NULL, TRUE); create_notebook_tab (notebook4, "T4", NULL, TRUE); add_to (GTK_BOX (root1), notebook1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), notebook2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { GtkWidget *headbtn = BOXH, *btn; add_to (GTK_BOX (headbtn), gtk_label_new (text), TRUE, TRUE, 0, 0); if (!content) content = BOXV; if (close) { btn = gtk_button_new (); gtk_button_set_image (GTK_BUTTON (btn), gtk_image_new_from_icon_name ("gtk-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief (GTK_BUTTON (btn), GTK_RELIEF_NONE); #if GTK_CHECK_VERSION (3,20,0) gtk_widget_set_focus_on_click (btn, FALSE); #else gtk_button_set_focus_on_click (GTK_BUTTON (btn), FALSE); #endif add_to (GTK_BOX (headbtn), btn, FALSE, FALSE, 0, 0); } gtk_widget_show_all (headbtn); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), content, headbtn); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (notebook), content, TRUE); //gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (notebook), content, TRUE); #if GTK_CHECK_VERSION (3,4,0) if (close) { // gtk-scroll-tabs (close button) for GTK 3.4..3.24 | so same 2.24 - 3.x - 4.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events (btn, GDK_SCROLL_MASK); g_signal_connect (btn, "scroll-event", G_CALLBACK (on_scrolltabs), NULL); } #endif } static void create_treview (GtkWidget *root) { // @common 80% GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; // data store = gtk_tree_store_new (11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "gtk-help", 8, "gtk-help", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (view), FALSE); // rows gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view), FALSE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (view), TRUE); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), 0, GTK_SORT_ASCENDING); g_object_unref (G_OBJECT (store)); idx = 0; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 1; renderer = gtk_cell_renderer_toggle_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 4; renderer = gtk_cell_renderer_progress_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); // colors for lines before GTK 3.19, after with gtk3-classic #if !GTK_CHECK_VERSION (3,19,0) gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE); #endif // scrolled window scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv ("GTK_OVERLAY_SCROLLING"); if (config && (strcmp (config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (scrolled_window), FALSE); #endif gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, 200, 200); gtk_widget_set_size_request (view, 200, 200); gtk_container_add (GTK_CONTAINER (scrolled_window), view); add_to (GTK_BOX (root), scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales (GtkWidget *notebook, gchar *text, int position) { GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value (GTK_RANGE (scale1)); gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); // vertical scales scale1v = create_vertical_scale (value, FALSE, FALSE, position); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale1v), "top"); scale2v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale2v), "top"); scale3v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale3v), "top"); scale4v = create_vertical_scale (value, TRUE, FALSE, position); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale4v), "top"); scale5v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale5v), "top"); scale6v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class (gtk_widget_get_style_context (scale6v), "top"); scale7v = create_vertical_scale (value, FALSE, TRUE, position); scale8v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale (value, TRUE, TRUE, position); scale11v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale (value, FALSE, FALSE, position); scale2h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale (value, TRUE, FALSE, position); scale5h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale (value, FALSE, TRUE, position); scale8h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale (value, TRUE, TRUE, position); scale11h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to (GTK_BOX (hbox), vbox1, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox1), scale1h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale2h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale3h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale4h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale5h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale6h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox2), hboxa, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxa), scale1v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale2v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale3v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale7v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale8v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale9v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox2), hboxb, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxb), scale4v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale5v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale6v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale10v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale11v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale12v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox3, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox3), scale7h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale8h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale9h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale10h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale11h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale12h, FALSE, FALSE, 5, 5); create_notebook_tab (notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value (GTK_RANGE (scale), value); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_widget_set_size_request (scale, 186, -1); return scale; } static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_range_set_value (GTK_RANGE (scale), value); gtk_widget_set_size_request (scale, -1, 100); return scale; } // traditional menu - @common gtk2/3 (except one line) static void create_traditional_menubar (GtkWidget *root) { GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new (); GSList *group = NULL; GList *iterator; gboolean ok = FALSE; gtk_window_add_accel_group (GTK_WINDOW (window), accels); // options menu = create_menu (root, _app("_Options")); gtk_menu_set_accel_group (GTK_MENU (menu), accels); // very important create_menuitem_tearoff (menu); create_menuitem (menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem (menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem (menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem (menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK (on_sighup)); // G_CALLBACK (update_theme) create_menuitem (menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem (menu, _app("GtkScales"), FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem (menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem (menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem (menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu (menu, _app("More...")); gtk_menu_set_accel_group (GTK_MENU (submenu), accels); // very important create_menuitem (submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem (submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem (submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); create_menuitem_check (menu, g_strdup_printf ("Check 1 %s", _app("(unchecked)")), FALSE, FALSE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 2 %s", _app("(checked)")), TRUE, FALSE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 3 %s", _app("(inconsistent)")), FALSE, TRUE, FALSE); create_menuitem_check (menu, g_strdup_printf ("Check 1 %s", _app("(unchecked)")), FALSE, FALSE, TRUE); create_menuitem_check (menu, g_strdup_printf ("Check 2 %s", _app("(checked)")), TRUE, FALSE, TRUE); create_menuitem_check (menu, g_strdup_printf ("Check 3 %s", _app("(inconsistent)")), FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); menuitem = create_menuitem_radio (menu, g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); create_menuitem_radio (menu, g_strdup_printf ("Radio 2 %s", _app("(checked)")), TRUE, FALSE, FALSE, group); create_menuitem_radio (menu, g_strdup_printf ("Radio 3 %s", _app("(inconsistent)")), FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio (menu, g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); create_menuitem_radio (menu, g_strdup_printf ("Radio 2 %s", _app("(checked)")), TRUE, FALSE, TRUE, group); create_menuitem_radio (menu, g_strdup_printf ("Radio 3 %s", _app("(inconsistent)")), FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); create_menuitem (menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem (menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes group = NULL; menu = create_menu (root, _app("_System themes")); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = create_menu (menu, iterator->data); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup (hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } else { menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } } if (!list_system_theme) create_menuitem (menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes menu = create_menu (root, _app("_User themes")); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = create_menu (menu, iterator->data); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio (base, iterator->data, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); if (strcmp ((gchar*) current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_theme), iterator->data); } if (!list_user_theme) create_menuitem (menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu (root, _app("_Text direction")); menuitem = create_menuitem_radio (menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, group); if ((current_direction == GTK_TEXT_DIR_LTR) || (current_direction == 1)) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_text_direction), (gpointer) GTK_TEXT_DIR_LTR); group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem)); menuitem = create_menuitem_radio (menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, group); if ((current_direction == GTK_TEXT_DIR_RTL) || (current_direction == 2)) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE); g_signal_connect_swapped (menuitem, "activate", G_CALLBACK (update_text_direction), (gpointer) GTK_TEXT_DIR_RTL); // help menu = create_menu (root, _app("_Help")); gtk_menu_set_accel_group (GTK_MENU (menu), accels); // very important #if GTK_CHECK_VERSION (3,14,0) create_menuitem (menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); #else gtk_widget_set_sensitive (create_menuitem (menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL), FALSE); #endif create_menuitem (menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x accels_load (); g_object_set (gtk_settings_get_default (), "gtk-can-change-accels", FALSE, NULL); } static GtkWidget* create_menu (GtkWidget *root, gchar *text) { GtkWidget *menu, *menuitem; menu = gtk_menu_new (); menuitem = gtk_menu_item_new_with_mnemonic (text); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu); gtk_menu_shell_append (GTK_MENU_SHELL (root), menuitem); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x gtk_widget_set_events (menu, GDK_KEY_RELEASE_MASK); g_signal_connect (menu, "key-release-event", G_CALLBACK (accels_change), NULL); return menu; } static GtkWidget* create_menuitem_tearoff (GtkWidget *menu) { GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new (); gtk_style_context_add_class (gtk_widget_get_style_context (menuitem), "tearoff"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled) { GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic (text); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), checked); gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem), inconsistent); gtk_widget_set_sensitive (menuitem, !disabled); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_radio (GtkWidget *menu, gchar *text, gboolean checked, gboolean inconsistent, gboolean disabled, GSList *group) { GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic (group, text); gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem), inconsistent); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), checked); gtk_widget_set_sensitive (menuitem, !disabled); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); return menuitem; } static GtkWidget* create_menuitem (GtkWidget *menu, gchar *text, gboolean disabled, gchar *accel, gchar *keymap, GCallback function) { GtkWidget *menuitem; GdkModifierType mods; guint key; menuitem = gtk_image_menu_item_new_from_stock (text, NULL); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), keymap); gtk_widget_set_sensitive (menuitem, !disabled); if (accel) { gtk_accelerator_parse (accel, &key, &mods); gtk_accel_map_add_entry (keymap, key, mods); } if (function) g_signal_connect (menuitem, "activate", function, NULL); // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x g_signal_connect (menuitem, "select", G_CALLBACK (accels_select), NULL); g_signal_connect (menuitem, "deselect", G_CALLBACK (accels_deselect), NULL); return menuitem; } static void accels_load () { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x gchar *path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load (path); g_free (path); } static void accels_select (GtkWidget *widget) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x current_menuitem = widget; } static void accels_deselect (GtkWidget *widget) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x if (current_menuitem == widget) current_menuitem = NULL; } static void accels_change (GtkWidget *widget, GdkEventKey *event) { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x // @see https://gitlab.gnome.org/GNOME/gtk/-/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (!current_menuitem) return; GtkMenuItem *menuitem = GTK_MENU_ITEM (current_menuitem); gchar *key = gdk_keyval_name (event->keyval); if ( !gtk_menu_item_get_accel_path (menuitem) || (strcmp (key, "Control_L") == 0) || (strcmp (key, "Control_R") == 0) || (strcmp (key, "Shift_L") == 0) || (strcmp (key, "Shift_R") == 0) || (strcmp (key, "Super_L") == 0) || (strcmp (key, "Super_R") == 0) || (strcmp (key, "Meta_L") == 0) || (strcmp (key, "Meta_R") == 0) || (strcmp (key, "Alt_L") == 0) || (strcmp (key, "Alt_R") == 0) ) { return; } if ( (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace) || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // crtl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; if ((event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace)) gtk_accel_map_change_entry (gtk_menu_item_get_accel_path (menuitem), 0, 0, TRUE); else gtk_accel_map_change_entry ( gtk_menu_item_get_accel_path (menuitem), gdk_keyval_to_lower (event->keyval), event->state & gtk_accelerator_get_default_mod_mask (), TRUE); } } static void accels_save () { // gtk-can-change-accels for GTK 3.2..3.24 | so same GTK 2.24 - 3.x if (must_save_accels) { gchar *path = g_build_filename ("/", g_getenv ("HOME"), ".awf-gtk-accels", NULL); gtk_accel_map_save (path); g_free (path); } } // dialogs static void dialog_open () { // @common gtk2/3 GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Open", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog))), FALSE); #endif gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_recent () { // @common gtk2/3 GtkWidget *dialog = gtk_recent_chooser_dialog_new ( "GtkRecentChooserDialog", GTK_WINDOW (window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog))), FALSE); #endif gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_save () { // @common gtk2/3 GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Save", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog))), FALSE); #endif gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_message () { // @common gtk2/3 GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title (GTK_WINDOW (dialog), "GtkMessageDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_page_setup () { // @common gtk2/3 GtkWidget *dialog = gtk_page_setup_unix_dialog_new ("GtkPageSetupUnixDialog", GTK_WINDOW (window)); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog))), FALSE); #endif gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_print () { // @common gtk2/3 GtkWidget *dialog = gtk_print_unix_dialog_new ("GtkPrintUnixDialog", GTK_WINDOW (window)); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (dialog))), FALSE); #endif gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_about () { // @common gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog (GTK_WINDOW (window), "version", VERSION, "comments", t1 = g_strdup_printf ("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf (_app("Remove %s file"), "~/.awf-gtk-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2025 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", GETTEXT_PACKAGE, "logo-icon-name", GETTEXT_PACKAGE, "license", "A widget factory 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 3 of the License, or (at your option) any later version.", "wrap-license", TRUE, NULL); g_free (t1); g_free (t2); g_free (t3); g_free (t4); } static void dialog_inspector () { // @common gtk3/4 #if GTK_CHECK_VERSION (3,14,0) gtk_window_set_interactive_debugging (TRUE); #endif } static void dialog_calendar () { // @common gtk2/3 GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); // info bars and calendar infobar = gtk_info_bar_new_with_buttons ("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO); label = gtk_label_new (_app("This is an info bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons (_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new (_app("This is a question bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_WARNING); label = gtk_label_new (_app("This is a warning bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_ERROR); label = gtk_label_new (_app("This is an error bar.")); add_to (GTK_BOX (infobar), label, FALSE, FALSE, 0, 0); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new (); gtk_calendar_set_display_options (GTK_CALENDAR (calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to (GTK_BOX (vbox), calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_set_spacing (GTK_BOX (area), 2); add_to (GTK_BOX (area), vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", 0); btn = gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", 0); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { gtk_window_set_decorated (GTK_WINDOW (dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new (); gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (headerbardialog), FALSE); gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbardialog), TRUE); gtk_window_set_titlebar (GTK_WINDOW (dialog), headerbardialog); } #endif gtk_widget_show_all (dialog); gtk_widget_grab_focus (GTK_WIDGET (btn)); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_widget_set_size_request (dialog, 350, -1); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } static void dialog_scales () { GtkWidget *dialog, *notebook, *area; dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); create_scales (notebook, "Top", GTK_POS_TOP); create_scales (notebook, "Right", GTK_POS_RIGHT); create_scales (notebook, "Bottom", GTK_POS_BOTTOM); create_scales (notebook, "Left", GTK_POS_LEFT); area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_set_spacing (GTK_BOX (area), 2); add_to (GTK_BOX (area), notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-cancel", 0); gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-ok", 0); #if GTK_CHECK_VERSION (3,12,0) const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { gtk_window_set_decorated (GTK_WINDOW (dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new (); gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (headerbardialog), FALSE); gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbardialog), TRUE); gtk_window_set_titlebar (GTK_WINDOW (dialog), headerbardialog); } #endif gtk_widget_show_all (dialog); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } // gtk-scroll-tabs for GTK 3.4..3.24 | so same 2.24 - 3.x - 4.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs (GtkWidget *widget, GdkEventScroll *event) { // gtk-scroll-tabs for GTK 3.4..3.24 | so same 2.24 - 3.x - 4.x GtkWidget *child, *event_widget, *action_widget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK (widget)) { widget = gtk_widget_get_parent (widget);} notebook = GTK_NOTEBOOK (widget); child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page event_widget = gtk_get_event_widget ((GdkEvent*) event); if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor (event_widget, child)) return FALSE; // and also from the action widgets action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) return FALSE; action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) return FALSE; switch (event->direction) { case GDK_SCROLL_RIGHT: case GDK_SCROLL_DOWN: gtk_notebook_next_page (notebook); break; case GDK_SCROLL_LEFT: case GDK_SCROLL_UP: gtk_notebook_prev_page (notebook); break; case GDK_SCROLL_SMOOTH: switch (gtk_notebook_get_tab_pos (notebook)) { case GTK_POS_LEFT: case GTK_POS_RIGHT: if (event->delta_y > 0) gtk_notebook_next_page (notebook); else if (event->delta_y < 0) gtk_notebook_prev_page (notebook); break; case GTK_POS_TOP: case GTK_POS_BOTTOM: if (event->delta_x > 0) gtk_notebook_next_page (notebook); else if (event->delta_x < 0) gtk_notebook_prev_page (notebook); break; } break; } return TRUE; } #endif awf-extended-3.2.0/src/awf-gtk4.c000066400000000000000000003367611507226270000164670ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated D/05/10/2025 * * Copyright 2020-2025 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtk/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) as published * by the free software foundation, either version 3 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-gtk*.c * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7.0) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.84 + Pango 1.56 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.57 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #include #include #if GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE g_strdup_printf ("awf-gtk%d", GTK_MAJOR_VERSION) #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define gtk_major_version gtk_get_major_version () #define gtk_minor_version gtk_get_minor_version () #define gtk_micro_version gtk_get_micro_version () #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Past" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP NULL #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(String) dgettext (GETTEXT_PACKAGE, String) #define _gtk(String) dgettext (g_strdup_printf ("gtk%d0", GTK_MAJOR_VERSION), String) // global variables static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *toolbar = NULL, *toolbarentry = NULL, *toolbarend = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL; static GtkWidget *volume1 = NULL, *volume2 = NULL; static GtkWidget *progressbar1 = NULL, *progressbar2 = NULL, *progressbar3 = NULL, *progressbar4 = NULL, *progressbar8 = NULL, *progressbar9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; //atic GtkWidget *current_menuitem = NULL; static int current_direction = GTK_TEXT_DIR_NONE; static gchar *current_theme = "auto"; static gchar *opt_theme = "auto"; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; //atic gboolean must_save_accels = FALSE; // global functions static void awf_load_theme (GHashTable* hashtable, gchar *directory); static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2); static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata); static void update_text_direction (int direction); static void update_window_size (); static void update_theme (gchar *new_theme); static void update_statusbar (gchar *message); static void update_values (GtkRange *range); static void update_widgets (); static void update_marks (GtkScale *scale, gboolean value, int position); static void display_notification (); static void find_and_update_labels (GtkWidget *widget, gboolean special); static gboolean find_and_check_menuradio (GMenuModel *model, gchar *search); static gboolean on_notification_action (void *data); static gboolean on_sighup (void *data); static gboolean take_screenshot (void *data); static void create_window (gpointer app); static void create_widgets (GtkWidget *root); static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing); static void add_progressbar_and_entrybar (); static void create_toolbar_items (GtkWidget *root); static void create_combos_entries (GtkWidget *root); static void create_spinbuttons (GtkWidget *root); static void create_checkbuttons (GtkWidget *root); static void create_radiobuttons (GtkWidget *root); static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels (GtkWidget *root); static void create_spinners (GtkWidget *root); static void create_expander (GtkWidget *root); static void create_frames (GtkWidget *root1, GtkWidget *root2); static void create_notebooks (GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treview (GtkWidget *root); static void create_scales (GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar (GtkApplication *app, GMenu *root); static GMenuItem* create_menuitem (GtkApplication *app, GMenu *menu, gchar *text, gchar *accel, gchar *keymap, gchar *icon, GCallback function); static gboolean show_menu_icons_delayed (gpointer user_data); static void show_menu_icons (GtkWidget *widget); static void activate_action (GSimpleAction *action, GVariant *parameter, gpointer data); static void accels_change (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state); static void accels_save (); static void dialog_open (); static void dialog_save (); static void dialog_message (); static void dialog_page_setup (); static void dialog_print (); static void dialog_about (); static void dialog_inspector (); static void dialog_calendar (); static void dialog_scales (); static gboolean on_scrolltabs (GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget); // run run run int main (int argc, gchar **argv) { int opt = 0, status = 0; hash_system_theme = g_hash_table_new (&g_str_hash, &g_str_equal); hash_user_theme = g_hash_table_new (&g_str_hash, &g_str_equal); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs (); for (opt = 0; dirs[opt]; opt++) { directory = g_build_path ("/", dirs[opt], "themes", NULL); awf_load_theme (hash_system_theme, directory); g_free (directory); } list_system_theme = g_list_sort (g_hash_table_get_keys (hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_path ("/", g_get_user_data_dir (), "themes", NULL); awf_load_theme (hash_user_theme, directory); g_free (directory); directory = g_build_path ("/", g_get_home_dir (), ".themes", NULL); awf_load_theme (hash_user_theme, directory); g_free (directory); list_user_theme = g_list_sort (g_hash_table_get_keys (hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale (LC_ALL, ""); if (g_file_test ("/usr/share/locale", G_FILE_TEST_IS_DIR)) bindtextdomain (GETTEXT_PACKAGE, "/usr/share/locale"); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); // init static struct option long_options[] = { {"version", no_argument, NULL, 'v'}, {"list-themes", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"help", no_argument, NULL, 'x'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; while ((opt = getopt_long (argc, argv, "vlt:s:hxyz", long_options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf ("%s\n", VERSION); return status; // --list-themes -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf ("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup (hash_system_theme, optarg) || g_hash_table_lookup (hash_user_theme, optarg)) opt_theme = (gchar*) optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = GTK_TEXT_DIR_LTR; break; // --rtl case 'z': current_direction = GTK_TEXT_DIR_RTL; break; // --help (via GtkApplication) -h case 'x': case 'h': default: if (opt == 'x') break; g_printf ("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", g_strdup_printf (_app("Run and save a png screenshot on %s."), "SIGHUP"), "--ltr ", _app("Start with text from left to right (Left-To-Right)."), "--rtl ", _app("Start with text from right to left (Right-To-Left)."), g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ); return status; } } // create and show window // code specific for gtk4 g_unix_signal_add (SIGHUP, on_sighup, NULL); GtkApplication *app = gtk_application_new ("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect (app, "activate", G_CALLBACK (create_window), NULL); // --version -v g_application_add_main_option (G_APPLICATION (app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list-themes -l g_application_add_main_option (G_APPLICATION (app), "list-themes", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option (G_APPLICATION (app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s g_application_add_main_option (G_APPLICATION (app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, g_strdup_printf (_app("Run and save a png screenshot on %s."), "SIGHUP"), ""); // --ltr g_application_add_main_option (G_APPLICATION (app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Start with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option (G_APPLICATION (app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Start with text from right to left (Right-To-Left)."), NULL); g_application_register (G_APPLICATION (app), NULL, NULL); return g_application_run (G_APPLICATION (app), argc, argv); } static void quit () { // @common accels_save (); exit (0); } static void awf_load_theme (GHashTable* hashtable, gchar *directory) { // @common if (g_file_test (directory, G_FILE_TEST_IS_DIR)) { if (g_getenv ("AWF_DEBUG") != NULL) g_printf("theme dir: %s\n", directory); GError *error = NULL; GDir *dir = g_dir_open (directory, 0, &error); if (dir) { gchar *theme = g_strdup (g_dir_read_name (dir)); gchar *gtkdir = g_strdup_printf ("gtk-%d.0", GTK_MAJOR_VERSION); while (theme) { gchar *theme_path = g_build_path ("/", directory, g_strstrip (theme), NULL); if (g_file_test (theme_path, G_FILE_TEST_IS_DIR)) { gchar *theme_subpath = g_build_path ("/", theme_path, gtkdir, NULL); if (g_file_test (theme_subpath, G_FILE_TEST_IS_DIR)) g_hash_table_replace (hashtable, theme, theme); g_free (theme_subpath); } g_free (theme_path); theme = g_strdup (g_dir_read_name (dir)); } g_dir_close (dir); g_free (gtkdir); g_free (theme); } if (error) { g_fprintf (stderr, "unable to open directory: %s (%s)\n", directory, error->message); g_error_free (error); } } } static int awf_compare_theme (gconstpointer theme1, gconstpointer theme2) { // @common return g_strcmp0 ((gchar*) theme1, (gchar*) theme2); } static void notify_updated_gtktheme (GSettings *settings, gchar *key, gpointer userdata) { // @common gtk3/4 if (g_strcmp0 ("gtk-theme", (gchar*) userdata) == 0) { gchar *new_theme = g_settings_get_string (settings, "gtk-theme"); g_usleep (G_USEC_PER_SEC / 2); update_theme (new_theme); find_and_check_menuradio (gtk_application_get_menubar (GTK_APPLICATION (g_application_get_default ())), new_theme); g_free (new_theme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string (settings, (gchar*) userdata); if (g_str_has_prefix (tokens, "icon") || g_str_has_prefix (tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix (tokens, "icon") || g_str_has_suffix (tokens, "menu")) closeRight = TRUE; if (g_getenv ("AWF_DEBUG") != NULL) g_printf("tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free (tokens); gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_widget_set_visible (headbarCloseRight, closeRight); } } static void update_text_direction (int direction) { // @common 80% // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (((direction == GTK_TEXT_DIR_LTR) || (direction == 1)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); current_direction = GTK_TEXT_DIR_LTR; gtk_widget_set_default_direction (current_direction); gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_RIGHT); } else if (((direction == GTK_TEXT_DIR_RTL) || (direction == 2)) && (gtk_widget_get_direction (window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), toggle, GTK_POS_LEFT); current_direction = GTK_TEXT_DIR_RTL; gtk_widget_set_default_direction (current_direction); } } static void update_window_size () { gtk_window_set_default_size (GTK_WINDOW (window), 50, 50); } static void update_theme (gchar *new_theme) { // @common // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (strcmp ((gchar*) new_theme, "refresh") == 0) { gchar *default_theme = "None"; if (g_hash_table_lookup(hash_system_theme, "Default")) default_theme = "Default"; else if (g_hash_table_lookup (hash_system_theme, "Raleigh")) default_theme = "Raleigh"; if (default_theme) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", default_theme, NULL); g_usleep (G_USEC_PER_SEC / 2); g_object_set (gtk_settings_get_default (), "gtk-theme-name", current_theme, NULL); // @todo? force reload of ".config/gtk*/gtk.css" gchar *text = g_strdup_printf (_app("Theme %s reloaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); if (opt_screenshot) g_timeout_add_seconds (1, take_screenshot, NULL); } } else if (strcmp ((gchar*) new_theme, "auto") == 0) { g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); update_window_size (); } else if (strcmp ((gchar*) current_theme, (gchar*) new_theme) != 0) { g_object_set (gtk_settings_get_default (), "gtk-theme-name", new_theme, NULL); g_object_get (gtk_settings_get_default (), "gtk-theme-name", ¤t_theme, NULL); gchar *text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); update_window_size (); } } static void update_statusbar (gchar *message) { // @common if (statusbar) { char buffer[12]; time_t rawtime; time (&rawtime); strftime (buffer, sizeof buffer, "%T", localtime (&rawtime)); gchar *text = g_strdup_printf ("%s - %s", buffer, message); gtk_statusbar_push (GTK_STATUSBAR (statusbar), gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "gné"), text); g_free (text); } } static void update_values (GtkRange *range) { double value = gtk_range_get_value (range); // range (0..1) gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), value / 100.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), value / 100.0); // range (0..1) gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar1), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar2), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar5), value / 100.0); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar6), value / 100.0); // range (0..5) gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar3), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar3))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar4), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar4))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar7), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar7))); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar8), value / 100.0 * gtk_level_bar_get_max_value (GTK_LEVEL_BAR (levelbar8))); // range (0..1) gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), value / 100.0); // range (0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value (GTK_RANGE (scale6), value); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar8), value > 50); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar9), value > 50); } static void update_widgets () { // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), !toggle); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), !toggle); gtk_widget_set_sensitive (scale2, toggle); gtk_widget_set_sensitive (scale4, toggle); gtk_widget_set_sensitive (scale6, toggle); gtk_widget_set_sensitive (progressbar2, toggle); gtk_widget_set_sensitive (progressbar4, toggle); gtk_widget_set_sensitive (levelbar2, toggle); gtk_widget_set_sensitive (levelbar4, toggle); gtk_widget_set_sensitive (levelbar6, toggle); gtk_widget_set_sensitive (levelbar8, toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar1), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar2), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar3), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar4), !toggle); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar8), FALSE); gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progressbar9), FALSE); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible (progressbar8, FALSE); gtk_widget_set_visible (progressbar9, FALSE); gtk_widget_set_visible (toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0.0); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0.0); gtk_widget_set_visible (progressbar8, TRUE); gtk_widget_set_visible (progressbar9, TRUE); gtk_widget_set_visible (toolbarentry, TRUE); } gtk_scale_clear_marks (GTK_SCALE (scale5)); update_marks (GTK_SCALE (scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks (GTK_SCALE (scale6)); update_marks (GTK_SCALE (scale6), !toggle, GTK_POS_RIGHT); update_window_size (); } static void update_marks (GtkScale *scale, gboolean value, int position) { // @common if (value) { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, "25"); gtk_scale_add_mark (scale, 50, position, "50"); gtk_scale_add_mark (scale, 75, position, "75"); gtk_scale_add_mark (scale, 100, position, NULL); } else { gtk_scale_add_mark (scale, 0, position, NULL); gtk_scale_add_mark (scale, 25, position, NULL); gtk_scale_add_mark (scale, 50, position, NULL); gtk_scale_add_mark (scale, 75, position, NULL); gtk_scale_add_mark (scale, 100, position, NULL); } } static void display_notification () { // @common if (notify_init (GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new (GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action (notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_add_action (notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK (on_notification_action), NULL, NULL); notify_notification_set_timeout (notif, 50000); notify_notification_show (notif, NULL); g_object_unref (G_OBJECT (notif)); notify_uninit (); } } static void find_and_update_labels (GtkWidget *widget, gboolean special) { // with ChatGPT if (GTK_IS_LABEL (widget)) { gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); } else { GtkWidget *child = gtk_widget_get_first_child (widget); while (child) { find_and_update_labels (child, FALSE); child = gtk_widget_get_next_sibling (child); } } } static gboolean find_and_check_menuradio (GMenuModel *model, gchar *search) { int n = g_menu_model_get_n_items (model); GVariant *info; const gchar *value; for (int idx = 0; idx < n; idx++) { GMenuModel *submenu = g_menu_model_get_item_link (model, idx, G_MENU_LINK_SECTION); if (!submenu) submenu = g_menu_model_get_item_link (model, idx, G_MENU_LINK_SUBMENU); if (submenu) { // process submenu gboolean found = find_and_check_menuradio (submenu, search); g_object_unref (submenu); if (found) return TRUE; } else { value = NULL; // app.set-theme::theme_name (.[action]::[target]) // check menuitem label/target info = g_menu_model_get_item_attribute_value (model, idx, "target", NULL); // target or label = theme_name if (info) { value = g_variant_get_string (info, NULL); g_variant_unref (info); if (value && (g_strcmp0 (value, search) == 0)) { // menuitem found by label/target // check menuitem action info = g_menu_model_get_item_attribute_value (model, idx, "action", NULL); // action = disabled or set-theme if (info) { value = g_variant_get_string (info, NULL); g_variant_unref (info); if (value && g_strcmp0 (value, "disabled") != 0) { // menuitem found by label/target + action not disabled // set state checked g_action_group_change_action_state (G_ACTION_GROUP (g_application_get_default ()), "set-theme", g_variant_new_string (search)); return TRUE; } } } } } } return FALSE; } static gboolean on_notification_action (void *data) { // @common return FALSE; } static gboolean on_sighup (void *data) { // @common update_theme ("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot (void *data) { // @common 50% GdkPixbuf *image = NULL; //int width = gtk_widget_get_width (window), height = gtk_widget_get_height (window); //GtkSnapshot *snapshot = gtk_snapshot_new (); // @todo https://stackoverflow.com/q/78771600 //GskRenderNode *node = gtk_snapshot_free_to_node (snapshot); //cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); //cairo_t *cr = cairo_create (surface); //image = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height); //cairo_destroy (cr); //cairo_surface_destroy (surface); /* if (image) { gdk_pixbuf_save (image, opt_screenshot, "png", NULL, "compression", "9", NULL); g_object_unref (image); gchar *text = g_strdup_printf (_app("Theme reloaded, then screenshot saved (%s)."), opt_screenshot); update_statusbar (text); g_free (text); } */ return FALSE; } // layout and widgets static void create_window (gpointer app) { GtkWidget *vbox_window, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window window = gtk_application_window_new (GTK_APPLICATION (app)); gtk_widget_set_name (GTK_WIDGET (window), "AwfMainWindow"); gtk_window_set_icon_name (GTK_WINDOW (window), GETTEXT_PACKAGE); text = g_strdup_printf (_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title (GTK_WINDOW (window), text); g_free (text); // theme auto or from command line if (strcmp ((gchar*) current_theme, (gchar*) opt_theme) != 0) update_theme (opt_theme); else update_theme (current_theme); allow_update_theme = FALSE; if (current_direction == GTK_TEXT_DIR_NONE) current_direction = gtk_widget_get_default_direction (); // layout vbox_window = BOXV; gtk_window_set_child (GTK_WINDOW (window), vbox_window); GMenu *gmm = g_menu_new (); create_traditional_menubar (app, gmm); gtk_application_set_menubar (app, G_MENU_MODEL (gmm)); gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW (window), TRUE); const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { // enable CSD for dialogs // except for custom dialogs g_object_set (gtk_settings_get_default (), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated (GTK_WINDOW (window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new (); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get (gtk_widget_get_settings (headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix (tokens, "icon") || g_str_has_prefix (tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix (tokens, "icon") || g_str_has_suffix (tokens, "menu")) closeRight = TRUE; if (g_getenv ("AWF_DEBUG") != NULL) g_printf("tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free (tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name (GETTEXT_PACKAGE); gtk_widget_add_css_class (headbarCloseLeft, "app-icon"); gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), headbarCloseLeft); button = gtk_menu_button_new (); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (gmm)); gtk_menu_button_set_icon_name (GTK_MENU_BUTTON (button), "open-menu-symbolic"); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn1"); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn3"); gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name (GETTEXT_PACKAGE); gtk_widget_add_css_class (headbarCloseRight, "app-icon"); gtk_widget_set_visible (headbarCloseRight, closeRight); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), headbarCloseRight); button = gtk_menu_button_new (); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (gmm)); gtk_menu_button_set_icon_name (GTK_MENU_BUTTON (button), "open-menu-symbolic"); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn6"); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn5"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); button = gtk_toggle_button_new_with_label ("Btn4"); gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); gtk_window_set_titlebar (GTK_WINDOW (window), headerbar); } toolbar = BOXH; gtk_widget_add_css_class (toolbar, "primary-toolbar"); add_to (GTK_BOX (vbox_window), toolbar, FALSE, FALSE, 0, 0); create_toolbar_items (toolbar); widgets = BOXV; add_to (GTK_BOX (vbox_window), widgets, TRUE, TRUE, 0, 0); create_widgets (widgets); statusbar = gtk_statusbar_new (); // via add_progressbar_and_entrybar // for the progressbar of the statusbar, before adding statusbar gtk_widget_set_halign (gtk_widget_get_first_child (statusbar), GTK_ALIGN_FILL); // statusbar > box gtk_widget_set_hexpand (gtk_widget_get_first_child (statusbar), TRUE); // statusbar > box gtk_widget_set_hexpand (gtk_widget_get_first_child (gtk_widget_get_first_child (statusbar)), TRUE); // statusbar > box > label add_to (GTK_BOX (vbox_window), statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf (_app("Theme %s loaded."), current_theme); update_statusbar (text); g_free (text); // go go go allow_update_theme = TRUE; update_text_direction (current_direction); g_signal_connect (window, "destroy", G_CALLBACK (quit), NULL); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), "gtk-theme"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-theme", G_CALLBACK (notify_updated_gtktheme), "gtk-theme"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.Marco.general", FALSE)) g_signal_connect (g_settings_new (value), "changed::button-layout", G_CALLBACK (notify_updated_gtktheme), "button-layout"); if (g_settings_schema_source_lookup (g_settings_schema_source_get_default (), value = "org.mate.interface", FALSE)) g_signal_connect (g_settings_new (value), "changed::gtk-decoration-layout", G_CALLBACK (notify_updated_gtktheme), "gtk-decoration-layout"); // gtk-can-change-accels for GTK 4.x | so same GTK 2.24 - 3.x - 4.x //GtkEventController *event = gtk_event_controller_key_new (); //g_signal_connect (event, "key-released", G_CALLBACK (accels_change), window); //gtk_widget_add_controller (window, event); gtk_widget_set_visible (window, TRUE); if (headbarCloseLeft && headbarCloseRight) { // @todo not working here or in show_menu_icons_delayed gtk_widget_set_visible (headbarCloseLeft, closeLeft); gtk_widget_set_visible (headbarCloseRight, closeRight); } add_progressbar_and_entrybar (); g_timeout_add (1000, (GSourceFunc) show_menu_icons_delayed, NULL); } static void create_widgets (GtkWidget *root) { // @common 50% GtkWidget *hbox_columns = BOXH; GtkWidget *vbox_column1 = BOXV, *vbox_combo_entry = BOXV, *hbox_spin = BOXH, *hbox_check_radio = BOXH, *vbox_check = BOXV, *vbox_radio = BOXV; GtkWidget *vbox_column2 = BOXV, *vbox_buttons = BOXV, *hbox_btns1 = BOXH, *hbox_btns2 = BOXH, *hbox_btns3 = BOXH, *hbox_btns4 = BOXH; GtkWidget *vbox_column3 = BOXV, *vbox_progressbar1 = BOXV, *vbox_progressbar2 = BOXV, *hbox_progressbar1 = BOXH, *hbox_progressbar2 = BOXH; GtkWidget *vbox_column4 = BOXV, *vbox_others = BOXV, *hbox_label = BOXH, *hbox_spinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hbox_frame1 = BOXH, *hbox_frame2 = BOXH, *hbox_notebook1 = BOXH, *hbox_notebook2 = BOXH; // columns layout add_to (GTK_BOX (root), hbox_columns, TRUE, TRUE, 0, 0); // column 1 add_to (GTK_BOX (hbox_columns), vbox_column1, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column1), vbox_combo_entry, FALSE, TRUE, 5, 3); create_combos_entries (vbox_combo_entry); add_to (GTK_BOX (vbox_column1), hbox_spin, FALSE, FALSE, 5, 0); create_spinbuttons (hbox_spin); add_to (GTK_BOX (vbox_column1), hbox_check_radio, FALSE, TRUE, 5, 0); add_to (GTK_BOX (hbox_check_radio), vbox_check, TRUE, TRUE, 0, 0); create_checkbuttons (vbox_check); add_to (GTK_BOX (hbox_check_radio), vbox_radio, TRUE, TRUE, 0, 0); create_radiobuttons (vbox_radio); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 2 add_to (GTK_BOX (hbox_columns), vbox_column2, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column2), vbox_buttons, FALSE, TRUE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns1, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns2, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns3, FALSE, FALSE, 5, 3); add_to (GTK_BOX (vbox_column2), hbox_btns4, FALSE, FALSE, 5, 3); create_otherbuttons (vbox_buttons, hbox_btns1, hbox_btns2, hbox_btns3, hbox_btns4); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 3 add_to (GTK_BOX (hbox_columns), vbox_column3, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column3), vbox_progressbar1, FALSE, TRUE, 6, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar1, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), hbox_progressbar2, FALSE, FALSE, 5, 10); add_to (GTK_BOX (vbox_column3), vbox_progressbar2, FALSE, TRUE, 5, 10); create_progressbars (vbox_progressbar1, hbox_progressbar1, hbox_progressbar2, vbox_progressbar2); add_to (GTK_BOX (hbox_columns), SEPV, FALSE, FALSE, 0, 0); // column 4 add_to (GTK_BOX (hbox_columns), vbox_column4, TRUE, TRUE, 5, 0); add_to (GTK_BOX (vbox_column4), vbox_others, FALSE, TRUE, 5, 3); create_treview (vbox_others); add_to (GTK_BOX (vbox_others), hbox_label, FALSE, TRUE, 5, 0); create_labels (hbox_label); add_to (GTK_BOX (vbox_others), hbox_spinner, FALSE, TRUE, 5, 0); create_spinners (hbox_spinner); create_expander (vbox_others); add_to (GTK_BOX (root), SEPH, FALSE, FALSE, 0, 0); // paned layout add_to (GTK_BOX (root), vpane, TRUE, TRUE, 0, 0); gtk_paned_set_start_child (GTK_PANED (vpane), hpane1); gtk_paned_set_shrink_start_child (GTK_PANED (vpane), FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_frame1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame1), 3); gtk_widget_set_size_request (hbox_frame1, -1, 50); gtk_widget_set_margin_start (hbox_frame1, 10); gtk_widget_set_margin_end (hbox_frame1, 10); gtk_widget_set_margin_top (hbox_frame1, 10); gtk_widget_set_margin_bottom (hbox_frame1, 10); gtk_paned_set_start_child (GTK_PANED (hpane1), hbox_frame1); gtk_paned_set_resize_start_child (GTK_PANED (hpane1), FALSE); gtk_paned_set_shrink_start_child (GTK_PANED (hpane1), FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_frame2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_frame2), 3); gtk_widget_set_size_request (hbox_frame2, -1, 50); gtk_widget_set_margin_start (hbox_frame2, 10); gtk_widget_set_margin_end (hbox_frame2, 10); gtk_widget_set_margin_top (hbox_frame2, 10); gtk_widget_set_margin_bottom (hbox_frame2, 10); gtk_paned_set_end_child (GTK_PANED (hpane1), hbox_frame2); create_frames (hbox_frame1, hbox_frame2); gtk_paned_set_end_child (GTK_PANED (vpane), hpane2); gtk_paned_set_shrink_end_child (GTK_PANED (vpane), FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook1), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook1), 3); gtk_widget_set_margin_start (hbox_notebook1, 10); gtk_widget_set_margin_end (hbox_notebook1, 10); gtk_widget_set_margin_top (hbox_notebook1, 10); gtk_widget_set_margin_bottom (hbox_notebook1, 10); gtk_paned_set_start_child (GTK_PANED (hpane2), hbox_notebook1); gtk_paned_set_resize_start_child (GTK_PANED (hpane2), FALSE); gtk_paned_set_shrink_start_child (GTK_PANED (hpane2), FALSE); gtk_box_set_homogeneous (GTK_BOX (hbox_notebook2), TRUE); gtk_box_set_spacing (GTK_BOX (hbox_notebook2), 3); gtk_widget_set_margin_start (hbox_notebook2, 10); gtk_widget_set_margin_end (hbox_notebook2, 10); gtk_widget_set_margin_top (hbox_notebook2, 10); gtk_widget_set_margin_bottom (hbox_notebook2, 10); gtk_paned_set_end_child (GTK_PANED (hpane2), hbox_notebook2); create_notebooks (hbox_notebook1, hbox_notebook2); } static void add_progressbar_and_entrybar () { // entry toolbar toolbarentry = gtk_entry_new (); gtk_entry_set_placeholder_text (GTK_ENTRY (toolbarentry), "..."); gtk_widget_set_visible (toolbarentry, FALSE); gtk_widget_set_valign (toolbarentry, GTK_ALIGN_CENTER); gtk_widget_set_vexpand (toolbarentry, FALSE); gtk_widget_insert_after (toolbarentry, toolbar, toolbarend); // end left // progressbar toolbar progressbar8 = gtk_progress_bar_new (); gtk_widget_set_size_request (progressbar8, 140, 1); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar8), 0); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible (progressbar8, FALSE); gtk_widget_set_valign (progressbar8, GTK_ALIGN_CENTER); gtk_widget_set_halign (progressbar8, GTK_ALIGN_END); gtk_widget_set_hexpand (progressbar8, TRUE); gtk_widget_insert_after (progressbar8, toolbar, gtk_widget_get_last_child (toolbar)); // end right // progressbar statusbar progressbar9 = gtk_progress_bar_new (); gtk_widget_set_size_request (progressbar9, 140, 1); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar9), 0); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible (progressbar9, FALSE); gtk_widget_set_valign (progressbar9, GTK_ALIGN_CENTER); gtk_widget_set_halign (progressbar9, GTK_ALIGN_END); gtk_widget_set_hexpand (progressbar9, TRUE); gtk_widget_insert_after (progressbar9, gtk_widget_get_first_child (statusbar), gtk_widget_get_first_child (gtk_widget_get_first_child (statusbar))); // statusbar > box > label, statusbar > box > progressbar } static void add_to (GtkBox *box, GtkWidget *widget, gboolean fill, gboolean expand, guint padding, guint spacing) { if (fill && expand) { gtk_widget_set_halign (widget, GTK_ALIGN_FILL); gtk_widget_set_valign (widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (widget, TRUE); gtk_widget_set_vexpand (widget, TRUE); } else if (fill) { gtk_widget_set_halign (widget, GTK_ALIGN_FILL); gtk_widget_set_valign (widget, GTK_ALIGN_START); gtk_widget_set_hexpand (widget, FALSE); gtk_widget_set_vexpand (widget, FALSE); } else { gtk_widget_set_hexpand (widget, FALSE); gtk_widget_set_vexpand (widget, FALSE); } if (GTK_IS_BOX (widget) && (padding > 0)) { gtk_widget_set_margin_start (widget, padding); gtk_widget_set_margin_end (widget, padding); gtk_widget_set_margin_top (widget, padding); gtk_widget_set_margin_bottom (widget, padding); } if (GTK_IS_BOX (widget) && (spacing > 0)) { gtk_box_set_spacing (GTK_BOX (widget), spacing); } gtk_box_append (box, widget); if (!GTK_IS_BOX (widget)) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ GtkStyleContext *style = gtk_widget_get_style_context (widget); gchar *text = gtk_style_context_to_string (style, GTK_STYLE_CONTEXT_PRINT_RECURSE); G_GNUC_END_IGNORE_DEPRECATIONS gtk_widget_set_tooltip_text (widget, text); g_free (text); } } static void create_toolbar_items (GtkWidget *root) { // @common gtk2/3 GtkWidget *icon1, *icon2, *icon3, *icon4, *icon5, *icon6, *icon7, *icon8; icon1 = gtk_button_new_from_icon_name ("gtk-open"); gtk_widget_add_css_class (icon1, "flat"); g_signal_connect (icon1, "clicked", G_CALLBACK (dialog_open), NULL); icon2 = gtk_button_new_from_icon_name ("gtk-open"); gtk_widget_set_sensitive (icon2, FALSE); icon3 = gtk_button_new_from_icon_name ("gtk-save"); g_signal_connect (icon3, "clicked", G_CALLBACK (dialog_save), NULL); icon4 = gtk_button_new_from_icon_name ("gtk-refresh"); g_signal_connect_swapped (icon4, "clicked", G_CALLBACK (update_theme), "refresh"); icon5 = gtk_button_new_from_icon_name ("gtk-dialog-info"); g_signal_connect_swapped (icon5, "clicked", G_CALLBACK (display_notification), "refresh"); icon6 = gtk_toggle_button_new (); gtk_button_set_icon_name (GTK_BUTTON (icon6), "gtk-add"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (icon6), TRUE); g_signal_connect (icon6, "clicked", G_CALLBACK (update_widgets), NULL); icon7 = gtk_toggle_button_new (); gtk_button_set_icon_name (GTK_BUTTON (icon7), "gtk-remove"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (icon7), FALSE); g_signal_connect (icon7, "clicked", G_CALLBACK (update_widgets), NULL); icon8 = gtk_toggle_button_new (); gtk_button_set_icon_name (GTK_BUTTON (icon8), "gtk-close"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (icon8), FALSE); gtk_widget_set_sensitive (icon8, FALSE); toolbarend = icon8; add_to (GTK_BOX (root), icon1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), SEPV, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), SEPV, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), icon8, FALSE, FALSE, 0, 0); } static void create_combos_entries (GtkWidget *root) { GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; G_GNUC_BEGIN_IGNORE_DEPRECATIONS //if GTK_CHECK_VERSION (4,10,0) // combo1 = gtk_drop_down_new_from_strings ((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // //gtk_drop_down_set_enable_search (GTK_DROP_DOWN (combo1), TRUE); // gtk_drop_down_set_selected (GTK_DROP_DOWN (combo1), 0); //else combo1 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo1), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo1), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo2 = gtk_drop_down_new_from_strings ((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // gtk_drop_down_set_selected (GTK_DROP_DOWN (combo2), 0); //else combo2 = gtk_combo_box_text_new_with_entry (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo2), "Combo box entry 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo2), 0); //endif gtk_widget_set_sensitive (combo2, FALSE); //if GTK_CHECK_VERSION (4,10,0) // combo3 = gtk_drop_down_new_from_strings ((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected (GTK_DROP_DOWN (combo3), 0); //else combo3 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo3), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo3), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo4 = gtk_drop_down_new_from_strings ((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected (GTK_DROP_DOWN (combo4), 0); //else combo4 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 1"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo4), "Combo box 2"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo4), 0); //endif gtk_widget_set_sensitive (combo4, FALSE); G_GNUC_END_IGNORE_DEPRECATIONS entry1 = gtk_entry_new (); gtk_editable_set_text (GTK_EDITABLE (entry1), "Entry"); gtk_entry_set_placeholder_text (GTK_ENTRY (entry1), "Placeholder"); entry2 = gtk_entry_new (); gtk_editable_set_text (GTK_EDITABLE (entry2), "Entry"); gtk_widget_set_sensitive (entry2, FALSE); entry3 = gtk_entry_new (); gtk_editable_set_text (GTK_EDITABLE (entry3), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry3), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); gtk_entry_set_placeholder_text (GTK_ENTRY (entry3), "Placeholder"); entry4 = gtk_entry_new (); gtk_editable_set_text (GTK_EDITABLE (entry4), "Entry"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_PRIMARY, "gtk-clear"); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry4), GTK_ENTRY_ICON_SECONDARY, "gtk-find"); gtk_widget_set_sensitive (entry4, FALSE); // layout add_to (GTK_BOX (root), combo1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), combo4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons (GtkWidget *root) { // @common GtkWidget *spinbutton1, *spinbutton2; spinbutton1 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range (-100, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton2), 1); gtk_widget_set_sensitive (spinbutton2, FALSE); add_to (GTK_BOX (root), spinbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_checkbuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; checkbutton1 = gtk_check_button_new_with_label ("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label ("Check btn 2"); gtk_check_button_set_active (GTK_CHECK_BUTTON (checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label ("Check btn 3"); gtk_check_button_set_inconsistent (GTK_CHECK_BUTTON (checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label ("Check btn 4"); gtk_widget_set_sensitive (checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label ("Check btn 5"); gtk_check_button_set_active (GTK_CHECK_BUTTON (checkbutton5), TRUE); gtk_widget_set_sensitive (checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label ("Check btn 6"); gtk_check_button_set_inconsistent (GTK_CHECK_BUTTON (checkbutton6), TRUE); gtk_widget_set_sensitive (checkbutton6, FALSE); add_to (GTK_BOX (root), checkbutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons (GtkWidget *root) { // @common gtk2/3 GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; radiobutton1 = gtk_check_button_new_with_label ("Radio btn 1"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton1), NULL); radiobutton2 = gtk_check_button_new_with_label ("Radio btn 2"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton2), GTK_CHECK_BUTTON (radiobutton1)); gtk_check_button_set_active (GTK_CHECK_BUTTON (radiobutton2), TRUE); radiobutton3 = gtk_check_button_new_with_label ("Radio btn 3"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton3), GTK_CHECK_BUTTON (radiobutton1)); gtk_check_button_set_inconsistent (GTK_CHECK_BUTTON (radiobutton3), TRUE); radiobutton4 = gtk_check_button_new_with_label ("Radio btn 4"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton4), NULL); gtk_widget_set_sensitive (radiobutton4, FALSE); radiobutton5 = gtk_check_button_new_with_label ("Radio btn 5"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton5), GTK_CHECK_BUTTON (radiobutton4)); gtk_check_button_set_active (GTK_CHECK_BUTTON (radiobutton5), TRUE); gtk_widget_set_sensitive (radiobutton5, FALSE); radiobutton6 = gtk_check_button_new_with_label ("Radio btn 6"); gtk_check_button_set_group (GTK_CHECK_BUTTON (radiobutton6), GTK_CHECK_BUTTON (radiobutton4)); gtk_check_button_set_inconsistent (GTK_CHECK_BUTTON (radiobutton6), TRUE); gtk_widget_set_sensitive (radiobutton6, FALSE); add_to (GTK_BOX (root), radiobutton1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button15; button1 = gtk_button_new_with_label ("Button 1"); button2 = gtk_button_new_with_label ("Button 2"); gtk_widget_set_sensitive (button2, FALSE); button3 = gtk_toggle_button_new_with_label ("Button 3"); button4 = gtk_toggle_button_new_with_label ("Button 4"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button3), TRUE); gtk_widget_set_sensitive (button4, FALSE); // colorbutton #if GTK_CHECK_VERSION (4,10,0) GdkRGBA color; gdk_rgba_parse (&color, "#7796ba"); button5 = gtk_color_dialog_button_new (gtk_color_dialog_new ()); gtk_color_dialog_button_set_rgba (GTK_COLOR_DIALOG_BUTTON (button5), &color); #else GdkRGBA color; gdk_rgba_parse (&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba (&color); #endif // fontbutton #if GTK_CHECK_VERSION (4,10,0) button6 = gtk_font_dialog_button_new (gtk_font_dialog_new ()); find_and_update_labels (button6, FALSE); gtk_widget_set_size_request (button6, 186, -1); #else button6 = gtk_font_button_new (); find_and_update_labels (button6, FALSE); gtk_widget_set_size_request (button6, 186, -1); #endif // filebutton button7 = gtk_button_new_with_label ("Button 7"); gtk_widget_add_css_class (button7, "awf-cheatcode-btn7"); button8 = gtk_button_new_with_label ("Button 8"); gtk_widget_add_css_class (button8, "awf-cheatcode-btn8"); // switchbutton button9 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button9), TRUE); button10 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button10), TRUE); gtk_widget_set_sensitive (button10, FALSE); button11 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button11), FALSE); button12 = gtk_switch_new (); gtk_switch_set_active (GTK_SWITCH (button12), FALSE); gtk_widget_set_sensitive (button12, FALSE); button13 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label ("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive (button14, FALSE); volume1 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume1), 0.5); volume2 = gtk_volume_button_new (); gtk_scale_button_set_value (GTK_SCALE_BUTTON (volume2), 0); gtk_widget_set_sensitive (volume2, FALSE); button15 = gtk_menu_button_new (); gtk_menu_button_set_icon_name (GTK_MENU_BUTTON (button15), "open-menu-symbolic"); GMenu *menu = g_menu_new (); g_menu_append_item (menu, g_menu_item_new ("Popover item 1", NULL)); g_menu_append_item (menu, g_menu_item_new ("Popover item 2", NULL)); g_menu_append_item (menu, g_menu_item_new ("Popover item 3", NULL)); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button15), G_MENU_MODEL (menu)); // layout add_to (GTK_BOX (root1), button1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), button8, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button9, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), button10, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button11, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), button12, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button13, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), button14, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), volume2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root5), button15, FALSE, FALSE, 0, 0); } static void create_progressbars (GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // progress bars progressbar1 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar1), GTK_ORIENTATION_HORIZONTAL); progressbar2 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar2), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (progressbar2), TRUE); gtk_widget_add_css_class (progressbar2, "awf-cheatcode-prbr2"); progressbar3 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar3), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request (progressbar3, -1, 100); progressbar4 = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar4), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (progressbar4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (progressbar4), TRUE); // scales scale1 = create_horizontal_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale1, "value_changed", G_CALLBACK (update_values), NULL); scale2 = create_horizontal_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale2, "value_changed", G_CALLBACK (update_values), NULL); scale3 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect (scale3, "value_changed", G_CALLBACK (update_values), NULL); scale4 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect (scale4, "value_changed", G_CALLBACK (update_values), NULL); scale5 = create_vertical_scale (50, FALSE, FALSE, GTK_POS_TOP); update_marks (GTK_SCALE (scale5), FALSE, GTK_POS_LEFT); g_signal_connect (scale5, "value_changed", G_CALLBACK (update_values), NULL); scale6 = create_vertical_scale (50, FALSE, TRUE, GTK_POS_TOP); update_marks (GTK_SCALE (scale6), FALSE, GTK_POS_RIGHT); g_signal_connect (scale6, "value_changed", G_CALLBACK (update_values), NULL); levelbar1 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar1), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar2), 0.5); gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar2), GTK_ORIENTATION_VERTICAL); levelbar3 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar3), 2); // GTK 3.20.9 not work gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar4), 2); // GTK 3.20.9 not work gtk_orientable_set_orientation (GTK_ORIENTABLE (levelbar4), GTK_ORIENTATION_VERTICAL); levelbar5 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar5), 0.5); levelbar6 = gtk_level_bar_new (); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar6), 0.5); levelbar7 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar7), 2); // GTK 3.20.9 not work levelbar8 = gtk_level_bar_new_for_interval (0, 5); gtk_level_bar_set_mode (GTK_LEVEL_BAR (levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value (GTK_LEVEL_BAR (levelbar8), 2); // GTK 3.20.9 not work gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar2), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar4), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar6), TRUE); gtk_level_bar_set_inverted (GTK_LEVEL_BAR (levelbar8), TRUE); // layout add_to (GTK_BOX (root1), progressbar1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), progressbar2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root1), scale2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), progressbar4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root2), levelbar4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale3, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root3), scale4, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar5, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar6, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar7, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root4), levelbar8, FALSE, FALSE, 0, 0); } static void create_labels (GtkWidget *root) { // @common GtkWidget *label1, *label2; label1 = gtk_label_new ("Label 1"); label2 = gtk_label_new ("Label 2"); gtk_widget_set_sensitive (label2, FALSE); add_to (GTK_BOX (root), label1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), label2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners (GtkWidget *root) { // @common GtkWidget *spinner1, *spinner2; spinner1 = gtk_spinner_new (); gtk_widget_set_size_request (spinner1, 20, 20); spinner2 = gtk_spinner_new (); gtk_widget_set_size_request (spinner2, 20, 20); gtk_widget_set_sensitive (spinner2, FALSE); //gtk_spinner_start (GTK_SPINNER (spinner2)); add_to (GTK_BOX (root), spinner1, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space add_to (GTK_BOX (root), spinner2, FALSE, FALSE, 0, 0); add_to (GTK_BOX (root), BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander (GtkWidget *root) { GtkWidget *expander, *scrolled_window, *tv; GtkTextBuffer *buffer; expander = gtk_expander_new (_app("More...")); gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE); scrolled_window = gtk_scrolled_window_new (); const gchar *config = g_getenv ("GTK_OVERLAY_SCROLLING"); if (config && (strcmp (config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (scrolled_window), FALSE); gtk_widget_add_css_class (gtk_scrolled_window_get_hscrollbar (GTK_SCROLLED_WINDOW (scrolled_window)), "discrete"); gtk_widget_add_css_class (gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolled_window)), "discrete"); } gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, -1, 120); tv = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv)); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (tv), GTK_WRAP_WORD); gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), g_strdup_printf ("%s ~ %s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")), -1); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window), tv); gtk_expander_set_child (GTK_EXPANDER (expander), scrolled_window); add_to (GTK_BOX (root), expander, FALSE, FALSE, 0, 0); } static void create_frames (GtkWidget *root1, GtkWidget *root2) { GtkWidget *frame1, *frame2, *frame3, *frame4; frame1 = gtk_frame_new ("Frame (shadow in)"); gtk_widget_add_css_class (frame1, "border-inset"); frame2 = gtk_frame_new ("Frame (shadow out)"); gtk_widget_add_css_class (frame2, "border-outset"); frame3 = gtk_frame_new ("Frame (shadow etched in)"); gtk_widget_add_css_class (frame3, "border-groove"); frame4 = gtk_frame_new ("Frame (shadow etched out)"); gtk_widget_add_css_class (frame4, "border-ridge"); add_to (GTK_BOX (root1), frame1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), frame2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), frame4, TRUE, TRUE, 0, 0); } static void create_notebooks (GtkWidget *root1, GtkWidget *root2) { // @common* notebook1 = gtk_notebook_new (); notebook2 = gtk_notebook_new (); notebook3 = gtk_notebook_new (); notebook4 = gtk_notebook_new (); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook1)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook1), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook1), GTK_POS_TOP); create_notebook_tab (notebook1, "Tab1", NULL, FALSE); create_notebook_tab (notebook1, "Tab2", NULL, FALSE); create_notebook_tab (notebook1, "Tab3", NULL, TRUE); create_notebook_tab (notebook1, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook2)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook2), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook2), GTK_POS_BOTTOM); create_notebook_tab (notebook2, "Tab1", NULL, FALSE); create_notebook_tab (notebook2, "Tab2", NULL, FALSE); create_notebook_tab (notebook2, "Tab3", NULL, TRUE); create_notebook_tab (notebook2, "Tab4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook3)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook3), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook3), GTK_POS_LEFT); create_notebook_tab (notebook3, "T1", NULL, FALSE); create_notebook_tab (notebook3, "Tab2", NULL, FALSE); create_notebook_tab (notebook3, "T3b", NULL, TRUE); create_notebook_tab (notebook3, "T4", NULL, TRUE); gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook4)); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook4), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook4), GTK_POS_RIGHT); create_notebook_tab (notebook4, "T1", NULL, FALSE); create_notebook_tab (notebook4, "Tab2", NULL, FALSE); create_notebook_tab (notebook4, "T3b", NULL, TRUE); create_notebook_tab (notebook4, "T4", NULL, TRUE); add_to (GTK_BOX (root1), notebook1, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root1), notebook2, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook3, TRUE, TRUE, 0, 0); add_to (GTK_BOX (root2), notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab (GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { GtkWidget *headbtn = BOXH, *btn; add_to (GTK_BOX (headbtn), gtk_label_new (text), TRUE, TRUE, 0, 0); if (!content) content = BOXV; if (close) { btn = gtk_button_new_from_icon_name ("gtk-close"); gtk_button_set_has_frame (GTK_BUTTON (btn), FALSE); gtk_widget_set_focus_on_click (btn, FALSE); add_to (GTK_BOX (headbtn), btn, FALSE, FALSE, 0, 0); } gtk_widget_set_hexpand (headbtn, FALSE); gtk_widget_set_vexpand (headbtn, FALSE); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), content, headbtn); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (notebook), content, TRUE); //gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (notebook), content, TRUE); // gtk-scroll-tabs for GTK 4 | so same 2.24 - 3.x - 4.x GtkEventController *event; event = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); g_signal_connect (event, "scroll", G_CALLBACK (on_scrolltabs), notebook); gtk_widget_add_controller (gtk_widget_get_parent (headbtn), event); } static void create_treview (GtkWidget *root) { // @common 80% GtkWidget *scrolled_window, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; G_GNUC_BEGIN_IGNORE_DEPRECATIONS // data store = gtk_tree_store_new (11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "gtk-help", 8, "gtk-help", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "gtk-open", 8, "gtk-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "gtk-save", 8, "gtk-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "gtk-save-as", 8, "gtk-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "gtk-refresh", 8, "gtk-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "gtk-cut", 8, "gtk-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (view), FALSE); // rows gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view), FALSE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW (view), TRUE); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), 0, GTK_SORT_ASCENDING); g_object_unref (G_OBJECT (store)); idx = 0; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 1; renderer = gtk_cell_renderer_toggle_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 4; renderer = gtk_cell_renderer_progress_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), idx); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_set_sensitive (renderer, FALSE); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), TRUE); gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (view), idx), 20); G_GNUC_END_IGNORE_DEPRECATIONS // scrolled window scrolled_window = gtk_scrolled_window_new (); const gchar *config = g_getenv ("GTK_OVERLAY_SCROLLING"); if (config && (strcmp (config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (scrolled_window), FALSE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request (scrolled_window, 200, 200); gtk_widget_set_size_request (view, 200, 200); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window), view); add_to (GTK_BOX (root), scrolled_window, FALSE, FALSE, 0, 0); } static void create_scales (GtkWidget *notebook, gchar *text, int position) { GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value (GTK_RANGE (scale1)); gtk_widget_set_margin_top (hbox, 12); gtk_widget_set_margin_bottom (hbox, 12); gtk_widget_set_margin_start (hbox, 12); gtk_widget_set_margin_end (hbox, 12); // vertical scales scale1v = create_vertical_scale (value, FALSE, FALSE, position); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale1v, "top"); scale2v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale2v, "top"); scale3v = create_vertical_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale3v, "top"); scale4v = create_vertical_scale (value, TRUE, FALSE, position); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale4v, "top"); scale5v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale5v, "top"); scale6v = create_vertical_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction (window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class (scale6v, "top"); scale7v = create_vertical_scale (value, FALSE, TRUE, position); scale8v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale (value, TRUE, TRUE, position); scale11v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale (value, FALSE, FALSE, position); scale2h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale (value, FALSE, FALSE, position); update_marks (GTK_SCALE (scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale (value, TRUE, FALSE, position); scale5h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale (value, TRUE, FALSE, position); update_marks (GTK_SCALE (scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale (value, FALSE, TRUE, position); scale8h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale (value, FALSE, TRUE, position); update_marks (GTK_SCALE (scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale (value, TRUE, TRUE, position); scale11h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale (value, TRUE, TRUE, position); update_marks (GTK_SCALE (scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to (GTK_BOX (hbox), vbox1, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox1), scale1h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale2h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale3h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale4h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale5h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox1), scale6h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox2), hboxa, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxa), scale1v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale2v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale3v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale7v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale8v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxa), scale9v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox2), hboxb, TRUE, TRUE, 0, 0); add_to (GTK_BOX (hboxb), scale4v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale5v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale6v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale10v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale11v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hboxb), scale12v, FALSE, FALSE, 5, 5); add_to (GTK_BOX (hbox), vbox3, TRUE, TRUE, 5, 5); add_to (GTK_BOX (vbox3), scale7h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale8h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale9h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale10h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale11h, FALSE, FALSE, 5, 5); add_to (GTK_BOX (vbox3), scale12h, FALSE, FALSE, 5, 5); create_notebook_tab (notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value (GTK_RANGE (scale), value); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_widget_set_size_request (scale, 186, -1); return scale; } static GtkWidget* create_vertical_scale (gdouble value, gboolean draw, gboolean inverted, int position) { // @common +shortcut GtkWidget *scale; scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos (GTK_SCALE (scale), position); gtk_range_set_inverted (GTK_RANGE (scale), inverted); gtk_scale_set_draw_value (GTK_SCALE (scale), draw); gtk_range_set_value (GTK_RANGE (scale), value); gtk_widget_set_size_request (scale, -1, 100); return scale; } // traditional menu static void create_traditional_menubar (GtkApplication *app, GMenu *root) { GMenu *menu, *submenu, *section, *base; GSimpleAction *action; GList *iterator; gboolean ok = FALSE; // options menu = g_menu_new (); g_menu_append_submenu (root, _app("_Options"), G_MENU_MODEL (menu)); create_menuitem (app, menu, _gtk("_Open"), AWF_ACCEL_OPEN, AWF_OPEN, "gtk-open", dialog_open); create_menuitem (app, menu, _app("Open recent file"), AWF_ACCEL_RECE, NULL, NULL, NULL); create_menuitem (app, menu, _gtk("_Save"), AWF_ACCEL_SAVE, AWF_SAVE, "gtk-save", dialog_save); create_menuitem (app, menu, _gtk("_Refresh"), AWF_ACCEL_REFR, AWF_REFR, "gtk-refresh", G_CALLBACK (on_sighup)); // (update_theme) create_menuitem (app, menu, _app("Calendar"), AWF_ACCEL_CALE, AWF_CALE, NULL, dialog_calendar); create_menuitem (app, menu, _app("GtkScales"), AWF_ACCEL_SCAL, AWF_SCAL, NULL, dialog_scales); create_menuitem (app, menu, _gtk("_Properties"), AWF_ACCEL_PROP, AWF_PROP, "gtk-properties", dialog_message); create_menuitem (app, menu, _gtk("Page Set_up"), AWF_ACCEL_PRSE, AWF_PRSE, NULL, dialog_page_setup); // gtk-page-setup removed create_menuitem (app, menu, _gtk("_Print"), AWF_ACCEL_PRIN, AWF_PRIN, "gtk-print", dialog_print); submenu = g_menu_new (); g_menu_append_submenu (menu, _app("More..."), G_MENU_MODEL (submenu)); create_menuitem (app, submenu, _gtk("Cu_t"), AWF_ACCEL_MCUT, AWF_MCUT, "gtk-cut", NULL); create_menuitem (app, submenu, _gtk("_Copy"), AWF_ACCEL_MCOP, AWF_MCOP, "gtk-copy", NULL); create_menuitem (app, submenu, _gtk("_Paste"), AWF_ACCEL_MPAS, AWF_MPAS, "gtk-paste", NULL); section = g_menu_new (); g_menu_append_section (menu, NULL, G_MENU_MODEL (section)); action = g_simple_action_new_stateful ("set-check-grp11", NULL, g_variant_new_boolean (FALSE)); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Check 1 %s", _app("(unchecked)")), "app.set-check-grp11")); action = g_simple_action_new_stateful ("set-check-grp12", NULL, g_variant_new_boolean (TRUE)); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Check 2 %s", _app("(checked)")), "app.set-check-grp12")); g_menu_append_item (section, g_menu_item_new ("Empty", NULL)); // @todo action = g_simple_action_new_stateful ("set-check-grp21", NULL, g_variant_new_boolean (FALSE)); g_simple_action_set_enabled (action, FALSE); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Check 1 %s", _app("(unchecked)")), "app.set-check-grp21")); action = g_simple_action_new_stateful ("set-check-grp22", NULL, g_variant_new_boolean (TRUE)); g_simple_action_set_enabled (action, FALSE); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Check 2 %s", _app("(checked)")), "app.set-check-grp22")); g_menu_append_item (section, g_menu_item_new ("Empty", "disabled")); // @todo section = g_menu_new (); g_menu_append_section (menu, NULL, G_MENU_MODEL (section)); action = g_simple_action_new_stateful ("set-radio-grp1", G_VARIANT_TYPE_STRING, g_variant_new_string ("checked")); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), "app.set-radio-grp1::unchecked")); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Radio 2 %s", _app("(checked)")), "app.set-radio-grp1::checked")); g_menu_append_item (section, g_menu_item_new ("Empty", NULL)); // @todo action = g_simple_action_new_stateful ("set-radio-grp2", G_VARIANT_TYPE_STRING, g_variant_new_string ("checked")); g_simple_action_set_enabled (action, FALSE); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Radio 1 %s", _app("(unchecked)")), "app.set-radio-grp2::unchecked")); g_menu_append_item (section, g_menu_item_new (g_strdup_printf ("Radio 2 %s", _app("(checked)")), "app.set-radio-grp2::checked")); g_menu_append_item (section, g_menu_item_new ("Empty", "disabled")); // @todo section = g_menu_new (); g_menu_append_section (menu, NULL, G_MENU_MODEL (section)); create_menuitem (app, section, _gtk("_Close"), AWF_ACCEL_CLOS, AWF_CLOS, "gtk-close", NULL); create_menuitem (app, section, _gtk("_Quit"), AWF_ACCEL_QUIT, AWF_QUIT, "gtk-quit", quit); // themes action = g_simple_action_new_stateful ("set-theme", G_VARIANT_TYPE_STRING, g_variant_new_string (current_theme)); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); // system themes menu = g_menu_new (); g_menu_append_submenu (root, _app("_System themes"), G_MENU_MODEL (menu)); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = g_menu_new (); g_menu_append_submenu (menu, iterator->data, G_MENU_MODEL (submenu)); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup (hash_user_theme, iterator->data)) g_menu_append_item (base, g_menu_item_new (iterator->data, "disabled")); // @todo else g_menu_append_item (base, g_menu_item_new (iterator->data, g_strdup_printf ("app.set-theme::%s", (gchar*) iterator->data))); } if (!list_system_theme) g_menu_append (menu, _app("No themes found"), "disabled"); // @todo // user themes menu = g_menu_new (); g_menu_append_submenu (root, _app("_User themes"), G_MENU_MODEL (menu)); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp ((gchar*) iterator->data, "Mint-L") == 0) || (strcmp ((gchar*) iterator->data, "Mint-X") == 0) || (strcmp ((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp ((gchar*) iterator->data, "Yaru") == 0) ) { submenu = g_menu_new (); g_menu_append_submenu (menu, iterator->data, G_MENU_MODEL (submenu)); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix ((gchar*) iterator->data, "Mint-L") || g_str_has_prefix ((gchar*) iterator->data, "Mint-X") || g_str_has_prefix ((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix ((gchar*) iterator->data, "Yaru") )) { base = submenu; } else { base = menu; ok = FALSE; } g_menu_append_item (base, g_menu_item_new (iterator->data, g_strdup_printf ("app.set-theme::%s", (gchar*) iterator->data))); } if (!list_user_theme) g_menu_append (menu, _app("No themes found"), "disabled"); // @todo // text direction if ((current_direction == GTK_TEXT_DIR_LTR) || (current_direction == 1)) action = g_simple_action_new_stateful ("set-direction", G_VARIANT_TYPE_STRING, g_variant_new_string ("1")); if ((current_direction == GTK_TEXT_DIR_RTL) || (current_direction == 2)) action = g_simple_action_new_stateful ("set-direction", G_VARIANT_TYPE_STRING, g_variant_new_string ("2")); g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); menu = g_menu_new (); g_menu_append_submenu (root, _app("_Text direction"), G_MENU_MODEL (menu)); g_menu_append_item (menu, g_menu_item_new (_app("Left to Right (LTR)"), g_strdup_printf ("app.set-direction::%d", GTK_TEXT_DIR_LTR))); g_menu_append_item (menu, g_menu_item_new (_app("Right to Left (RTL)"), g_strdup_printf ("app.set-direction::%d", GTK_TEXT_DIR_RTL))); // help menu = g_menu_new (); g_menu_append_submenu (root, _app("_Help"), G_MENU_MODEL (menu)); create_menuitem (app, menu, "GtkInspector", AWF_ACCEL_INSP, AWF_INSP, NULL, dialog_inspector); create_menuitem (app, menu, _gtk("_About"), AWF_ACCEL_ABOU, AWF_ABOU, "gtk-about", dialog_about); } static GMenuItem* create_menuitem (GtkApplication *app, GMenu *menu, gchar *text, gchar *accel, gchar *keymap, gchar *icon, GCallback function) { GMenuItem *menuitem; GSimpleAction *action = NULL; gchar *acckey[2] = { accel, NULL }; gchar *appkey = (keymap && function) ? g_strdup_printf ("app.%s", keymap) : "disabled"; if (keymap && function) { action = g_simple_action_new (keymap, NULL); g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), G_ACTION (action)); gtk_application_set_accels_for_action (app, appkey, (const char**) acckey); } menuitem = g_menu_item_new (text, appkey); if (function && action) g_signal_connect (action, "activate", function, NULL); if (accel) g_menu_item_set_attribute (menuitem, "accel", "s", accel, NULL); if (icon) g_menu_item_set_attribute_value (menuitem, "icon", g_variant_new_string (icon)); g_menu_append_item (menu, menuitem); if (keymap && function) g_free (appkey); return menuitem; } static gboolean show_menu_icons_delayed (gpointer user_data) { const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { // force the display of csd menu icons - not really optimized // widget = window > box + headerbar show_menu_icons (gtk_widget_get_next_sibling (gtk_widget_get_first_child (window))); // force the display of menubar icons // widget = window > box + headerbar + menubar show_menu_icons (gtk_widget_get_next_sibling (gtk_widget_get_next_sibling (gtk_widget_get_first_child (window)))); } else { // force the display of menubar icons // widget = window > box + menubar show_menu_icons (gtk_widget_get_next_sibling (gtk_widget_get_first_child (window))); } return G_SOURCE_REMOVE; } static void show_menu_icons (GtkWidget *widget) { if (GTK_IS_IMAGE (widget)) { gtk_widget_set_visible (widget, TRUE); } else { GtkWidget *child = gtk_widget_get_first_child (widget); while (child) { show_menu_icons (child); child = gtk_widget_get_next_sibling (child); } } } static void activate_action (GSimpleAction *action, GVariant *parameter, gpointer data) { GVariant *action_state; // radio if (parameter) { g_simple_action_set_state (action, parameter); if (strcmp ((gchar*) g_action_get_name (G_ACTION (action)), "set-theme") == 0) update_theme ((gchar*) g_variant_get_string (parameter, NULL)); else if (strcmp ((gchar*) g_action_get_name (G_ACTION (action)), "set-direction") == 0) update_text_direction ((strcmp (g_variant_get_string (parameter, NULL), "1") == 0) ? 1 : 2); } // checkbox else { action_state = g_action_get_state (G_ACTION (action)); if (g_variant_get_boolean (action_state) == FALSE) g_simple_action_set_state (action, g_variant_new_boolean (TRUE)); else g_simple_action_set_state (action, g_variant_new_boolean (FALSE)); } } static void accels_change (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state) { // @todo - not triggered when menu is open } static void accels_save () { // @todo } // dialogs static void closedialog (GtkWidget *widget, GtkDialog *dialog) { if (GTK_IS_WINDOW (widget)) gtk_window_destroy (GTK_WINDOW (widget)); else if (GTK_IS_WINDOW (dialog)) gtk_window_destroy (GTK_WINDOW (dialog)); } static void dialog_open () { #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new (); gtk_file_dialog_set_title (dialog, "GtkFileDialog:Open"); gtk_file_dialog_open_multiple (dialog, GTK_WINDOW (window), NULL, NULL, NULL); #else GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Open", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } static void dialog_save () { #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new (); gtk_file_dialog_set_title (dialog, "GtkFileDialog:Save"); gtk_file_dialog_save (dialog, GTK_WINDOW (window), NULL, NULL, NULL); #else GtkWidget *dialog = gtk_file_chooser_dialog_new ( "GtkFileChooserDialog:Save", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_SAVE, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Save"), GTK_RESPONSE_ACCEPT, NULL); gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } static void dialog_message () { GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme.")); gtk_window_set_title (GTK_WINDOW (dialog), "GtkMessageDialog"); #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_widget_set_visible (dialog, TRUE); #else gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } static void dialog_page_setup () { GtkWidget *dialog = gtk_page_setup_unix_dialog_new ("GtkPageSetupUnixDialog", GTK_WINDOW (window)); #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #else gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } static void dialog_print () { GtkWidget *dialog = gtk_print_unix_dialog_new ("GtkPrintUnixDialog", GTK_WINDOW (window)); #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_widget_set_visible (dialog, TRUE); #else gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } static void dialog_about () { // @common gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog (GTK_WINDOW (window), "version", VERSION, "comments", t1 = g_strdup_printf ("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK. It displays the various widget types provided by GTK in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf (_app("Remove %s file"), "~/.awf-gtk-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf (_app("compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf (_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string ()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2025 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", GETTEXT_PACKAGE, "logo-icon-name", GETTEXT_PACKAGE, "license", "A widget factory 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 3 of the License, or (at your option) any later version.", "wrap-license", TRUE, NULL); g_free (t1); g_free (t2); g_free (t3); g_free (t4); } static void dialog_inspector () { // @common gtk3/4 gtk_window_set_interactive_debugging (TRUE); } static void dialog_calendar () { GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV, *hbox; #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new (); gtk_widget_add_css_class (dialog, "dialog"); gtk_window_set_title (GTK_WINDOW (dialog), "GtkWindow:Modal"); #else dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); #endif // info bars and calendar G_GNUC_BEGIN_IGNORE_DEPRECATIONS infobar = gtk_info_bar_new_with_buttons (_gtk("_OK"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO); label = gtk_label_new (_app("This is an info bar.")); gtk_info_bar_add_child (GTK_INFO_BAR (infobar), label); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons (_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new (_app("This is a question bar.")); gtk_info_bar_add_child (GTK_INFO_BAR (infobar), label); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_WARNING); label = gtk_label_new (_app("This is a warning bar.")); gtk_info_bar_add_child (GTK_INFO_BAR (infobar), label); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new (); gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_ERROR); label = gtk_label_new (_app("This is an error bar.")); gtk_info_bar_add_child (GTK_INFO_BAR (infobar), label); add_to (GTK_BOX (vbox), infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new (); gtk_calendar_set_show_day_names (GTK_CALENDAR (calendar), TRUE); gtk_calendar_set_show_week_numbers (GTK_CALENDAR (calendar), TRUE); add_to (GTK_BOX (vbox), calendar, FALSE, FALSE, 0, 0); G_GNUC_END_IGNORE_DEPRECATIONS // dialog #if GTK_CHECK_VERSION (4,10,0) // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class (area, "dialog-vbox"); gtk_window_set_child (GTK_WINDOW (dialog), area); add_to (GTK_BOX (area), vbox, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class (hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic (_gtk("_Cancel")); g_signal_connect (btn, "clicked", G_CALLBACK (closedialog), dialog); gtk_box_append (GTK_BOX (hbox), btn); btn = gtk_button_new_with_mnemonic (_gtk("_OK")); g_signal_connect (btn, "clicked", G_CALLBACK (closedialog), dialog); gtk_box_append (GTK_BOX (hbox), btn); add_to (GTK_BOX (area), hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign (hbox, GTK_ALIGN_END); #else area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); add_to (GTK_BOX (area), vbox, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), _gtk("_Cancel"), 0); btn = gtk_dialog_add_button (GTK_DIALOG (dialog), _gtk("_OK"), 0); #endif const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { gtk_window_set_decorated (GTK_WINDOW (dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new (); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (headerbardialog), TRUE); gtk_window_set_titlebar (GTK_WINDOW (dialog), headerbardialog); } gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_widget_set_size_request (dialog, 350, -1); #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_widget_set_visible (dialog, TRUE); #else gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif gtk_widget_grab_focus (GTK_WIDGET (btn)); } static void dialog_scales () { GtkWidget *dialog, *notebook, *area, *btn, *hbox; #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new (); gtk_widget_add_css_class (dialog, "dialog"); gtk_window_set_title (GTK_WINDOW (dialog), "GtkWindow:Modal"); notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); create_scales (notebook, "Top", GTK_POS_TOP); create_scales (notebook, "Right", GTK_POS_RIGHT); create_scales (notebook, "Bottom", GTK_POS_BOTTOM); create_scales (notebook, "Left", GTK_POS_LEFT); // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class (area, "dialog-vbox"); gtk_window_set_child (GTK_WINDOW (dialog), area); add_to (GTK_BOX (area), notebook, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class (hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic (_gtk("_Cancel")); g_signal_connect (btn, "clicked", G_CALLBACK (closedialog), dialog); gtk_box_append (GTK_BOX (hbox), btn); btn = gtk_button_new_with_mnemonic (_gtk("_OK")); g_signal_connect (btn, "clicked", G_CALLBACK (closedialog), dialog); gtk_box_append (GTK_BOX (hbox), btn); add_to (GTK_BOX (area), hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign (hbox, GTK_ALIGN_END); #else dialog = gtk_dialog_new_with_buttons (NULL, GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); gtk_window_set_title (GTK_WINDOW (dialog), "GtkDialog"); notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); create_scales (notebook, "Top", GTK_POS_TOP); create_scales (notebook, "Right", GTK_POS_RIGHT); create_scales (notebook, "Bottom", GTK_POS_BOTTOM); create_scales (notebook, "Left", GTK_POS_LEFT); area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); add_to (GTK_BOX (area), notebook, TRUE, TRUE, 5, 5); gtk_dialog_add_button (GTK_DIALOG (dialog), _gtk("_Cancel"), 0); gtk_dialog_add_button (GTK_DIALOG (dialog), _gtk("_OK"), 0); #endif const gchar *config = g_getenv ("GTK_CSD"); if (config && (strcmp (config, "1") == 0)) { gtk_window_set_decorated (GTK_WINDOW (dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new (); gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (headerbardialog), TRUE); gtk_window_set_titlebar (GTK_WINDOW (dialog), headerbardialog); } gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); gtk_widget_set_visible (dialog, TRUE); #else gtk_widget_set_visible (dialog, TRUE); g_signal_connect (dialog, "response", G_CALLBACK (closedialog), NULL); #endif } // gtk-scroll-tabs for GTK 4 | so same 2.24 - 3.x - 4.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ static gboolean on_scrolltabs (GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget) { // gtk-scroll-tabs for GTK 4 | so same 2.24 - 3.x - 4.x GtkWidget *child, *event_widget, *action_widget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK (widget)) widget = gtk_widget_get_parent (widget); notebook = GTK_NOTEBOOK (widget); child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page event_widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (event)); if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor (event_widget, child)) return FALSE; // and also from the action widgets action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) return FALSE; action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END); if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) return FALSE; if ((dy > 0) || (dx > 0)) gtk_notebook_next_page (notebook); else if ((dy < 0) || (dx < 0)) gtk_notebook_prev_page (notebook); return TRUE; } awf-extended-3.2.0/src/awf.pot000066400000000000000000000160231507226270000161620ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-10 10:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:300 gtk-awf/src/awf-gtk2.c:2265 #: gtk-awf/src/awf-gtk3.c:311 gtk-awf/src/awf-gtk3.c:2655 #: gtk-awf/src/awf-gtk4.c:301 gtk-awf/src/awf-gtk4.c:2503 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-gtk2.c:1883 gtk-awf/src/awf-gtk2.c:1887 #: gtk-awf/src/awf-gtk2.c:1895 gtk-awf/src/awf-gtk2.c:1900 #: gtk-awf/src/awf-gtk3.c:2235 gtk-awf/src/awf-gtk3.c:2239 #: gtk-awf/src/awf-gtk3.c:2247 gtk-awf/src/awf-gtk3.c:2252 #: gtk-awf/src/awf-gtk4.c:2148 gtk-awf/src/awf-gtk4.c:2162 #: gtk-awf/src/awf-gtk4.c:2174 gtk-awf/src/awf-gtk4.c:2183 msgid "(checked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:1884 gtk-awf/src/awf-gtk2.c:1888 #: gtk-awf/src/awf-gtk2.c:1896 gtk-awf/src/awf-gtk2.c:1901 #: gtk-awf/src/awf-gtk3.c:2236 gtk-awf/src/awf-gtk3.c:2240 #: gtk-awf/src/awf-gtk3.c:2248 gtk-awf/src/awf-gtk3.c:2253 msgid "(inconsistent)" msgstr "" #: gtk-awf/src/awf-gtk2.c:1882 gtk-awf/src/awf-gtk2.c:1886 #: gtk-awf/src/awf-gtk2.c:1893 gtk-awf/src/awf-gtk2.c:1898 #: gtk-awf/src/awf-gtk3.c:2234 gtk-awf/src/awf-gtk3.c:2238 #: gtk-awf/src/awf-gtk3.c:2245 gtk-awf/src/awf-gtk3.c:2250 #: gtk-awf/src/awf-gtk4.c:2143 gtk-awf/src/awf-gtk4.c:2156 #: gtk-awf/src/awf-gtk4.c:2173 gtk-awf/src/awf-gtk4.c:2182 msgid "(unchecked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:289 gtk-awf/src/awf-gtk2.c:707 #: gtk-awf/src/awf-gtk3.c:300 gtk-awf/src/awf-gtk3.c:814 #: gtk-awf/src/awf-gtk4.c:290 gtk-awf/src/awf-gtk4.c:761 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "" #: gtk-awf/src/awf-gtk2.c:599 gtk-awf/src/awf-gtk2.c:1320 #: gtk-awf/src/awf-gtk2.c:2230 gtk-awf/src/awf-gtk2.c:2258 #: gtk-awf/src/awf-gtk3.c:678 gtk-awf/src/awf-gtk3.c:1631 #: gtk-awf/src/awf-gtk3.c:2606 gtk-awf/src/awf-gtk3.c:2648 #: gtk-awf/src/awf-gtk4.c:634 gtk-awf/src/awf-gtk4.c:1566 #: gtk-awf/src/awf-gtk4.c:2447 gtk-awf/src/awf-gtk4.c:2496 msgid "" "A widget factory is a theme preview application for GTK. It displays the " "various widget types provided by GTK in a single window allowing to see the " "visual effect of the applied theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:1866 gtk-awf/src/awf-gtk3.c:2218 #: gtk-awf/src/awf-gtk4.c:2124 msgid "Calendar" msgstr "" #: gtk-awf/src/awf-gtk2.c:1867 gtk-awf/src/awf-gtk3.c:2219 #: gtk-awf/src/awf-gtk4.c:2125 msgid "GtkScales" msgstr "" #: gtk-awf/src/awf-gtk2.c:1997 gtk-awf/src/awf-gtk3.c:2349 #: gtk-awf/src/awf-gtk4.c:2280 msgid "Left to Right (LTR)" msgstr "" #: gtk-awf/src/awf-gtk2.c:291 gtk-awf/src/awf-gtk3.c:302 #: gtk-awf/src/awf-gtk3.c:339 gtk-awf/src/awf-gtk4.c:292 #: gtk-awf/src/awf-gtk4.c:322 msgid "List available themes." msgstr "" #: gtk-awf/src/awf-gtk2.c:1309 gtk-awf/src/awf-gtk2.c:1872 #: gtk-awf/src/awf-gtk3.c:1608 gtk-awf/src/awf-gtk3.c:2224 #: gtk-awf/src/awf-gtk4.c:1549 gtk-awf/src/awf-gtk4.c:2131 msgid "More..." msgstr "" #: gtk-awf/src/awf-gtk2.c:1954 gtk-awf/src/awf-gtk2.c:1991 #: gtk-awf/src/awf-gtk3.c:2306 gtk-awf/src/awf-gtk3.c:2343 #: gtk-awf/src/awf-gtk4.c:2233 gtk-awf/src/awf-gtk4.c:2268 msgid "No themes found" msgstr "" #: gtk-awf/src/awf-gtk2.c:2296 gtk-awf/src/awf-gtk3.c:2695 #: gtk-awf/src/awf-gtk4.c:2548 msgid "Ok" msgstr "" #: gtk-awf/src/awf-gtk2.c:1863 gtk-awf/src/awf-gtk3.c:2215 #: gtk-awf/src/awf-gtk4.c:2121 msgid "Open recent file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2259 gtk-awf/src/awf-gtk3.c:2649 #: gtk-awf/src/awf-gtk4.c:2497 #, c-format msgid "Remove %s file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2003 gtk-awf/src/awf-gtk3.c:2355 #: gtk-awf/src/awf-gtk4.c:2281 msgid "Right to Left (RTL)" msgstr "" #: gtk-awf/src/awf-gtk2.c:293 gtk-awf/src/awf-gtk3.c:304 #: gtk-awf/src/awf-gtk3.c:347 gtk-awf/src/awf-gtk4.c:294 #: gtk-awf/src/awf-gtk4.c:330 #, c-format msgid "Run and save a png screenshot on %s." msgstr "" #: gtk-awf/src/awf-gtk2.c:292 gtk-awf/src/awf-gtk3.c:303 #: gtk-awf/src/awf-gtk3.c:343 gtk-awf/src/awf-gtk4.c:293 #: gtk-awf/src/awf-gtk4.c:326 msgid "Run with the specified theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:290 gtk-awf/src/awf-gtk3.c:301 #: gtk-awf/src/awf-gtk3.c:335 gtk-awf/src/awf-gtk4.c:291 #: gtk-awf/src/awf-gtk4.c:318 msgid "Show version number." msgstr "" #: gtk-awf/src/awf-gtk2.c:294 gtk-awf/src/awf-gtk3.c:305 #: gtk-awf/src/awf-gtk3.c:351 gtk-awf/src/awf-gtk4.c:295 #: gtk-awf/src/awf-gtk4.c:334 msgid "Start with text from left to right (Left-To-Right)." msgstr "" #: gtk-awf/src/awf-gtk2.c:295 gtk-awf/src/awf-gtk3.c:306 #: gtk-awf/src/awf-gtk3.c:355 gtk-awf/src/awf-gtk4.c:296 #: gtk-awf/src/awf-gtk4.c:338 msgid "Start with text from right to left (Right-To-Left)." msgstr "" #: gtk-awf/src/awf-gtk2.c:460 gtk-awf/src/awf-gtk2.c:740 #: gtk-awf/src/awf-gtk3.c:538 gtk-awf/src/awf-gtk3.c:934 #: gtk-awf/src/awf-gtk4.c:498 gtk-awf/src/awf-gtk4.c:869 #, c-format msgid "Theme %s loaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:442 gtk-awf/src/awf-gtk3.c:520 #: gtk-awf/src/awf-gtk4.c:480 #, c-format msgid "Theme %s reloaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:687 gtk-awf/src/awf-gtk3.c:789 #, c-format msgid "Theme reloaded, then screenshot saved (%s)." msgstr "" #: gtk-awf/src/awf-gtk2.c:2298 gtk-awf/src/awf-gtk3.c:2697 #: gtk-awf/src/awf-gtk4.c:2550 msgid "This is a question bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2304 gtk-awf/src/awf-gtk3.c:2703 #: gtk-awf/src/awf-gtk4.c:2556 msgid "This is a warning bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2310 gtk-awf/src/awf-gtk3.c:2709 #: gtk-awf/src/awf-gtk4.c:2562 msgid "This is an error bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2292 gtk-awf/src/awf-gtk3.c:2691 #: gtk-awf/src/awf-gtk4.c:2544 msgid "This is an info bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2009 gtk-awf/src/awf-gtk3.c:2361 #: gtk-awf/src/awf-gtk4.c:2285 msgid "_Help" msgstr "" #: gtk-awf/src/awf-gtk2.c:1857 gtk-awf/src/awf-gtk3.c:2209 #: gtk-awf/src/awf-gtk4.c:2118 msgid "_Options" msgstr "" #: gtk-awf/src/awf-gtk2.c:1911 gtk-awf/src/awf-gtk3.c:2263 #: gtk-awf/src/awf-gtk4.c:2199 msgid "_System themes" msgstr "" #: gtk-awf/src/awf-gtk2.c:1995 gtk-awf/src/awf-gtk3.c:2347 #: gtk-awf/src/awf-gtk4.c:2279 msgid "_Text direction" msgstr "" #: gtk-awf/src/awf-gtk2.c:1957 gtk-awf/src/awf-gtk3.c:2309 #: gtk-awf/src/awf-gtk4.c:2237 msgid "_User themes" msgstr "" #: gtk-awf/src/awf-gtk2.c:296 gtk-awf/src/awf-gtk2.c:2261 #: gtk-awf/src/awf-gtk3.c:307 gtk-awf/src/awf-gtk3.c:2651 #: gtk-awf/src/awf-gtk4.c:297 gtk-awf/src/awf-gtk4.c:2499 #, c-format msgid "compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-gtk2.c:2260 gtk-awf/src/awf-gtk3.c:2650 #: gtk-awf/src/awf-gtk4.c:2498 msgid "to reset keyboard shortcuts." msgstr "" awf-extended-3.2.0/src/po/000077500000000000000000000000001507226270000152755ustar00rootroot00000000000000awf-extended-3.2.0/src/po/fr.po000066400000000000000000000173641507226270000162570ustar00rootroot00000000000000msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-10 10:47+0200\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:300 gtk-awf/src/awf-gtk2.c:2265 #: gtk-awf/src/awf-gtk3.c:311 gtk-awf/src/awf-gtk3.c:2655 #: gtk-awf/src/awf-gtk4.c:301 gtk-awf/src/awf-gtk4.c:2503 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " démarré avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-gtk2.c:1883 gtk-awf/src/awf-gtk2.c:1887 #: gtk-awf/src/awf-gtk2.c:1895 gtk-awf/src/awf-gtk2.c:1900 #: gtk-awf/src/awf-gtk3.c:2235 gtk-awf/src/awf-gtk3.c:2239 #: gtk-awf/src/awf-gtk3.c:2247 gtk-awf/src/awf-gtk3.c:2252 #: gtk-awf/src/awf-gtk4.c:2148 gtk-awf/src/awf-gtk4.c:2162 #: gtk-awf/src/awf-gtk4.c:2174 gtk-awf/src/awf-gtk4.c:2183 msgid "(checked)" msgstr "(coché)" #: gtk-awf/src/awf-gtk2.c:1884 gtk-awf/src/awf-gtk2.c:1888 #: gtk-awf/src/awf-gtk2.c:1896 gtk-awf/src/awf-gtk2.c:1901 #: gtk-awf/src/awf-gtk3.c:2236 gtk-awf/src/awf-gtk3.c:2240 #: gtk-awf/src/awf-gtk3.c:2248 gtk-awf/src/awf-gtk3.c:2253 msgid "(inconsistent)" msgstr "(incohérent)" #: gtk-awf/src/awf-gtk2.c:1882 gtk-awf/src/awf-gtk2.c:1886 #: gtk-awf/src/awf-gtk2.c:1893 gtk-awf/src/awf-gtk2.c:1898 #: gtk-awf/src/awf-gtk3.c:2234 gtk-awf/src/awf-gtk3.c:2238 #: gtk-awf/src/awf-gtk3.c:2245 gtk-awf/src/awf-gtk3.c:2250 #: gtk-awf/src/awf-gtk4.c:2143 gtk-awf/src/awf-gtk4.c:2156 #: gtk-awf/src/awf-gtk4.c:2173 gtk-awf/src/awf-gtk4.c:2182 msgid "(unchecked)" msgstr "(décoché)" #: gtk-awf/src/awf-gtk2.c:289 gtk-awf/src/awf-gtk2.c:707 #: gtk-awf/src/awf-gtk3.c:300 gtk-awf/src/awf-gtk3.c:814 #: gtk-awf/src/awf-gtk4.c:290 gtk-awf/src/awf-gtk4.c:761 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "La fabrique à widgets - GTK %d.%d" #: gtk-awf/src/awf-gtk2.c:599 gtk-awf/src/awf-gtk2.c:1320 #: gtk-awf/src/awf-gtk2.c:2230 gtk-awf/src/awf-gtk2.c:2258 #: gtk-awf/src/awf-gtk3.c:678 gtk-awf/src/awf-gtk3.c:1631 #: gtk-awf/src/awf-gtk3.c:2606 gtk-awf/src/awf-gtk3.c:2648 #: gtk-awf/src/awf-gtk4.c:634 gtk-awf/src/awf-gtk4.c:1566 #: gtk-awf/src/awf-gtk4.c:2447 gtk-awf/src/awf-gtk4.c:2496 msgid "" "A widget factory is a theme preview application for GTK. It displays the " "various widget types provided by GTK in a single window allowing to see the " "visual effect of the applied theme." msgstr "" "La fabrique à widgets est une application d'aperçu de thème pour GTK. Elle " "affiche les différents types de widgets fournis par GTK dans une seule " "fenêtre permettant de voir l'effet visuel du thème appliqué." #: gtk-awf/src/awf-gtk2.c:1866 gtk-awf/src/awf-gtk3.c:2218 #: gtk-awf/src/awf-gtk4.c:2124 msgid "Calendar" msgstr "Calendrier" #: gtk-awf/src/awf-gtk2.c:1867 gtk-awf/src/awf-gtk3.c:2219 #: gtk-awf/src/awf-gtk4.c:2125 msgid "GtkScales" msgstr "GtkScales" #: gtk-awf/src/awf-gtk2.c:1997 gtk-awf/src/awf-gtk3.c:2349 #: gtk-awf/src/awf-gtk4.c:2280 msgid "Left to Right (LTR)" msgstr "Gauche à droite (LTR)" #: gtk-awf/src/awf-gtk2.c:291 gtk-awf/src/awf-gtk3.c:302 #: gtk-awf/src/awf-gtk3.c:339 gtk-awf/src/awf-gtk4.c:292 #: gtk-awf/src/awf-gtk4.c:322 msgid "List available themes." msgstr "Liste les thèmes disponibles." #: gtk-awf/src/awf-gtk2.c:1309 gtk-awf/src/awf-gtk2.c:1872 #: gtk-awf/src/awf-gtk3.c:1608 gtk-awf/src/awf-gtk3.c:2224 #: gtk-awf/src/awf-gtk4.c:1549 gtk-awf/src/awf-gtk4.c:2131 msgid "More..." msgstr "Plus..." #: gtk-awf/src/awf-gtk2.c:1954 gtk-awf/src/awf-gtk2.c:1991 #: gtk-awf/src/awf-gtk3.c:2306 gtk-awf/src/awf-gtk3.c:2343 #: gtk-awf/src/awf-gtk4.c:2233 gtk-awf/src/awf-gtk4.c:2268 msgid "No themes found" msgstr "Aucun thème trouvé" #: gtk-awf/src/awf-gtk2.c:2296 gtk-awf/src/awf-gtk3.c:2695 #: gtk-awf/src/awf-gtk4.c:2548 msgid "Ok" msgstr "Ok" #: gtk-awf/src/awf-gtk2.c:1863 gtk-awf/src/awf-gtk3.c:2215 #: gtk-awf/src/awf-gtk4.c:2121 msgid "Open recent file" msgstr "Ouvrir un fichier récent" #: gtk-awf/src/awf-gtk2.c:2259 gtk-awf/src/awf-gtk3.c:2649 #: gtk-awf/src/awf-gtk4.c:2497 #, c-format msgid "Remove %s file" msgstr "Supprimer le fichier %s" #: gtk-awf/src/awf-gtk2.c:2003 gtk-awf/src/awf-gtk3.c:2355 #: gtk-awf/src/awf-gtk4.c:2281 msgid "Right to Left (RTL)" msgstr "Droite à gauche (RTL)" #: gtk-awf/src/awf-gtk2.c:293 gtk-awf/src/awf-gtk3.c:304 #: gtk-awf/src/awf-gtk3.c:347 gtk-awf/src/awf-gtk4.c:294 #: gtk-awf/src/awf-gtk4.c:330 #, c-format msgid "Run and save a png screenshot on %s." msgstr "Démarre et enregistre une capture d'écran png lors du %s." #: gtk-awf/src/awf-gtk2.c:292 gtk-awf/src/awf-gtk3.c:303 #: gtk-awf/src/awf-gtk3.c:343 gtk-awf/src/awf-gtk4.c:293 #: gtk-awf/src/awf-gtk4.c:326 msgid "Run with the specified theme." msgstr "Démarre avec le thème spécifié." #: gtk-awf/src/awf-gtk2.c:290 gtk-awf/src/awf-gtk3.c:301 #: gtk-awf/src/awf-gtk3.c:335 gtk-awf/src/awf-gtk4.c:291 #: gtk-awf/src/awf-gtk4.c:318 msgid "Show version number." msgstr "Affiche le numéro de version." #: gtk-awf/src/awf-gtk2.c:294 gtk-awf/src/awf-gtk3.c:305 #: gtk-awf/src/awf-gtk3.c:351 gtk-awf/src/awf-gtk4.c:295 #: gtk-awf/src/awf-gtk4.c:334 msgid "Start with text from left to right (Left-To-Right)." msgstr "Démarre avec le texte de gauche à droite (Left-To-Right)." #: gtk-awf/src/awf-gtk2.c:295 gtk-awf/src/awf-gtk3.c:306 #: gtk-awf/src/awf-gtk3.c:355 gtk-awf/src/awf-gtk4.c:296 #: gtk-awf/src/awf-gtk4.c:338 msgid "Start with text from right to left (Right-To-Left)." msgstr "Démarre avec le texte de droite à gauche (Right-To-Left)." #: gtk-awf/src/awf-gtk2.c:460 gtk-awf/src/awf-gtk2.c:740 #: gtk-awf/src/awf-gtk3.c:538 gtk-awf/src/awf-gtk3.c:934 #: gtk-awf/src/awf-gtk4.c:498 gtk-awf/src/awf-gtk4.c:869 #, c-format msgid "Theme %s loaded." msgstr "Thème %s chargé." #: gtk-awf/src/awf-gtk2.c:442 gtk-awf/src/awf-gtk3.c:520 #: gtk-awf/src/awf-gtk4.c:480 #, c-format msgid "Theme %s reloaded." msgstr "Thème %s rechargé." #: gtk-awf/src/awf-gtk2.c:687 gtk-awf/src/awf-gtk3.c:789 #, c-format msgid "Theme reloaded, then screenshot saved (%s)." msgstr "Thème rechargé, puis capture d'écran enregistrée (%s)." #: gtk-awf/src/awf-gtk2.c:2298 gtk-awf/src/awf-gtk3.c:2697 #: gtk-awf/src/awf-gtk4.c:2550 msgid "This is a question bar." msgstr "Ceci est une barre de question." #: gtk-awf/src/awf-gtk2.c:2304 gtk-awf/src/awf-gtk3.c:2703 #: gtk-awf/src/awf-gtk4.c:2556 msgid "This is a warning bar." msgstr "Ceci est une barre d'avertissement." #: gtk-awf/src/awf-gtk2.c:2310 gtk-awf/src/awf-gtk3.c:2709 #: gtk-awf/src/awf-gtk4.c:2562 msgid "This is an error bar." msgstr "Ceci est une barre d'erreur." #: gtk-awf/src/awf-gtk2.c:2292 gtk-awf/src/awf-gtk3.c:2691 #: gtk-awf/src/awf-gtk4.c:2544 msgid "This is an info bar." msgstr "Ceci est une barre d'information." #: gtk-awf/src/awf-gtk2.c:2009 gtk-awf/src/awf-gtk3.c:2361 #: gtk-awf/src/awf-gtk4.c:2285 msgid "_Help" msgstr "Aid_e" #: gtk-awf/src/awf-gtk2.c:1857 gtk-awf/src/awf-gtk3.c:2209 #: gtk-awf/src/awf-gtk4.c:2118 msgid "_Options" msgstr "_Options" #: gtk-awf/src/awf-gtk2.c:1911 gtk-awf/src/awf-gtk3.c:2263 #: gtk-awf/src/awf-gtk4.c:2199 msgid "_System themes" msgstr "Thèmes _système" #: gtk-awf/src/awf-gtk2.c:1995 gtk-awf/src/awf-gtk3.c:2347 #: gtk-awf/src/awf-gtk4.c:2279 msgid "_Text direction" msgstr "Direction du _texte" #: gtk-awf/src/awf-gtk2.c:1957 gtk-awf/src/awf-gtk3.c:2309 #: gtk-awf/src/awf-gtk4.c:2237 msgid "_User themes" msgstr "Thèmes _utilisateur" #: gtk-awf/src/awf-gtk2.c:296 gtk-awf/src/awf-gtk2.c:2261 #: gtk-awf/src/awf-gtk3.c:307 gtk-awf/src/awf-gtk3.c:2651 #: gtk-awf/src/awf-gtk4.c:297 gtk-awf/src/awf-gtk4.c:2499 #, c-format msgid "compiled with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " compilé avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-gtk2.c:2260 gtk-awf/src/awf-gtk3.c:2650 #: gtk-awf/src/awf-gtk4.c:2498 msgid "to reset keyboard shortcuts." msgstr "pour réinitialiser les raccourcis clavier."