PerlPanel-0.9.1+cvs20051225/0000755000175000017500000000000010353532650012567 5ustar hehePerlPanel-0.9.1+cvs20051225/ChangeLog0000644000175000017500000002111710353532650014343 0ustar heheChangeLog ========= 2005-03-14 - v0.9.1 * This release properly fixes the panel border by using low-level drawing functions. New applets include: Timer, Trash, Volume. A number of other applets have been given a spring clean. You can drag launchers from the GNOME Menu (although not yet onto the panel). The .desktop file library has been split into a separate package called X11::FreeDesktop::DesktopEntry, which is available from CPAN, and the .desktop editor program has been overhauled to use it. The BatteryMonitor applet does ACP/APM detection. You can now upload your SSH key to remote hosts with the ShellManager applet. 2004-12-10 - v0.9.0 * This release adds proper calendaring functions to the Clock applet - you can add events to your calendar for a particular date, and get reminders for them. A new command-line tool is available to install applets, so that third-party applets can be packaged as RPMs or DEBs. A new DriveManager applet makes it easy to mount, unmount and eject removable media devices. You now can specify the panel size in pixels instead of named sizes, and the panel can be set not to "expand", and instead will be centered on the window edge. Unicode support has been improved for .desktop files, and translated strings are used in the GNOME menu when available. You can drag and drop launcher icons to and from the panel. And there have been a large number of bug fixes and optimisations. 2004-09-29 - v0.8.0 * This release introduces some massive changes to PerlPanel. First off is the eagerly awaited Notification Area applet, which exists only because of the altruism of Christian Borup. Then there's the new applet install system, which lets users download and install applets in a few clicks. A number of applets have been improved on: the WiFiMonitor applet supports more interface names; the Pager now has a context menu; the calendar has been restored to the Clock applet; the CPUTemp applet now works with the CPU temperature monitor on Dell systems; the WindowMenu applet now tracks the currently active window. All applets which use .desktop files (GnomeMenu, IconBar and Launcher) now support launch feedback, and you can active launch feedback on the Launcher and IconBar applets through the .desktop editor. A lot of work has been done to improve responsiveness and startup time. 2004-08-25 - v0.7.0 * This release includes two new icon themes - Bluecurve and crystalsvg. The main development work has focused on implementing support for applets with multiple instances - so you can have to mailbox monitoring applets, each monitoring a different mailbox. There's a new "Launcher" applet which uses this. 2004-07-07 - v0.6.0 * PerlPanel now supports icon themes, so icon themers can create icons for their themes that PerlPanel will pick up. Auto-completion has been added to the Commander and RunMe applets. A new Wireless signal strength applet has been added. The panel itself now has a border that doesn't break Fitt's Law. The 'Add To Applet' submenu has been broken down into categories to make it easier to use. The 'Lock Screen' applet and action item will be greyed out if xscreensaver isn't running. When an applet fails to load, the error message will be more informative. And a large number of bugs have been fixed. 2004-05-30 - v0.5.0 * This release fixes a large number of bugs and introduces changes that simplify the interface. Several new applets have been introduced: a "Recent Files" Freedesktop.org standard applet, a CPU temperature applet that requires the mbmon program, and a very experimental applet that displays your OpenBox menu. The IconBar applet is more compliant with Fitt's Law, and the "run program" history is now shared between the Commander and RunMe applets. Right-clicking on a spacer now brings up an action menu. 2004-05-28 - v0.4.2 * This release introduces a handful of new applets: A Gnome menu, an SSH shell manager, a SETI@Home monitor, and a "mini-commander". This release requires Gtk+ 2.4.0. 2004-04-06 - v0.4.1 * This release focuses on the implementation of support for GNU gettext. Users are encouraged to submit a translation of PerlPanel's strings into their own languages. To comply with Fitt's Law, the shadow border around the panel has been removed, but can be reinstated with a hidden preference. "Power Off" and "Reboot" options have been added to the default actions. A "Screenshot" applet, with a corresponding action menu item, has been added. 2004-02-20 - v0.4.0 * The Configuration applet has been rewritten using Glade for improved maintainability. The applet API has been substantially cleaned up, and new functionality has been added. The documentation has been expanded to include manual pages for PerlPanel's supporting programs. The build system has been overhauled, to comply with Debian's packaging policies. You can now change the geometry of the Pager applet. 2004-02-02 - v0.3.1 * This release includes a new "action menu" applet, for which a base menu class has been implemented. The Commander dialog has been improved, and can now be called from an external program. The handling of icons has been made more consistent to make it easier to implement icon themes in the future. A load of bugs have been fixed. 2004-01-17 - v0.3.0 * This release supports EWMH struts, so maximizing windows doesn't obscure the panel. You can now reorder icons on the IconBar. The Applet selector has been beautified, with icons for each applet. The XMMS applet has been almost completely rewritten, and now includes a volume control. Popup menus now appear correctly aligned with the applets. The BBMenu applet has been substantially rewritten, allowing for custom icons. A new WindowMenu applet gives you access to all the open windows without using up space. 2004-01-06 - v0.2.0 * The interaction with the icon editor is much more efficient. The menu button's click behavior is more user-friendly. The config file version mismatch test has been disabled. The menu applet will attempt to locate an icon for application entries. The Separator applet has been given some spacing on each side to make it more visible. Two new applets have been introduced: a "Flexible spacer" applet and a "Slot" applet which supports the XEMBED extension, allowing non-PerlPanel programs to attach to the panel. The old PanelPet applet has been restored. Source and noarch RPMs are now available. 2003-12-23 - v0.1.1 * This release fixes a lot of bugs with the panel itself and with many of the applets. It also introduces a configurable label for the menu button. There is also a new Nautilus bookmarks applet. 2003-10-12 - v0.1.0 * This release includes Tasklist, Workspace Pager, and "Show Desktop" applets using the libwnck Perl bindings. You can now run multiple panels by specifying an alternate configuration file. 2003-07-21 - v0.0.5 * This release is compatible with the recent 0.90 release of Gtk2-Perl. A couple of new applets have been included. The configurator includes some options for the menu. The applet interface and documentation have been revised. 2003-06-27 - v0.0.4 * This is the first beta quality release. A calendar widget has been added to the clock dialog. PerlPanel will now take screen dimensions from the xdpyinfo program when GdkScreen is not available. The menu applet has a new icon. Drag and drop has been implemented in the Applet configuration tab. 2003-06-23 - v0.0.3 * This release includes a huge number of improvements. The Menu applet has been rewritten and loads much more quickly. A new CPU load applet has been added. The applet interface has been cleaned up and extended. Manual pages for the program and a HOWTO for applet developers have been added. A Gtk-only .desktop file editor has been created. PerlPanel will take screen dimensions directly from Gdk where available. Icons are resized at the GdkPixbuf level, removing the need for the Image::Size module and a cache on disk. Icons also have a context menu. 2003-06-10 - v0.0.2 * This release introduces a large number of improvements, including a Makefile for installation, a GUI configuration dialog, a working menu applet that uses your Blackbox/Fluxbox/OpenBox/Waimea menu, and context menus on icons. Icons are dynamically rescaled using GdkPixbuf instead of being cached on disk. 2003-06-02 - v0.0.1 * Initial release. -- $Id: ChangeLog,v 1.12 2005/04/14 14:41:03 jodrell Exp $ PerlPanel-0.9.1+cvs20051225/COPYING0000644000175000017500000004313107716207702013632 0ustar hehe GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. PerlPanel-0.9.1+cvs20051225/Makefile0000644000175000017500000001153110227501340014220 0ustar hehe# This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: Makefile,v 1.51 2005/04/14 14:49:04 jodrell Exp $ VERSION=0.9.1 PREFIX=/usr/local LIBDIR=$(PREFIX)/lib/perlpanel BINDIR=$(PREFIX)/bin DATADIR=$(PREFIX)/share MANDIR=$(DATADIR)/man LOCALEDIR=$(DATADIR)/locale CONFDIR=/etc LC_CATEGORY=LC_MESSAGES MAN_SECTION=man1 MAN_LIBS_SECTION=man3 # # NB: $(DESTDIR) is usally empty. rpmbuild needs it. # all: perlpanel perlpanel: @mkdir -p build perl -ne 's!\@PREFIX\@!$(PREFIX)!g ; s!\@LIBDIR\@!$(LIBDIR)!g ; print' < src/perlpanel > build/perlpanel perl -ne 's!\@PREFIX\@!$(PREFIX)!g ; s!\@LIBDIR\@!$(LIBDIR)!g ; print' < src/perlpanel-item-edit > build/perlpanel-item-edit perl -ne 's!\@PREFIX\@!$(PREFIX)!g ; s!\@LIBDIR\@!$(LIBDIR)!g ; print' < src/perlpanel-run-dialog > build/perlpanel-run-dialog perl -ne 's!\@PREFIX\@!$(PREFIX)!g ; s!\@LIBDIR\@!$(LIBDIR)!g ; print' < src/perlpanel-applet-install > build/perlpanel-applet-install perl -ne 's!\@VERSION\@!$(VERSION)!g ; print' < lib/PerlPanel.pm > build/PerlPanel.pm perl -I$(PWD)/build -MPerlPanel -MXML::Simple -e 'print XMLout(\%PerlPanel::DEFAULTS)' > build/perlpanelrc pod2man doc/perlpanel.pod | gzip -9c > build/perlpanel.1.gz pod2man doc/perlpanel-applet-howto.pod | gzip -9c > build/perlpanel-applet-howto.1.gz pod2man doc/perlpanel-run-dialog.pod | gzip -9c > build/perlpanel-run-dialog.1.gz pod2man doc/perlpanel-item-edit.pod | gzip -9c > build/perlpanel-item-edit.1.gz pod2man lib/PerlPanel/MenuBase.pm | gzip -9c > build/PerlPanel::MenuBase.3.gz pod2man lib/PerlPanel/DesktopEntry.pm | gzip -9c > build/PerlPanel::DesktopEntry.3.gz @# similarly for other locales as they become available: mkdir -p build/locale/en/$(LC_CATEGORY) msgfmt -o build/locale/en/$(LC_CATEGORY)/perlpanel.mo src/po/en.po mkdir -p build/locale/de/$(LC_CATEGORY) msgfmt -o build/locale/de/$(LC_CATEGORY)/perlpanel.mo src/po/de.po install: mkdir -p $(DESTDIR)/$(LIBDIR) \ $(DESTDIR)/$(BINDIR) \ $(DESTDIR)/$(MANDIR)/$(MAN_SECTION) \ $(DESTDIR)/$(MANDIR)/$(MAN_LIBS_SECTION) \ $(DESTDIR)/$(LOCALEDIR)/en/$(LC_CATEGORY) \ $(DESTDIR)/$(LOCALEDIR)/de/$(LC_CATEGORY) \ $(DESTDIR)/$(CONFDIR) @echo Copying library files to $(DESTDIR)/$(LIBDIR): @cp -Rp lib/* $(DESTDIR)/$(LIBDIR)/ @echo Copying share files to $(DESTDIR)/$(DATADIR): @cp -Rp share/* $(DESTDIR)/$(DATADIR)/ find $(DESTDIR)/$(LIBDIR) -type f -exec chmod 755 "{}" \; find $(DESTDIR)/$(DATADIR) -type f -exec chmod 644 "{}" \; install -m 0755 build/perlpanel $(DESTDIR)/$(BINDIR)/ install -m 0755 build/perlpanel-item-edit $(DESTDIR)/$(BINDIR)/ install -m 0755 build/perlpanel-run-dialog $(DESTDIR)/$(BINDIR)/ install -m 0755 build/perlpanel-applet-install $(DESTDIR)/$(BINDIR)/ install -m 0644 build/PerlPanel.pm $(DESTDIR)/$(LIBDIR)/ install -m 0755 build/perlpanel.1.gz $(DESTDIR)/$(MANDIR)/$(MAN_SECTION)/ install -m 0755 build/perlpanel-applet-howto.1.gz $(DESTDIR)/$(MANDIR)/$(MAN_SECTION)/ install -m 0755 build/perlpanel-item-edit.1.gz $(DESTDIR)/$(MANDIR)/$(MAN_SECTION)/ install -m 0755 build/perlpanel-run-dialog.1.gz $(DESTDIR)/$(MANDIR)/$(MAN_SECTION)/ install -m 0755 build/PerlPanel::MenuBase.3.gz $(DESTDIR)/$(MANDIR)/$(MAN_LIBS_SECTION)/ install -m 0755 build/PerlPanel::DesktopEntry.3.gz $(DESTDIR)/$(MANDIR)/$(MAN_LIBS_SECTION)/ install -m 0644 build/locale/en/$(LC_CATEGORY)/perlpanel.mo $(DESTDIR)/$(LOCALEDIR)/en/$(LC_CATEGORY)/ install -m 0644 build/locale/de/$(LC_CATEGORY)/perlpanel.mo $(DESTDIR)/$(LOCALEDIR)/de/$(LC_CATEGORY)/ clean: rm -rf build PerlPanel.spec uninstall: rm -rf $(BINDIR)/perlpanel \ $(BINDIR)/perlpanel-item-edit \ $(BINDIR)/perlpanel-run-dialog \ $(BINDIR)/perlpanel-applet-install \ $(MANDIR)/$(MAN_SECTION)/perlpanel.1.gz \ $(MANDIR)/$(MAN_SECTION)/perlpanel-applet-howto.1.gz \ $(MANDIR)/$(MAN_SECTION)/perlpanel-item-edit.1.gz \ $(MANDIR)/$(MAN_SECTION)/perlpanel-run-dialog.1.gz \ $(MANDIR)/$(MAN_LIBS_SECTION)/PerlPanel::MenuBase.3.gz \ $(MANDIR)/$(MAN_LIBS_SECTION)/PerlPanel::DesktopEntry.3.gz \ $(DATADIR)/perlpanel \ $(DATADIR)/pixmaps/perlpanel* \ $(LIBDIR) \ $(LOCALEDIR)/*/$(LC_CATEGORY)/perlpanel.mo \ release: src/make-rpm $(VERSION) PerlPanel-0.9.1+cvs20051225/INSTALL0000644000175000017500000000720210353107775013627 0ustar heheINSTALL ======= What you will need is this: * Perl 5.8.0 or higher (5.8.3 recommended) * Gtk+ version 2.4.0 or higher * libglade * The XML::Simple Perl module * The XML::Parser Perl module * The Date::Manip Perl module * The following libraries from Gtk2-Perl: - Glib - Gtk2 - Gtk2::GladeXML - Gtk2::TrayManager - Gnome2::Wnck - Gnome2::VFS * The X11::FreeDesktop::DesktopEntry module Some of the applets also require additional modules, for example: * URI::Escape for the RecentFiles applet * Xmms::Remote for the XMMS applet * Audio::Mixer for the Volume applet Your Perl package should include the following modules, but if it's an older version you may need to install them yourself: * Digest::MD5 * File::Basename * Locale::gettext Perl and Gtk+ should have been installed with your operating system. If you don't have Gtk+ 2 or higher, then you might want to try a Gnome distribution such as Ximian Desktop or Dropline. Alternatively you can download source code from http://www.gtk.org/. The XML::Simple is available on CPAN. The Gtk2-Perl libraries can be found on the Sourceforge page at http://sourceforge.net/projects/gtk2-perl. Gnome2::Wnck is the Perl binding for libwnck, the Window Navigation Construction Kit. Gnome2::VFS is the Perl binding for the GNOME VFS system. You do not need a full GNOME distribution in order to use these modules - they have the Gnome2:: prefix because they're maintained by the GNOME developers. Note about XML::Simple ====================== By default, XML::Simple will attempt to use XML::SAX as an XML parser. However we have observed that in some situations this can result in unreliable conversion of data. So PerlPanel forces the use of XML::Parser instead of XML::SAX. So even if you have XML::Simple installed you may find that PerlPanel won't run - this is because XML::Parser is required. Installing PerlPanel ==================== Installing PerlPanel is a simple matter of downloading the source tarball, extracting it, and then running the following commands: [user@host]$ make [user@host]$ su Enter password: [root@host]# make install By default, PerlPanel will install into the /usr/local directory. If you want to change this, you can either edit the PREFIX variable in the Makefile, or add 'PREFIX=/path/to/directory' as an argument to make: [user@host]$ make PREFIX=/opt/perlpanel [user@host]$ su Enter password: [root@host]# make install PREFIX=/opt/perlpanel PerlPanel Packages ================== PerlPanel is also available in pre-built packages for a number of operating systems. RPM: These packages should work on any operating system that supports the RPM system, for example Red Hat, Fedora, Mandrake and SuSE. Simply download the NoArch RPM and run: [root@host]# rpm -Uvh PerlPanel-x.y.z-1.noarch.rpm If you want to build your own RPMs from the source RPM, simply download the PerlPanel-x.y.x.src.rpm file and run these commands: [root@host]# rpm -ivh PerlPanel-x.y.z.src.rpm [root@host]# cd /path/to/rpm/directory/SPECS [root@host]# rpmbuild -bb PerlPanel-x.y.z.spec --target=noarch [root@host]# rpm -Uvh ../RPMS/noarch/PerlPanel-x.y.z-1.noarch.rpm You can also build an RPM directly from the source tarball, using [root@host]# rpmbuild -tb PerlPanel-x.y.z.tar.gz Debian: Users of Debian GNU/Linux or its derivatives can install PerlPanel by running the command apt-get install perlpanel Gentoo: Users of the Gentoo operating system can find ebuilds via the project website. -- $Id: INSTALL,v 1.10 2005/12/24 00:02:05 mcummings Exp $ PerlPanel-0.9.1+cvs20051225/doc/0000755000175000017500000000000010353532407013334 5ustar hehePerlPanel-0.9.1+cvs20051225/doc/ExampleApplet-1.00.tar.gz0000755000175000017500000001065510125536431017610 0ustar heheOVAZXYDJlkYrEPIH @C2IFB3(bA( *k.v,oAUqmX׆廓+} sι[&Q(AѷNY,#ە,#:`\ & 3t}3>'5FR$S|BOIA`WP}@M`rPOj7f[A1?4ZCӘPNgg}K/0PUI_&,XNg2؆9` Uh;&:Յ0min &3YL0J)Vr9न@-0H08] Q@)Z(P9JDWJ-FTPb 'X(J5HR1I*4 1 Nɚ^X4 TA&A@&B8 Od .C 4C*pI=\%R1|ɨPE=GTCAJ}MrhX'BgVTȠ9:-5hPʂX 0B?r0' Ũ ;8O!u4#|?@r4OԁBMiA[Ծ4z}Q[{ہ3f3|_/sy'UUń-!b8z5[)׊r뢤_r.#]Lq (OhyqzGYAȉT[ߣO[c- _;NʫJ=y=(< fOPV9u "(Ьq[PK~OᮩwiϜ;Wi(lZ-\)"lG [G\UWVs.V⠜m\}aƢ~1GTUUaRbݽӺ8s8},,:4`C7Wx;ghl)8\(r!zʫW)*ei5r#bc{FgUwo9(- mGZ~akN9P}`lQ7޾}+*16M2'ds2goM$>ZlF<ںkWA~aΟߖԢS`TWs߯`\՝7=1~=ɩ;TS"ܚ[MhKTxz{ՓMO>tڑ9;lԁ%}ꥧ&,0򪍇]W 2^9ũMc^8'H7QY g*s~haf)1'ڵ]J6~w3&QK6L;dBlːE$k)H5LF9jcr܍垵x2wmw^)o%䮊ˉqfJ8>5 SzBz̗͂ <)mi29+'똞B_䓸8:Ke'Kn^QY־[. B)[/^8pcv-:%Xc~Ğt)xÐGo:5fiy1§vϭa麼#U? t-[nؼlӦMƏn9oOe{[릋2ޚ'I({jc=>dDٳ}_^t|v%V9bW1Z~Ģ{A/3TE%sRx{ҧ.rl֌uSG^On!cu^^IVkoۇrRͼЭ}g,Ҟ[{tnݿog}tCϫs;~a؅u<+N~mq7HߵtJ~_2ťoT&E2L.& ~ݱ+}ɯtEzAUOTHyH<6A dFRGhKя<ݴWN|1ﴒuF*IRy%s!iUQ}n/LSIA&8jZ8KST6gX>{package} = shift; bless($self, $self->{package}); return $self; } # build the widget: sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new('Click Me!'); $self->widget->signal_connect( 'clicked', sub { PerlPanel::alert( 'Hello World!' ); } ); $self->widget->show_all; } # return the widget; sub widget { return $_[0]->{widget}; } # return the expand (1 or 0) for packing: sub expand { return 0; } # return the fill (1 or 0) for packing: sub fill { return 0; } # return 'start' or 'end': sub end { return 'start'; } sub get_default_config { my $hashref = { name => 'value', 'foo' => 'bar', 'list' => [1, 2, 3, 4, 5], }; return $hashref; } 1; =head1 INTRODUCTION It is very easy to write applets for the PerlPanel. Applets are simple Perl objects, and are allowed to do anything that a normal Gtk2-Perl program might do. The package name for the applet must be of the form PerlPanel::Applet::AppletName and should have the filename AppletName.pm In order to work properly with the PerlPanel, they need to have an interface the PerlPanel can understand. When it loads a module, PerlPanel will create a new instance of the applet. It will then call various methods of the object in order to work out what to do with it. These methods are explained below. =head1 APPLET TYPES Since Version 0.7.0, PerlPanel has supported two applet types: I and I. I applets are just like applets developed for older versions of PerlPanel - if more than one instance of the applet was on the panel, then those instances would all use the same set of configuration data. I applets are different. A multi applet can appear several times on the panel, and each instance can have its own configuration settings. =head2 CREATING A MULTI APPLET The first thing you have to do is create a package variable called C<$MULTI>: package PerlPanel::Applet::FooBar; use vars qw($MULTI); $MULTI = 1; The value of C<$MULTI> must be a true value (1 is the simplest). When PerlPanel loads the applet, it checks the value of this variable and if it's true, then it supplies an B argument to the applet constructor. See below for details. Finally, when you are querying for a configuration hashref, you must supply the ID mentioned above in your call to C. See below for more details. =head1 REQUIRED METHODS $applet->new The constructor. The arguments supplied to the constructor vary, depending on whether the applet has been defined as a I applet or not. If the C<$MULTI> variable has not been set, then C<@_> will look like this: @_ = ($package); where C<$package> is a scalar containing the package name of the applet, eg C. If the C<$MULTI> variable is true, then C<@_> will look like this: @_ = ($package, $id); where C<$id> is a scalar containing the ID of the instance. You must store this ID and use it when you request config data. $applet->configure This stage is intended for the loading of config data, creation of widgets, etc. $applet->widget This method should return the Gtk widget that is to be displayed on the panel. It can be any kind of Gtk widget apart from a window. $applet->expand $applet->fill The panel uses a horizontal packing box to contain the applet widgets. These two methods return integer values for the 'expand' and 'fill' arguments to C. $applet->get_default_config This method returns a reference to a hash containing the default configuration data. This data is imported into the user's config file and is saved to disk and can then be modified by the user as needed. It is only called once - the first time the applet is loaded, after which the panel will use the data from the user's config file. If this methods returns C then the panel will assume there is no configuration data. NB: The C function is now deprecated and does not need to be used in new applets. =head1 HISTORICAL NOTE The following sections describe the variables and functions that PerlPanel provides that make applet writing easier. Prior to version 0.4.0, the functions below were accessed using the form $PerlPanel::OBJECT_REF->function_name As of version 0.4.0, the syntax is PerlPanel::function_name Compatibility with the old syntax was removed in version 0.7.0. =head1 USEFUL VARIABLES You can access the following variables in your code that give you access to the internal guts of the panel: $PerlPanel::OBJECT_REF This is a reference to the main panel object. A number of methods are available for your use, they're explained below. @PerlPanel::APPLET_DIRS This contains directory paths which PerlPanel will use to search for applets. It will at least contain C<$PREFIX/lib/perlpanel/PerlPanel/Applet> and C<$HOME/.perlpanel/applets>. =head1 USEFUL FUNCTIONS PerlPanel::get_config($appletname, [$id]) This function returns a reference containing the configuration data for the applet. The structure of the data will be that defined by the C function. If you supply the second C<$id> argument, then the function will return the appropriate config data for the instance of the applet defined by C<$id>. PerlPanel::tips() This returns a C object ready for use. In versions prior to 0.4.0, this was accessed using C<$PerlPanel::TOOLTIPS_REF>. PerlPanel::icon() This returns a GdkPixbuf object containing the PerlPanel icon. You should use this pixbuf to set the icon for any windows you create, eg: $dialog->set_icon(PerlPanel::icon); You don't need to resize the pixbuf, this is done when the application (a window manager, or task list) requires it. PerlPanel::icon_size() The size of icons on the panel, in pixels. You should use this to scale things so that everything fits nicely together. PerlPanel::screen_width PerlPanel::screen_height These two methods return the width and height (in pixels) of the default display. PerlPanel attempts to work this out if the system's Gtk+ is recent enough (ie later than 2.2.0), otherwise it will take them from the output of the C program. PerlPanel::position This returns the panel's physical position on-screen, either C<'top'> or C<'bottom'>. This is useful for when you want to show popup menus from your applets (for an example, see the BBMenu applet), and need to know the position of the panel. PerlPanel::save_config This tells the panel to save its configuration data to the resource file. PerlPanel::shutdown This tells the panel to save its config file to disk and exit. PerlPanel::request_string($message, $callback) This is a clone of the request_string method from the Gnome libs, so that PerlPanel isn't dependent on Gnome being installed. It prompts the user for a string using C<$message>, and executes C<$callback> when the user presses 'Ok' or hits the Enter key. The callback's C<$_[0]> will contain the supplied string. PerlPanel::request_password($message, $callback) As above, except the entry widget will not show the entered characters. PerlPanel::question($message, $ok_callback, $cancel_callback) This prompts the user to answer a Yes/No type question. C<$ok_callback> is executed when the user hits 'Ok'. Working out what happens when the user hits 'Cancel' is left as an exercise for the reader. PerlPanel::error($message, $ok_callback) This pops up a dialog with an error icon and the given message. C<$ok_callback> is executed if the user hits the 'Ok' button. PerlPanel::warning($message, $ok_callback) This pops up a dialog with a warning icon (less severe than an error) and the given message. C<$ok_callback> is executed if the user hits the 'Ok' button. PerlPanel::notify($message, $ok_callback) This pops up a dialog with a information icon and the given message. C<$ok_callback> is executed if the user hits the 'Ok' button. PerlPanel::get_widget_position($widget) This returns two numbers corresponding to the position on-screen of the top-left corner of $widget. This means that C<$widget> must be visible on screen. PerlPanel::get_mouse_pointer This returns two numbers corresponding to the position on-screen of the mouse pointer. PerlPanel::exec_wait($cmd, $callback) This function allows you to execute a command and wait for it to finish, without interrupting the Gtk main loop, and without inducing unneeded CPU load with a custom C loop. The command contained in C<$cmd> is opened as a filehandle - so calling applications which detach from STDOUT are not recommended. C creates a Glib handler and waits for C from the handle. Then it executes the function in C<$callback>. This function exists mainly because the 'IconBar' applet needs a way to wait for the desktop entry editor to close. PerlPanel::load_glade($name); This returns a C object. PerlPanel scans two directories looking for a file named C<$name.glade>: $HOME/.local/share/perlpanel/glade $PREFIX/share/perlpanel/glade or returns undef if it can't find anything. This is a keyboard-plastic saving utility only, and doesn't do anything else. PerlPanel::has_application_menu Returns a true value if an application launcher menu (BBMenu for example) is present in the user's applet list. PerlPanel::has_action_menu Returns a true value if an ActionMenu applet is in the user's applet list. PerlPanel::has_pager Returns a true value if an Pager applet is in the user's applet list. PerlPanel::lookup_icon($icon); This is a convenience function that wraps Gtk2::IconTheme. The C<$icon> argument is the name of a program or similar. This function will return a filename or C if unsuccessful. PerlPanel::remove_applet($appletname, $id); This method is only useful to multi applets. It tells PerlPanel to remove the C<$id> instance of the C<$appletname> applet from the panel. This is useful for when you want to provide a "remove" option in a context menu. PerlPanel::launch($command, $notification); This command provides a wrapper to the C function, with additional support for the Startup Notification specification. When C<$notification> is defined, then the user is given visible feedback that the application is being launched. Once the application has started (and identified itself to the panel), or a certain period of time has elapsed, the feedback is cancelled. =head1 INTERNATIONALISATION SUPPORT PerlPanel has support for foreign languages, using the C module. PerlPanel provides a special function for retrieving a translation of a string: $translated = _($original, %params); C<$original> is the original, presumably English, string. Any occurances of the keys of C<%params> are replaced with their values, for example: $translated = _( "there are {number} {type} {object}", number => 6, type => 'red', object => 'apples' ); Applet authors are encouraged to wrap all the strings they use in their applets in C<_()>. =head1 WRITING MENU APPLETS PerlPanel provides an easy-to-use base menu class for creating menu applets. Consult L for more information. =head1 MANAGING TIMEOUTS The use of Glib timeouts (as described in L) requires careful consideration for PerlPanel. Applet objects and widgets may be created and destroyed many times during the lifetime of the PerlPanel process. If these applets make use of a timeout, and that timeout is not properly managed, then over time a large amount of CPU time may be used up by timeouts that were created by applets that are no longer in use. PerlPanel has a system to track timeouts created by applets, and to remove them when the panel is reloaded, or when a particular applet is removed from the panel. Instead of using Cadd($msec, $callback)> to set up your applet, use the following function: $id = PerlPanel::add_timeout($msec, $callback); The arguments and return values for this function are identical to those of Cadd()>. When the panel is reloaded, all the applets are removed and new ones are created, so the panel will automatically clean up these timeouts. When you want to cancel a timeout, use this function: PerlPanel::remove_timeout($id); When the code in C<$callback> is executed, it will receive a B to a scalar containing the ID as the first member of C<@_>. So if you want to cancel the timeout from within the callback, you can call write like this: PerlPanel::remove_timeout(${shift()}); =head1 PACKAGING YOUR APPLET To create an applet package that a user can install without root access, you need to create a gzipped tar archive, with the name C, that has the following layout: / /applet.info /applets /applets/AppletName.pm /share /share/icons /share/icons/hicolor /share/icons/hicolor/48x48 /share/icons/hicolor/48x48/apps /share/icons/hicolor/48x48/apps/perlpanel-applet-appletname.png /share/icons/hicolor/48x48/apps/perlpanel-applet-appletname-action-specific-icon.png /share/perlpanel /share/perlpanel/glade /share/perlpanel/glade/appletname.glade The C file should contain a single line of the form: AppletName:A short description of what your applet does.:Category This line is appended to the user's applet.registry, so they see a descriptive entry in the Add Applet dialog. The first field must match the C part of the tarball's name. The C<$Version> part of the file name should contain only digits and periods. Valid version strings include: C<1.00> (Perl style), C<1.0.0> (Kernel style), and so on. The .pm file which contains your applet should go into C. The installer will look for a file called C, where C is taken from the C part of the tarball's name. PerlPanel will place this file into C<$HOME/.perlpanel/applets>. The files inside the C subdirectory are installed into C<$HOME/.local/share>. This is a directory defined by the Freedesktop.org base directory specification as the place in which user specific data files should be stored. You can use this subdirectory to install Glade files (which can be accessed using C - see above), your applet's icon, and any supporting icons you may need. Using this path means that calls to C will work out the same as if the icons were in C<$PREFIX/share/icons>, and can also be themed. For example, if your applet controls a media player, and you want to include icons for the Previous, Forward, Play and Pause buttons, you can include these icons like this: /share/icons/hicolor/48x48/apps/perlpanel-applet-mediaplayer-previous.png /share/icons/hicolor/48x48/apps/perlpanel-applet-mediaplayer-next.png /share/icons/hicolor/48x48/apps/perlpanel-applet-mediaplayer-play.png /share/icons/hicolor/48x48/apps/perlpanel-applet-mediaplayer-pause.png /share/icons/hicolor/48x48/apps/perlpanel-applet-mediaplayer-stop.png And then in your applet code, you can retrieve these icons by using this: my $pbf = PerlPanel::lookup_icon('mediaplayer-previous', PerlPanel::icon_size); =head1 FURTHER CONSIDERATIONS Please try to keep the external dependencies of your applet to a minimum. Remember that your applet may get installed on systems that have a very different set of applications installed on them. And never, I hard-code paths to files you depend on. For example, this is very bad: my $executable = '/usr/bin/executable'; If the user doesn't have the C program, they may install it from source, in which case it will probably end up in C, and your applet will break for no reason. A much better solution is to do this: chomp(my $executable = `which executable 2>/dev/null`); if (!-x $executable) { PerlPanel::warning(_('Cannot find the {program} program!', program => 'executable')); } This will allow C to be anywhere in the user's path, and will alert the user if there was a problem. Another area where this can cause problems is the use of external shared files, such as graphics and icons. Wherever possible, package shared files in your tarball as shown in L. =head1 AUTHOR Gavin Brown Egavin.brown@uk.comE. =cut PerlPanel-0.9.1+cvs20051225/doc/perlpanel-item-edit.pod0000644000175000017500000000157110014416612017676 0ustar hehe=pod =for comment $Id: perlpanel-item-edit.pod,v 1.1 2004/02/17 13:56:26 jodrell Exp $ =head1 Name perlpanel-item-edit - a .desktop file editor for PerlPanel. =head1 Usage perlpanel-item-edit [FILE] =head1 Description perlpanel-item-edit provides a simple dialog for editing .desktop launcher files. These files contain information that can be used by desktop components to run programs. For more information, see the Freedesktop.org specification for the .desktop file format. =head1 See Also =over =item * L =item * http://www.freedesktop.org/ =back =head1 Copyright Copyright (c) 2004 Gavin Brown. perlpanel-item-edit is part of PerlPanel. PerlPanel is free software, you can use it and/or redistribute it under the terms of the GNU General Public License. See the COPYING file for more information =head1 Author Gavin Brown Egavin.brown@uk.comE. PerlPanel-0.9.1+cvs20051225/doc/perlpanel-run-dialog.pod0000644000175000017500000000141310014416612020051 0ustar hehe=pod =for comment $Id: perlpanel-run-dialog.pod,v 1.1 2004/02/17 13:56:26 jodrell Exp $ =head1 Name perlpanel-run-dialog - a .desktop file editor for PerlPanel. =head1 Usage perlpanel-run-dialog =head1 Description perlpanel-run-dialog provides a simple pop-up window for running programs. It is very closely modelled on the "Run Application" dialog provided by GNOME. =head1 See Also =over =item * L =item * http://www.freedesktop.org/ =back =head1 Copyright Copyright (c) 2004 Gavin Brown. perlpanel-run-dialog is part of PerlPanel. PerlPanel is free software, you can use it and/or redistribute it under the terms of the GNU General Public License. See the COPYING file for more information =head1 Author Gavin Brown Egavin.brown@uk.comE. PerlPanel-0.9.1+cvs20051225/doc/perlpanel.pod0000644000175000017500000002626210227501516016027 0ustar hehe=pod =for comment $Id: perlpanel.pod,v 1.31 2005/04/14 14:50:54 jodrell Exp $ =head1 Introduction PerlPanel draws a small taskbar on your screen to display some useful widgets like a programs menu, some shortcut icons, a clock and so on. It's similar to the Windows Taskbar, the Gnome Panel, and KDE's Kicker. However, those programs are designed to be tightly integrated into the environment they are part of. For example, Kicker's not much use without KDE. This kind of flies in the face of the Unix tradition of having lots of small, simple programs that don't depend on each other. Such is the price of user-friendliness. So users of minimalist window managers miss out on the useful bits of panel programs because they won't, or can't, run a heavy desktop environment on their systems. This is where PerlPanel comes in. It is a panel program much in the vein of the Gnome Panel and Kicker, but is completely independent of any particular environment. So you can use it with Blackbox, for example, or WindowMaker. =head1 Running PerlPanel Running PerlPanel is as simple as typing C into your terminal. However you might wish to add this to your C<.xinitrc> file or any other scripts that start when your X session begins. To run PerlPanel with a configuration file other than the default, you can specify a file as an argument, for example: perlpanel ~/.perlpanelrc-2 This allows you to run more than one panel at a time. =head1 Configuring PerlPanel All configuration is done in the resource file, located in C<$HOME/.perlpanelrc>. This is an XML file and so it should be fairly easy to edit as you need. However most parts of it can be changed using the Configurator applet. =head1 Applets The PerlPanel is really just a container for components called applets. If you've used Gnome or KDE you should be familiar with applets - they're small widgets that perform a particular task. PerlPanel comes with a number of useful applets that are enabled by default. They are explained in brief below. =head2 Installing Third Party applets A number of people have written applets for PerlPanel which aren't part of the main PerlPanel package. These applets can be downloaded and installed very easily. To install an applet, you can simply drag the file onto the panel. Or you can use the "Install Applet..." item in the "Add To Panel" submenu of the Action Menu, or the "Install Applet" button on the "Add Applet" dialog of the Configurator. Each of these will display a dialog that will prompt you for the filename of the applet to be installed. Then you can add the Applet to your panel. =head2 The 'ActionMenu' Applet This applet provides a launcher menu containing the standard "action" items. If you don't want to run another menu applet but want access to action menus, use this applet. =head2 The 'BatteryMonitor' Applet The LoadMonitor applet shows the current charge on your laptop's battery. You can click on the widget and bring up a dialog to change the update interval. By default, this is 100ms. =head2 The 'BBMenu' Applet The BBMenu applet is a program launcher menu, like the Windows Start Menu. It can understand any Blackbox-compatible menu file, and will look for them on your system. It tries the following locations, in this order: $HOME/.perlpanel/menu $HOME/.blackbox/menu $HOME/.fluxbox/menu $HOME/.waimea/menu /usr/local/share/blackbox/menu /usr/share/blackbox/menu /usr/local/share/fluxbox/menu /usr/share/fluxbox/menu /usr/local/share/waimea/menu /usr/share/waimea/menu The BBMenu isn't (yet) clever enough to recognise submenus that contain special Blackbox commands, so you might find that there are empty submenus and extra separators in the menu. If you copy your menu file into C<$HOME/.perlpanel> and remove the Blackbox-specific elements, PerlPanel will automatically detect it and use it instead. BBMenu will attempt to find an icon file for each entry in the menu. It does this by searching in common directories for a .png file that matches the program name. For example, if your menu has an entry for the c program, BBMenu will look for a file called I. If you want to specify an icon to use for a program, you can do so by placing a copy of the image (or a symbolic link to it) in C<$HOME/.perlpanel/icon-files>. =head2 The 'Clock' Applet The Clock applet shows the current time in a text form. Clicking on the applet will bring up a dialog with a calender for this month, and a page that lets you change the format used to render the time. The format used is that of the POSIX C function. Consult the L manpage for an explanation of the formatting characters. =head2 The 'Commander' Applet This applet pops up a dialog box with an entry for a command to run. =head2 The 'Configurator' Applet Clicking on the Configurator icon brings up a dialog that you can use to change various config settings. When you click the OK button the panel will reload. The Panel tab contains various positioning and padding options for the panel itself. You can add, remove and re-order applets on the panel from the 'Applets' tab. =head2 The 'CPUTemp' Applet This applet displays the reported temperature of your computer's CPU. You need to have a supported motherboard, and the C program installed. The temperature can be displayed in Celsius, Fahrenheit or Kelvin. =head2 The 'DriveManager' Applet This applet lets you control removable storage media. When you click on the applet you will be shown a menu that lets you mount, unmount and eject any removable media that is attached to your computer. =head2 The 'GnomeMenu Applet This applet gives you access to the standard Gnome applications menu. By default, this applet reads the menu information from the C Gnome-VFS URI. However you can change this URI to any that Gnome-VFS understands. Edit the C attribute of the applet's configuration. =head2 The 'Launcher' Applet A Launcher applet shows a clickable button on the panel. When you click the button, the chosen program is run. Right-click to edit the settings for the launcher. =head2 The 'LoadMonitor' Applet The LoadMonitor applet shows the current CPU load on your system, as a percentage. You can click on the widget and bring up a dialog to change the update interval. By default, this is 100ms. =head2 The 'Lock' Applet This icon locks the screen so that others cannot access your files and programs while you are away from the keyboard. You must enter your password to unlock the screen. This applet requires that you have the XScreenSaver program installed. =head2 The 'NautilusBookmarks' Applet This applet provides an easy way to launch your bookmarked locations in the Nautilus file browser. =head2 The 'NotificationArea' Applet The Notification Area applet displays icons from various applications to indicate activity in the application. For example, a mail client might place an icon in the applet to denote unread mail. =head2 The 'OpenBoxMenu' Applet This OpenBox menu applet shows your OpenBox root menu on the panel. B the OpenBoxMenu applet is not finished, and you may experience problems. Use with caution. =head2 The 'Pager' Applet The Pager allows you to switch between virtual desktops, and drag programs between desktops. =head2 The 'PanelPet' Applet The PanelPet applet shows an animation of a fish in a bowl. You can use any file you like. By default, PanelPet uses an animation from GNOME's Fish applet. Right-click on the applet to configure it. =head2 The 'RecentFiles' Applet Click on this icon brings up a menu containing files you've recently opened. When you select the file from the menu, it will be launched in the default program for that file type. =head2 The 'RunMe' Applet This applet places a small combo box on the panel. When you type a command into the entry and press enter, the command will be run. =head2 The 'Separator' Applet This applet provides a way of placing some physical space between other applets. It adds a vertical separating line with five pixels of space on either side. =head2 The 'SetiAtHome' Applet This applet displays the total current number of work units completed for your Seti@Home account, and the progress on the current one. If you click on the applet you will be shown a configuration dialog allowing you to enter your account details. You can also check progress on a remote host using SSH - you may wish to register your SSH RSA/DSA key on the remote host so that you're not prompted for a password every time. =head2 The 'ShellManager' Applet This applet gives you a quick and simple way to launch remote shells - you can easily add shortcuts to your most frequently visited hosts, and open connections to them from the list. Clicking on the applet brings up a menu with list of accounts, and entries for adding and editing accounts. By default, the ShellManager will invoke SSH using the C program. If you want to change this, edit the C attribute of the applet's configuration. =head2 The 'ShowDesktop' Applet This applet provides a button that minimises/restores all the applications that are visible, so you can see your desktop. =head2 The 'Spacer' Applet The spacer applet creates a flexible space in the panel, expanding out to fill all the unused space. =head2 The 'Tasklist' Applet The Tasklist shows you all the programs currently visible on your desktop. You can click on the entries for each program to raise them to the top of the stack. You can right-click on them to bring up a context menu for maximising, minimising, shading and so on. =head2 The 'Trash' Applet This applet makes it easy to delete files and folders. Just drag an icon onto the applet widget and it will be moved to the Trash folder. =head2 The 'Volume' Applet The Volume applet lets you control the volume of your computer's speakers. Clicking on the button shows a popup window with a slider - as you move the slider, the volume will change. =head2 The 'Webcam' Applet This applet loads an image from a website and displays it on your panel. If you click on the image you can see it full-size. If you right-click on the image you can configure the applet URL and update interval. =head2 The 'WiFiMonitor' Applet This applet shows the signal strength of you wireless connection. =head2 The 'WindowMenu' Applet This applet is an alternative to the Tasklist applet, which can sometimes use up a lot of space on the panel. This applet presents a simple icon button. Clicking on this button pops up a menu listing all the current windows. Click on a window's entry to raise it. =head2 The 'XMMS' Applet This applet lets you control the XMMS media player. You need the XMMS-Perl libraries in order to use this applet. This applet will also control the Beep Media Player. =head1 Writing Applets Applets are very easy to write - they're simple Perl scripts. If you want to learn how to write applets, consult L. =head1 See Also =over =item * L =item * L =item * L =item * L =back =head1 Copyright Copyright (c) 2004 Gavin Brown. PerlPanel is free software, you can use it and/or redistribute it under the terms of the GNU General Public License. See the COPYING file for more information =head1 Author Gavin Brown Gavin Brown Egavin.brown@uk.comE. =cut PerlPanel-0.9.1+cvs20051225/lib/0000755000175000017500000000000010353532407013335 5ustar hehePerlPanel-0.9.1+cvs20051225/lib/PerlPanel/0000755000175000017500000000000010353532410015211 5ustar hehePerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/0000755000175000017500000000000010353532411016437 5ustar hehePerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/About.pm0000644000175000017500000000612410171230551020050 0ustar hehe# $Id: About.pm,v 1.21 2005/01/12 14:17:13 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::About; use vars qw($BORDER $MARKUP_FMT); use strict; our $BORDER = 10; our $MARKUP_FMT = <<"END"; %s %s %s %s %s %s %s %s END sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{widget}->set_relief('none'); $self->{widget}->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('about', PerlPanel::icon_size))); $self->{widget}->signal_connect('clicked', sub { $self->about }); PerlPanel::tips->set_tip($self->{widget}, _('About {name}', name => $PerlPanel::NAME)); $self->widget->show_all; return 1; } sub about { my $self = shift; my $lead_authors = join(", ", @PerlPanel::LEAD_AUTHORS); $lead_authors =~ s//>/g; my $co_authors = join(", ", @PerlPanel::CO_AUTHORS); $co_authors =~ s//>/g; my $markup = sprintf( $MARKUP_FMT, $PerlPanel::DESCRIPTION, _('Author:'), $lead_authors, _('With:'), $co_authors, $PerlPanel::URL, $PerlPanel::LICENSE, _( 'Using Perl v{perl_ver}, Gtk+ v{gtk_ver} and Gtk2.pm v{gtk2_ver}.', perl_ver => sprintf('%vd', $^V), gtk_ver => sprintf('%d.%d.%d', Gtk2->get_version_info), gtk2_ver => $Gtk2::VERSION, ), ); my $glade = PerlPanel::load_glade('about'); $glade->get_widget('version_label')->set_text($PerlPanel::VERSION eq '@VERSION@' ? _('Sandbox Mode') : _('Version {version}', version => $PerlPanel::VERSION)); $glade->get_widget('about_image')->set_from_pixbuf(PerlPanel::icon); $glade->get_widget('about_label')->set_markup($markup); $glade->get_widget('about_dialog')->signal_connect('response', sub { $glade->get_widget('about_dialog')->destroy }); $glade->get_widget('about_dialog')->set_position('center'); $glade->get_widget('about_dialog')->set_icon(PerlPanel::icon); $glade->get_widget('about_dialog')->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/ActionMenu.pm0000644000175000017500000000401110122545165021037 0ustar hehe# $Id: ActionMenu.pm,v 1.8 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::ActionMenu; use base 'PerlPanel::MenuBase'; use strict; sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{menu} = Gtk2::Menu->new; $self->{config} = PerlPanel::get_config('ActionMenu'); $self->widget->set_relief($self->{config}->{relief} eq 'true' ? 'half' : 'none'); $self->{pixbuf} = PerlPanel::get_applet_pbf('ActionMenu', PerlPanel::icon_size); $self->{icon} = Gtk2::Image->new_from_pixbuf($self->{pixbuf}); if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } PerlPanel::tips->set_tip($self->{widget}, _('Action Menu')); $self->create_menu; $self->widget->signal_connect('clicked', sub { $self->popup }); $self->widget->show_all; return 1; } sub create_menu { my $self = shift; $self->add_control_items; return 1; } sub get_default_config { return { label => _('Actions'), relief => 'false', }; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/BBMenu.pm0000644000175000017500000001617010142452321020107 0ustar hehe# $Id: BBMenu.pm,v 1.63 2004/11/04 16:12:01 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::BBMenu; use base 'PerlPanel::MenuBase'; use vars qw(@menufiles); use File::Basename qw(basename); use strict; our @menufiles = ( '%s/.perlpanel/menu', '%s/.blackbox/menu', '%s/.fluxbox/menu', '%s/.openbox/menu', '%s/.waimea/menu', '/usr/local/share/blackbox/menu', '/usr/share/blackbox/menu', '/usr/local/share/fluxbox/menu', '/usr/share/fluxbox/menu', '/usr/local/share/waimea/menu', '/usr/share/waimea/menu', ); sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{config} = PerlPanel::get_config('BBMenu'); $self->widget->set_relief($self->{config}->{relief} eq 'true' ? 'half' : 'none'); $self->{pixbuf} = PerlPanel::get_applet_pbf('BBMenu', PerlPanel::icon_size); if ($self->{config}->{arrow} eq 'true') { my $fixed = Gtk2::Fixed->new; $fixed->put(Gtk2::Image->new_from_pixbuf($self->{pixbuf}), 0, 0); my $arrow = Gtk2::Gdk::Pixbuf->new_from_file(sprintf('%s/share/%s/menu-arrow-%s.png', $PerlPanel::PREFIX, lc($PerlPanel::NAME), lc(PerlPanel::position))); my $x = ($self->{pixbuf}->get_width - $arrow->get_width); my $y = (PerlPanel::position eq 'bottom' ? 0 : ($self->{pixbuf}->get_height - $arrow->get_height)); $fixed->put(Gtk2::Image->new_from_pixbuf($arrow), $x, $y); $self->{icon} = Gtk2::Alignment->new(0.5, 0.5, 0, 0); $self->{icon}->add($fixed); } else { $self->{icon} = Gtk2::Image->new_from_pixbuf($self->{pixbuf}); } if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } PerlPanel::tips->set_tip($self->{widget}, _('Menu')); $self->create_menu; $self->widget->signal_connect('clicked', sub { $self->popup }); PerlPanel::add_timeout(1000, sub { my $age = $self->file_age; my $time = $self->{mtime}; $self->create_menu if ($age > $time); return 1; }); $self->widget->show_all; return 1; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; $self->{mtime} = $self->file_age; $self->parse_menufile; if ($self->{config}->{show_control_items} eq 'true' && !PerlPanel::has_action_menu) { $self->add_control_items( menu_data => $self->get_menu_data, ); } return 1; } # does nothing: sub get_menu_data { return []; } sub parse_menufile { my $self = shift; foreach my $menufile (@menufiles) { $menufile = sprintf($menufile, $ENV{HOME}); if (-e $menufile) { $self->{file} = $menufile; last; } } if (defined($self->{file})) { open(MENU, $self->{file}) or PerlPanel::error(_('Error opening {file}: {error}', file => $self->{file}, error => $!)) and return undef; $self->{menudata} = []; while () { s/^\s*//g; s/\s*$//g; next if (/^#/ || /^$/); push(@{$self->{menudata}}, $_); } close(MENU); # $current_menu is a reference to the current menu or submenu - it starts out as the toplevel menu: my $current_menu; if ($self->{config}->{apps_in_submenu} eq 'true' && !PerlPanel::has_action_menu) { my $item = $self->menu_item( $self->{config}->{submenu_label}, $self->get_icon($self->{config}->{submenu_label}, 1), ); my $menu = Gtk2::Menu->new; $item->set_submenu($menu); $self->menu->append($item); $current_menu = $menu; } else { $current_menu = $self->menu; } for (my $line_no = 0 ; $line_no < scalar(@{$self->{menudata}}) ; $line_no++) { my $line = @{$self->{menudata}}[$line_no]; my ($cmd, $name, $val); if ($line =~ /\[(.+?)\]/) { $cmd = lc($1); } if ($line =~ /\((.+?)\)/) { $name = $1; } if ($line =~ /\{(.+?)\}/) { $val = $1; } if (!defined($cmd)) { PerlPanel::error(_('Parse error on line {line} of {file}', line => $line_no, file => $self->{file})); } else { if ($cmd eq 'submenu') { # we're in a submenu, so create an item, and a new menu, make the menu # a submenu of the item, and make $current_menu a reference to it: my $item = $self->menu_item($name, $self->get_icon($name, 1), undef); $current_menu->append($item); $current_menu = Gtk2::Menu->new; $item->set_submenu($current_menu); } elsif ($cmd eq 'end') { # we're leaving a submenu, so we first find out the # item the submenu's attached to, and then find out # what menu the item belongs to. this is our new # $current_menu: my $parent_item = $current_menu->get_attach_widget; my $new_current_menu = $parent_item->get_parent if (defined($parent_item)); # now we can remove the menu from the parent if it doesn't contain anything # useful: my $children = 0; map { $children++ if (ref($_) ne 'Gtk2::SeparatorMenuItem') } $current_menu->get_children; if ($children < 1) { if (defined($parent_item)) { $parent_item->remove_submenu; $parent_item->get_parent->remove($parent_item); } } $current_menu = $new_current_menu; } elsif ($cmd eq 'nop') { $current_menu->append(Gtk2::SeparatorMenuItem->new); } elsif ($cmd eq 'exec') { $current_menu->append($self->menu_item( $name, $self->get_icon($val, 0), sub { system("$val &") } )); } } } return 1; } } sub get_default_config { return { show_control_items => 'true', label => _('Menu'), relief => 'false', apps_in_submenu => 'false', submenu_label => _('Applications'), }; } sub get_icon { my ($self, $executable, $is_submenu_parent) = @_; $executable = basename($executable); $executable =~ s/\..+$//g; $executable =~ s/\s/-/g if ($is_submenu_parent == 1); my $file = $self->detect_icon($executable); if (-e $file) { return $file; } else { if ($is_submenu_parent == 1) { my $icon = PerlPanel::lookup_icon('gnome-fs-directory'); return (-f $icon ? $icon : 'gtk-open'); } else { return 'gtk-execute'; } } } sub detect_icon { my ($self, $executable) = @_; return undef if ($executable eq ''); my $program = lc(basename($executable)); ($program, undef) = split(/\s/, $program, 2); my $file = sprintf('%s/.%s/icon-files/%s.png', $ENV{HOME}, lc($PerlPanel::NAME), $program); if (-e $file) { return $file; } else { return PerlPanel::lookup_icon($executable); } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/BatteryMonitor.pm0000644000175000017500000002230310223551472021763 0ustar hehe# $Id: BatteryMonitor.pm,v 1.13 2005/04/02 17:15:38 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2005 Eric Andreychek # # ACPI support originally written by Waider (www.waider.ie), modified to work # with PerlPanel/BatteryMonitor by Eric Andreychek. # package PerlPanel::Applet::BatteryMonitor; use strict; $PerlPanel::Applet::BatteryMonitor::VERSION = 0.05; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::EventBox->new; $self->{label}= Gtk2::Label->new(); $self->{widget}->add($self->{label}); $self->{config} = PerlPanel::get_config('BatteryMonitor'); PerlPanel::tips->set_tip($self->{widget}, 'Battery Monitor'); $self->widget->show_all; $self->update; PerlPanel::add_timeout($self->{config}->{interval}, sub { $self->update }); return 1; } sub update { my $self = shift; my ($ac_status, $charge) = (-1); if (-r "/proc/pmu/info") { my $bat_count; ($bat_count, $ac_status) = parse_pmu_info(); for my $cur_bat_num (0 .. ($bat_count-1)) { my $bat_status = parse_pmu_bat($cur_bat_num); my $bat_charge = $bat_status->{charge} / $bat_status->{max_charge} * 100; $bat_charge = int ($bat_charge + 0.5); $charge = ($charge || 0) + $bat_charge/$bat_count; } $charge .= "%"; } else { eval { my $apm = Sys::Apm_ACPI->new; if (defined($apm)) { $ac_status = $apm->ac_status; $charge = $apm->charge; } else { return undef; } }; } my $status_symbol; if ( $ac_status == 1 ) { $status_symbol = " | "; PerlPanel::tips->set_tip($self->{widget}, _('The system is running on AC power')); } elsif ( $ac_status == 0 ) { $status_symbol = " * "; PerlPanel::tips->set_tip($self->{widget}, _('The system is running on battery power')); } elsif ( $ac_status == 2 ) { $status_symbol = " - "; PerlPanel::tips->set_tip($self->{widget}, _('The system is running on backup power')); } else { $status_symbol = " ? "; PerlPanel::tips->set_tip($self->{widget}, _('Unknown status')); } $self->{label}->set_text($charge . $status_symbol ); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return { interval => 1000 } } 1; sub parse_pmu_info { my ($bat_num, $on_ac); open (INFO, "<", "/proc/pmu/info") || die ("Couldn't open /proc/pmu/info: $!"); while () { $bat_num = $1 if (/^Battery count\s*:\s*(\d+)\s*$/i); $on_ac = $1 if (/^AC Power\s*:\s*(\d+)\s*$/i); } close INFO; $on_ac = "?" if not defined($on_ac); return ($bat_num || 0, $on_ac); } sub parse_pmu_bat { my $bat_num = shift; my $file = "/proc/pmu/battery_$bat_num"; my %status; open (FILE, "<", $file) || die ("Couldn't open $file: $!"); while () { if (/^(\S+)\s*:\s*(.+)$/) { $status{lc($1)} = $2; } } close FILE; return \%status; } package Sys::Apm_ACPI; # Sys::Apm - Perl extension for APM # Copyright 2003 by Raoul Zwart # This library is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. use strict; use warnings; our $VERSION = 0.20; sub new { my $class = shift; my $self = {}; bless ( $self, $class ); $self->fetch; return $self; } sub fetch { my $self = shift; my $a; if ( open( APM, "/proc/apm" )) { $a = ; close( APM ); } elsif ( -d "/proc/acpi/battery" ) { $a = acpi_to_apm(); } chomp($a); unless ($a) { warn "Error: APM or ACPI support not detected"; return 0; } $self->parse($a); } sub parse { my $self = shift; my $str = shift; $self->{data}=[split / /, $str]; } sub driver_version { my $self = shift; $self->{data}[0]; } sub bios_version { my $self = shift; $self->{data}[1]; } sub ac_status { my $self = shift; hex($self->{data}[3]); } sub battery_status { my $self = shift; hex($self->{data}[4]); } sub charge { my $self = shift; substr($self->{data}[6],-1,1) eq "%" ? $self->{data}[6] : $self->{data}[6] . '%'; } sub remaining { my $self = shift; $self->{data}[7]; } sub units { my $self = shift; $self->{data}[8]; } # This sub written by Waider # Waider 26/09/2000 # http://www.waider.ie/hacks/workshop/perl/Monitor/APM.pm sub acpi_to_apm { # Convert the info in /proc/acpi/battery/* into an APM string. Loses info, but screw that! my $apm; my ( $drvver, $biosver, $flags, $acstat, $btstat, $btflag, $btpercent, $bttime, $bttime_unit ) = ( "1.4", "1.1", 0, 0, 0, 0, -1, -1, "?" ); # here's the output for a battery: # present: yes # design capacity: 54719 mWh # last full capacity: 53913 mWh # battery technology: rechargeable # design voltage: 14399 mV # design capacity warning: 5391 mWh # design capacity low: 3235 mWh # capacity granularity 1: 2 mWh # capacity granularity 2: 2 mWh # model number: Primary # serial number: 1FA50011 # battery type: LIon # OEM info: COMPAQ # present: yes # capacity state: ok # charging state: unknown # present rate: 0 mW # remaining capacity: 52530 mWh # present voltage: 16875 mV # # when not on mains, charging state => discharging and present rate => rate of discharge # get the ac adapter state for acstat if ( opendir( DIR, "/proc/acpi/ac_adapter" )) { for my $dir ( grep !/^\.\.?$/, readdir( DIR )) { if ( open( ACPI, "/proc/acpi/ac_adapter/$dir/state" )) { my $state = ; $acstat |= 0x1 if $state =~ /on-line/; close( ACPI ); } else { warn "Error: Failed to get AC $dir state: $!\n"; return 0; } } } opendir( DIR, "/proc/acpi/battery" ); my @batteries = grep !/^\.\.?$/, readdir( DIR ); closedir( DIR ); my ( $max, $lev, $low, $crit, $rate ) = ( 0, 0, 0, 0, 0 ); for my $battery ( @batteries ) { open( BATT, "/proc/acpi/battery/$battery/info" ); my @bits = ; next unless $bits[0] =~ /yes/; close( BATT ); open( BATT, "/proc/acpi/battery/$battery/state" ); push @bits, ; close( BATT ); for my $bits ( @bits, @bits ) { # stupidity! chomp( $bits ); my ( $field, $value ) = split( /:\s*/, $bits, 2 ); $value =~ s/\s+$//; if ( $field eq "last full capacity" ) { #"design capacity" ) { ( $max ) = $value =~ /(\d+)/; } elsif ( $field eq "remaining capacity" ) { ( $lev ) = $value =~ /(\d+)/; } elsif ( $field eq "design capacity warning" ) { ( $low ) = $value =~ /(\d+)/; } elsif ( $field eq "design capacity low" ) { ( $crit ) = $value =~ /(\d+)/; } elsif ( $field eq "charging state" ) { if ( $value eq "unknown" ) { $btstat = 0xff; $btflag = 0xff; } elsif ( $value eq "discharging" ) { if ( $lev ) { if ( $lev > $low ) { $btflag = 0x00; $btstat |= 0x1; } elsif ( $lev > $crit ) { $btflag = 0x01; $btstat |= 0x2; } else { $btflag = 0x02; $btstat |= 0x4; } } } elsif ( $value eq "charging" ) { $btstat = 0x03; $btflag |= 0x8; $acstat |= 0x1; # xxx check power_resource } elsif ( $value eq "charged" ) { $btstat = 0x00; $btflag |= 0x1; $acstat |= 0x1; } } elsif ( $field eq "present rate" ) { ( $rate ) = $value =~ /(\d+)/; } } last; # XXX } $btpercent = sprintf( "%02d", $lev / $max * 100 ) if ( $max ); if ( $rate ) { $bttime_unit = "min"; $bttime = ( $lev - $crit ) / $rate * 60; } $apm = sprintf( "%s %s 0x%02x 0x%02x 0x%02x 0x%02x %s %d %s", $drvver, $biosver, $flags, $acstat, $btstat, $btflag, $btpercent, $bttime, $bttime_unit ); return $apm; } 1; __END__ PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/CPUTemp.pm0000644000175000017500000001164210167217744020272 0ustar hehe# $Id: CPUTemp.pm,v 1.6 2005/01/06 11:24:20 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # This applet is based on code written by Harm Reck . # package PerlPanel::Applet::CPUTemp; use Gtk2::Helper; use Gtk2::SimpleList; use vars qw(%SYMBOLS $DELL_FILE); use strict; $ENV{PATH} = "$ENV{PATH}:/sbin:/usr/sbin:/usr/local/sbin"; our %SYMBOLS = ( fahrenheit => '°F', celsius => '°C', kelvin => 'K', ); # this /proc file is where dell systems keep the CPU temperature: our $DELL_FILE = '/proc/i8k'; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('CPUTemp'); $self->{label} = Gtk2::Label->new; $self->label->set_use_markup(1); $self->{box} = Gtk2::HBox->new; $self->{box}->pack_start(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('CPUTemp', PerlPanel::icon_size)), 0, 0, 0); $self->{box}->pack_start($self->label, 0, 0, 0); $self->{widget} = Gtk2::Button->new; $self->widget->signal_connect('clicked', sub { $self->dialog }); $self->widget->set_relief('none'); $self->widget->add($self->{box}); $self->widget->show_all; $self->update; PerlPanel::add_timeout($self->{config}->{interval}, sub { $self->update ; return 1 }); return 1; } sub update { my $self = shift; if (-r $DELL_FILE) { return $self->update_dell; } else { return $self->update_mbmon; } } sub update_mbmon { my $self = shift; $self->{command} = 'mbmon -c 1'.($self->{config}->{units} eq 'fahrenheit' ? ' -f' : ''); if (!open(COMMAND, "$self->{command}|")) { $self->label->set_markup('ERR'); PerlPanel::tips->set_tip($self->widget, _("Error opening '{command}': {error}", command => $self->{command}, error => $!)); return undef; } else { my ($tag, $buffer); $tag = Gtk2::Helper->add_watch(fileno(COMMAND), 'in', sub { if (eof(COMMAND)) { close(COMMAND); Gtk2::Helper->remove_watch($tag); my $line = (split(/[\r\n]/, $buffer))[1]; my $temp = (split(/\s+/, $line))[2]; $temp =~ s/[^0-9\.]//g; if ($self->{config}->{units} eq 'kelvin') { $temp += 273.15; } PerlPanel::tips->set_tip($self->widget, _('CPU Temperature')); $self->label->set_markup(sprintf('%d%s', $temp, $SYMBOLS{$self->{config}->{units}})); } else { $buffer .= ; } }); return 1; } } sub update_dell { my $self = shift; open(DELLINFO, $DELL_FILE); my $temp = (split(/\s+/, ))[3]; close(DELLINFO); if ($self->{config}->{units} eq 'fahrenheit') { $temp = $self->celsius_to_fahrenheit($temp); } elsif ($self->{config}->{units} eq 'kelvin') { $temp = $self->celsius_to_kelvin($temp); } PerlPanel::tips->set_tip($self->widget, _('CPU Temperature')); $self->label->set_markup(sprintf('%d%s', $temp, $SYMBOLS{$self->{config}->{units}})); return 1; } sub dialog { my $self = shift; $self->widget->set_sensitive(0); my $list = Gtk2::SimpleList->new('units' => 'text'); @{$list->{data}} = sort keys %SYMBOLS; my $glade = PerlPanel::load_glade('cputemp'); $glade->get_widget('units')->set_model($list->get_model); my $i = 0; foreach my $unit (@{$list->{data}}) { if (@{$unit}[0] eq $self->{config}->{units}) { $glade->get_widget('units')->set_active($i); } $i++; } $glade->get_widget('config_dialog')->set_icon(PerlPanel::icon); my $callback = sub { my ($dialog, $response) = @_; if ($response eq 'ok') { $self->{config}->{units} = @{@{$list->{data}}[$glade->get_widget('units')->get_active]}[0]; PerlPanel::save_config; $self->update; } $self->widget->set_sensitive(1); $dialog->destroy; }; $glade->get_widget('config_dialog')->signal_connect('response', $callback); $glade->get_widget('config_dialog')->signal_connect('delete_event', $callback); return 1; } sub label { return $_[0]->{label}; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return { interval => 10*1000, units => 'celsius', }; } sub celsius_to_fahrenheit { my ($self, $celsius) = @_; return ($celsius * 1.8) + 32; } sub celsius_to_kelvin { my ($self, $celsius) = @_; return $celsius + 273.15; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Clock.pm0000644000175000017500000003576610227475252020062 0ustar hehe# $Id: Clock.pm,v 1.35 2005/04/14 14:14:02 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Clock; use Gtk2::SimpleList; use POSIX; use vars qw($MULTI %REMINDERS $REMINDER_DIALOG_FMT); use Date::Manip; use strict; # # Please note that month values are zero-indexed throughout this applet, # since all Perl's various date manipulation functions use zero-indexed # months, and so does GtkCalendar. # our %REMINDERS = ( -1 => _('No reminder'), 5 => _('{mins} minutes before', mins => 5), 15 => _('{mins} minutes before', mins => 15), 30 => _('{mins} minutes before', mins => 30), 60 => _('1 hour before'), 120 => _('2 hours before'), ); our $REMINDER_DIALOG_FMT = "%s\n\n%s"; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Clock'); $self->{label} = Gtk2::Label->new; $self->{widget} = Gtk2::ToggleButton->new; $self->widget->set_relief('none'); $self->widget->add($self->{label}); $self->make_calendar; $self->widget->signal_connect('clicked', sub { if ($self->widget->get_active) { $self->show_calendar; $self->show_events($self->{calendar}->get_date); } else { $self->hide_calendar; } }); $self->update; $self->{glade}->get_widget('reminder_dialog')->signal_connect('response', sub { $self->{glade}->get_widget('reminder_dialog')->hide; return 1; }); $self->{glade}->get_widget('reminder_dialog')->signal_connect('delete_event', sub { $self->{glade}->get_widget('reminder_dialog')->hide; return 1; }); $self->{glade}->get_widget('reminder_dialog')->set_icon(PerlPanel::icon); PerlPanel::add_timeout(1000, sub { $self->update }); $self->widget->show_all; return 1; } sub update { my $self = shift; $self->{label}->set_text(' '.my_strftime($self->{config}{format}, time()).' '); PerlPanel::tips->set_tip($self->widget, my_strftime($self->{config}{date_format}, time())); $self->show_reminders; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return { format => '%H:%M', date_format => '%c', } } sub make_calendar { my $self = shift; $self->{glade} = PerlPanel::load_glade('calendar'); $self->{window} = $self->{glade}->get_widget('calendar_window'); $self->{window}->set_icon(PerlPanel::icon); $self->{window}->set_title(_('Calendar')); $self->{window}->set_skip_pager_hint(1); $self->{window}->set_skip_taskbar_hint(1); $self->{window}->set_decorated(undef); $self->{window}->set_type_hint('dialog'); $self->{calendar} = $self->{glade}->get_widget('calendar'); $self->{calendar}->signal_connect('day-selected', sub { my ($year, $month, $day) = $self->{calendar}->get_date; $self->{glade}->get_widget('date_label')->set_markup(sprintf(_('Events for %04d-%02d-%02d:'), $year, $month+1, $day)); $self->show_events($year, $month, $day); }); my ($day, $month, $year) = (localtime())[3,4,5]; $year+= 1900; $self->{calendar}->select_month($month, $year); $self->{calendar}->select_day($day); $self->show_events($year, $month, $day); $self->{events} = Gtk2::SimpleList->new_from_treeview( $self->{glade}->get_widget('event_list'), 'date' => 'text', 'text' => 'text', ); $self->{events}->signal_connect('button_press_event', sub { if ($_[1]->type eq '2button-press' && $_[1]->button == 1) { $self->edit_event; } }); $self->{events}->get_selection->signal_connect('changed', sub { if ($_[0]->count_selected_rows == 0) { $self->{glade}->get_widget('delete_buttonbox')->hide; } else { $self->{glade}->get_widget('delete_buttonbox')->show; } }); $self->{glade}->get_widget('add_button')->signal_connect('clicked', sub { $self->add_event_dialog }); $self->{glade}->get_widget('delete_button')->signal_connect('clicked', sub { $self->delete_event_dialog }); $self->{window}->child->show; $self->{window}->realize; $self->{model} = Gtk2::ListStore->new(qw(Glib::String Glib::String)); foreach my $mins (sort { $a <=> $b } keys %REMINDERS) { $self->{model}->set($self->{model}->append, 0, $mins, 1, $REMINDERS{$mins}); } $self->{combo} = Gtk2::ComboBox->new; $self->{combo}->visible(1); $self->{glade}->get_widget('reminder_combo_placeholder')->add($self->{combo}); $self->{combo}->set_model($self->{model}); my $renderer = Gtk2::CellRendererText->new; $self->{combo}->pack_start($renderer, undef); $self->{combo}->set_attributes($renderer, 'text' => 1); $self->{edit_combo} = Gtk2::ComboBox->new; $self->{edit_combo}->visible(1); $self->{glade}->get_widget('edit_event_reminder_combo_placeholder')->add($self->{edit_combo}); $self->{edit_combo}->set_model($self->{model}); my $renderer = Gtk2::CellRendererText->new; $self->{edit_combo}->pack_start($renderer, undef); $self->{edit_combo}->set_attributes($renderer, 'text' => 1); $self->{glade}->get_widget('edit_event_dialog')->signal_connect('delete_event', sub { $self->{glade}->get_widget('edit_event_dialog')->hide; return 1; }); return 1; } sub show_calendar { my $self = shift; my ($x, $y); my $x0 = (PerlPanel::get_widget_position($self->widget))[0]; if ($x0 + $self->{window}->allocation->width > PerlPanel::screen_width) { $x = PerlPanel::screen_width() - $self->{window}->allocation->width; } else { $x = $x0; } if (PerlPanel::position eq 'top') { $y = PerlPanel::panel->allocation->height; } else { $y = PerlPanel::screen_height() - $self->{window}->allocation->height - PerlPanel::panel->allocation->height; } $self->{window}->move($x, $y); $self->{window}->show; return 1; } sub hide_calendar { my $self = shift; $self->{window}->hide; } sub show_events { my ($self, $year, $month, $day) = @_; my @events = $self->get_events_for($year, $month, $day); @{$self->{events}->{data}} = (); foreach my $event (@events) { push(@{$self->{events}->{data}}, [ $event->{time}, $event->{notes} ]); } return 1; } sub get_events_for { my ($self, $year, $month, $day) = @_; my $date = sprintf("%04d-%02d-%02d", $year, $month, $day); my @events; # munge the reference: if (ref($self->{config}->{events}) ne 'ARRAY') { $self->{config}->{events} = [ $self->{config}->{events} ]; } return sort { $a->{time} cmp $b->{time} } grep { $_->{date} eq $date } @{$self->{config}->{events}}; } sub add_event_dialog { my $self = shift; my ($year, $month, $day) = $self->{calendar}->get_date; my ($mins, $hours) = (localtime())[1,2]; $self->{add_event_date} = sprintf('%04d-%02d-%02d', $year, $month, $day); $self->{glade}->get_widget('add_dialog_date_label')->set_markup(sprintf(_('Add Event for %04d-%02d-%02d:'), $year, $month+1, $day)); $self->{glade}->get_widget('hour_spin')->set_value($hours); $self->{glade}->get_widget('min_spin')->set_value($mins); $self->{glade}->get_widget('notes_entry')->get_buffer->set_text(''); $self->{combo}->set_active(0); $self->{glade}->get_widget('add_event_dialog')->set_position('center'); $self->{glade}->get_widget('add_event_dialog')->set_modal(1); $self->{glade}->get_widget('add_event_dialog')->show_all; $self->setup_add_event_dialog_callbacks; return 1; } sub setup_add_event_dialog_callbacks { my $self = shift; if (!defined($self->{callback_ids}->{add_dialog_delete_event})) { $self->{callback_ids}->{add_dialog_delete_event} = $self->{glade}->get_widget('add_event_dialog')->signal_connect( 'delete_event', sub { $self->{glade}->get_widget('add_event_dialog')->hide; return 1; } ); } if (!defined($self->{callback_ids}->{add_dialog_response})) { $self->{callback_ids}->{add_dialog_response} = $self->{glade}->get_widget('add_event_dialog')->signal_connect( 'response', sub { if ($_[1] eq 'ok') { my $hours = $self->{glade}->get_widget('hour_spin')->get_value; my $mins = $self->{glade}->get_widget('min_spin')->get_value; my $notes = $self->{glade}->get_widget('notes_entry')->get_buffer->get_text( $self->{glade}->get_widget('notes_entry')->get_buffer->get_start_iter, $self->{glade}->get_widget('notes_entry')->get_buffer->get_end_iter, 1, ); my $reminder = $self->{combo}->get_model->get($self->{combo}->get_active_iter, 0); if (ref($self->{config}->{events}) ne 'ARRAY') { $self->{config}->{events} = [ $self->{config}->{events} ]; } push(@{$self->{config}->{events}}, { date => $self->{add_event_date}, time => sprintf('%02d:%02d', $hours, $mins), reminder => $reminder, notes => $notes, }); $self->show_events($self->{calendar}->get_date); PerlPanel::save_config; } $self->{glade}->get_widget('add_event_dialog')->hide; return 1; } ); } return 1; } sub delete_event_dialog { my $self = shift; my ($year, $month, $day) = $self->{calendar}->get_date; my $selected_event_index = ($self->{events}->get_selected_indices)[0]; my ($event_time, $event_text) = @{$self->{events}->{data}->[$selected_event_index]}; my ($event_hour, $event_minute) = split /:/, $event_time; $self->{deleted_event} = {date => sprintf ('%04d-%02d-%02d', $year, $month, $day), # Date time => sprintf ('%02d:%02d', $event_hour, $event_minute), # Time notes => $event_text}; # Note $self->{glade}->get_widget('delete_dialog_title')->set_markup(sprintf(_('Delete Event for %02d:%02d %04d-%02d-%02d:'), $event_hour, $event_minute, $year, $month+1, $day)); $self->{glade}->get_widget('delete_dialog_text')->set_label($event_text); $self->{glade}->get_widget('delete_event_dialog')->set_position('center'); $self->{glade}->get_widget('delete_event_dialog')->set_modal(1); $self->{glade}->get_widget('delete_event_dialog')->show; $self->setup_delete_event_dialog_callbacks; return 1; } sub setup_delete_event_dialog_callbacks { my $self = shift; if (!defined($self->{callback_ids}->{delete_dialog_delete_event})) { $self->{callback_ids}->{delete_dialog_delete_event} = $self->{glade}->get_widget('delete_event_dialog')->signal_connect( 'delete_event', sub { $self->{glade}->get_widget('delete_event_dialog')->hide; return 1; } ); } if (!defined($self->{callback_ids}->{delete_dialog_response})) { $self->{callback_ids}->{delete_dialog_response} = $self->{glade}->get_widget('delete_event_dialog')->signal_connect( 'response', sub { if ($_[1] eq 'ok') { my $deleted_index = 0; for (@{$self->{config}->{events}}) { if ($_->{date} eq $self->{deleted_event}->{date} && $_->{time} eq $self->{deleted_event}->{time} && $_->{notes} eq $self->{deleted_event}->{notes}) { splice(@{$self->{config}->{events}}, $deleted_index, 1); delete($self->{deleted_event}); } $deleted_index += 1; } $self->show_events($self->{calendar}->get_date); PerlPanel::save_config; } $self->{glade}->get_widget('delete_event_dialog')->hide; return 1; } ); } return 1; } sub show_reminders { my $self = shift; my $now = time(); foreach my $event (grep { $_->{reminder} > 0 && defined($_->{date}) } @{$self->{config}->{events}}) { my $timestamp = $self->get_timestamp_for($event); if ($event->{reminder} > 0 && ($timestamp - ($event->{reminder} * 60)) < $now && $event->{reminded} ne 'true' && $event->{notes} ne '') { $event->{reminded} = 'true'; PerlPanel::save_config(); $self->reminder($event); } } return 1; } sub reminder { my ($self, $event) = @_; $self->{glade}->get_widget('reminder_dialog_label')->set_markup(sprintf( $REMINDER_DIALOG_FMT, _('Event Reminder'), _( 'You asked to be reminded about the following event, which takes place on {date}:', date => my_strftime(_('%Y-%m-%d at %H:%M'), $self->get_timestamp_for($event)) ), )); $self->{glade}->get_widget('reminder_dialog_notes_label')->set_text($event->{notes}); $self->{glade}->get_widget('reminder_dialog')->show; return 1; } sub get_timestamp_for { my ($self, $event) = @_; my ($year, $month, $day) = split(/-/, $event->{date}, 3); my ($hour, $min) = split(/:/, $event->{time}, 2); return strtotime(sprintf('%04d-%02d-%02d %02d:%02d:00', $year, $month+1, $day, $hour, $min)); } sub my_strftime { my ($fmt, $timestamp) = @_; return POSIX::strftime($fmt, localtime($timestamp)); } sub strtotime { my $str = shift; return UnixDate(ParseDate($str), '%s'); } sub edit_event { my $self = shift; my ($idx) = $self->{events}->get_selected_indices; my @events = $self->get_events_for($self->{calendar}->get_date); my $event = $events[$idx]; if (defined($self->{edit_handler_id})) { $self->{glade}->get_widget('edit_event_dialog')->signal_handler_disconnect($self->{edit_handler_id}); } $self->{edit_handler_id} = $self->{glade}->get_widget('edit_event_dialog')->signal_connect('response', sub { if ($_[1] eq 'ok') { $event->{time} = sprintf( '%02d:%02d', $self->{glade}->get_widget('edit_event_hour')->get_value_as_int, $self->{glade}->get_widget('edit_event_minute')->get_value_as_int, ); $event->{notes} = $self->{glade}->get_widget('edit_event_notes')->get_buffer->get_text( $self->{glade}->get_widget('edit_event_notes')->get_buffer->get_start_iter, $self->{glade}->get_widget('edit_event_notes')->get_buffer->get_end_iter, undef, ); $event->{reminder} = $self->{edit_combo}->get_model->get($self->{edit_combo}->get_active_iter, 0); $event->{reminded} = 'false'; PerlPanel::save_config; $self->show_events($self->{calendar}->get_date); } $self->{glade}->get_widget('edit_event_dialog')->hide; $self->{glade}->get_widget('edit_event_dialog')->signal_handler_disconnect($self->{edit_handler_id}); undef($self->{edit_handler_id}); }); my ($hour, $min) = split(/:/, $event->{time}, 2); $self->{glade}->get_widget('edit_event_hour')->set_value($hour); $self->{glade}->get_widget('edit_event_minute')->set_value($min); $self->{glade}->get_widget('edit_event_notes')->get_buffer->set_text($event->{notes}); my $i = 0; foreach my $reminder (sort { $a <=> $b } keys %REMINDERS) { if ($reminder == $event->{reminder}) { $self->{edit_combo}->set_active($i); last; } else { $i++; } } $self->{glade}->get_widget('edit_event_dialog')->set_position('center'); $self->{glade}->get_widget('edit_event_dialog')->show; return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Commander.pm0000644000175000017500000001347510126532767020730 0ustar hehe# $Id: Commander.pm,v 1.27 2004/09/29 13:17:43 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Commander; use File::Basename qw(basename); use vars qw($iconfile); use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my ($self, $opt) = @_; if ($opt ne 'no-widget') { $self->{widget} = Gtk2::Button->new; $self->widget->set_relief('none'); $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('commander', PerlPanel::icon_size))); $self->widget->signal_connect('clicked', sub { $self->run }); PerlPanel::tips->set_tip($self->widget, _('Run Command')); $self->widget->show_all; } our $iconfile = PerlPanel::get_applet_pbf_filename('commander'); $self->{store} = $self->create_store; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return undef; } sub run { my $self = shift; my @history = PerlPanel::get_run_history; my $default_pbf = Gtk2::Gdk::Pixbuf->new_from_file($iconfile); my $icon = Gtk2::Image->new_from_pixbuf($default_pbf); my $icon_alignment = Gtk2::Alignment->new(0.5, 0.5, 1, 1); $icon_alignment->add($icon); my $command_entry = Gtk2::Combo->new; $command_entry->disable_activate; $command_entry->set_popdown_strings('', @history); $command_entry->set_use_arrows(1); $command_entry->list->select_item(0); my $completion = Gtk2::EntryCompletion->new; $completion->set_model($self->{store}); $completion->set_text_column(0); $completion->set_minimum_key_length(2); $command_entry->entry->set_completion($completion); $command_entry->entry->signal_connect('changed', sub { my ($command, undef) = split(/\s/, $command_entry->entry->get_text, 2); if ($command eq '') { $icon->set_from_pixbuf($default_pbf); } else { my $icon_file = PerlPanel::lookup_icon(basename($command)); if (-e $icon_file) { my $new_pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($icon_file, $default_pbf->get_width, $default_pbf->get_height); $icon->set_from_pixbuf($new_pbf); } else { $icon->set_from_pixbuf($default_pbf); } } }); my $terminal_checkbutton = Gtk2::CheckButton->new(_('Run in terminal')); my $file_button = Gtk2::Button->new(_('Run with file...')); $file_button->signal_connect('clicked', sub { my $file_selection; if ('' ne (my $msg = Gtk2->check_version (2, 4, 0)) or $Gtk2::VERSION < 1.040) { $file_selection = Gtk2::FileSelection->new(_('Choose File')); } else { $file_selection = Gtk2::FileChooserDialog->new( _('Choose File'), undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); } $file_selection->signal_connect('response', sub { if ($_[1] eq 'ok') { my $file = $file_selection->get_filename; if ($file !~ /^([A-Za-z0-9\_\-\.])$/) { $file = "'$file'"; } $command_entry->entry->set_text($command_entry->entry->get_text . ' ' . $file); } $file_selection->destroy; }); $file_selection->run; return 1; }); my $hbox = Gtk2::HBox->new; $hbox->set_spacing(12); $hbox->pack_start($terminal_checkbutton, 1, 1, 0); $hbox->pack_start($file_button, 0, 0, 0); my $vbox = Gtk2::VBox->new; $vbox->set_spacing(6); $vbox->pack_start($command_entry, 0, 0, 0); $vbox->pack_start($hbox, 1, 1, 0); my $main_hbox = Gtk2::HBox->new; $main_hbox->set_border_width(5); $main_hbox->set_spacing(6); $main_hbox->pack_start($icon_alignment, 0, 0, 0); $main_hbox->pack_start($vbox, 1, 1, 0); my $dialog = Gtk2::Dialog->new; $dialog->set_title(_('Run Command')); $dialog->set_position('center'); $dialog->set_resizable(0); $dialog->set_border_width(5); $dialog->set_has_separator(0); $dialog->set_skip_pager_hint(1); $dialog->set_skip_taskbar_hint(1); $dialog->set_icon($icon->get_pixbuf); $dialog->add_buttons('gtk-cancel' => 'cancel', 'gtk-execute' => 'ok'); $dialog->action_area->set_layout('end'); $dialog->vbox->pack_start($main_hbox, 1, 1, 0); $dialog->signal_connect('response', sub { # wondering why we're doing an 'eq' for a int? because strings # evaluate to 0: if ($_[1] eq 'ok' || $_[1] eq 0) { my $command = $command_entry->entry->get_text; if ($terminal_checkbutton->get_active) { $command = 'xterm -e '.$command; } PerlPanel::append_run_history($command); chdir($ENV{HOME}); system("$command &"); } if (!defined($PerlPanel::OBJECT_REF)) { # we're not in a panel, so we can just quit: exit; } else { $dialog->destroy; } }); $command_entry->entry->signal_connect('activate', sub { $dialog->signal_emit('response', 'ok') }); $dialog->show_all; return 1; } sub create_store { my $self = shift; my $store = Gtk2::ListStore->new(Glib::String::); my %executables; foreach my $dir (split(/:/, $ENV{PATH})) { if (!opendir(DH, $dir)) { next; } else { my @files = grep { -x "$dir/$_" } grep { ! /^\.{1,2}$/ } readdir(DH); closedir(DH); map { $executables{$_}++ } @files; } } foreach my $program (sort keys %executables) { $store->set($store->append, 0, $program); } return $store; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Configurator.pm0000644000175000017500000002750410227312646021455 0ustar hehe# $Id: Configurator.pm,v 1.69 2005/04/13 21:56:54 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Configurator; use vars qw(%SETTINGS_MAP); use Gtk2::SimpleList; use strict; # # settings map - this maps widgets in the glade file to # values in the config. # # the keys are the ID of the widget in the glade file. # # the values are references to arrays of the form: # # [ # $reference_to_config, # $config_keyname, # $type, # @values, # ], # # where $type can be on of: enum, boolean, string, or integer. # # for enums, @values must contain the same entries as appear # in the option menu. our %SETTINGS_MAP = ( # # Tab #1 - global panel settings: # 'panel_position' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'position', 'enum', 'top', 'bottom', ], 'panel_size_spin' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'size', 'integer', ], 'panel_autohide' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'autohide', 'boolean', ], 'panel_expand' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'expand', 'boolean', ], 'use_struts' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'use_struts', 'boolean', ], # # Tab #2 - BBMenu settings # 'bbmenu_control_items' => [ PerlPanel::get_config('BBMenu'), 'show_control_items', 'boolean', ], 'bbmenu_submenu' => [ PerlPanel::get_config('BBMenu'), 'apps_in_submenu', 'boolean', ], # # Tab #2 - GNOME menu settings # 'gnome_menu_control_items' => [ PerlPanel::get_config('GnomeMenu'), 'show_control_items', 'boolean', ], 'gnome_menu_submenu' => [ PerlPanel::get_config('GnomeMenu'), 'apps_in_submenu', 'boolean', ], # # Tab #2 - OpenBox menu settings # 'obmenu_control_items' => [ PerlPanel::get_config('OpenBoxMenu'), 'show_control_items', 'boolean', ], 'obmenu_submenu' => [ PerlPanel::get_config('OpenBoxMenu'), 'apps_in_submenu', 'boolean', ], # # Tab 2 - Global menu settings # 'quit_button_checkbutton' => [ $PerlPanel::OBJECT_REF->{config}{panel}, 'show_quit_button', 'boolean', ], ); sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('configurator', PerlPanel::icon_size))); $self->widget->set_relief('none'); $self->widget->signal_connect('clicked', sub { $self->init }); PerlPanel::tips->set_tip($self->widget, 'Configure'); $self->widget->show_all; return 1; } sub init { my $self = shift; $self->build_ui; return 1; } sub build_ui { my $self = shift; $self->{app} = PerlPanel::load_glade('configurator'); $self->app->get_widget('panel_tab_image')->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size(PerlPanel::lookup_icon(sprintf('%s-panel', lc($PerlPanel::NAME))), 24, 24)); $self->app->get_widget('menu_tab_image')->set_from_pixbuf(PerlPanel::get_applet_pbf('bbmenu', 24)); $self->app->get_widget('applet_tab_image')->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size(PerlPanel::lookup_icon(sprintf('%s-applets', lc($PerlPanel::NAME))), 24, 24)); $self->setup_config_mapping; $self->setup_custom_settings; $self->app->get_widget('prefs_window')->set_icon(PerlPanel::icon); $self->app->get_widget('prefs_window')->signal_connect('response', sub { $self->app->get_widget('prefs_window')->hide_all; if ($_[1] eq 'ok') { $self->apply_custom_settings; $self->apply_settings; PerlPanel::save_config; PerlPanel::reload; } }); $self->app->get_widget('prefs_window')->show_all; return 1; } sub setup_config_mapping { my $self = shift; foreach my $widget_id (keys %SETTINGS_MAP) { my $widget = $self->app->get_widget($widget_id); my ($ref, $key, $type, @values) = @{$SETTINGS_MAP{$widget_id}}; if ($type eq 'string') { $widget->set_text($ref->{$key}); } elsif ($type eq 'boolean') { $widget->set_active($ref->{$key} eq 'true' ? 1 : undef); } elsif ($type eq 'enum') { my $i = 0; foreach my $value (@values) { if ($ref->{$key} eq $value) { $widget->set_history($i); } $i++; } } elsif ($type eq 'integer') { $widget->set_value($ref->{$key}); } else { die("unknown type '$type' for key '$key'"); } } return 1; } sub apply_settings { my $self = shift; foreach my $widget_id (keys %SETTINGS_MAP) { my $widget = $self->app->get_widget($widget_id); # if $widget is undef, it may have been destroyed previously: next unless (defined($widget)); my ($ref, $key, $type, @values) = @{$SETTINGS_MAP{$widget_id}}; if ($type eq 'string') { $ref->{$key} = $widget->get_text; } elsif ($type eq 'boolean') { $ref->{$key} = ($widget->get_active ? 'true' : 'false'); } elsif ($type eq 'enum') { $ref->{$key} = $widget->child->get_text; } elsif ($type eq 'integer') { $ref->{$key} = $widget->get_value_as_int; } else { die("unknown type '$type' for key '$key'"); } } return 1; } sub setup_custom_settings { my $self = shift; my @dirs = $PerlPanel::OBJECT_REF->{icon_theme}->get_search_path; my %themes = ( $PerlPanel::DEFAULT_THEME => 1, ); foreach my $dir (@dirs) { if (opendir(DIR, $dir)) { map { $themes{$_}++ if (-e "$dir/$_/index.theme") } readdir(DIR); closedir(DIR); } } $self->{icon_theme_list} = Gtk2::SimpleList->new('theme' => 'text'); $self->app->get_widget('icon_theme')->set_model($self->{icon_theme_list}->get_model); my @themes = sort(keys(%themes)); for (my $i = 0 ; $i < scalar(@themes) ; $i++) { push(@{$self->{icon_theme_list}->{data}}, $themes[$i]); if ($themes[$i] eq $PerlPanel::OBJECT_REF->{config}->{panel}->{icon_theme}) { $self->app->get_widget('icon_theme')->set_active($i); } } if (!PerlPanel::has_applet('BBMenu')) { $self->app->get_widget('bbmenu_prefs_label')->destroy; $self->app->get_widget('bbmenu_prefs_hbox')->destroy; $self->app->get_widget('bbmenu_prefs_spacer')->destroy; } if (!PerlPanel::has_applet('GnomeMenu')) { $self->app->get_widget('gnome_menu_prefs_label')->destroy; $self->app->get_widget('gnome_menu_prefs_hbox')->destroy; $self->app->get_widget('gnome_menu_prefs_spacer')->destroy; } if (!PerlPanel::has_applet('OpenBoxMenu')) { $self->app->get_widget('obmenu_prefs_label')->destroy; $self->app->get_widget('obmenu_prefs_hbox')->destroy; $self->app->get_widget('obmenu_prefs_spacer')->destroy; } $self->{applet_list} = Gtk2::SimpleList->new_from_treeview( $self->app->get_widget('applet_list'), 'Icon' => 'pixbuf', 'Name' => 'text', 'id' => 'text', ); $self->{applet_list}->get_column(2)->set_visible(0); foreach my $appletname (@{$PerlPanel::OBJECT_REF->{config}{applets}}) { my ($applet, $id) = split(/::/, $appletname, 2); my $pbf; $pbf = PerlPanel::get_applet_pbf($applet, 32); if ($applet eq 'Launcher' && $id ne '') { my $file = sprintf('%s/%s.desktop', $PerlPanel::Applet::Launcher::LAUNCHER_DIR, $id); if (-r $file) { my $entry = PerlPanel::DesktopEntry->new($file); if (-r $entry->Icon) { $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($entry->Icon, 32, 32); } } } push(@{$self->{applet_list}->{data}}, [$pbf, $applet, $id]); } $self->{applet_list}->set_reorderable(1); $self->app->get_widget('add_applet_button')->signal_connect('clicked', sub { $self->run_add_applet_dialog }); $self->app->get_widget('remove_applet_button')->signal_connect('clicked', sub { my (undef, $iter) = $self->{applet_list}->get_selection->get_selected; return undef unless (defined($iter)); my $idx = ($self->{applet_list}->get_model->get_path($iter)->get_indices)[0]; $self->{applet_list}->get_model->remove($iter); $self->{applet_list}->select($idx - 1) if ($idx > 0); }); $self->{add_applet_list} = Gtk2::SimpleList->new_from_treeview( $self->app->get_widget('applet_info_list'), 'Icon' => 'pixbuf', 'Name' => 'text', ); my $column = $self->{add_applet_list}->get_column(1); $column->set_spacing(12); my ($renderer) = $column->get_cell_renderers; $column->clear_attributes($renderer); $column->add_attribute($renderer, 'markup', 1); $self->load_applet_list; $self->app->get_widget('panel_expand')->signal_connect('toggled', sub { $self->app->get_widget('use_struts')->set_sensitive(!$self->app->get_widget('panel_expand')->get_active); }); $self->app->get_widget('use_struts')->set_sensitive(!$self->app->get_widget('panel_expand')->get_active); return 1; } sub get_applet_list { my $self = shift; my @files; @files = sort grep { $_ !~ /^_/ } keys %{$self->{registry}}; $self->{files} = \@files; return 1; } sub load_applet_list { my $self = shift; $self->{registry} = PerlPanel::load_appletregistry; $self->get_applet_list; @{$self->{add_applet_list}->{data}} = (); foreach my $file (@{$self->{files}}) { my ($appletname, undef) = split(/\./, $file, 2); push(@{$self->{add_applet_list}->{data}}, [ PerlPanel::get_applet_pbf($appletname), sprintf("%s\n%s", $appletname, ($self->{registry}{$appletname} ne '' ? $self->{registry}{$appletname} : _('No description available.'))), ]); } return 1; } sub run_add_applet_dialog { my $self = shift; $self->app->get_widget('add_dialog')->signal_connect('delete_event', sub { $self->app->get_widget('add_dialog')->hide_all; return 1; }); $self->app->get_widget('add_dialog')->signal_connect('response', sub { if ($_[1] eq 'ok') { my $seln = $self->{add_applet_list}->get_selection; return unless (defined($seln)); my ($blah, $iter) = $seln->get_selected; return undef unless (defined($iter)); my $idx = ($self->{add_applet_list}->get_model->get_path($iter)->get_indices)[0]; my ($appletname, undef) = split(/\./, $self->{files}[$idx], 2); push(@{$self->{applet_list}->{data}}, [PerlPanel::get_applet_pbf($appletname, 24), $appletname]); $seln->unselect_all; } $self->app->get_widget('add_dialog')->hide_all; }); $self->app->get_widget('install_button')->signal_connect('clicked', sub { PerlPanel::install_applet_dialog(sub { $self->load_applet_list }) }); $self->app->get_widget('add_dialog')->show_all; return 1; } sub apply_custom_settings { my $self = shift; my @applets; foreach my $rowref (@{$self->{applet_list}->{data}}) { if (@{$rowref}[2] ne '') { push(@applets, @{$rowref}[1].'::'.@{$rowref}[2]); } else { push(@applets, @{$rowref}[1]); } } @{$PerlPanel::OBJECT_REF->{config}{applets}} = @applets; if (!$self->app->get_widget('panel_autohide')->get_active && $PerlPanel::OBJECT_REF->{config}{panel}{autohide} eq 'true') { PerlPanel::panel->signal_handler_disconnect($PerlPanel::OBJECT_REF->{enter_connect_id}); PerlPanel::panel->signal_handler_disconnect($PerlPanel::OBJECT_REF->{leave_connect_id}); } $PerlPanel::OBJECT_REF->{config}->{panel}->{icon_theme} = @{@{$self->{icon_theme_list}->{data}}[$self->app->get_widget('icon_theme')->get_active]}[0]; return 1; } sub widget { return $_[0]->{widget}; } sub app { return $_[0]->{app}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/DriveManager.pm0000644000175000017500000002354510151654550021357 0ustar hehe# $Id: DriveManager.pm,v 1.9 2004/11/26 16:27:20 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::DriveManager; use vars qw($MULTI %TYPES %DEVICES %EJECTABLE $DEFAULT_POINT $DEFAULT_TYPE $MOUNT $UMOUNT $EJECT $NAUTILUS $FSTAB); use base 'PerlPanel::MenuBase'; use strict; our $MULTI = 1; our $DEFAULT_TYPE = 'drive'; our %TYPES = ( cdrom => _('CD/DVD ROM'), drive => _('Hard Disk'), flash => _('Flash or Smart Media Card'), ipod => _('iPod'), removable => _('Removable Drive (Floppy, Zip or Jaz)'), usb => _('USB Device (Camera, external HD)'), remote => _('Network Drive (SMB or NFS)'), ); our %EJECTABLE = ( cdrom => 1, removable => 1, ); our $DEFAULT_POINT = '/mnt/non-existent-mountpoint'; our $FSTAB = '/etc/fstab'; chomp(our $MOUNT = `which mount`); chomp(our $UMOUNT = `which umount`); chomp(our $EJECT = `which eject`); chomp(our $NAUTILUS = `which nautilus`); sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('DriveManager', $self->{id}); $self->{widget} = Gtk2::Button->new; $self->widget->set_relief('none'); $self->widget->signal_connect('clicked', sub { $self->clicked }); $self->widget->add(Gtk2::Image->new); $self->{config}->{type} = $DEFAULT_TYPE if ($TYPES{$self->{config}->{type}} eq ''); our %DEVICES = $self->get_devices; if (!-x $MOUNT) { PerlPanel::error(_("DriveManager cannot find the '{cmd}' program, please check your PATH", cmd => 'mount')); } elsif (!-x $UMOUNT) { PerlPanel::error(_("DriveManager cannot find the '{cmd}' program, please check your PATH", cmd => 'umount')); } elsif (!-x $EJECT) { PerlPanel::error(_("DriveManager cannot find the '{cmd}' program, please check your PATH", cmd => 'eject')); } elsif (!defined($DEVICES{$self->{config}->{point}}) && $self->{config}->{point} ne $DEFAULT_POINT) { PerlPanel::warning( _("Your system's {fstab} has changed, cannot determine device for {point}", fstab => $FSTAB, point => $self->{config}->{point}), sub { $self->config_dialog } ); } else { $self->init; $self->widget->show_all; } $self->{timeout} = PerlPanel::add_timeout(1000, sub { $self->update }); $self->update; $self->{type_model} = Gtk2::ListStore->new(qw(Gtk2::Gdk::Pixbuf Glib::String)); foreach my $type (sort keys %TYPES) { $self->{type_model}->set( $self->{type_model}->append, 0 => Gtk2::Gdk::Pixbuf->new_from_file_at_size( PerlPanel::lookup_icon(sprintf('%s-applet-drivemanager-%s', lc($PerlPanel::NAME), $type)), 16, 16, ), 1 => $TYPES{$type}, ); } return 1; } sub init { my $self = shift; $self->widget->child->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size( PerlPanel::lookup_icon(sprintf('%s-applet-drivemanager-%s', lc($PerlPanel::NAME), $self->{config}->{type})), PerlPanel::icon_size, PerlPanel::icon_size )); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return { point => $DEFAULT_POINT, type => $DEFAULT_TYPE, } } sub mounted { my $self = shift; if (!open(MOUNT, "$MOUNT|")) { PerlPanel::error(_("DriveManager could not execute '{mount}': {error}", mount => $MOUNT, error => $!)); } else { my $mounted = 0; while () { $mounted++ if (/on $self->{config}->{point}/); } close(MOUNT); return ($mounted > 0 ? 1 : undef); } } sub update { my $self = shift; if (!$self->configured) { PerlPanel::tips->set_tip($self->widget, _('Click to configure.')); } elsif ($self->mounted) { PerlPanel::tips->set_tip($self->widget, _('{device} is mounted', device => $self->{config}->{point})); } else { PerlPanel::tips->set_tip($self->widget, _('{device} is not mounted', device => $self->{config}->{point})); } return 1; } sub configured { my $self = shift; return ($self->{config}->{point} ne $DEFAULT_POINT); } sub clicked { my $self = shift; if ($self->configured) { $self->create_menu; $self->popup; } else { $self->config_dialog; } return 1; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; if ($self->mounted) { my $browse_item = $self->menu_item( _('Browse...'), 'gtk-open', sub { $self->browse }, ); $browse_item->set_sensitive(-x $NAUTILUS); $self->menu->append($browse_item); if (defined($EJECTABLE{$self->{config}->{type}})) { $self->menu->append($self->menu_item( _('Eject'), Gtk2::Gdk::Pixbuf->new_from_file_at_size( PerlPanel::lookup_icon(sprintf('%s-applet-drivemanager-eject', lc($PerlPanel::NAME))), PerlPanel::menu_icon_size, PerlPanel::menu_icon_size, ), sub { $self->unmount && $self->eject }, )); } else { $self->menu->append($self->menu_item( _('Unmount'), 'gtk-execute', sub { $self->unmount }, )); } } else { if (defined($EJECTABLE{$self->{config}->{type}})) { $self->menu->append($self->menu_item( _('Open Tray'), Gtk2::Gdk::Pixbuf->new_from_file_at_size( PerlPanel::lookup_icon(sprintf('%s-applet-drivemanager-eject', lc($PerlPanel::NAME))), PerlPanel::menu_icon_size, PerlPanel::menu_icon_size, ), sub { $self->eject }, )); $self->menu->append($self->menu_item( _('Close Tray'), Gtk2::Gdk::Pixbuf->new_from_file_at_size( PerlPanel::lookup_icon(sprintf('%s-applet-drivemanager-eject', lc($PerlPanel::NAME))), PerlPanel::menu_icon_size, PerlPanel::menu_icon_size, ), sub { $self->close }, )); } $self->menu->append($self->menu_item( _('Mount'), 'gtk-execute', sub { $self->mount }, )); } $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->menu->append($self->menu_item( _('Properties'), 'gtk-properties', sub { $self->config_dialog }, )); $self->menu->append($self->menu_item( _('Remove from panel'), 'gtk-remove', sub { PerlPanel::remove_timeout($self->{timeout}); PerlPanel::remove_applet('DriveManager', $self->{id}); }, )); return 1; } sub config_dialog { my $self = shift; my $point_combo = Gtk2::ComboBox->new_text; foreach my $point (sort(keys(%DEVICES))) { $point_combo->append_text($point); } my $type_combo = Gtk2::ComboBox->new; $type_combo->set_model($self->{type_model}); my $renderer = Gtk2::CellRendererPixbuf->new; $type_combo->pack_start($renderer, undef); $type_combo->set_attributes($renderer, 'pixbuf' => 0); my $renderer = Gtk2::CellRendererText->new; $type_combo->pack_start($renderer, undef); $type_combo->set_attributes($renderer, 'text' => 1); my $i = 0; foreach my $type (sort keys %TYPES) { if ($type eq $self->{config}->{type}) { $type_combo->set_active($i); last; } else { $i++; } } my $i = 0; foreach my $type (sort keys %DEVICES) { if ($type eq $self->{config}->{point}) { $point_combo->set_active($i); last; } else { $i++; } } my $glade = PerlPanel::load_glade('drivemanager'); $glade->get_widget('point_combo_placeholder')->pack_start($point_combo, 1, 1, 0); $glade->get_widget('type_combo_placeholder')->pack_start($type_combo, 1, 1, 0); $self->widget->set_sensitive(0); $glade->get_widget('config_dialog')->signal_connect('delete_event', sub { $self->widget->set_sensitive(1) }); $glade->get_widget('config_dialog')->signal_connect('response', sub { if ($_[1] eq 'ok') { $self->{config}->{point} = (sort(keys(%DEVICES)))[$point_combo->get_active]; $self->{config}->{type} = (sort(keys(%TYPES)))[$type_combo->get_active]; PerlPanel::save_config; $self->init; } $self->widget->set_sensitive(1); $glade->get_widget('config_dialog')->destroy; }); $glade->get_widget('config_dialog')->set_position('center'); $glade->get_widget('config_dialog')->set_icon(PerlPanel::icon); $glade->get_widget('config_dialog')->show_all; return 1; } sub mount { my $self = shift; return $self->wait_command(sprintf('%s "%s"', $MOUNT, $self->{config}->{point})); } sub unmount { my $self = shift; return $self->wait_command(sprintf('%s "%s"', $UMOUNT, $self->{config}->{point})); } sub eject { my $self = shift; return $self->wait_command(sprintf('%s "%s"', $EJECT, $DEVICES{$self->{config}->{point}})); } sub close { my $self = shift; return $self->wait_command(sprintf('%s -t "%s"', $EJECT, $DEVICES{$self->{config}->{point}})); } sub browse { my $self = shift; my $cmd = sprintf('%s --no-desktop "%s" &', $NAUTILUS, $self->{config}->{point}); system($cmd); return 1; } sub wait_command { my ($self, $cmd) = @_; my $panel = $PerlPanel::OBJECT_REF; $panel->panel->get_root_window->set_cursor($panel->{cursors}->{busy}); $self->widget->set_sensitive(undef); PerlPanel::exec_wait($cmd, sub { $self->widget->set_sensitive(1); $panel->panel->get_root_window->set_cursor($panel->{cursors}->{normal}); if ($? > 0) { PerlPanel::warning(_("Error: command '{cmd}' failed", cmd => $cmd)); } }); return ($? > 0 ? undef : 1); } sub get_devices { my $self = shift; my %DEVICES; if (!open(FSTAB, $FSTAB)) { PerlPanel::error(_("Cannot read '{fstab}': {error}", fstab => $FSTAB, error => $!)); } else { while () { chomp; my ($device, $point, undef, $opts, undef) = split(/[\t\s]+/, $_, 5); if ($opts =~ /user|owner|pamconsole|managed/) { $DEVICES{$point} = $device; } } close(FSTAB); return %DEVICES; } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/GnomeMenu.pm0000644000175000017500000001737410174456365020721 0ustar hehe# $Id: GnomeMenu.pm,v 1.25 2005/01/22 14:02:29 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::GnomeMenu; use base 'PerlPanel::MenuBase'; use PerlPanel::DesktopEntry; use Gnome2::VFS; use vars qw($SYMLINK_DEPTH); use strict; $PerlPanel::DesktopEntry::SILENT = 1; $SYMLINK_DEPTH = 3; sub configure { my $self = shift; Gnome2::VFS->init; $self->{widget} = Gtk2::Button->new; $self->{config} = PerlPanel::get_config('GnomeMenu'); $self->{pixbuf} = PerlPanel::get_applet_pbf('gnomemenu', PerlPanel::icon_size); if ($self->{config}->{arrow} eq 'true') { my $fixed = Gtk2::Fixed->new; $fixed->put(Gtk2::Image->new_from_pixbuf($self->{pixbuf}), 0, 0); my $arrow = Gtk2::Gdk::Pixbuf->new_from_file(sprintf('%s/share/%s/menu-arrow-%s.png', $PerlPanel::PREFIX, lc($PerlPanel::NAME), lc(PerlPanel::position))); my $x = ($self->{pixbuf}->get_width - $arrow->get_width); my $y = (PerlPanel::position eq 'bottom' ? 0 : ($self->{pixbuf}->get_height - $arrow->get_height)); $fixed->put(Gtk2::Image->new_from_pixbuf($arrow), $x, $y); $self->{icon} = Gtk2::Alignment->new(0.5, 0.5, 0, 0); $self->{icon}->add($fixed); } else { $self->{icon} = Gtk2::Image->new_from_pixbuf($self->{pixbuf}); } if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } $self->widget->set_relief($self->{config}->{relief} eq 'true' ? 'half' : 'none'); PerlPanel::tips->set_tip($self->widget, _('Menu')); $self->widget->show_all; $self->widget->signal_connect('clicked', sub { $self->popup }); $self->create_menu; PerlPanel::add_timeout(1000, sub { my ($result, $info) = Gnome2::VFS->get_file_info($self->{config}->{base}, 'default'); if ($result eq 'ok') { $self->create_menu if ($info->{mtime} != $self->{mtime}); } }); return 1; } sub create_menu { my $self = shift; if (defined($self->menu)) { $self->menu->destroy; } $self->{menu} = Gtk2::Menu->new; my ($result, $info) = Gnome2::VFS->get_file_info($self->{config}->{base}, 'default'); if ($result ne 'ok') { printf(STDERR "Error loading '%s': %s\n", $self->{config}->{base}, $result); return undef; } else { $self->{mtime} = $info->{mtime}; } if ($self->{config}->{apps_in_submenu} eq 'true' && !PerlPanel::has_action_menu) { my $item = $self->menu_item( $self->{config}->{label}, PerlPanel::get_applet_pbf('gnomemenu', PerlPanel::menu_icon_size), ); my $menu = Gtk2::Menu->new; $item->set_submenu($menu); $self->menu->append($item); $self->create_submenu_for($self->{config}->{base}, $menu); } else { $self->create_submenu_for($self->{config}->{base}, $self->menu); } if ($self->{config}->{show_control_items} eq 'true' && !PerlPanel::has_action_menu) { $self->add_control_items; } return 1; } sub create_submenu_for { my ($self, $uri, $menu) = @_; my ($result, @files) = Gnome2::VFS::Directory->list_load($uri, 'default'); if ($result ne 'ok') { return undef; } else { my %files; my %dirs; foreach my $file (@files) { next if ($file->{name} =~ /^\./); if ($file->{type} eq 'directory') { $dirs{$file->{name}} = $file; } elsif ($file->{type} eq 'regular') { $files{$file->{name}} = $file; } elsif ($file->{type} eq 'symbolic-link') { my $target = $self->resolve_target($file); if ($target->{type} eq 'directory') { $dirs{$file->{name}} = $target; } elsif ($file->{type} eq 'regular') { $files{$file->{name}} = $target; } else { print STDERR "*** GnomeMenu error: symbolic link at $uri/$file->{name} doesn't resolve to a directory or regular file!\n"; } } } my @dir_items; my @file_items; foreach my $dirname (sort keys %dirs) { my $dir = $dirs{$dirname}; my $path = sprintf('%s/%s', $uri, $dir->{name}); # the metadata for directories is held in $dir/.directory: my $dfile = sprintf('%s/.directory', $path); my ($result, undef) = Gnome2::VFS->get_file_info($dfile, 'default'); my ($menu_icon, $menu_name); if ($result eq 'ok') { my $entry = PerlPanel::DesktopEntry->new($dfile); my $icon; if (defined($entry)) { $icon = $entry->Icon(PerlPanel::locale); $menu_name = ($entry->Name(PerlPanel::locale) ne '' ? $entry->Name(PerlPanel::locale) : $dir->{name}); } else { $menu_name = $dir->{name}; } if ($icon eq '') { $menu_icon = PerlPanel::lookup_icon('gnome-fs-directory'); } else { $menu_icon = PerlPanel::lookup_icon($icon); } } else { $menu_icon = PerlPanel::lookup_icon('gnome-fs-directory'); } my $item = $self->menu_item( $menu_name, $menu_icon ); my $sub_menu = Gtk2::Menu->new; $item->set_submenu($sub_menu); push(@dir_items, $item); $self->create_submenu_for($path, $sub_menu); } foreach my $filename (sort keys %files) { my $file = $files{$filename}; my $path = sprintf('%s/%s', $uri, $file->{name}); my $entry = PerlPanel::DesktopEntry->new($path); if (!defined($entry)) { printf(STDERR "couldn't load a desktop entry for %s\n", $path); next; } my $name = $entry->Name(PerlPanel::locale); my $comment = $entry->Comment(PerlPanel::locale); my $program = $entry->Exec(PerlPanel::locale); my $icon = $entry->Icon(PerlPanel::locale); $icon = PerlPanel::lookup_icon($icon); if ($name ne '' && $program ne '') { my $item = $self->menu_item( $name, (-e $icon ? $icon : 'gtk-execute'), sub { PerlPanel::launch($program, $entry->StartupNotify) }, ); if ($comment ne '') { PerlPanel::tips->set_tip($item, $comment); } $item->drag_source_set( ['button1_mask', 'button3_mask'], ['copy', 'move'], {'target' => "text/uri-list", 'flags' => [], 'info' => 0}, ); $item->signal_connect('drag_data_get', sub { my ($widget, $context, $data, $info, $time) = @_; my $uri = Gnome2::VFS->make_uri_canonical($path); $data->set($data->target, 8, $uri); }); push(@file_items, $item); } } foreach my $item (sort { ($a->get_children)[0]->get_text cmp ($b->get_children)[0]->get_text } @dir_items) { $menu->append($item); } foreach my $item (sort { ($a->get_children)[0]->get_text cmp ($b->get_children)[0]->get_text } @file_items) { $menu->append($item); } return 1; } } sub get_default_config { return { label => _('Applications'), arrow => 'false', show_control_items => 'true', apps_in_submenu => 'true', base => 'applications:', relief => 'none', }; } sub resolve_target { my ($self, $file, $depth) = @_; $depth = (defined($depth) ? $depth : 0); my $info = Gnome2::VFS->get_file_info($file->{symlink_name}, 'default'); if ($info->{type} eq 'symbolic-link') { if ($depth <= $SYMLINK_DEPTH) { return $self->resolve_target($info, $depth+1); } else { return undef; } } else { return $info; } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/IconBar.pm0000644000175000017500000002263110142457102020315 0ustar hehe# $Id: IconBar.pm,v 1.46 2004/11/04 16:52:18 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::IconBar; use vars qw($ICON_DIR $LAUNCHER_EDITOR $OBJECT_REF); use Gtk2::SimpleList; use strict; our $ICON_DIR = sprintf('%s/share/pixmaps', $PerlPanel::PREFIX); chomp (our $LAUNCHER_EDITOR = `which perlpanel-item-edit 2> /dev/null`); sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); our $OBJECT_REF = $self; return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::HBox->new; $self->widget->set_spacing(PerlPanel::spacing); $self->{icondir} = sprintf('%s/.%s/icons', $ENV{HOME}, lc($PerlPanel::NAME)); unless (-e $self->{icondir}) { mkdir(sprintf('%s/.%s', $ENV{HOME}, lc($PerlPanel::NAME))); mkdir($self->{icondir}); } $self->load_icons; $self->widget->show_all; return 1; } sub load_icons { my $self = shift; opendir(DIR, $self->{icondir}); my @icons = grep { /\.desktop$/i } readdir(DIR); closedir(DIR); @{$self->{icons}} = (); if (scalar(@icons) < 1) { $self->widget->pack_start(Gtk2::Label->new(_('The IconBar applet is deprecated, use a Launcher instead!')), 0, 0, 0); } else { foreach my $file (sort @icons) { my $filename = sprintf("%s/%s", $self->{icondir}, $file); $self->add_icon(PerlPanel::Applet::IconBar::DesktopEntry->new($filename)); } } $self->widget->show_all; return 1; } sub add_icon { my ($self, $entry) = @_; push(@{$self->{icons}}, $entry); $self->widget->pack_start($entry->widget, 0, 0, 0); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 1; } sub end { return 'start'; } sub get_default_config { return undef; } sub reorder_window { my $self = shift; my $dialog = Gtk2::Dialog->new; $dialog->set_title(_('Reorder Icons')); $dialog->set_default_size(250, 200); $dialog->set_has_separator(0); $dialog->add_buttons('gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'); my $list = Gtk2::SimpleList->new( 'Icon' => 'pixbuf', 'Name' => 'text', file => 'text', ); $list->get_column(2)->set_visible(0); foreach my $icon (@{$self->{icons}}) { push(@{$list->{data}}, [$icon->{pixbuf}, $icon->{name}, $icon->{filename}]); } $list->set_headers_visible(1); $list->set_reorderable(1); my $scrwin = Gtk2::ScrolledWindow->new; $scrwin->set_policy('never', 'automatic'); $scrwin->set_shadow_type('etched_in'); $scrwin->set_border_width(6); $scrwin->add($list); $dialog->vbox->pack_start($scrwin, 1, 1, 0); $dialog->signal_connect('response', sub { if ($_[1] eq 'ok') { my $now = time(); for (my $i = 0 ; $i < scalar(@{$list->{data}}) ; $i++) { my $src_filename = @{@{$list->{data}}[$i]}[2]; my $dst_filename = sprintf('%s/%d.desktop', $self->{icondir}, $now + $i); rename($src_filename, $dst_filename); } } $dialog->destroy; if ($_[1] eq 'ok') { map { $self->widget->remove($_) } $self->widget->get_children; $self->load_icons; } }); $dialog->show_all; return 1; } package PerlPanel::Applet::IconBar::DesktopEntry; use PerlPanel::DesktopEntry; use Gtk2::Helper; use strict; sub new { my $self = {}; $self->{package} = shift; $self->{filename} = shift; $self->{icondir} = sprintf('%s/.%s/icons', $ENV{HOME}, lc($PerlPanel::NAME)); chomp($self->{nautilus} = `which nautilus 2> /dev/null`); bless($self, $self->{package}); $self->parse unless ($self->{filename} eq 'dummy'); $self->{widget} = Gtk2::Button->new; $self->widget->set_border_width(0); $self->widget->set_relief('none'); $self->build; $self->widget->signal_connect('button_release_event', sub { # this mess reconciles the behaviour of 'button_release_event' with the expected behaviour, which # should be that of 'clicked'. The clicked() method is only called if the mouse pointer is within # the widget (get_pointer() returns the co-ords of the pointer relative to the top left corner of # the widget): my ($mouse_pos_x, $mouse_pos_y) = $self->widget->get_pointer; my $widget_size_x = $self->widget->size_request->width; my $widget_size_y = $self->widget->size_request->height; if ( $mouse_pos_x <= $widget_size_x && $mouse_pos_y <= $widget_size_y && $mouse_pos_x > -1 && $mouse_pos_y > -1 ) { $self->clicked($_[1]->button); } return undef; }); return $self; } sub parse { my $self = shift; $self->{entry} = PerlPanel::DesktopEntry->new($self->{filename}); return 1; } sub build { my $self = shift; if (-e $self->{entry}->Icon) { $self->{iconfile} = $self->{entry}->Icon; } else { $self->{iconfile} = PerlPanel::lookup_icon($self->{entry}->Icon); } if (-e $self->{iconfile}) { $self->{pixbuf} = Gtk2::Gdk::Pixbuf->new_from_file_at_size($self->{iconfile}, PerlPanel::icon_size, PerlPanel::icon_size); $self->{pixmap} = Gtk2::Image->new_from_pixbuf($self->{pixbuf}); } else { my $pbf = $PerlPanel::OBJECT_REF->panel->render_icon('gtk-missing-image', 'dialog')->scale_simple(PerlPanel::icon_size, PerlPanel::icon_size, 'bilinear'); $self->{pixmap} = Gtk2::Image->new_from_pixbuf($pbf); } $self->{pixmap}->set_size_request(PerlPanel::icon_size, PerlPanel::icon_size); $self->widget->add($self->{pixmap}); $self->widget->show_all; my $tip = $self->{entry}->Name(PerlPanel::locale) || $self->{entry}->Exec; $tip .= "\n".$self->{entry}->Comment(PerlPanel::locale) if ($self->{entry}->Comment(PerlPanel::locale) ne ''); PerlPanel::tips->set_tip($self->widget, $tip); return 1; } sub widget { return $_[0]->{widget}; } sub clicked { my ($self, $button) = @_; $self->widget->grab_focus; if ($button == 1) { PerlPanel::launch($self->{entry}->Exec, $self->{entry}->StartupNotify); } elsif ($button == 3) { if (!defined($self->{menu})) { $self->{itemfactory} = [ [ '/', undef, undef, undef, '', ], [ '/'._('Delete...'), undef, sub { $self->delete }, undef, '', 'gtk-remove', ], [ '/'._('Edit...'), undef, sub { $self->edit }, undef, '', 'gtk-properties', ], [ '/'._('Add...'), undef, sub { $self->add }, undef, '', 'gtk-add', ], [ '/'._('Reorder...'), undef, sub { $PerlPanel::Applet::IconBar::OBJECT_REF->reorder_window }, undef, '', 'gtk-index', ], ]; if (-x $self->{nautilus}) { push( @{$self->{itemfactory}}, [ '/Separator', undef, undef, undef, '', ], [ '/'._('View Icon Directory'), undef, sub { system("$self->{nautilus} --no-desktop $self->{icondir} &") }, undef, '', 'gtk-open' ], ); } $self->{factory} = Gtk2::ItemFactory->new('Gtk2::Menu', '
', undef); $self->{factory}->create_items(@{$self->{itemfactory}}); $self->{menu} = $self->{factory}->get_widget('
'); } $self->{menu}->popup(undef, undef, sub { return $self->popup_position(@_) }, 0, $self->widget, undef); } return 1; } sub popup_position { my $self = shift; my ($x0, undef) = PerlPanel::get_widget_position($self->widget); if (PerlPanel::position eq 'top') { return ($x0, PerlPanel::panel->allocation->height); } else { $self->{menu}->realize; $self->{menu}->show_all; return ($x0, PerlPanel::screen_height() - $self->{menu}->allocation->height - PerlPanel::panel->allocation->height); } } sub edit { my $self = shift; if (-x $LAUNCHER_EDITOR) { my $mtime = (stat($self->{filename}))[9]; $self->widget->set_sensitive(0); PerlPanel::exec_wait("$LAUNCHER_EDITOR $self->{filename}", sub { $self->widget->set_sensitive(1); my $newmtime = (stat($self->{filename}))[9]; if ($newmtime > $mtime) { $self->parse; $self->widget->remove($self->widget->child); $self->build; PerlPanel::save_config; } }); } else { PerlPanel::warning(_('No desktop item editor could be found.')); } return 1; } sub add { my $self = shift; my $filename = sprintf('%s/.%s/icons/%d.desktop', $ENV{HOME}, lc($PerlPanel::NAME), time()); if (-x $LAUNCHER_EDITOR) { open(FILE, ">$filename") && close(FILE); my $mtime = time(); PerlPanel::exec_wait("$LAUNCHER_EDITOR $filename", sub { my $newmtime = (stat($filename))[9]; if ($newmtime > $mtime) { my $widget = PerlPanel::Applet::IconBar::DesktopEntry->new($filename)->widget; $widget->show_all; $self->widget->parent->pack_start($widget, 0, 0, 0); PerlPanel::save_config; } else { # nothing changed - delete the file: unlink($filename); } }); } else { PerlPanel::warning(_('No desktop item editor could be found.')); } return 1; } sub delete { my $self = shift; unlink($self->{filename}); $self->widget->parent->remove($self->widget); return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Launcher.pm0000644000175000017500000001655310173764415020563 0ustar hehe# $Id: Launcher.pm,v 1.20 2005/01/20 17:23:25 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Launcher; use PerlPanel::DesktopEntry; use vars qw($MULTI $LAUNCHER_DIR $LAUNCHER_EDITOR); use strict; $PerlPanel::DesktopEntry::VERBOSE = 0; our $MULTI = 1; our $LAUNCHER_DIR = sprintf('%s/.%s/launchers', $ENV{HOME}, lc($PerlPanel::NAME)); chomp (our $LAUNCHER_EDITOR = `which perlpanel-item-edit 2> /dev/null`); sub new { my $self = {}; $self->{package} = shift; $self->{id} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{widget}->set_relief('none'); $self->widget->add(Gtk2::Image->new); $self->init; return 1; } sub init { my $self = shift; $self->{file} = sprintf('%s/%s.desktop', $LAUNCHER_DIR, $self->{id}); if (!-e $self->{file}) { PerlPanel::mkpath($LAUNCHER_DIR); if (!-d $LAUNCHER_DIR) { print STDERR "*** Error: couldn't create launcher directory '$LAUNCHER_DIR'\n"; exit 256; } if (-x $LAUNCHER_EDITOR) { open(FILE, ">$self->{file}") && close(FILE); $self->edit; } else { PerlPanel::warning(_('No desktop item editor could be found.')); } } else { $self->{entry} = PerlPanel::DesktopEntry->new($self->{file}); if (!defined($self->{entry})) { PerlPanel::warning(_('Launcher file is empty or invalid. Click OK to edit.'), sub { $self->edit }); } else { my $name = $self->{entry}->Name(PerlPanel::locale); my $comment = $self->{entry}->Comment(PerlPanel::locale); my $program = $self->{entry}->Exec(PerlPanel::locale); my $icon = $self->{entry}->Icon(PerlPanel::locale); PerlPanel::tips->set_tip($self->widget, ($comment ne '' ? sprintf("%s\n%s", $name, $comment) : $name)); $self->widget->signal_handler_disconnect($self->{sigid}) if (defined($self->{sigid})); $self->{sigid} = $self->widget->signal_connect('button_release_event', sub { my ($mouse_pos_x, $mouse_pos_y) = $self->widget->get_pointer; my $widget_size_x = $self->widget->size_request->width; my $widget_size_y = $self->widget->size_request->height; if ( $mouse_pos_x <= $widget_size_x && $mouse_pos_y <= $widget_size_y && $mouse_pos_x > -1 && $mouse_pos_y > -1 ) { if ($_[1]->button == 1) { PerlPanel::launch($program, $self->{entry}->StartupNotify); } elsif ($_[1]->button == 3) { my $menu = Gtk2::Menu->new; my $exec_item = Gtk2::ImageMenuItem->new_from_stock('gtk-execute'); $exec_item->signal_connect('activate', sub { $menu->destroy ; PerlPanel::launch($program, $self->{entry}->StartupNotify) }); my $edit_item = Gtk2::ImageMenuItem->new_from_stock('gtk-properties'); $edit_item->signal_connect('activate', sub { $menu->destroy ; $self->edit }); my $remove_item = Gtk2::ImageMenuItem->new_from_stock('gtk-remove'); $remove_item->signal_connect('activate', sub { $self->remove }); my $add_item = Gtk2::ImageMenuItem->new_from_stock('gtk-add'); $add_item->signal_connect('activate', sub { $self->add_launcher }); $menu->add($exec_item); $menu->add($edit_item); $menu->add($remove_item); $menu->add(Gtk2::SeparatorMenuItem->new); $menu->add($add_item); $menu->show_all; $menu->popup(undef, undef, sub { return $self->popup_position($menu) }, undef, $_[1]->button, undef); } } return undef; }); if (-r $icon) { my $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($icon, PerlPanel::icon_size(), PerlPanel::icon_size()); $self->widget->child->set_from_pixbuf($pbf); } else { $icon =~ s/\.png$//; $icon = PerlPanel::lookup_icon($icon); if (-r $icon) { my $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($icon, PerlPanel::icon_size(), PerlPanel::icon_size()); $self->widget->child->set_from_pixbuf($pbf); } else { $self->widget->remove($self->widget->child) if defined($self->widget->child); my $pbf = $PerlPanel::OBJECT_REF->panel->render_icon('gtk-missing-image', 'dialog')->scale_simple( PerlPanel::icon_size, PerlPanel::icon_size, 'bilinear' ); $self->widget->add(Gtk2::Image->new_from_pixbuf($pbf)); } } $self->widget->drag_source_set( ['button1_mask', 'button3_mask'], ['copy', 'move'], {'target' => "text/uri-list", 'flags' => [], 'info' => 0}, ); $self->widget->signal_connect('drag_data_get', sub { $self->get_drag_data(@_) }); my $target_list = Gtk2::TargetList->new; $target_list->add(Gtk2::Gdk::Atom->new('text/uri-list'), 0, 0); $self->widget->drag_dest_set(['drop', 'motion', 'highlight'], ['copy', 'private', 'default', 'move', 'link', 'ask']); $self->widget->signal_connect(drag_data_received => sub { $self->drop_handler(@_) }); $self->widget->drag_dest_set_target_list($target_list); } } $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return undef; } sub edit { my $self = shift; my $mtime = time(); $self->widget->set_sensitive(undef); PerlPanel::exec_wait("$LAUNCHER_EDITOR $self->{file}", sub { $self->widget->set_sensitive(1); my $newmtime = (stat($self->{file}))[9]; if ($newmtime > $mtime) { # the editor modified the file, so reload: $self->init; } }); return 1; } sub remove { my $self = shift; unlink($self->{file}); PerlPanel::remove_applet('Launcher', $self->{id}); return 1; } sub popup_position { my ($self, $menu) = @_; my ($x, undef) = PerlPanel::get_widget_position($self->widget); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { $menu->realize; return ($x, PerlPanel::screen_height() - $menu->allocation->height - PerlPanel::panel->allocation->height); } } ### c+p'd from MenuBase.pm: sub add_launcher { my $self = shift; my $applet = 'Launcher'; # place the new applet next to the menu: my $idx = 0; foreach my $applet ($PerlPanel::OBJECT_REF->{hbox}->get_children) { last if ($applet eq $self->widget); $idx++; } if ($idx >= 0) { splice(@{$PerlPanel::OBJECT_REF->{config}{applets}}, $idx+1, 0, $applet); $PerlPanel::OBJECT_REF->load_applet($applet, $idx+1); PerlPanel::save_config(); } return 1; } sub get_drag_data { my ($self, $widget, $context, $data, $info, $time) = @_; my $uri = Gnome2::VFS->make_uri_canonical($self->{file}); $data->set($data->target, 8, $uri); return 1; } sub drop_handler { my ($self, @data) = @_; my @uris = split(/[\r\n]+/, $data[4]->data); if (scalar(@uris) > 0) { my $cmd = $self->{entry}->Exec.' "'.join('" "', @uris).'"'; PerlPanel::launch($cmd); } return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/LoadMonitor.pm0000644000175000017500000001017210240142354021223 0ustar hehe# $Id: LoadMonitor.pm,v 1.13 2005/05/10 14:27:56 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::LoadMonitor; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('LoadMonitor'); $self->{widget} = Gtk2::Frame->new; $self->{widget}->set_border_width(0); $self->{widget}->set_shadow_type("etched_in"); $self->{widget}->set_size_request(-1, PerlPanel::icon_size()); $self->{height} = PerlPanel::icon_size(); $self->{width} = $self->{config}->{width}; $self->{load_data} = [(0) x $self->{width}]; $self->{updated_row} = 0; $self->{image} = Gtk2::Image->new(); $self->{image}->set_padding(0,0); $self->{widget}->add($self->{image}); $self->update(); PerlPanel::tips->set_tip($self->{widget}, _('CPU Usage')); $self->update; $self->{'widget'}->show_all; PerlPanel::add_timeout(3000, sub { $self->update() }); return 1; } sub update { my $self = shift; #Increment the counter pointing us to the active row: $self->{updated_row} += 1; $self->{updated_row} -= $self->{width} if ($self->{updated_row} >= $self->{width}); #Get the new data: open (LOAD, "<", "/proc/loadavg") or die "Can't open /proc/loadavg: $!"; my ($load_1) = split /\s+/, ; close LOAD; $self->{load_data}->[$self->{updated_row}] = $load_1 * 100; #Find the maximal load in the stored data: my $max_value = 0; for (@{$self->{load_data}}) { $max_value = $_ if $_ > $max_value }; my $factor = int($max_value/100 + 1); #Calculate where the threshold lines should be. This obviously horribly #breaks for $factor > height (all information is hidden behind the line) #Anyway, people with such a high load have other problems. my @threshold_lines; for (1..$factor) { push @threshold_lines, $_ * (int($self->{'height'} / $factor + 0.5)); } #The last line isn't needed, as the border of the image is the same: pop @threshold_lines; my @row_order; #Go over all rows, prepare the row ordering and the xpm data: my @xpm_vert; for my $i (0 .. $self->{width} - 1) { #@row_order is sorted from left to right, so we want the #last updated row to be the last in the array: my $row_nr = $self->{'updated_row'} - ($self->{'width'} - 1 - $i); $row_nr += $self->{'width'} if $row_nr < 0; push @row_order, $row_nr; #Update the actual xpm data (we need to do this every time, #as $factor changes from time to time: my $act_percentage = int(($self->{'load_data'}->[$row_nr] / 100 * $self->{'height'} / $factor) + 0.5); $xpm_vert[$row_nr] = [(" ") x ($self->{'height'} - $act_percentage), ("#") x ($act_percentage)]; #Insert nice lines: $xpm_vert[$row_nr]->[$_] = "-" for (@threshold_lines); } #Create the full graph: my @xpm = ($self->{'width'} . " " . $self->{'height'} . " 3 1", "# c Turquoise", " c Black", "- c Lightgreen"); for my $line_nr (0 .. $self->{'height'} - 1) { my $line = ""; for my $row_nr (@row_order) { $line .= $xpm_vert[$row_nr]->[$line_nr]; } push @xpm, $line; } my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_xpm_data(@xpm); $self->{'image'}->set_from_pixbuf($pixbuf); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return { update_interval => 5, width => 32, }; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Lock.pm0000644000175000017500000000451210142452321017664 0ustar hehe# $Id: Lock.pm,v 1.11 2004/11/04 16:12:01 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Lock; use vars qw($DEFAULT_LOCK_PROGRAM $DEFAULT_ARGS); use strict; chomp(our $DEFAULT_LOCK_PROGRAM = `which xscreensaver-command`); our $DEFAULT_ARGS = '-lock'; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Lock'); $self->{widget} = Gtk2::Button->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('lock', PerlPanel::icon_size))); $self->widget->signal_connect('clicked', sub { $self->lock }); $self->widget->set_relief('none'); PerlPanel::tips->set_tip($self->widget, _('Lock the Screen')); PerlPanel::add_timeout(1000, sub { chomp(my $line = `pidof xscreensaver 2> /dev/null`); my @pids = split(/[\s\t]+/, $line); my $pid = shift(@pids); if (int($pid) < 1) { $self->widget->set_sensitive(0); } else { if (-e "/proc/$pid") { if ((stat("/proc/$pid"))[4] ne $<) { $self->widget->set_sensitive(0); } else { $self->widget->set_sensitive(1); } } } return 1; }); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return { program => $DEFAULT_LOCK_PROGRAM, args => $DEFAULT_ARGS, }; } sub lock { my $self = shift; my $cmd = sprintf( '%s %s &', $self->{config}->{program}, $self->{config}->{args}, ); system($cmd); return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/NautilusBookmarks.pm0000644000175000017500000001003210142452321022443 0ustar hehe# $Id: NautilusBookmarks.pm,v 1.21 2004/11/04 16:12:01 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::NautilusBookmarks; use base 'PerlPanel::MenuBase'; use XML::Simple; use Gnome2::VFS; use strict; sub configure { my $self = shift; $self->{file} = sprintf('%s/.nautilus/bookmarks.xml', $ENV{HOME}); $self->{icon} = Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('nautilusbookmarks', PerlPanel::icon_size)); $self->{widget} = Gtk2::Button->new; $self->widget->set_relief('none'); $self->{config} = PerlPanel::get_config('NautilusBookmarks'); if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } $self->widget->signal_connect('clicked', sub { $self->clicked }); PerlPanel::tips->set_tip($self->widget, _('Nautilus Bookmarks')); PerlPanel::add_timeout(1000, sub { $self->create_menu if ($self->file_age > $self->{mtime}); return 1; }); $self->widget->show_all; return 1; } sub clicked { my $self = shift; $self->create_menu; $self->popup; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; my ($major, $minor) = Gnome2::VFS->GET_VERSION_INFO; if (PerlPanel::position eq 'top') { $self->add_places if ($major >= 2 && $minor >= 6); $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->add_bookmarks; } else { $self->add_bookmarks; $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->add_places if ($major >= 2 && $minor >= 6); } return 1; } sub add_places { my $self = shift; my $item = $self->menu_item(_('Places'), PerlPanel::lookup_icon('gnome-fs-directory'), undef); my $submenu = Gtk2::Menu->new; $item->set_submenu($submenu); $self->menu->append($item); # there's no way to magically load these from nautilus, so we just clone them: $submenu->append($self->menu_item( _('Home'), 'gtk-home', sub { PerlPanel::launch("nautilus --no-desktop $ENV{HOME}") } )); $submenu->append($self->menu_item( _('Computer'), PerlPanel::lookup_icon('gnome-fs-client'), sub { PerlPanel::launch("nautilus --no-desktop computer:") } )); $submenu->append($self->menu_item( _('Templates'), PerlPanel::lookup_icon('gnome-fs-directory'), sub { PerlPanel::launch("nautilus --no-desktop $ENV{HOME}/Templates") } )); $submenu->append($self->menu_item( _('Trash'), PerlPanel::lookup_icon('gnome-fs-trash-full'), sub { PerlPanel::launch("nautilus --no-desktop $ENV{HOME}/.Trash") } )); $submenu->append($self->menu_item( _('CD Burner'), PerlPanel::lookup_icon('gnome-dev-cdrom'), sub { PerlPanel::launch("nautilus --no-desktop burn:") } )); return 1; } sub add_bookmarks { my $self = shift; $self->{mtime} = $self->file_age; my $bookmarks = XMLin($self->{file}); foreach my $name (sort keys %{$bookmarks->{bookmark}}) { $self->menu->append($self->menu_item( $name, PerlPanel::lookup_icon($bookmarks->{bookmark}->{$name}->{icon_name}), sub { PerlPanel::launch("nautilus --no-desktop \"$bookmarks->{bookmark}->{$name}->{uri}\"") }, )); } return 1; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/NotificationArea.pm0000644000175000017500000001151110232720040022204 0ustar hehe# $Id: NotificationArea.pm,v 1.7 2005/04/24 13:33:20 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::NotificationArea; use Gtk2::TrayManager; use vars qw($DEFAULT_SCREEN $TRAY_MANAGER $CAN_MANAGE); use strict; # # the notification area doesn't really like reloads of the panel. # for this reason we maintain a single manager object that's created # when the module is loaded. This means that trying to put more than one # notification area applet in the panel will break things. # our $DEFAULT_SCREEN = Gtk2::Gdk::Screen->get_default; if (Gtk2::TrayManager->check_running($DEFAULT_SCREEN)) { $CAN_MANAGE = 0; } else { $CAN_MANAGE = 1; our $TRAY_MANAGER = Gtk2::TrayManager->new; $TRAY_MANAGER->manage_screen($DEFAULT_SCREEN); $TRAY_MANAGER->set_orientation('horizontal'); } sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('NotificationArea'); $self->{box} = Gtk2::HBox->new; $self->{hbox} = Gtk2::HBox->new; $self->{hbox}->set_spacing(1); $self->{button} = Gtk2::Button->new; $self->{button}->add(Gtk2::Arrow->new('right', 'none')); $self->{button}->set_relief('none'); $self->{button}->signal_connect('clicked', sub { if ($self->{state} eq 'hidden') { $self->{hbox}->show; $self->{button}->child->set('right', 'none'); $self->{state} = 'shown'; PerlPanel::tips->set_tip($self->{button}, _('Hide icons')); } else { $self->{hbox}->hide; $self->{button}->child->set('left', 'none'); $self->{state} = 'hidden'; PerlPanel::tips->set_tip($self->{button}, _('Show icons')); } $self->widget->set_size_request(-1, PerlPanel::icon_size()); }); PerlPanel::tips->set_tip($self->{button}, _('Hide icons')); $self->{box}->pack_start($self->{button}, 0, 0, 0); $self->{box}->pack_start($self->{hbox}, 1, 1, 0); $self->{widget} = Gtk2::Frame->new; $self->widget->add($self->{box}); $self->widget->set_border_width(0); $self->widget->set_size_request(-1, PerlPanel::icon_size()); if ($CAN_MANAGE == 1) { $TRAY_MANAGER->signal_connect('tray_icon_added', sub { if($self->{config}->{hide_if_empty} && $self->{config}->{hide_if_empty} !~ /^(no|false)$/i && $self->{fully_hid}) { $self->{widget}->set_shadow_type("etched_in"); $self->{widget}->show_all(); $self->{fully_hid} = 0; } # put the socket inside a viewport so the panel doesn't get stretched if the # icon is too large: my $port = Gtk2::Viewport->new; $port->set_border_width(0); $port->set_size_request(-1, (PerlPanel::icon_size() - 2)); $port->set_shadow_type('none'); if (defined($_[1]->parent)) { $_[1]->reparent($port); } else { $port->add($_[1]); } $self->{hbox}->add($port); $port->show_all; $self->widget->set_size_request(-1, PerlPanel::icon_size()); $self->{hbox}->show; $self->{button}->child->set('right', 'none') if (defined($self->{button}->child)); $self->{state} = 'shown'; PerlPanel::tips->set_tip($self->{button}, _('Hide icons')); }); $TRAY_MANAGER->signal_connect('tray_icon_removed', sub { $self->{hbox}->remove($_[1]->parent) if defined($_[1]->parent); $self->widget->set_size_request(-1, PerlPanel::icon_size()); if ($self->{config}->{hide_if_empty} && $self->{config}->{hide_if_empty} !~ /^(no|false)$/i && ! scalar $self->{hbox}->get_children) { $self->{widget}->set_shadow_type("none"); $self->{widget}->hide_all(); $self->{fully_hid} = "yes, it's not here!"; } }); } else { $self->widget->set_sensitive(undef); } $self->widget->show_all; print join ("|", $self->{hbox}->get_children), "\n"; if ($self->{config}->{hide_if_empty} && $self->{config}->{hide_if_empty} !~ /^(no|false)$/i && ! scalar $self->{hbox}->get_children) { $self->{widget}->set_shadow_type("none"); $self->{widget}->hide_all(); $self->{"fully_hid"} = "yes, it's not here!"; } return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/OpenBoxMenu.pm0000755000175000017500000001532210122545165021206 0ustar hehe# $Id: OpenBoxMenu.pm,v 1.3 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::OpenBoxMenu; use base 'PerlPanel::MenuBase'; use vars qw(@MENU_FILES, $ROOT_MENU_ID); use XML::Parser; use strict; our @MENU_FILES = ( sprintf('%s/.openbox/menu.xml', $ENV{HOME}), '/etc/xdg/openbox/menu.xml', ); our $ROOT_MENU_ID = 'root-menu'; sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{config} = PerlPanel::get_config('OpenBoxMenu'); $self->{icon} = Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('OpenBoxMenu', PerlPanel::icon_size)); if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } $self->widget->set_relief('none'); PerlPanel::tips->set_tip($self->widget, _('Menu')); if ($self->{config}->{warning_seen} ne 'true') { PerlPanel::warning( _('The OpenBox menu is new and unstable - it is not guaranteed to work correctly. If you find a bug, submit a patch!'), sub { $self->{config}->{warning_seen} = 'true'; PerlPanel::save_config; } ); } $self->create_menu; $self->widget->signal_connect('clicked', sub { $self->popup }); $self->widget->show_all; return 1; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; $self->{mtime} = $self->file_age; $self->parse_menufile; $self->build_root_menu; if ($self->{config}->{show_control_items} eq 'true' && !PerlPanel::has_action_menu) { $self->add_control_items; } return 1; } sub parse_menufile { my $self = shift; foreach my $menufile (@MENU_FILES) { if (-e $menufile) { $self->{file} = $menufile; last; } } $self->{parser} = XML::Parser->new(Handlers => { Start => sub { my ($parser, $tag, %attrs) = @_; if ($tag eq 'openbox_menu') { $self->{in_menu} = 1; } elsif ($tag eq 'menu') { if ($self->{in_menu} != 1) { print STDERR "*** can't start a menu here.\n"; } elsif ($self->{current_menu} ne '') { if ($self->{current_menu} eq $ROOT_MENU_ID) { $self->{parent_menu} = $self->{current_menu}; $self->{current_menu} = $attrs{id}; push(@{$self->{tree}->{$ROOT_MENU_ID}}, { type => 'menu', id => $attrs{id} }); } else { print STDERR "*** can't start a new menu without closing a previous one.\n"; } } else { $self->{labels}->{$attrs{id}} = $attrs{label}; $self->{current_menu} = $attrs{id}; } } elsif ($tag eq 'item') { $self->{current_item} = { label => $attrs{label}, }; if ($self->{current_menu} eq '') { print STDERR "*** found an orphaned item '$attrs{label}'\n"; } else { push(@{$self->{tree}->{$self->{current_menu}}}, $self->{current_item}); } } elsif ($tag eq 'execute') { if (defined($self->{current_item})) { $self->{current_item}->{type} = 'execute'; } } elsif ($tag eq 'separator') { push(@{$self->{tree}->{$self->{current_menu}}}, { type => 'separator', }); } }, End => sub { my ($parser, $tag) = @_; if ($tag eq 'openbox_menu') { $self->{in_menu} = 0; } elsif ($tag eq 'menu') { if ($self->{parent_menu} ne '') { $self->{current_menu} = $self->{parent_menu}; $self->{parent_menu} = ''; } else { $self->{current_menu} = ''; } } elsif ($tag eq 'item') { undef($self->{current_item}); } }, Char => sub { my ($parser, $data) = @_; if ($self->{current_item}->{type} eq 'execute') { $self->{current_item}->{exec} = $self->trim($self->{current_item}->{exec}.$data); } } }); $self->{parser}->parsefile($self->{file}); return 1; } sub build_root_menu { my $self = shift; if (!defined($self->{tree}->{$ROOT_MENU_ID})) { PerlPanel::warning(_("Error parsing OpenBox menu: can't find the {id} menu", id => $ROOT_MENU_ID)); return undef; } else { if ($self->{config}->{apps_in_submenu} eq 'true') { my $icon = PerlPanel::lookup_icon($self->{config}->{label}); $icon = (-e $icon ? $icon : PerlPanel::lookup_icon('gnome-fs-directory')); my $item = $self->menu_item( $self->{config}->{label}, $icon ); $self->menu->append($item); my $menu = Gtk2::Menu->new; $item->set_submenu($menu); $self->build_menu($ROOT_MENU_ID, $menu); } else { $self->build_menu($ROOT_MENU_ID, $self->menu); } } return 1; } sub build_menu { my ($self, $id, $menu) = @_; my $last_type = ''; for (my $i = 0 ; $i < scalar(@{$self->{tree}->{$id}}) ; $i++) { my $item = @{$self->{tree}->{$id}}[$i]; if ($item->{type} eq 'execute') { my $icon = PerlPanel::lookup_icon($item->{exec}); $icon = (-e $icon ? $icon : 'gtk-execute'); $menu->append($self->menu_item( $item->{label}, $icon, sub { system("$item->{exec} &") }, )); $last_type = $item->{type}; } elsif ($item->{type} eq 'separator') { if ($last_type ne $item->{type}) { $menu->append(Gtk2::SeparatorMenuItem->new); } $last_type = $item->{type}; } elsif ($item->{type} eq 'menu') { if (defined($self->{tree}->{$item->{id}}) && scalar(@{$self->{tree}->{$item->{id}}}) > 0) { my $icon = PerlPanel::lookup_icon($item->{exec}); $icon = (-e $icon ? $icon : PerlPanel::lookup_icon('gnome-fs-directory')); my $menu_item = $self->menu_item( ($self->{labels}->{$item->{id}} ne '' ? $self->{labels}->{$item->{id}} : $item->{id}), $icon ); $menu->append($menu_item); my $submenu = Gtk2::Menu->new; $menu_item->set_submenu($submenu); $self->build_menu($item->{id}, $submenu); $last_type = $item->{type}; } } } return 1; } sub get_default_config { return { label => _('Applications'), show_control_items => 'true', apps_in_submenu => 'true', }; } sub trim { my ($self, $str) = @_; $str =~ s/^[\s\r\n\t]*//mg; $str =~ s/[\s\r\n\t]*$//mg; return $str; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Pager.pm0000644000175000017500000000750710143470501020042 0ustar hehe# $Id: Pager.pm,v 1.15 2004/11/07 19:02:25 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Pager; use Gnome2::Wnck; use vars qw($MULTI); use strict; our $MULTI = 1; sub new { my $self = {}; $self->{package} = shift; $self->{id} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Pager', $self->{id}); $self->{screen} = Gnome2::Wnck::Screen->get_default; $self->{screen}->force_update; $self->{widget} = Gtk2::HBox->new; $self->widget->set_border_width(0); $self->widget->set_size_request(-1, PerlPanel::icon_size()); $self->widget->signal_connect('button_release_event', sub { if ($_[1]->button == 3) { $self->popup_menu(); return 1; } else { return undef; } }); $self->widget->signal_connect('popup_menu', sub { $self->popup_menu }); $self->{pager} = Gnome2::Wnck::Pager->new($self->{screen}); $self->{pager}->set_shadow_type('in'); $self->{pager}->set_n_rows($self->{config}->{rows} > 0 ? $self->{config}->{rows} : 1); $self->widget->add($self->{pager}); PerlPanel::tips->set_tip($self->widget, _('Workspace Pager')); $self->widget->show_all; return 1; } sub popup_menu { my $self = shift; my $menu = Gtk2::Menu->new; my $properties_item = Gtk2::ImageMenuItem->new_from_stock('gtk-properties'); $properties_item->signal_connect('activate', sub { $self->prefs_window }); my $remove_item = Gtk2::ImageMenuItem->new_from_stock('gtk-remove'); $remove_item->signal_connect('activate', sub { PerlPanel::remove_applet('Pager', $self->{id}) }); $menu->add($properties_item); $menu->add($remove_item); $menu->show_all; $menu->popup(undef, undef, sub { return $self->popup_position($menu) }, undef, 3, undef); return 1; } sub prefs_window { my $self = shift; my $glade = PerlPanel::load_glade('pager'); $glade->get_widget('pager_prefs_dialog')->set_position('center'); $glade->get_widget('pager_prefs_dialog')->set_icon(PerlPanel::icon); $glade->get_widget('pager_prefs_dialog')->signal_connect('response', sub { PerlPanel::save_config(); shift()->destroy; }); $glade->get_widget('dialog_image')->set_from_pixbuf(PerlPanel::get_applet_pbf('Pager', 48)); $glade->get_widget('row_spin')->set_value($self->{config}->{rows}); $glade->get_widget('row_spin')->set_range(1, 100); $glade->get_widget('row_spin')->signal_connect('changed', sub { $self->{config}->{rows} = $glade->get_widget('row_spin')->get_value; $self->{pager}->set_n_rows($self->{config}->{rows}); }); $glade->get_widget('pager_prefs_dialog')->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return {rows => 1}; } sub popup_position { my ($self, $menu) = @_; my ($x, undef) = PerlPanel::get_mouse_pointer_position(); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { $menu->realize; return ($x, PerlPanel::screen_height() - $menu->allocation->height - PerlPanel::panel->allocation->height); } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/PanelPet.pm0000644000175000017500000004517410174243167020530 0ustar hehe# $Id: PanelPet.pm,v 1.14 2005/01/21 18:14:15 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2005 Gavin Brown # package PerlPanel::Applet::PanelPet; use vars qw($VERSION); use strict; $VERSION = "0.60"; # Applet Constructor sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); if ( system("fortune > /dev/null 2>&1") == 0 ) { $self->{fortune} = 1; $self->_get_fortune_databases(); } return $self; } # Build the Gtk Widget for our applet sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('PanelPet'); $self->{widget} = Gtk2::Button->new; $self->{widget}->set_relief('none'); # Handle right mouse click events $self->{widget}->signal_connect( 'button_release_event', sub { $self->_button_click ($_[1]->button) ; return undef }); my $tip; unless ( -f $self->{config}{image} ) { $self->_no_pet; } else { $self->_got_pet; } $self->widget->show_all; return 1; } # Return the widget sub widget { return $_[0]->{widget}; } # return the expand (1 or 0) for packing: sub expand { return 0; } # return the fill (1 or 0) for packing: sub fill { return 0; } # return 'start' or 'end': sub end { return 'end'; } # Build and return the default config values for this applet sub get_default_config { my $image_dir = sprintf('%s/share/%s/applets/panelpet', $PerlPanel::PREFIX, lc($PerlPanel::NAME)); return { image => "$image_dir/oldwanda.png", frames => 3, interval => 2000, fortune => "ALL", }; } ########################################################################## # Private Functions ########################################################################## sub _no_pet { my $self = shift; PerlPanel::notify(_("You don't seem to have a pet! Go into the PanelPet preferences, and choose an image for your pet."), sub { $self->_preferences } ); my $pbf = $PerlPanel::OBJECT_REF->panel->render_icon('gtk-missing-image', 'dialog')->scale_simple( PerlPanel::icon_size, PerlPanel::icon_size, 'bilinear' ); $self->{icon} = Gtk2::Image->new_from_pixbuf($pbf); $self->widget->add($self->{icon}); PerlPanel::tips->set_tip($self->widget, _("This could be your Panel Pet if you were to choose an image")); $self->{has_pet} = 0; } sub _got_pet { my $self = shift; $self->{has_pet} = 1; # Set the tooltip for the applet $self->{current_frame} = 1; $self->_update; PerlPanel::add_timeout( $self->{config}{interval}, sub { $self->_update }, ); PerlPanel::tips->set_tip($self->widget, _("Hi, I'm your Panel Pet!")); } # Button click handler -- call the appropriate function based on the button the # user pressed sub _button_click { my ( $self, $button ) = @_; if ($button == 1) { $self->_panel_pet; } elsif ($button == 3) { $self->_right_click_menu; } return 1; } sub _right_click_menu { my $self = shift; my $menu = Gtk2::Menu->new; my $preferences = Gtk2::ImageMenuItem->new_from_stock('gtk-preferences'); $preferences->signal_connect('activate', sub { $self->_preferences }); my $about = Gtk2::ImageMenuItem->new_from_stock('gtk-dialog-info'); $about->signal_connect('activate', sub { $self->_about }); $menu->add($preferences); $menu->add($about); $menu->show_all; $menu->popup( undef, undef, sub { return $self->_popup_position($menu) }, undef, 3, undef ); return 1; } sub _popup_position { my ($self, $menu) = @_; my ($x, undef) = PerlPanel::get_widget_position($self->widget); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { $menu->realize; return ($x, PerlPanel::screen_height() - $menu->allocation->height - PerlPanel::panel->allocation->height ); } } # Do this when the PanelPet is left-clicked sub _panel_pet { my $self = shift; my $text; if ( $self->{fortune} ) { $text = _("Hello, I'm your Panel Pet! I retrieved the following fortune:"); } else { $text= _("Just a hello from your Panel Pet!"); } if ( $self->{pet_window} ) { my $fortune_text = $self->_get_fortune; $self->{fortune_textview}->get_buffer->set_text( $fortune_text ); } else { $self->{pet_window} = Gtk2::Dialog->new; $self->{pet_window}->set_position('center'); $self->{pet_window}->set_border_width(15); $self->{pet_window}->set_title(_('Panel Pet: Hello')); $self->{pet_window}->set_icon(PerlPanel::icon); my $scrolled_window = Gtk2::ScrolledWindow->new; $scrolled_window->set_policy(qw/automatic automatic/); $scrolled_window->set_shadow_type('in'); $self->{fortune_textview} = Gtk2::TextView->new; $self->{fortune_textview}->set_left_margin(10); $self->{fortune_textview}->set_right_margin(10); $self->{fortune_textview}->set_editable(0); $self->{fortune_textview}->set_cursor_visible(0); my $fortune_text = $self->_get_fortune; $self->{fortune_textview}->get_buffer->set_text( $fortune_text ); $scrolled_window->add( $self->{fortune_textview} ); my $vbox = Gtk2::VBox->new; $self->{pet_window}->vbox->set_spacing(15); my $label = Gtk2::Label->new(); $label->set_justify('center'); $label->set_text($text); $self->{pet_window}->vbox->pack_start($label, 0, 0, 0); $self->{pet_window}->vbox->pack_start($scrolled_window, 1, 1, 1); #my $button = Gtk2::Button->new_from_stock('gtk-ok'); $self->{pet_window}->add_buttons( 'gtk-ok', 0, ); $self->{pet_window}->signal_connect( 'response', sub { $self->{pet_window}->destroy; delete $self->{pet_window} }, ); #$window->vbox->pack_start($button, 0, 0, 0); #$self->{pet_window}->add($vbox); $self->{pet_window}->set_default_size(600,350); $self->{pet_window}->show_all; } return 1; } # Display the PanelPet about box sub _about { my $self = shift; my $text = << "EOF"; PanelPet version $PerlPanel::Applet::PanelPet::VERSION A little friend to keep you company while you play around on your computer. Author: Eric Andreychek <eric\@openthought.net> Copyright 2003-2005 Eric Andreychek This program is Free Software. You may use it under the terms of the GNU General Public License. EOF my $window = Gtk2::Dialog->new; $window->set_position('center'); $window->set_border_width(15); $window->set_title(_('About')); $window->set_icon(PerlPanel::icon); $window->vbox->set_spacing(15); my $label = Gtk2::Label->new(); $label->set_justify('center'); $label->set_markup($text); $window->vbox->pack_start($label, 1, 1, 0); $window->add_buttons( 'gtk-ok', 0, ); $window->signal_connect( 'response', sub { $window->destroy }, ); $window->show_all; return 1; } # Update the PanelPet preferences sub _preferences { my $self = shift; $self->{widget}->set_sensitive(0); my $window = Gtk2::Dialog->new; $window->set_title(_('Configuration')); $window->signal_connect( 'delete_event', sub { $self->{widget}->set_sensitive(1) } ); $window->set_border_width(8); $window->vbox->set_spacing(8); $window->set_icon(PerlPanel::icon); my $notebook = Gtk2::Notebook->new; $window->vbox->add($notebook); my $table = Gtk2::Table->new(5, 3, 0); $table->set_col_spacings(8); $table->set_row_spacings(8); # Update interval preference my $adj_interval = Gtk2::Adjustment->new( $self->{config}{interval}, 100, 60000, 100, 1000, undef, ); $self->{controls}{interval} = Gtk2::SpinButton->new($adj_interval, 1, 0); $self->{labels}{interval} = Gtk2::Label->new(_(' Update interval (ms):')); $self->{labels}{interval}->set_alignment(1, 0.5); $table->attach_defaults($self->{labels}{interval}, 0, 1, 2, 3); $table->attach_defaults($self->{controls}{interval}, 1, 2, 2, 3); # Frames in animation preference my $adj_frames = Gtk2::Adjustment->new( $self->{config}{frames}, 1, 100000, 1, 10, undef, ); $self->{controls}{frames} = Gtk2::SpinButton->new($adj_frames, 1, 0); $self->{labels}{frames} = Gtk2::Label->new(_(' Frames in animation:')); $self->{labels}{frames}->set_alignment(1, 0.5); $table->attach_defaults($self->{labels}{frames}, 0, 1, 3, 4); $table->attach_defaults($self->{controls}{frames}, 1, 2, 3, 4); # Image for the PanelPet my $image = Gtk2::Image->new_from_file( $self->{config}{image}, ); $self->{controls}{image} = Gtk2::Button->new; $self->{controls}{image}->add($image); $self->{controls}{image}->set_relief('none'); $self->{controls}{image}->signal_connect( 'clicked', sub { $self->_choose_panelpet_image } ); $self->{labels}{image} = Gtk2::Label->new(_('PanelPet Imagefile:')); $self->{labels}{image}->set_alignment(1, 0.5); $table->attach_defaults($self->{labels}{image}, 0, 1, 4, 5); $table->attach_defaults($self->{controls}{image}, 1, 2, 4, 5); # Fortune DB list $self->{labels}{fortune} = Gtk2::Label->new(_('Fortune Database:')); $self->{labels}{fortune}->set_alignment(1, 0.5); $self->{controls}{fortune} = Gtk2::VBox->new; my $scrolled_window = Gtk2::ScrolledWindow->new; $self->{controls}{fortune_checkbox} = Gtk2::CheckButton->new_with_label("Randomly Select From All Databases"); $self->{controls}{fortune}->pack_start($self->{controls}{fortune_checkbox}, 0, 0, 0); $self->{controls}{fortune}->pack_start($scrolled_window, 1, 1, 1); $scrolled_window->set_policy (qw/automatic automatic/); my $list = Gtk2::SimpleList->new ( "Fortune Database" => 'text', "Enabled" => 'bool', ); $list->get_selection->set_mode('single'); $scrolled_window->add( $list ); if ( $self->{fortune} ) { $self->_get_fortune_databases(); @{ $list->{data} } = $self->_fill_fortune_database_list; } else { $self->{controls}{fortune}->set_sensitive(0); } $self->{controls}{fortune_checkbox}->signal_connect('toggled', sub { my $button = shift; if ($button->get_active) { $list->set_sensitive(0); } else { $list->set_sensitive(1); } } ); if ( $self->{config}{fortune} eq "ALL" ) { $self->{controls}{fortune_checkbox}->set_active(1); } $window->add_buttons( 'gtk-cancel', 1, 'gtk-ok', 0, ); $window->signal_connect('response', sub { # 'Okay' was clicked, this all needs to be saved if ($_[1] == 0) { $self->{config}{interval} = $self->{controls}{interval}->get_value_as_int; $self->{config}{frames} = $self->{controls}{frames}->get_value_as_int; $self->{config}{image} = $self->{controls}{selector}{filename} || $self->{config}{image}; if ( $self->{controls}{fortune_checkbox}->get_active) { $self->{config}{fortune} = "ALL"; } else { $self->{config}{fortune} = $self->_get_selected_fortune_databases( $list->{data} ); } $self->{widget}->set_sensitive(1); $window->destroy; PerlPanel::save_config; # If we didn't have a pet before, we need to plug in the aquarium unless ( $self->{has_pet} ) { $self->_got_pet; } } elsif ($_[1] == 1) { $self->{widget}->set_sensitive(1); $window->destroy; } }); my $label_g = Gtk2::Label->new('General'); my $label_f = Gtk2::Label->new('Fortune'); $notebook->append_page($table, $label_g); $notebook->append_page($self->{controls}{fortune}, $label_f); $window->show_all; return 1; } sub _get_fortune_databases { my $self = shift; my @data = `fortune -f 2>&1`; shift @data; chomp @data; @{ $self->{fortune_dbs} } = sort map { ((split /\s+/)[2]) } @data; } sub _get_fortune_database_by_name { my ( $self, $name ) = @_; my $i = 0; foreach my $database ( @{ $self->{fortune_dbs} } ) { return $i if $name eq $database; $i++; } return 0; } sub _get_fortune_database_by_id { my ( $self, $id ) = @_; return ${ $self->{fortune_dbs} }[$id]; } sub _get_fortune { my $self = shift; if ( $self->{fortune} ) { if ( $self->{config}{fortune} eq "ALL" ) { return `fortune`; } else { my @databases = join " ", $self->_selected_fortune_databases; return `fortune @databases`; } } else { return "Bark Bark\n\n(If you install the 'fortune' program, I'd consider giving you a fortune instead of barking)"; } } sub _get_selected_fortune_databases { my ( $self, $list ) = @_; my $selected_list = ""; foreach my $item ( @{ $list } ) { if ( $item->[1] ) { $selected_list .= "$item->[0],"; } } chop $selected_list; return $selected_list; } sub _selected_fortune_databases { my $self = shift; my @databases = split /,/, $self->{config}{fortune}; return @databases; } sub _database_is_selected { my ( $self, $name ) = @_; my @databases = split /,/, $self->{config}{fortune}; foreach my $database ( @databases ) { return 1 if $database eq $name; } return ""; } sub _fill_fortune_database_list { my $self = shift; my @list; foreach my $fortune_db ( @{ $self->{fortune_dbs} } ) { push @list, [ $fortune_db, $self->_database_is_selected($fortune_db) ]; } return @list; } # Update the PanelPet image sub _update { my $self = shift; my $filename = $self->{config}{image}; $self->{frames} = $self->{config}{frames}; my $base_image = Gtk2::Gdk::Pixbuf->new_from_file($filename); my $original_width = ( $base_image->get_width / $self->{frames} ); my $original_height = $base_image->get_height; my $display_image = Gtk2::Gdk::Pixbuf->new( $base_image->get_colorspace, $base_image->get_has_alpha, $base_image->get_bits_per_sample, $original_width, $original_height, ); my $copy_area = $original_width * $self->{current_frame} - $original_width; $base_image->copy_area($copy_area, 0, $original_width, $original_height, $display_image, 0, 0 ); # If the current image is larger than the panel, we need to scale it down if ($original_height != PerlPanel::icon_size) { my ($scaled_width, $scaled_height); # Image is landscape if ($original_width > $original_height) { $scaled_height = PerlPanel::icon_size; $scaled_width = int(($original_width / $original_height) * $scaled_height); } # Image is square elsif ($original_width == $original_height) { $scaled_width = PerlPanel::icon_size; $scaled_height = PerlPanel::icon_size; } # Image is portrait else { $scaled_width = int(($original_width / $original_height) * PerlPanel::icon_size ); $scaled_height = PerlPanel::icon_size; } $display_image = $display_image->scale_simple( $scaled_width, $scaled_height, 'bilinear', ); } if ( exists $self->{icon} ) { $self->{icon}->set_from_pixbuf($display_image); } else { $self->{icon} = Gtk2::Image->new_from_pixbuf($display_image); $self->{widget}->add($self->{icon}); } $self->{widget}->queue_draw; $self->{current_frame}++; $self->{current_frame} = 1 if $self->{current_frame} > $self->{frames}; return 1; } sub _choose_panelpet_image { my $self = shift; my $selector; if ('' ne (my $msg = Gtk2->check_version (2, 4, 0)) or $Gtk2::VERSION < 1.040) { $selector = Gtk2::FileSelection->new(_('Choose PanelPet Image')); } else { $selector = Gtk2::FileChooserDialog->new( _('Choose PanelPet Image'), undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); } $selector->set_filename($self->{config}{image}); $selector->signal_connect('response', sub { if ($_[1] eq 'ok') { $self->{controls}{selector}{filename} = $selector->get_filename; my $new_image = Gtk2::Image->new_from_file($self->{controls}{selector}{filename}); $new_image->show; $self->{controls}{image}->remove($self->{controls}{image}->child); $self->{controls}{image}->add($new_image); } $selector->destroy; }); $selector->show_all; return 1; } sub _remove { my $self = shift; for (my $i=0; $i < @{ $PerlPanel::OBJECT_REF->{config}{applets} }; $i++) { if ($PerlPanel::OBJECT_REF->{config}{applets}[$i] eq "PanelPet") { splice(@{$PerlPanel::OBJECT_REF->{config}{applets}}, $i, 1); } } PerlPanel::save_config; $self->widget->parent->remove($self->widget); } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Quit.pm0000644000175000017500000000323110122545165017722 0ustar hehe# $Id: Quit.pm,v 1.12 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Quit; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('quit', PerlPanel::icon_size))); my $code = '$PerlPanel::OBJECT_REF->shutdown'; $self->widget->signal_connect('clicked', sub { eval $code ; if ($@) { print STDERR "Error shutting down: $@\n" ; exit 1 } }); $self->widget->set_relief('none'); PerlPanel::tips->set_tip($self->widget, _('Close {name}', name => $PerlPanel::NAME)); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/RecentFiles.pm0000644000175000017500000001141510142452321021177 0ustar hehe# $Id: RecentFiles.pm,v 1.7 2004/11/04 16:12:01 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::RecentFiles; use Gnome2::VFS; use XML::Simple; use File::Basename qw(basename); use base 'PerlPanel::MenuBase'; use URI::Escape; use strict; sub configure { my $self = shift; Gnome2::VFS->init; $self->{file} = sprintf('%s/.recently-used', $ENV{HOME}); $self->{widget} = Gtk2::Button->new; $self->{config} = PerlPanel::get_config('RecentFiles'); $self->widget->set_relief('none'); $self->{icon} = Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('RecentFiles', PerlPanel::icon_size)); if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } PerlPanel::tips->set_tip($self->{widget}, _('Recent Files')); $self->widget->signal_connect('clicked', sub { $self->clicked }); $self->widget->show_all; $self->create_menu; PerlPanel::add_timeout(1000, sub { $self->create_menu if ($self->file_age > $self->{mtime}); return 1; }); return 1; } sub clicked { my $self = shift; $self->popup; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; if (-e $self->{file}) { $self->{mtime} = $self->file_age; my $data = XMLin($self->{file}); my @entries = @{$data->{RecentItem}}; my %files_by_stamp; foreach my $file (@entries) { push(@{$files_by_stamp{$file->{Timestamp}}}, $file); } my @files; foreach my $stamp (reverse sort(keys(%files_by_stamp))) { foreach my $file (@{$files_by_stamp{$stamp}}) { push(@files, $file); } } my $i = 0; foreach my $file (@files) { if ($file->{URI} =~ /^file:/) { my $filename = Gnome2::VFS->get_local_path_from_uri($file->{URI}); next unless (-e $filename); } $i++; my $mimetype = Gnome2::VFS::Mime::Type->new($file->{'Mime-Type'}); if (defined($mimetype)) { my $icon; if (-d Gnome2::VFS->get_local_path_from_uri($file->{URI})) { $icon = PerlPanel::lookup_icon('gnome-fs-directory'); } else { $icon = $mimetype->get_icon; } if (! -e $icon) { $icon = PerlPanel::lookup_icon($icon); if (! -e $icon) { my $type = $file->{'Mime-Type'}; $type =~ s!/!-!; $type = sprintf('gnome-mime-%s', lc($type)); $icon = PerlPanel::lookup_icon($type); } } if (! -e $icon) { if ($file->{'Mime-Type'} =~ /^text/) { $icon = PerlPanel::lookup_icon('gnome-mime-text'); } elsif ($file->{'Mime-Type'} =~ /^image/) { $icon = PerlPanel::lookup_icon('gnome-mime-image'); } elsif ($file->{'Mime-Type'} =~ /^video/) { $icon = PerlPanel::lookup_icon('gnome-mime-video'); } else { $icon = PerlPanel::lookup_icon('gnome-fs-regular'); } } my $item = $self->menu_item( uri_unescape(basename($file->{URI})), $icon, sub { my $launcher = $mimetype->get_default_application; if (!defined($launcher)) { $launcher = ($mimetype->get_all_applications)[0]; } if (!defined($launcher)) { PerlPanel::warning(_("Couldn't find a launcher for files of type '{type}'", type => $file->{'Mime-Type'})); } else { $launcher->launch($file->{URI}); } }, ); my $launcher = $mimetype->get_default_application; if (!defined($launcher)) { $launcher = ($mimetype->get_all_applications)[0]; } if (defined($launcher)) { PerlPanel::tips->set_tip($item, _("Open '{file}' with '{launcher}'", file => uri_unescape(basename($file->{URI})), launcher => $launcher->{name})); } $self->menu->append($item); } last if ($i == 20); } } } sub show_control_items { return undef; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Reload.pm0000644000175000017500000000314010166251437020211 0ustar hehe# $Id: Reload.pm,v 1.10 2005/01/03 14:13:51 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Reload; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('reload', PerlPanel::icon_size))); PerlPanel::tips->set_tip($self->{widget}, _('Reload')); $self->widget->set_relief('none'); $self->widget->signal_connect('clicked', sub { PerlPanel::notify(_('The Reload applet is now deprecated, this button does nothing!')); }); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/RunMe.pm0000644000175000017500000000466310122545165020040 0ustar hehe# $Id: RunMe.pm,v 1.4 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2004 Mark Ng # package PerlPanel::Applet::RunMe; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Combo->new; $self->widget->disable_activate(); my @history = PerlPanel::get_run_history; $self->{store} = $self->create_store; my $completion = Gtk2::EntryCompletion->new; $completion->set_model($self->{store}); $completion->set_text_column(0); $completion->set_minimum_key_length(2); $self->{widget}->entry->set_completion($completion); $self->{widget}->set_popdown_strings('', @history); $self->{widget}->set_use_arrows(1); $self->{widget}->set_value_in_list(0, 1); $self->{widget}->entry->signal_connect('activate', sub { my $command = $self->{widget}->entry->get_text(); system("$command &"); unshift(@{$self->{history}}, $command); $self->{widget}->set_popdown_strings(@history); $self->{widget}->entry->set_text(''); PerlPanel::append_run_history($command); }); $self->widget->show_all; return 1; } sub get_default_config { return {}; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub create_store { my $self = shift; my $store = Gtk2::ListStore->new(Glib::String::); my %executables; foreach my $dir (split(/:/, $ENV{PATH})) { if (!opendir(DH, $dir)) { next; } else { my @files = grep { -x "$dir/$_" } grep { ! /^\.{1,2}$/ } readdir(DH); closedir(DH); map { $executables{$_}++ } @files; } } foreach my $program (sort keys %executables) { $store->set($store->append, 0, $program); } return $store; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/ScreenShot.pm0000644000175000017500000000706710122545165021070 0ustar hehe# $Id: ScreenShot.pm,v 1.4 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::ScreenShot; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new(); $self->widget->set_relief('none'); $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('ScreenShot', PerlPanel::icon_size))); $self->widget->signal_connect('clicked', sub { $self->prompt }); $self->{app} = PerlPanel::load_glade('screenshot'); $self->{app}->get_widget('screenshot_dialog')->signal_connect('delete_event', sub { $self->{app}->get_widget('screenshot_dialog')->hide_all; return 1; }); $self->{app}->get_widget('screenshot_dialog')->signal_connect('response', sub { $self->{app}->get_widget('screenshot_dialog')->hide_all; if ($_[1] eq 'ok') { $self->get_screenshot->save($self->{app}->get_widget('file_entry')->get_text, 'png'); } return undef; }); $self->{app}->get_widget('browse_button')->signal_connect('clicked', sub { my $dialog; if ('' ne (my $msg = Gtk2->check_version (2, 4, 0)) or $Gtk2::VERSION < 1.040) { $dialog = Gtk2::FileSelection->new(_('Choose File')); } else { $dialog = Gtk2::FileChooserDialog->new( _('Choose File'), undef, 'save', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); } $dialog->set_icon(PerlPanel::icon); $dialog->set_filename($self->{app}->get_widget('file_entry')->get_text); $dialog->signal_connect('response', sub { if ($_[1] eq 'ok') { $self->{app}->get_widget('file_entry')->set_text($dialog->get_filename); } $dialog->destroy; }); $dialog->show_all; }); PerlPanel::tips->set_tip($self->widget, _('Take Screenshot')); $self->widget->show_all; return 1; } sub prompt { my $self = shift; my $pbf = $self->get_screenshot->scale_simple(240, (PerlPanel::screen_height() * (240 / PerlPanel::screen_width())), 'bilinear'); $self->{app}->get_widget('preview_image')->set_from_pixbuf($pbf); $self->{app}->get_widget('file_entry')->set_text(_('{home}/screenshot.png', home => $ENV{HOME})); $self->{app}->get_widget('screenshot_dialog')->set_icon(PerlPanel::icon); $self->{app}->get_widget('screenshot_dialog')->set_position('center'); $self->{app}->get_widget('screenshot_dialog')->show_all; return 1; } sub get_screenshot { my $self = shift; my $window = Gtk2::Gdk::Screen->get_default->get_root_window; my ($width, $height) = $window->get_size; my $pbf = Gtk2::Gdk::Pixbuf->new('rgb', 1, 8, $width, $height); $pbf->get_from_drawable($window, $window->get_colormap, 0, 0, 0, 0, $width, $height); return $pbf; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Separator.pm0000644000175000017500000000260710122545165020746 0ustar hehe# $Id: Separator.pm,v 1.8 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Separator; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Alignment->new(0.5, 0.5, 1, 1); $self->widget->set_size_request(10, PerlPanel::icon_size); $self->widget->add(Gtk2::VSeparator->new); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/SetiAtHome.pm0000755000175000017500000001557510142452321021014 0ustar hehe# $Id: SetiAtHome.pm,v 1.7 2004/11/04 16:12:01 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::SetiAtHome; use Gnome2::VFS; use File::Basename qw(dirname); use XML::Simple; use strict; Gnome2::VFS->init; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('SetiAtHome'); $self->{widget} = Gtk2::Button->new; $self->widget->set_relief('none'); $self->widget->signal_connect('clicked', sub { $self->configuration_dialog }); $self->{icon} = PerlPanel::get_applet_pbf('SetiAtHome', PerlPanel::icon_size); $self->{label} = Gtk2::Label->new; $self->widget->add(Gtk2::HBox->new); $self->widget->child->pack_start(Gtk2::Image->new_from_pixbuf($self->{icon}), 0, 0, 0); $self->widget->child->pack_start($self->{label}, 1, 1, 0); our $TIMEOUT = PerlPanel::add_timeout(1000 * $self->{config}->{interval}, sub { $self->refresh; return 1 }); PerlPanel::add_timeout(1000, sub { $self->refresh; PerlPanel::remove_timeout(${shift()}) ; return undef }); $self->widget->show_all; return 1; } sub configuration_dialog { my $self = shift; $self->{app} = PerlPanel::load_glade('setiathome'); $self->{app}->get_widget('config_dialog')->set_icon(PerlPanel::get_applet_pbf('SetiAtHome')); $self->{app}->get_widget('config_dialog')->signal_connect('response', sub { if ($_[1] eq 'ok') { $self->{config}->{email} = $self->{app}->get_widget('email_entry')->get_text; $self->{config}->{dir} = $self->{app}->get_widget('directory_entry')->get_text; if ($self->{app}->get_widget('remote_checkbutton')->get_active) { $self->{config}->{remote} = 'true'; $self->{config}->{user} = $self->{app}->get_widget('user_entry')->get_text; $self->{config}->{host} = $self->{app}->get_widget('host_entry')->get_text; } else { $self->{config}->{remote} = 'false'; } $self->{app}->get_widget('config_dialog')->destroy; PerlPanel::save_config(); } else { $self->{app}->get_widget('config_dialog')->destroy; } }); $self->{app}->get_widget('email_entry')->set_text($self->{config}->{email}); $self->{app}->get_widget('directory_entry')->set_text($self->{config}->{dir}); $self->{app}->get_widget('browse_button')->signal_connect('clicked', sub { my $dialog; if ('' ne (my $msg = Gtk2->check_version (2, 4, 0)) or $Gtk2::VERSION < 1.040) { $dialog = Gtk2::FileSelection->new(_('Choose File')); } else { $dialog = Gtk2::FileChooserDialog->new( _('Choose File'), undef, 'select-folder', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); } $dialog->set_modal(1); $dialog->set_icon(PerlPanel::get_applet_pbf('SetiAtHome')); $dialog->set_filename($self->{app}->get_widget('directory_entry')->get_text.'/'); $dialog->signal_connect('response', sub { if ($_[1] eq 'ok') { my $file = $dialog->get_filename; if (-d $file) { $self->{app}->get_widget('directory_entry')->set_text($file); } elsif (-d dirname($file)) { $self->{app}->get_widget('directory_entry')->set_text(dirname($file)); } } $dialog->destroy; }); $dialog->show_all; }); $self->{app}->get_widget('user_entry')->set_text($self->{config}{user}); $self->{app}->get_widget('host_entry')->set_text($self->{config}{host}); $self->{app}->get_widget('remote_checkbutton')->signal_connect('toggled', sub { my $state = $self->{app}->get_widget('remote_checkbutton')->get_active; $self->{app}->get_widget('user_entry')->set_sensitive($state); $self->{app}->get_widget('host_entry')->set_sensitive($state); }); $self->{app}->get_widget('remote_checkbutton')->set_active($self->{config}{remote} eq 'true' ? 1 : undef); $self->{app}->get_widget('user_entry')->set_sensitive($self->{config}{remote} eq 'true' ? 1 : undef); $self->{app}->get_widget('host_entry')->set_sensitive($self->{config}{remote} eq 'true' ? 1 : undef); } sub refresh { my $self = shift; my $file; if ($self->{config}->{remote} eq 'true' && $self->{config}->{user} ne '' && $self->{config}->{host} ne '') { $file = sprintf( '/tmp/%s-setiathome-applet-%s.%d', lc($PerlPanel::NAME), (getpwuid($<))[0], time(), ); my $cmd = sprintf( 'ssh %s@%s "cat %s/state.sah" > %s', $self->{config}->{user}, $self->{config}->{host}, $self->{config}->{dir}, $file ); PerlPanel::exec_wait($cmd); while ((stat($file))[7] == 0) { Gtk2->main_iteration while (Gtk2->events_pending); } } else { $file = sprintf('%s/state.sah', $self->{config}->{dir}); } my $results = -1; my $progress = -1; if (open(FILE, $file)) { while () { if (/^prog=([0-9\.]+)$/) { $progress = $1; } } close(FILE); } if ($self->{config}->{remote} eq 'true' && $self->{config}->{user} ne '' && $self->{config}->{host} ne '') { unlink($file); } if ($self->{config}->{email} ne '') { my $url = sprintf('http://setiathome2.ssl.berkeley.edu/fcgi-bin/fcgi?cmd=user_xml&email=%s', $self->{config}->{email}); my ($result, $handle) = Gnome2::VFS->open($url, 'read'); my $bytes_read = 0; my $buffer; if ($result eq 'ok') { my $info; ($result, $info) = $handle->get_file_info('default'); if ($result eq 'ok') { my $bytes = $info->{size}; do { my ($tmp_buffer, $tmp_bytes_read); ($result, $tmp_bytes_read, $tmp_buffer) = $handle->read(1024); $buffer .= $tmp_buffer; $bytes_read += $tmp_bytes_read; } while ($result eq 'ok'); } } my $data = XMLin($buffer); $results = $data->{userinfo}->{numresults}; } my $tip; $progress = int($progress * 100); if ($progress > -1) { $self->{label}->set_text("$progress%"); } if ($progress > -1 && $results > -1) { $tip = _('Completed {units} workunits, {percent}% of current', units => $results, percent => $progress); } elsif ($progress > -1 && $results < 0) { $tip = _('Completed {percent}%', percent => $progress); } else { $tip = _('ERROR'); } PerlPanel::tips->set_tip($self->widget, $tip); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return { dir => $ENV{HOME}.'/.setiathome', interval => 60, remote => 'false', }; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/ShellManager.pm0000755000175000017500000001657110246701224021355 0ustar hehe# $Id: ShellManager.pm,v 1.10 2005/05/30 21:16:04 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::ShellManager; use base 'PerlPanel::MenuBase'; use Gtk2::SimpleList; use vars qw($KEY); use strict; our $KEY = sprintf('%s/.ssh/id_rsa.pub', $ENV{HOME}); sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{menu} = Gtk2::Menu->new; $self->{config} = PerlPanel::get_config('ShellManager'); $self->widget->set_relief('none'); $self->{icon} = Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('ShellManager', PerlPanel::icon_size)); if ($self->{config}->{label} eq '') { $self->widget->add($self->{icon}); } else { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } PerlPanel::tips->set_tip($self->{widget}, _('Shell Manager')); $self->create_menu; $self->widget->signal_connect('clicked', sub { $self->popup }); $self->widget->show_all; return 1; } sub get_default_config { chomp(my $terminal = `which gnome-terminal 2> /dev/null`); return { terminal => $terminal, }; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; if (ref($self->{config}->{sessions}) eq 'ARRAY') { my %connections; foreach my $session (@{$self->{config}->{sessions}}) { $connections{"$session->{user}\@$session->{host}"} = $session; } foreach my $session (sort keys %connections) { $self->menu->append($self->menu_item( $session, PerlPanel::get_applet_pbf('shellmanager', PerlPanel::menu_icon_size), sub { my $cmd; if ($self->{config}->{terminal} =~ /gnome-terminal/i) { $cmd = sprintf('%s -e "ssh -p %d %s@%s" &', $self->{config}->{terminal}, $connections{$session}->{port}, $connections{$session}->{user}, $connections{$session}->{host}); } else { $cmd = sprintf('%s -e ssh -p %d %s@%s &', $self->{config}->{terminal}, $connections{$session}->{port}, $connections{$session}->{user}, $connections{$session}->{host}); } system($cmd); }, )); } $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->menu->append($self->menu_item( _('Edit Connections...'), 'gtk-properties', sub { $self->edit_dialog }, )); } $self->menu->append($self->menu_item( _('New Connection...'), 'gtk-new', sub { $self->add_dialog }, )); return 1; } sub edit_dialog { my $self = shift; my $glade = PerlPanel::load_glade('shellmanager'); my $dialog = $glade->get_widget('edit_window'); $dialog->set_position('center'); $dialog->set_icon(PerlPanel::icon); my $list = Gtk2::SimpleList->new_from_treeview( $glade->get_widget('connection_list'), _('User') => 'text', _('Host') => 'text', _('Port') => 'int' ); $list->get_column(0)->set_resizable(1); $list->get_column(1)->set_resizable(1); $list->get_column(2)->set_resizable(1); if (ref($self->{config}->{sessions}) eq 'HASH') { $self->{config}->{sessions} = [ $self->{config}->{sessions}, ]; } my %connections; foreach my $session (@{$self->{config}->{sessions}}) { $connections{"$session->{user}\@$session->{host}"} = $session; } foreach my $session (sort keys %connections) { push(@{$list->{data}}, [ $connections{$session}->{user}, $connections{$session}->{host}, $connections{$session}->{port} ]); } $dialog->signal_connect('response', sub { $self->{config}->{sessions} = []; foreach my $row (@{$list->{data}}) { push(@{$self->{config}->{sessions}}, { user => @{$row}[0], host => @{$row}[1], port => @{$row}[2], }); } $dialog->destroy; $self->create_menu; PerlPanel::save_config; }); $glade->get_widget('delete_button')->signal_connect('clicked', sub { my ($idx) = $list->get_selected_indices; splice(@{$list->{data}}, $idx, 1); $list->select($idx); }); if ($ENV{SSH_AGENT_PID} > 0 && -x $ENV{SSH_ASKPASS}) { $glade->get_widget('key_button')->signal_connect('clicked', sub { if (! -r $KEY) { PerlPanel::warning(_("Error: cannot find RSA public key. You may need to create one using:\n\n\tssh-keygen -t rsa")); } else { my ($idx) = $list->get_selected_indices; my ($user, $host, $port) = @{(@{$list->{data}})[$idx]}; my $cmd = sprintf('cat "%s" | ssh -p %d %s@%s \'cat >> .ssh/authorized_keys2\' &', $KEY, $port, $user, $host); system($cmd); } }); } else { $glade->get_widget('key_button')->set_sensitive(0); } $dialog->show_all; return 1; } sub add_dialog { my $self = shift; my $glade = PerlPanel::load_glade('shellmanager'); my $dialog = $glade->get_widget('prefs_window'); $dialog->set_icon(PerlPanel::icon); my $uid = lc((getpwuid($<))[0]); $glade->get_widget('user_combo')->disable_activate; $glade->get_widget('user_combo')->set_popdown_strings($uid, grep { $_ ne $uid } $self->get_usernames); $glade->get_widget('user_combo')->entry->set_text($uid); $glade->get_widget('host_combo')->disable_activate; $glade->get_widget('host_combo')->set_popdown_strings($self->get_hostnames); $glade->get_widget('host_combo')->entry->set_text(''); $glade->get_widget('host_combo')->entry->signal_connect('activate', sub { $dialog->response('ok') }); $dialog->signal_connect('response', sub { if ($_[1] eq 'ok') { my $user = $glade->get_widget('user_combo')->entry->get_text; my $host = $glade->get_widget('host_combo')->entry->get_text; my $port = $glade->get_widget('port_spinbutton')->get_value; if (ref($self->{config}->{sessions}) eq 'HASH') { $self->{config}->{sessions} = [ $self->{config}->{sessions}, ]; } push(@{$self->{config}->{sessions}}, { user => lc($user), host => lc($host), port => $port, }); my $cmd; if ($self->{config}->{terminal} =~ /gnome-terminal/i) { $cmd = sprintf('%s -e "ssh -p %d %s@%s" &', $self->{config}->{terminal}, $port, $user, $host); } else { $cmd = sprintf('%s -e ssh -p %d %s@%s &', $self->{config}->{terminal}, $port, $user, $host); } system($cmd); $self->create_menu; PerlPanel::save_config; } $dialog->destroy; }); $dialog->signal_connect('delete_event', sub { $dialog->destroy; return 1; }); $dialog->show_all; return 1; } sub get_usernames { my $self = shift; my @names; if (ref($self->{config}->{sessions}) eq 'ARRAY') { foreach my $session (@{$self->{config}->{sessions}}) { push(@names, $session->{user}); } } return sort(@names); } sub get_hostnames { my $self = shift; my @hosts; if (ref($self->{config}->{sessions}) eq 'ARRAY') { foreach my $session (@{$self->{config}->{sessions}}) { push(@hosts, $session->{host}); } } return sort(@hosts); } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/ShowDesktop.pm0000644000175000017500000000411710122545165021256 0ustar hehe# $Id: ShowDesktop.pm,v 1.10 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::ShowDesktop; use Gnome2::Wnck; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::ToggleButton->new; $self->{config} = PerlPanel::get_config('ShowDesktop'); $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('ShowDesktop', PerlPanel::icon_size))); $self->widget->signal_connect('clicked', sub { $self->clicked }); $self->widget->set_relief('none'); $self->{screen} = Gnome2::Wnck::Screen->get_default; $self->{screen}->signal_connect('showing-desktop-changed', sub { $self->widget->set_active($self->{screen}->get_showing_desktop); }); PerlPanel::tips->set_tip($self->{widget}, _('Show the Desktop')); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return undef; } sub clicked { my $self = shift; if ($self->widget->get_active) { PerlPanel::tips->set_tip($self->{widget}, _('Restore Windows')); } else { PerlPanel::tips->set_tip($self->{widget}, _('Show the Desktop')); } $self->{screen}->toggle_showing_desktop($self->widget->get_active); return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Slot.pm0000644000175000017500000000353610122545165017731 0ustar hehe# $Id: Slot.pm,v 1.4 2004/09/17 11:28:53 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Slot; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::ScrolledWindow->new; my $socket = Gtk2::Socket->new; $self->widget->add_with_viewport($socket); $self->widget->set_policy('never', 'never'); $self->widget->set_border_width(0); $self->widget->child->set_border_width(0); $self->widget->child->set_shadow_type('in'); $self->{socketfile} = sprintf('%s/.%s/socketid', $ENV{HOME}, lc($PerlPanel::NAME)); $socket->signal_connect('realize', sub { open(SOCKETFILE, ">$self->{socketfile}") or PerlPanel::error("Error opening '$self->{socketfile}': $!", sub { $PerlPanel::OBJECT_REF->shutdown }); print SOCKETFILE $socket->get_id; close(SOCKETFILE); }); $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Spacer.pm0000644000175000017500000000366210143446217020226 0ustar hehe# $Id: Spacer.pm,v 1.5 2004/11/07 16:25:51 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Spacer; use base 'PerlPanel::MenuBase'; use strict; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::EventBox->new; $self->widget->add(Gtk2::Label->new); $self->widget->signal_connect('button_release_event', sub { if ($_[1]->button == 3) { $self->popup; } }); $self->create_menu; $self->widget->show_all; return 1; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; $self->add_control_items; } sub popup_position { my $self = shift; my ($mouse_pos_x, undef) = PerlPanel::get_mouse_pointer_position; if (PerlPanel::position eq 'top') { return ($mouse_pos_x, PerlPanel::panel->allocation->height); } else { $self->menu->realize; return ($mouse_pos_x, PerlPanel::screen_height() - $self->menu->allocation->height - PerlPanel::panel->allocation->height); } } sub widget { return $_[0]->{widget}; } sub expand { return 1; } sub fill { return 1; } sub end { return 'start'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Tasklist.pm0000644000175000017500000000764310143477335020617 0ustar hehe# $Id: Tasklist.pm,v 1.10 2004/11/07 20:00:29 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Tasklist; use Gnome2::Wnck; use vars qw($MULTI); use strict; our $MULTI = 1; sub new { my $self = {}; $self->{package} = shift; $self->{id} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Tasklist', $self->{id}); $self->{screen} = Gnome2::Wnck::Screen->get_default; $self->{screen}->force_update; $self->{tasklist} = Gnome2::Wnck::Tasklist->new($self->{screen}); $self->{widget} = Gtk2::HBox->new; $self->widget->set_spacing(0); $self->widget->set_border_width(0); $self->resize if (PerlPanel::expanded); if ($PerlPanel::OBJECT_REF->{config}->{panel}->{expand} eq 'false') { my $button = Gtk2::Button->new; $button->signal_connect('clicked', sub { $self->popup_menu }); $self->widget->pack_start($button, 0, 0, 0); } $self->widget->pack_start($self->{tasklist}, 1, 1, 0); $self->widget->show_all; return 1; } sub resize { my $self = shift; $self->{tasklist}->set_minimum_width($self->{config}->{minimum_width}); $self->widget->set_size_request($self->{config}->{minimum_width}, PerlPanel::icon_size); } sub widget { return $_[0]->{widget}; } sub expand { return 1; } sub fill { return 1; } sub end { return 'start'; } sub get_default_config { return { minimum_width => 150, }; } sub popup_menu { my $self = shift; my $menu = Gtk2::Menu->new; my $properties_item = Gtk2::ImageMenuItem->new_from_stock('gtk-properties'); $properties_item->signal_connect('activate', sub { $self->prefs_window }); my $remove_item = Gtk2::ImageMenuItem->new_from_stock('gtk-remove'); $remove_item->signal_connect('activate', sub { PerlPanel::remove_applet('Tasklist', $self->{id}) }); $menu->add($properties_item); $menu->add($remove_item); $menu->show_all; $menu->popup(undef, undef, sub { return $self->popup_position($menu) }, undef, 3, undef); return 1; } sub popup_position { my ($self, $menu) = @_; my ($x, undef) = PerlPanel::get_mouse_pointer_position(); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { $menu->realize; return ($x, PerlPanel::screen_height() - $menu->allocation->height - PerlPanel::panel->allocation->height); } } sub prefs_window { my $self = shift; my $glade = PerlPanel::load_glade('tasklist'); $glade->get_widget('icon')->set_from_pixbuf(PerlPanel::get_applet_pbf('Tasklist')); $glade->get_widget('width_spin')->set_range(1, PerlPanel::screen_width); $glade->get_widget('width_spin')->set_value($self->{config}->{minimum_width}); $glade->get_widget('width_spin')->signal_connect('value-changed', sub { $self->{config}->{minimum_width} = $glade->get_widget('width_spin')->get_value; PerlPanel::save_config(); $self->resize if (PerlPanel::expanded); }); $glade->get_widget('prefs_dialog')->set_position('center'); $glade->get_widget('prefs_dialog')->set_icon(PerlPanel::icon); $glade->get_widget('prefs_dialog')->signal_connect('response', sub { $glade->get_widget('prefs_dialog')->destroy; }); $glade->get_widget('prefs_dialog')->show_all; return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Timer.pm0000644000175000017500000001027510227476061020072 0ustar hehe# $Id: Timer.pm,v 1.6 2005/04/14 14:20:33 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Timer; use vars qw($OGGPLAYER); use strict; chomp(our $OGGPLAYER = `which ogg123 2>/dev/null`); sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{label} = Gtk2::Label->new; $self->widget->add(Gtk2::HBox->new); $self->widget->set_relief('none'); $self->widget->child->pack_start(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('Timer', PerlPanel::icon_size)), 0, 0, 0); $self->widget->child->pack_start($self->{label}, 1, 1, 0); PerlPanel::tips->set_tip($self->widget, _('Timer')); $self->widget->show_all; $self->{label}->hide; $self->{glade} = PerlPanel::load_glade('timer'); $self->{glade}->get_widget('icon')->set_from_pixbuf(PerlPanel::get_applet_pbf('Timer', 48)); $self->{glade}->get_widget('config_dialog')->set_icon($self->{glade}->get_widget('icon')->get_pixbuf); $self->{glade}->get_widget('config_dialog')->signal_connect('delete_event', sub { $self->{glade}->get_widget('config_dialog')->hide_all; $self->widget->set_sensitive(1); return 1; }); $self->{glade}->get_widget('stop_button')->signal_connect('clicked', sub { $self->{countdown} = 0; $self->{glade}->get_widget('config_dialog')->hide_all; $self->widget->set_sensitive(1); }); $self->{glade}->get_widget('reset_button')->signal_connect('clicked', sub { $self->{countdown} = 0; $self->{glade}->get_widget('alarm')->set_active(undef); $self->{glade}->get_widget('minutes')->set_value(0); $self->{glade}->get_widget('seconds')->set_value(0); }); $self->{glade}->get_widget('start_button')->signal_connect('clicked', sub { $self->{countdown} = $self->get_countdown; $self->{glade}->get_widget('config_dialog')->hide_all; $self->widget->set_sensitive(1); }); $self->widget->signal_connect('clicked', sub { $self->{glade}->get_widget('config_dialog')->show_all; $self->widget->set_sensitive(undef); }); PerlPanel::add_timeout(1000, sub { if ($self->{countdown} < 1) { $self->{label}->hide; if ($self->{alert} == 1) { $self->alert; $self->{alert} = 0; } } else { $self->{label}->show; my $mins = int(($self->{countdown}) / 60); my $secs = $self->{countdown} - ($mins * 60); $self->{glade}->get_widget('minutes')->set_value($mins); $self->{glade}->get_widget('seconds')->set_value($secs); $self->{label}->set_text(sprintf('%02d:%02d', $mins, $secs)); $self->{countdown}--; if ($self->{countdown} == 0) { $self->{alert} = 1; } } return 1; }); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return undef; } sub get_countdown { my $self = shift; return ($self->{glade}->get_widget('minutes')->get_value * 60) + $self->{glade}->get_widget('seconds')->get_value; } sub alert { my $self = shift; PerlPanel::notify(_('Time\'s Up!')); if ($self->{glade}->get_widget('alarm')->get_active) { $self->alarm; } return 1; } sub alarm { my $self = shift; if (!-x $OGGPLAYER) { PerlPanel::warning(_('Cannot find sound player command')); } else { my $alarm = sprintf('%s/share/%s/applets/timer/alarm.ogg', $PerlPanel::PREFIX, lc($PerlPanel::NAME)); my $cmd = join(' ', $OGGPLAYER, '--quiet', $alarm, $alarm, $alarm).' &'; system($cmd); } return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Trash.pm0000644000175000017500000000523710170463155020072 0ustar hehe# $Id: Trash.pm,v 1.1 2005/01/10 11:26:37 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2005 Gavin Brown # package PerlPanel::Applet::Trash; use File::Basename qw(basename); use vars qw($TRASH_DIR); use strict; our $TRASH_DIR = sprintf('%s/.Trash', $ENV{HOME}); sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Trash'); $self->{widget} = Gtk2::EventBox->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('Trash', PerlPanel::icon_size))); PerlPanel::tips->set_tip($self->widget, _('Drag files here to send to the Trash Can')); my $target_list = Gtk2::TargetList->new; $target_list->add(Gtk2::Gdk::Atom->new('text/uri-list'), 0, 0); $self->widget->drag_dest_set(['drop', 'motion', 'highlight'], ['copy', 'private', 'default', 'move', 'link', 'ask']); $self->widget->signal_connect(drag_data_received => sub { $self->drop_handler(@_) }); $self->widget->drag_dest_set_target_list($target_list); $self->widget->show_all; mkdir($TRASH_DIR); chmod(0700, $TRASH_DIR); return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return {}; } sub drop_handler { my ($self, @data) = @_; my @uris = split(/[\r\n]+/, $data[4]->data); if (scalar(@uris) > 0) { my $remote = 0; map { $remote++ if ($_ !~ /^file:\/\//) } @uris; if ($remote > 0) { PerlPanel::warning(_('Cannot trash remote files!')); } else { foreach my $uri (@uris) { $uri =~ s/^file:\/+/\//i; if (!rename($uri, $self->trashname($uri))) { PerlPanel::warning($!); } } } } return 1; } sub trashname { my ($self, $uri, $count) = @_; my $name = sprintf('%s/%s%s', $TRASH_DIR, basename($uri), ($count > 0 ? sprintf(' (%d)', $count) : '')); if (-e $name) { return $self->trashname($uri, $count+1); } else { return $name; } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Volume.pm0000644000175000017500000001212510171224430020242 0ustar hehe# $Id: Volume.pm,v 1.4 2005/01/12 13:41:44 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2005 Eric Andreychek # package PerlPanel::Applet::Volume; use vars qw($VERSION); use strict; $VERSION = '0.17'; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); my $loaded = 0; eval { # we use a require() here instead of use(), because use() causes a compile-time # error that the PerlPanel::load_applet catches, but require() causes a run-time # error that the eval() catches: require Audio::Mixer && ($loaded = 1); }; if ($loaded == 0) { PerlPanel::warning(_('The Volume applet requires the Audio::Mixer module!')); $self->{active} = 0; } else { $self->{active} = 1; } return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Volume'); $self->{widget} = Gtk2::Button->new; $self->widget->add(Gtk2::Image->new_from_pixbuf(PerlPanel::get_applet_pbf('volume', PerlPanel::icon_size))); $self->widget->set_relief('none'); if ($self->{active} == 0) { $self->widget->set_sensitive(0); PerlPanel::tips->set_tip($self->widget, _('Volume Control (disabled due to missing Audio::Mixer dependency)')); } else { $self->widget->signal_connect('clicked', sub { $self->_handle_click }); PerlPanel::tips->set_tip($self->widget, _('Volume Control')); } $self->widget->show_all; return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } sub get_default_config { return { channel => 'vol', }; } sub _handle_click { my $self = shift; if (defined($self->{window})) { $self->_remove_popup; } else { $self->_mix; } return 1; } sub _remove_popup { my $self = shift; Gtk2->grab_remove($self->{window}); $self->{window}->destroy; delete($self->{window}); return 1; } sub _mix { my $self = shift; $self->{window} = Gtk2::Window->new('popup'); my $vbox = Gtk2::VBox->new(0, 0); my ($cur_val) = Audio::Mixer::get_cval($self->{config}{channel}); my $adj = Gtk2::Adjustment->new(-$cur_val, -100, 0.0, 5, 10, 0.0); $adj->signal_connect(value_changed => \&_update_mixer, $self ); my $vscale = Gtk2::VScale->new($adj); $vscale->set_size_request(-1, 100); $vscale->set_update_policy('continuous'); $vscale->set_digits(1); $vscale->set_draw_value(0); $vbox->pack_start(Gtk2::Label->new(_('+')), 1, 1, 0); $vbox->pack_start($vscale, 1, 1, 0); $vscale->show; $vbox->pack_start(Gtk2::Label->new(_('-')), 1, 1, 0); $vbox->set_border_width(6); my $port = Gtk2::Viewport->new; $port->set_shadow_type('out'); $port->add($vbox); $self->{window}->add($port); $self->{window}->set_position('mouse'); $self->{window}->set_title(_('Audio Mixer')); $self->{window}->set_icon(PerlPanel::icon); # Determine if the click was outside the popup, and if so, we can remove # the popup. This code is from the cellrenderer_date.pl example that comes # with Gtk2-perl. Thanks to muppet for pointing it out. $self->{window}->signal_connect(button_press_event => sub { my ($popup, $event) = @_; if ($event->button == 1) { my ($x, $y) = ($event->x_root, $event->y_root); my ($xoffset, $yoffset) = $popup->window->get_root_origin; my $allocation = $popup->allocation; my $x1 = $xoffset + 2 * $allocation->x; my $y1 = $yoffset + 2 * $allocation->y; my $x2 = $x1 + $allocation->width; my $y2 = $y1 + $allocation->height; unless ($x > $x1 && $x < $x2 && $y > $y1 && $y < $y2) { $self->_remove_popup; return 1; } } return 0; }); $self->{window}->realize; $self->{window}->move($self->_popup_position); $self->{window}->show_all; # Grab the focus and pointer so we learn about all button events Gtk2->grab_add($self->{window}); $self->{window}->grab_focus; Gtk2::Gdk->pointer_grab( $self->{window}->window, 1, [qw(button-press-mask button-release-mask pointer-motion-mask)], undef, undef, 0 ); return 1; } sub _update_mixer { my ($get, $self) = @_; Audio::Mixer::set_cval($self->{config}{channel}, abs($get->value)); return 1; } sub _popup_position { my $self = shift; my ($x, undef) = PerlPanel::get_widget_position($self->widget); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { my $t = ($self->{window}->get_size)[1]; return ($x, ((PerlPanel::screen_height) - $t - (PerlPanel::panel->allocation->height))); } } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/Webcam.pm0000644000175000017500000001227510227500232020176 0ustar hehe# $Id: Webcam.pm,v 1.3 2005/04/14 14:39:22 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::Webcam; use base 'PerlPanel::MenuBase'; use vars qw($MULTI %COMMANDS); use File::Basename qw(basename); use strict; our $MULTI = 1; our %COMMANDS = ( wget => '%s "{url}" --quiet --output-document="{file}"', GET => '%s "{url}" > "{file}"', curl => '%s "{url}" > "{file}"', ); sub new { my ($package, $id) = @_; my $self = { package => $package, id => $id, }; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('Webcam', $self->{id}); $self->{loading} = 0; $self->{widget} = Gtk2::Button->new; $self->{image} = Gtk2::Image->new; $self->{image}->set_from_pixbuf(PerlPanel::get_applet_pbf('webcam', PerlPanel::icon_size)); $self->widget->add($self->{image}); PerlPanel::tips->set_tip($self->{widget}, _('Webcam')); $self->widget->set_relief('none'); CMDS: foreach my $command (keys(%COMMANDS)) { chomp(my $cmd = `which $command 2> /dev/null`); if (-x $cmd) { $self->{command} = sprintf($COMMANDS{$command}, $command); last CMDS; } } if (!defined($self->{command})) { PerlPanel::warning(_('The Webcam applet cannot find a program that it needs. You should install wget, curl or LWP')); $self->widget->set_sensitive(undef); } else { $self->widget->signal_connect('button_release_event', sub { if ($_[1]->button == 1) { if ($self->{loaded} = 1) { $self->image_dialog; } else { $self->config_dialog; } } elsif ($_[1]->button == 3) { $self->popup; } return undef; }); $self->{glade} = PerlPanel::load_glade('webcam'); my $icon = PerlPanel::get_applet_pbf('Webcam', 48); $self->{glade}->get_widget('config_dialog_icon')->set_from_pixbuf($icon); $self->{glade}->get_widget('config_dialog')->set_icon($icon); $self->{glade}->get_widget('image_dialog')->set_icon($icon); $self->{glade}->get_widget('image_dialog')->signal_connect('delete_event', sub { shift()->hide_all; return 1; }); $self->{glade}->get_widget('image_dialog')->signal_connect('response', sub { shift()->hide_all; }); $self->{glade}->get_widget('config_dialog')->signal_connect('delete_event', sub { $self->widget->set_sensitive(1); shift()->hide_all; return 1; }); $self->{glade}->get_widget('config_dialog')->signal_connect('response', sub { if ($_[1] eq 'ok') { $self->{config}->{url} = $self->{glade}->get_widget('url_entry')->get_text; $self->{config}->{interval} = $self->{glade}->get_widget('interval_spin')->get_value; PerlPanel::save_config; } $self->widget->set_sensitive(1); shift()->hide_all; return 1; }); $self->update; } $self->create_menu; $self->widget->show_all; return 1; } sub get_default_config { return {}; } sub image_dialog { my $self = shift; $self->{glade}->get_widget('image_dialog')->show_all; } sub config_dialog { my $self = shift; $self->{glade}->get_widget('url_entry')->set_text($self->{config}->{url}); $self->{glade}->get_widget('interval_spin')->set_value($self->{config}->{interval}); $self->{glade}->get_widget('config_dialog')->show_all; } sub update { my $self = shift; if ($self->{config}->{url} ne '' && $self->{loading} == 0) { my $tmpfile = sprintf('%s/.%s/webcam-%s', $ENV{HOME}, lc($PerlPanel::NAME), basename($self->{config}->{url})); my $cmd = $self->{command}; $cmd =~ s/{url}/$self->{config}->{url}/; $cmd =~ s/{file}/$tmpfile/; $self->{loading} = 1; $self->{loaded} = 0; PerlPanel::exec_wait($cmd, sub { if ($? == 0) { $self->{loading} = 0; $self->{image}->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size($tmpfile, PerlPanel::icon_size, PerlPanel::icon_size)); $self->{glade}->get_widget('image')->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file($tmpfile)); unlink($tmpfile); $self->{loaded} = 1; PerlPanel::add_timeout(($self->{config}->{interval} * 60 * 1000), sub { $self->update }); } }); } return undef; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; my $config_item = Gtk2::ImageMenuItem->new_from_stock('gtk-preferences'); $config_item->signal_connect('activate', sub { $self->config_dialog }); my $remove_item = Gtk2::ImageMenuItem->new_from_stock('gtk-remove'); $remove_item->signal_connect('activate', sub { PerlPanel::remove_applet('Webcam', $self->{id}) }); $self->menu->append($config_item); $self->menu->append($remove_item); return 1; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/WiFiMonitor.pm0000755000175000017500000001171310174243167021221 0ustar hehe# $Id: WiFiMonitor.pm,v 1.8 2005/01/21 18:14:15 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2004-2005 Nathan Powell # package PerlPanel::Applet::WiFiMonitor; use vars qw($MULTI); use strict; $MULTI = 1; sub new { my $self = {}; $self->{package} = shift; $self->{id} = shift; bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('WiFiMonitor', $self->{id}); $self->{widget} = Gtk2::EventBox->new; if ($self->{config}{show_icon} eq 'true' and $self->{config}{show_percent} eq 'true' ) { my $icon = PerlPanel::get_applet_pbf('WiFiMonitor', PerlPanel::icon_size); $self->{icon} = Gtk2::Image->new_from_pixbuf($icon); $self->{label} = Gtk2::Label->new; $self->widget->add(Gtk2::HBox->new); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start($self->{label}, 1, 1, 0); } elsif ( $self->{config}{show_percent} eq 'true' ) { $self->{label}= Gtk2::Label->new(); $self->{widget}->add($self->{label}); } else { my $icon = PerlPanel::get_applet_pbf('WiFiMonitor', PerlPanel::icon_size); $self->{icon} = Gtk2::Image->new_from_pixbuf($icon); $self->{label} = Gtk2::Label->new; $self->widget->add(Gtk2::HBox->new); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); } PerlPanel::tips->set_tip($self->{widget}, _('Wireless Signal Strength')); $self->widget->show_all; $self->update; PerlPanel::add_timeout($self->{config}->{interval}, sub { $self->update }); return 1; } sub update { my $self = shift; my ( $signal, $device ); if (!open(WIRELESS, '/proc/net/wireless')) { print STDERR "*** Error opening '/proc/net/wireless': $!\n"; $self->{label}->set_text('ERR'); $self->_set_icon("broken-0.png"); return undef; } else { my $count = 1; while (my $wireless = ) { if ( $count == 1 or $count == 2 ) { $count++; next; } $count++; if ( $self->{config}{device} ) { if ( $wireless =~ /^\s*$self->{config}{device}:/ ) { $device = $self->{config}{device}; ( $signal ) = $wireless =~ /^\s*$self->{config}{device}:\s+\d+\s+(\d+)/; last; } } else { ($device, $signal) = $wireless =~ /^\s*(\w+\d):\s+\d+\s+(\d+)/; last; } } close(WIRELESS); } if ( $device and $signal ) { my $percent = sprintf("%d%", log($signal) / log(92) * 100); $self->{label}->set_text($percent); PerlPanel::tips->set_tip($self->{widget}, _("Wireless Signal Strength for $device: $percent")); if ( $percent == 0 ) { $self->_set_icon("no-link-0.png"); } elsif ( $percent >= 1 and $percent <= 40 ) { $self->_set_icon("signal-1-40.png"); } elsif ( $percent >= 41 and $percent <= 60 ) { $self->_set_icon("signal-41-60.png"); } elsif ( $percent >= 61 and $percent <= 80 ) { $self->_set_icon("signal-61-80.png"); } elsif ( $percent >= 81 and $percent <= 100 ) { $self->_set_icon("signal-81-100.png"); } } else { $self->{label}->set_text('ERR'); $self->_set_icon("broken-0.png"); return undef; } return 1; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub get_default_config { return { interval => 1000, show_icon => 'true', show_percent => 'true', device => '', }; } sub _set_icon { my ( $self, $icon ) = @_; return unless $self->{config}{show_icon} eq 'true'; my $image_dir = sprintf('%s/share/%s/applets/wifimonitor', $PerlPanel::PREFIX, lc($PerlPanel::NAME)); $self->{icon}->set_from_file("$image_dir/$icon"); $self->{widget}->queue_draw; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/WindowMenu.pm0000644000175000017500000001030210336120575021072 0ustar hehe# $Id: WindowMenu.pm,v 1.15 2005/11/14 14:38:53 mcummings Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::WindowMenu; use base 'PerlPanel::MenuBase'; use Gnome2::Wnck; use strict; sub configure { my $self = shift; $self->{config} = PerlPanel::get_config('WindowMenu'); $self->{screen} = Gnome2::Wnck::Screen->get_default; $self->{screen}->force_update; $self->{icon} = Gtk2::Image->new; $self->{screen}->signal_connect('active-window-changed', sub { $self->update_icon }); my $callback = sub { if (scalar($self->get_workspace_windows) < 1) { $self->{icon}->set_from_pixbuf(PerlPanel::get_applet_pbf('WindowMenu', PerlPanel::icon_size)); } }; $self->{screen}->signal_connect('active-workspace-changed', $callback); $self->{screen}->signal_connect('window-closed', $callback); $self->update_icon; $self->{widget} = Gtk2::Button->new; $self->widget->set_relief('none'); if ($self->{config}->{label} ne '') { $self->widget->add(Gtk2::HBox->new); $self->widget->child->set_border_width(0); $self->widget->child->set_spacing(0); $self->widget->child->pack_start($self->{icon}, 0, 0, 0); $self->widget->child->pack_start(Gtk2::Label->new($self->{config}->{label}), 1, 1, 0); } else { $self->widget->add($self->{icon}); } $self->widget->signal_connect('clicked', sub { $self->clicked }); PerlPanel::tips->set_tip($self->widget, _('Window List')); $self->widget->show_all; return 1; } sub clicked { my $self = shift; $self->create_menu; $self->popup; } sub create_menu { my $self = shift; $self->{menu} = Gtk2::Menu->new; my @windows = $self->get_workspace_windows; if (scalar(@windows) < 1) { my $item = Gtk2::MenuItem->new_with_label(_('No Windows Open')); $item->set_sensitive(0); $self->menu->append($item); } else { foreach my $window (@windows) { my $label = $window->get_name; $label = (length($label) < 25 ? $label : substr($label, 0, 22).'...'); my $icon = $window->get_icon; if ($icon->get_height > PerlPanel::menu_icon_size()) { $icon = $icon->scale_simple(($icon->get_width * (PerlPanel::menu_icon_size() / $icon->get_height)), PerlPanel::menu_icon_size(), 'bilinear'); } $self->menu->append($self->menu_item( $label, ($window->get_icon_is_fallback ? PerlPanel::get_applet_pbf('WindowMenu-default', PerlPanel::icon_size) : $icon), sub { $window->activate(time()) }, )); } } return 1; } sub get_default_config { return undef; } sub update_icon { my $self = shift; my $window = $self->{screen}->get_active_window; if (!defined($window)) { return undef; } else { my $pbf; if (lc($window->get_name) eq 'perlpanel') { if (scalar($self->get_workspace_windows) < 1) { $pbf = PerlPanel::get_applet_pbf('WindowMenu', PerlPanel::icon_size); } else { return undef; } } else { $pbf = ($window->get_icon_is_fallback ? PerlPanel::get_applet_pbf('WindowMenu-default', PerlPanel::icon_size) : $window->get_icon); } if ($pbf->get_height > PerlPanel::icon_size()) { $pbf = $pbf->scale_simple(($pbf->get_width * (PerlPanel::icon_size() / $pbf->get_height)), PerlPanel::icon_size(), 'bilinear'); } $self->{icon}->set_from_pixbuf($pbf); return 1; } } sub get_workspace_windows { my $self = shift; my $workspace = $self->{screen}->get_active_workspace; my @windows; foreach my $window ($self->{screen}->get_windows) { if (!$window->is_skip_tasklist && $window->get_workspace->get_number == $workspace->get_number) { push(@windows, $window); } } return @windows; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/Applet/XMMS.pm0000644000175000017500000001034210227472054017567 0ustar hehe# $Id: XMMS.pm,v 1.19 2005/04/14 13:46:20 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::Applet::XMMS; use vars qw(%TOOLTIPS %CALLBACKS $ICON_DIR $SLIDER_SIZE); use strict; our %TOOLTIPS = ( prev => _('Play Previous Track'), stop => _('Stop Playing'), play => _('Play'), pause => _('Pause'), next => _('Play Next Track'), ); our %CALLBACKS = ( prev => sub { $_[0]->{controller}->playlist_prev }, stop => sub { $_[0]->{controller}->stop }, play => sub { if ($_[0]->{controller}->is_playing) { $_[0]->{controller}->pause } else { $_[0]->{controller}->play }}, next => sub { $_[0]->{controller}->playlist_next }, ); our $ICON_DIR = sprintf('%s/share/%s/applets/xmms', $PerlPanel::PREFIX, lc($PerlPanel::NAME)); our $SLIDER_SIZE = 150; sub new { my $self = {}; $self->{package} = shift; bless($self, $self->{package}); my $loaded = 0; eval('use Xmms::Remote; $loaded = 1'); if ($loaded == 0) { PerlPanel::warning(_('The XMMS applet requires the Xmms-Perl module!')); return undef; } else { return $self; } } # # A brief note on how the volume controller works: # # We can use the 'value-changed' signal to monitor changes to the slider, but # this introduces a jitter that makes it slightly useless. instead, we place # the value into volume_pending and set the volume_slider_at_rest to 0. # # The timeout callback does the setting of the volume - it will do so when # the volume_slider_at_rest is 1 and volume_pending is defined. # sub configure { my $self = shift; $self->{widget} = Gtk2::HBox->new; $self->{controller} = Xmms::Remote->new; $self->{pbfs}{pause} = Gtk2::Gdk::Pixbuf->new_from_file_at_size(sprintf('%s/%s.png', $ICON_DIR, 'pause'), PerlPanel::icon_size, PerlPanel::icon_size); foreach my $name (qw(prev play stop next)) { $self->{buttons}{$name} = $self->create_button($name); my $func = $CALLBACKS{$name}; $self->{buttons}{$name}->signal_connect('clicked', sub { &$func($self) }); PerlPanel::tips->set_tip($self->{buttons}{$name}, $TOOLTIPS{$name}); $self->{widget}->pack_start($self->{buttons}{$name}, 0, 0, 0); } PerlPanel::add_timeout(50, sub { my $running = 0; eval('$running = ($self->{controller}->is_running ? 1 : 0)'); if ($running == 0) { $self->widget->set_sensitive(0); } elsif (defined($self->{buttons}{play}) && defined($self->{buttons}{play}->child)) { $self->widget->set_sensitive(1); if ($self->{controller}->is_playing) { $self->{buttons}{stop}->set_sensitive(1); if ($self->{controller}->is_paused) { $self->{buttons}{play}->child->set_from_pixbuf($self->{pbfs}{play}); PerlPanel::tips->set_tip($self->{buttons}{play}, $TOOLTIPS{play}); } else { $self->{buttons}{play}->child->set_from_pixbuf($self->{pbfs}{pause}); PerlPanel::tips->set_tip($self->{buttons}{play}, $TOOLTIPS{pause}); } } else { $self->{buttons}{stop}->set_sensitive(0); $self->{buttons}{play}->child->set_from_pixbuf($self->{pbfs}{play}); } return 1; } }); $self->widget->show_all; return 1; } sub create_button { my ($self, $id) = @_; $self->{pbfs}{$id} = Gtk2::Gdk::Pixbuf->new_from_file_at_size(sprintf('%s/%s.png', $ICON_DIR, $id), PerlPanel::icon_size, PerlPanel::icon_size); my $button = Gtk2::Button->new; my $image = Gtk2::Image->new_from_pixbuf($self->{pbfs}{$id}); $button->set_relief('none'); $button->add($image); return $button; } sub widget { return $_[0]->{widget}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'end'; } sub get_default_config { return undef; } 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/DesktopEntry.pm0000644000175000017500000000407710166312134020213 0ustar hehe# $Id: DesktopEntry.pm,v 1.12 2005/01/03 18:52:12 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2004 Gavin Brown # package PerlPanel::DesktopEntry; use Carp; use X11::FreeDesktop::DesktopEntry; use base 'X11::FreeDesktop::DesktopEntry'; use Gnome2::VFS; use strict; =pod =head1 NAME PerlPanel::DesktopEntry - an interface to .desktop files for the PerlPanel. =head1 INHERITANCE This modules inherits from X11::FreeDesktop::DesktopEntry. See L for more information. =head1 CONSTRUCTOR my $entry = PerlPanel::DesktopEntry->new($uri); returns a desktop entry object using the data found at C<$uri>. Gnome2::VFS is used to retrieve the URI. =cut sub new { my ($package, $uri) = @_; Gnome2::VFS->init; my $data = get_file_contents($uri); if ($data eq '') { carp("got no data for $uri"); return undef; } my $self = X11::FreeDesktop::DesktopEntry->new_from_data($data); if (!defined($self)) { return undef; } else { bless($self, $package); return $self; } } sub get_file_contents { my $uri = shift; my ($result, $info) = Gnome2::VFS->get_file_info($uri, 'default'); if ($result eq 'ok' && $info->{type} eq 'regular') { return Gnome2::VFS->read_entire_file($uri); } else { return undef; } } =pod =head1 SEE ALSO =over =item * L =item * L =back =cut 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel/MenuBase.pm0000644000175000017500000002652210170452210017251 0ustar hehe# $Id: MenuBase.pm,v 1.39 2005/01/10 10:10:16 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel::MenuBase; use PerlPanel::Applet::Commander; use Gtk2::SimpleList; use vars qw($COMMANDER); use strict; =pod =head1 NAME PerlPanel::MenuBase - a base class for PerlPanel menu applets. =head1 SYNOPSIS package PerlPanel::Applet::MyMenu; use base 'PerlPanel::MenuBase'; use strict; sub create_menu { my $self = shift; $self->menu->append($self->menu_item( 'Hello World!', $icon, sub { print "Hello World!\n" } )); return 1; } 1; =head1 DESCRIPTION C is a base class that does as much as possible to abstract the nuts-and-bolts details of building a PerlPanel menu applet. If you use C to write a menu applet, you don't need to worry about menu hierarchies or icons - all that's done for you. Instead to can concentrate on building your menu backend. =head1 USAGE C is a base class - that means, you must write a Perl module that inherits from it. The C line in the example above is one way you can do this. Then you simply override the C and C methods with your own. =cut our $COMMANDER = PerlPanel::Applet::Commander->new; $COMMANDER->configure; sub new { my $self = {}; $self->{package} = shift; my $multi; eval(sprintf('$multi = $%s::MULTI;', $self->{package})); if (defined($multi)) { $self->{id} = shift(); } bless($self, $self->{package}); return $self; } sub configure { my $self = shift; $self->{widget} = Gtk2::Button->new; $self->{menu} = Gtk2::Menu->new; $self->widget->signal_connect('clicked', sub { $self->popup }); $self->create_menu; $self->add_control_items if ($self->show_control_items); return 1; } sub widget { return $_[0]->{widget}; } sub menu { return $_[0]->{menu}; } sub expand { return 0; } sub fill { return 0; } sub end { return 'start'; } =pod =head1 STANDARD METHODS $self->add_control_items; This method appends the standard set of PerlPanel control options to the menu. The menu will subsequently look like this: | | | ----------------------------- | | Lock Screen | | Run Program... | | Take Screenshot... | | ----------------------------- | | Shut Down... | | Reboot... | | ----------------------------- | | Configure... | | Close Panel | | Add To Panel > | | ----------------------------- | | About... | +-------------------------------+ =cut sub add_control_items { my $self = shift; my %params = @_; if (scalar($self->menu->get_children) > 0) { $self->menu->append(Gtk2::SeparatorMenuItem->new); } ### this currently does nothing: if ((defined($params{menu_data}) && defined($params{menu_edit_callback})) || defined($params{menu_edit_command})) { my $callback; if (defined($params{menu_data}) && defined($params{menu_edit_callback})) { $callback = sub { $self->run_menu_editor($params{menu_data}, $params{menu_edit_callback}) }; } elsif (defined($params{menu_edit_command})) { $callback = sub { system("$params{menu_edit_command} &") }; } my $item = $self->menu_item( _('Edit Menu...'), 'gtk-properties', $callback, ); $item->set_sensitive(0) unless (defined($params{menu_edit_command})); $self->menu->append($item); $self->menu->append(Gtk2::SeparatorMenuItem->new); } chomp(my $xscreensaver = `which xscreensaver-command 2> /dev/null`); if (-x $xscreensaver) { my $lock_item = $self->menu_item(_('Lock Screen'), PerlPanel::get_applet_pbf_filename('lock'), sub { system("$xscreensaver -lock &") }); $lock_item->signal_connect('expose-event', sub { chomp(my $line = `pidof xscreensaver 2> /dev/null`); my @pids = split(/[\s\t]+/, $line); my $pid = shift(@pids); if (int($pid) < 1) { $lock_item->set_sensitive(0); } else { if (-e "/proc/$pid") { if ((stat("/proc/$pid"))[4] ne $<) { $lock_item->set_sensitive(0); } else { $lock_item->set_sensitive(1); } } } return undef; }); $self->menu->append($lock_item); } $self->menu->append($self->menu_item(_('Run Program...'), PerlPanel::get_applet_pbf_filename('commander'), sub { $COMMANDER->run; })); $self->menu->append($self->menu_item(_('Take Screenshot...'), PerlPanel::get_applet_pbf_filename('screenshot'), sub { require('ScreenShot.pm'); my $screenshot = PerlPanel::Applet::ScreenShot->new; $screenshot->configure; $screenshot->prompt; })); $self->menu->append(Gtk2::SeparatorMenuItem->new); # here we callously assume that the presence of this file means that bog-standard users can poweroff and reboot: if (-e '/etc/pam.d/poweroff') { $self->menu->append($self->menu_item( _('Shut Down...'), PerlPanel::lookup_icon(sprintf('%s-action-shutdown', lc($PerlPanel::NAME))), sub { PerlPanel::question( _('Are you sure you want to shut down?'), sub { system("poweroff") }, sub { }, ); }, )); } if (-e '/etc/pam.d/reboot') { $self->menu->append($self->menu_item( _('Reboot...'), PerlPanel::lookup_icon(sprintf('%s-action-reboot', lc($PerlPanel::NAME))), sub { PerlPanel::question( _('Are you sure you want to reboot?'), sub { system("reboot") }, sub { }, ); }, )); } $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->menu->append($self->menu_item(_('Configure...'), PerlPanel::get_applet_pbf_filename('configurator'), sub { require('Configurator.pm'); my $configurator = PerlPanel::Applet::Configurator->new; $configurator->configure; $configurator->init; })); if ($PerlPanel::OBJECT_REF->{config}->{panel}->{show_quit_button} eq 'true') { $self->menu->append( $self->menu_item(_('Close Panel'), 'gtk-close', sub { PerlPanel::shutdown } )); } my $item = $self->menu_item(_('Add To Panel'), 'gtk-add'); my $applet_menu = Gtk2::Menu->new; $item->set_submenu($applet_menu); my $registry = PerlPanel::load_appletregistry; foreach my $category (@PerlPanel::APPLET_CATEGORIES) { my $icon = PerlPanel::lookup_icon(sprintf('%s-applets-%s', lc($PerlPanel::NAME), lc($category))); unless (-e $icon) { $icon = PerlPanel::lookup_icon(sprintf('%s-applets', lc($PerlPanel::NAME))); } my $item = $self->menu_item( _($category), $icon, ); my $submenu = Gtk2::Menu->new; $item->set_submenu($submenu); $applet_menu->append($item); foreach my $applet (sort @{$registry->{_categories}->{$category}}) { my $item = $self->menu_item( $applet, PerlPanel::get_applet_pbf($applet, PerlPanel::menu_icon_size), sub {$self->add_applet_dialog($applet)}, ); PerlPanel::tips->set_tip($item, $registry->{$applet}); $submenu->append($item); } } if (defined($registry->{_categories}->{''})) { foreach my $applet (sort @{$registry->{_categories}->{''}}) { my $item = $self->menu_item( $applet, PerlPanel::get_applet_pbf($applet, PerlPanel::menu_icon_size), sub {$self->add_applet_dialog($applet)}, ); PerlPanel::tips->set_tip($item, $registry->{$applet}); $applet_menu->append($item); } $applet_menu->append(Gtk2::SeparatorMenuItem->new); } my $add_item = $self->menu_item( _('Install Applet...'), 'gtk-add', sub { PerlPanel::install_applet_dialog() }, ); PerlPanel::tips->set_tip($add_item, _('Install a New applet'), sub { $self->create_menu if ($_[0] == 1) }); $applet_menu->append($add_item); $self->menu->append($item); $self->menu->append(Gtk2::SeparatorMenuItem->new); $self->menu->append($self->menu_item(_('About...'), PerlPanel::get_applet_pbf_filename('about'), sub { require('About.pm'); my $about = PerlPanel::Applet::About->new; $about->configure; $about->about; })); return 1; } =pod my $item = $self->menu_item($label, $icon, $callback); This returns a ready-prepared Gtk2::ImageMenuItem. This method does a lot of hard work for you - C<$label> is set as the text label for the item, and if defined, C<$callback> is connected to the C<'activate'> signal. C<$icon> can be either a file, a C, or a stock ID. C will automagically resize the icon to fit in with the rest of the menu. =cut sub menu_item { my ($self, $label, $icon, $callback) = @_; my $item; my $pbf; if (-f $icon) { # it's a file: $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($icon, PerlPanel::menu_icon_size, PerlPanel::menu_icon_size); } elsif (ref($icon) eq 'Gtk2::Gdk::Pixbuf') { # it's a pixbuf: $pbf = $icon; } elsif ($icon =~ /^gtk-/) { # assume it's a stock ID: $pbf = $self->widget->render_icon($icon, PerlPanel::menu_icon_size_name); } else { $pbf = $self->widget->render_icon('gtk-new', PerlPanel::menu_icon_size_name); } if (ref($pbf) ne 'Gtk2::Gdk::Pixbuf') { $item = Gtk2::MenuItem->new_with_label($label); } else { $item = Gtk2::ImageMenuItem->new_with_label($label); $item->set_image(Gtk2::Image->new_from_pixbuf($pbf)); } if (defined($callback)) { $item->signal_connect('activate', $callback); } return $item; } sub popup { my $self = shift; $self->menu->show_all; $self->menu->popup(undef, undef, sub { return $self->popup_position(@_) }, undef, undef, 0); return 1; } sub popup_position { my $self = shift; my ($x, undef) = PerlPanel::get_widget_position($self->widget); $x = 0 if ($x < 5); if (PerlPanel::position eq 'top') { return ($x, PerlPanel::panel->allocation->height); } else { $self->menu->realize; return ($x, PerlPanel::screen_height() - $self->menu->allocation->height - PerlPanel::panel->allocation->height); } } =pod my $icon = $self->get_icon($string, $is_submenu_parent); This method is deprecated and is no longer available. Use PerlPanel::lookup_icon() instead. =cut sub add_applet_dialog { my ($self, $applet) = @_; # place the new applet next to the menu: my $idx = 0; foreach my $applet ($PerlPanel::OBJECT_REF->{hbox}->get_children) { last if ($applet eq $self->widget); $idx++; } if ($idx >= 0) { splice(@{$PerlPanel::OBJECT_REF->{config}{applets}}, $idx+1, 0, $applet); $PerlPanel::OBJECT_REF->load_applet($applet, $idx+1); PerlPanel::save_config(); } return 1; } sub run_menu_editor { my ($self, $data, $callback) = @_; my $glade = PerlPanel::load_glade('menu-editor'); my $dialog = $glade->get_widget('main_window'); $dialog->set_icon(PerlPanel::icon); # this will be a Gtk2::Simple::Tree one day: my $list = Gtk2::SimpleList->new_from_treeview( $glade->get_widget('menu_tree'), 'entry' => 'text', ); $dialog->signal_connect('response', sub { my $data = $list->{data}, $dialog->destroy; &{$callback}($data); }); } sub file_age { my $self = shift; return (stat($self->{file}))[9]; } =pod =head1 SEE ALSO =over =item * L =item * L =item * L =back =cut 1; PerlPanel-0.9.1+cvs20051225/lib/PerlPanel.pm0000644000175000017500000011321010206402472015546 0ustar hehe# $Id: PerlPanel.pm,v 1.144 2005/02/21 15:58:50 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # package PerlPanel; use Gtk2; use Gtk2::Helper; use Gtk2::GladeXML; use Gtk2::SimpleList; use Gnome2::Wnck; use Data::Dumper; use Digest::MD5 qw(md5_hex); use POSIX qw(setlocale); use Locale::gettext; use base 'Exporter'; use File::Basename qw(basename dirname); use XML::Simple; use vars qw( $NAME $VERSION $DESCRIPTION $VERSION @LEAD_AUTHORS @CO_AUTHORS $URL $LICENSE $PREFIX $LIBDIR %DEFAULTS %SIZE_MAP $TOOLTIP_REF $OBJECT_REF $APPLET_ICON_DIR $APPLET_ICON_SIZE @APPLET_DIRS $PIDFILE $RUN_COMMAND_FILE $RUN_HISTORY_FILE $RUN_HISTORY_LENGTH @APPLET_CATEGORIES $DEFAULT_THEME $APPLET_ERROR_MARKUP $DESKTOP_NAMESPACE $DEFAULT_RCFILE @GLADE_PATHS $HIDE_OFFSET); use strict; $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; our @EXPORT_OK = qw(_); # this exports the _() function, for il8n. our $NAME = 'PerlPanel'; our $VERSION = '@VERSION@'; # this is replaced at build time. our @LEAD_AUTHORS = ( 'Gavin Brown', ); our @CO_AUTHORS = ( 'Eric Andreychek', 'Scott Arrington', 'Torsten Schoenfeld', 'Marc Brockschmidt', 'Mark Ng', 'Nathan Powell', ); our $URL = 'http://jodrell.net/projects/perlpanel'; our %DEFAULTS = ( version => $VERSION, panel => { position => 'bottom', spacing => 0, size => 24, has_border => 'true', menu_size => 'medium', menu_icon_size => 'medium', expand => 'true', use_struts => 'true', icon_theme => $DEFAULT_THEME, }, appletconf => { null => {}, }, multi => { null => {}, }, applets => [ 'ActionMenu', 'Tasklist', 'Clock', 'Pager', ], ); our %SIZE_MAP = ( tiny => ['16', 'menu'], small => ['18', 'small-toolbar'], medium => ['24', 'large-toolbar'], large => ['48', 'dialog'], ); our $APPLET_ICON_SIZE = 48; our $RUN_COMMAND_FILE = sprintf('%s/.%s/run-command', $ENV{HOME}, lc($NAME)); our $PIDFILE = sprintf('%s/.%s/%s.pid', $ENV{HOME}, lc($NAME), lc($NAME)); our $RUN_HISTORY_FILE = sprintf('%s/.perlpanel/run-history', $ENV{HOME}); our $RUN_HISTORY_LENGTH = 15; our $HIDE_OFFSET = 2; our @APPLET_CATEGORIES = qw(Actions System Utilities Launchers Menus Amusements); our $DEFAULT_THEME = 'gnome'; our $APPLET_ERROR_MARKUP = <<"END"; %s END sub new { my $self = {}; $self->{package} = shift; $self->{rcfile} = (defined($ARGV[0]) ? $ARGV[0] : sprintf('%s/.%src', $ENV{HOME}, lc($NAME))); $OBJECT_REF = $self; bless($self, $self->{package}); Gtk2->init; our $APPLET_ICON_DIR = sprintf('%s/share/pixmaps/%s/applets', $PREFIX, lc($NAME)); our $DEFAULT_RCFILE = sprintf('%s/etc/%src', $PREFIX, lc($NAME)); our @APPLET_DIRS = ( sprintf('%s/.%s/applets', $ENV{HOME}, lc($NAME)), # user-installed applets sprintf('%s/%s/Applet', $LIBDIR, $NAME), # admin-installed or sandbox applets ($LIBDIR is ); # determined at runtime) $self->{locale} = (defined($ENV{LC_MESSAGES}) ? $ENV{LC_MESSAGES} : $ENV{LANG}); # stuff for ill8n - this has to be done before any strings are used: setlocale(LC_ALL, $self->locale); bindtextdomain(lc($NAME), sprintf('%s/share/locale', $PREFIX)); textdomain(lc($NAME)); our $DESCRIPTION = _('The Lean, Mean, Panel Machine!'); our $LICENSE = _('This program is Free Software. You may use it under the terms of the GNU General Public License.'); our @GLADE_PATHS = ( sprintf('%s/.local/share/%s/glade/%%s.glade', $ENV{HOME}, lc($NAME)), sprintf('%s/share/%s/glade/%%s.glade', $PREFIX, lc($NAME)), ); return $self; } sub init { my $self = shift; $self->setup_launch_feedback; $self->load_config; $self->get_screen; $self->load_icon_theme; $self->build_panel; $self->configure; $self->load_applets; $self->setup_dnd; $self->{hbox}->show; $self->{vbox}->show; $self->{border}->show; $self->{panel}->show; if ($self->{config}->{panel}->{autohide} eq 'true') { $self->autohide; } else { $self->move; } # if/when gtk2-perl gets bonobo support, we can register # the panel here with: # # /* Strip off the screen portion of the display */ # display = g_strdup (g_getenv ("DISPLAY")); # p = strrchr (display, ':'); # if (p) { # p = strchr (p, '.'); # if (p) # p [0] = '\0'; # } # # iid = bonobo_activation_make_registration_id ("OAFIID:GNOME_PanelShell", display); # reg_res = bonobo_activation_active_server_register (iid, BONOBO_OBJREF (panel_shell)); # # which I copied from gnome-panel/panel-shell.c. This will make PerlPanel act as a "real" # GNOME panel. chdir($ENV{HOME}); Gtk2->main; return 1; } sub locale { return $OBJECT_REF->{locale} } sub get_screen { my $self = shift; my $code = '$self->{screen} = Gtk2::Gdk::Screen->get_default'; return eval($code); } sub parse_xdpyinfo { my $self = shift; print STDERR "*** using xdpyinfo to get screen dimenions, upgrading to gtk+ > 2.2.0 is recommended!\n"; chomp($self->{xdpyinfo} = `which xdpyinfo`); open(XDPYINFO, "$self->{xdpyinfo} -display $ENV{DISPLAY} |") or $self->error(_("Can't open pipe from {prog}: {error}", prog => $self->{xdpyinfo}, error => $!), sub { exit }); while () { if (/dimensions:\s+(\d+)x(\d+)\s+pixels/i) { $self->{screen_width} = $1; $self->{screen_height} = $2; } } close(XDPYINFO); return 1; } sub load_config { my $self = shift; if (-r $self->{rcfile}) { $self->{config} = XMLin($self->{rcfile}); } elsif (-r $DEFAULT_RCFILE) { $self->{config} = XMLin($DEFAULT_RCFILE); } else { $self->{config} = \%DEFAULTS; } if ($self->{config}->{version} ne $VERSION) { print STDERR "*** your config file is from a different version, strange things may happen!\n"; } # check for an old value for icon_size, and correct: if (@{$SIZE_MAP{$OBJECT_REF->{config}->{panel}->{size}}}[0] > 0) { $OBJECT_REF->{config}->{panel}->{size} = @{$SIZE_MAP{$OBJECT_REF->{config}->{panel}->{size}}}[0]; $self->save_config; } if (defined($self->{config}->{panel}->{menu_size_as_panel})) { delete($self->{config}->{panel}->{menu_size_as_panel}); $self->save_config; } if (defined($self->{config}->{panel}->{menu_size})) { delete($self->{config}->{panel}->{menu_size}); $self->save_config; } if (!defined($self->{config}->{panel}->{use_struts})) { $self->{config}->{panel}->{use_struts} = 'true'; $self->save_config; } return 1; } sub save_config { my $self = shift || $OBJECT_REF; $self->{config}->{version} = $VERSION; # clean up dead config: foreach my $string (keys(%{$self->{config}->{multi}})) { my ($applet, $id) = split(/::/, $string, 2); if ($id ne '' && !defined($self->{widgets}->{$id})) { delete($self->{config}->{multi}->{$string}); } } open(RCFILE, ">$self->{rcfile}") or print STDERR "Error writing to '$self->{rcfile}': $!\n" and exit 1; print RCFILE XMLout($self->{config}); close(RCFILE); return 1; } sub load_icon_theme { my $self = shift; $self->{icon_theme} = Gtk2::IconTheme->new; my $theme = $self->{config}->{panel}->{icon_theme} ne '' ? $self->{config}->{panel}->{icon_theme} : $DEFAULT_THEME; $self->{icon_theme}->set_custom_theme($theme); if ($VERSION !~ /^[\d\.]$/) { # we're in sandbox mode $self->{icon_theme}->prepend_search_path(sprintf('%s/share/icons', $PREFIX)); } $self->{icon_theme}->prepend_search_path(sprintf('%s/.%s/icon-files', $ENV{HOME}, lc($NAME))); $self->{icon_theme}->prepend_search_path(sprintf('%s/.local/share/icons', $ENV{HOME})); return 1; } sub build_panel { my $self = shift; $self->{tips} = Gtk2::Tooltips->new; our $TOOLTIP_REF = $self->{tips}; $self->{icon} = Gtk2::Gdk::Pixbuf->new_from_file(PerlPanel::lookup_icon('perlpanel')); $self->{hbox} = Gtk2::HBox->new; $self->{hbox}->set_border_width(0); $self->{panel} = Gtk2::Window->new; $self->{vbox} = Gtk2::VBox->new; $self->{vbox}->set_border_width(0); $self->{vbox}->set_spacing(0); $self->{border} = Gtk2::DrawingArea->new; $self->{border}->set_size_request(-1, 1); $self->{border}->signal_connect('expose_event', sub { $self->draw_border }); $self->{panel}->add($self->{vbox}); $self->arrange_border; return 1; } sub arrange_border { my $self = shift; if ($self->position eq 'top') { $self->{vbox}->pack_start($self->{hbox}, 1, 1, 0); $self->{vbox}->pack_start($self->{border}, 0, 0, 0); } else { $self->{vbox}->pack_start($self->{border}, 0, 0, 0); $self->{vbox}->pack_start($self->{hbox}, 1, 1, 0); } return 1; } sub draw_border { my $self = shift; # paint an hline with a vertical offset that shows a hilight or a shadow depending on the panel's # position on screen $self->{border}->style->paint_hline( $self->{border}->window, 'normal', Gtk2::Gdk::Rectangle->new(0, 0, $self->{border}->allocation->width, 1), $self->{border}, 'foo', 0, $self->{border}->allocation->width, ($self->{config}->{panel}->{position} eq 'top' ? 0 : -1), ); return 1; } sub configure { my $self = shift; if ($self->{config}->{panel}->{expand} ne 'false') { $self->resize; } else { $self->shrink; $self->panel->set_resizable(0); $self->panel->signal_connect('size-request', sub { $self->move }); } $self->panel->set_border_width(0); $self->{hbox}->set_spacing($self->{config}->{panel}->{spacing}); $self->{hbox}->set_border_width(0); # check is_visible for reloads: my $gdk_window = $self->panel->window; if (!defined($gdk_window) || !$gdk_window->is_visible) { $self->panel->set_type_hint('dock'); } if ($self->{config}->{panel}->{expand} ne 'false') { $self->panel->set_keep_above(1); } else { $self->panel->set_keep_below(1); } $self->panel->set_decorated(0); # needed for some window managers $self->panel->stick; # needed for some window managers if ($self->{config}->{panel}->{autohide} eq 'true') { $self->{leave_connect_id} = $self->panel->signal_connect('leave_notify_event', sub { $self->autohide; }); $self->{enter_connect_id} = $self->panel->signal_connect('enter_notify_event', sub { $self->autoshow; }); } push(@INC, @APPLET_DIRS); return 1; } sub load_applets { my $self = shift; # this is some munging for when the config gets confused when being serialized to/from XML: if (ref($self->{config}->{applets}) ne 'ARRAY') { $self->{config}->{applets} = [ $self->{config}->{applets} ]; } @{$self->{config}->{applets}} = grep { defined } @{$self->{config}->{applets}}; for (my $i = 0 ; $i < scalar(@{$self->{config}->{applets}}) ; $i++) { $self->load_applet(@{$self->{config}->{applets}}[$i], $i); } return 1; } sub load_applet { my ($self, $raw, $position) = @_; my ($appletname, $id) = split(/::/, $raw, 2); my ($applet, $expr, $multi); eval(sprintf('require "%s.pm"', ucfirst($appletname))); if ($@) { print STDERR $@; $self->applet_error($appletname, $@); return undef; } eval(sprintf('$multi = $%s::Applet::%s::MULTI', $self->{package}, ucfirst($appletname))); if ($@) { print STDERR $@; $self->applet_error($appletname, $@); return undef; } if (defined($multi) && $id eq '') { $id = $self->new_applet_id; @{$self->{config}->{applets}}[$position] = sprintf('%s::%s', $appletname, $id); save_config(); } if ($id ne '') { $expr = sprintf( '$applet = %s::Applet::%s->new("%s")', $self->{package}, ucfirst($appletname), $id, ); } else { $expr = sprintf( '$applet = %s::Applet::%s->new', $self->{package}, ucfirst($appletname), ); } eval($expr); if ($@ || !defined($applet)) { print STDERR $@; $self->applet_error($appletname, $@); return undef; } if ($id ne '') { if (!defined($self->{config}->{multi}->{sprintf('%s::%s', $appletname, $id)})) { my $hashref; eval { $hashref = $applet->get_default_config; }; $self->{config}->{multi}->{sprintf('%s::%s', $appletname, $id)} = $hashref if (defined($hashref)); } } else { if (!defined($self->{config}->{appletconf}->{$appletname})) { my $hashref; eval { $hashref = $applet->get_default_config; }; $self->{config}->{appletconf}->{$appletname} = $hashref if (defined($hashref)); } } my $widget; eval { $applet->configure; $widget = $applet->widget; }; if ($@ || !defined($widget)) { print STDERR "Error configuring '$appletname' applet: $@\n"; } else { $self->add_applet($applet->widget, $applet->expand, $applet->fill, $position); $applet->widget->show; if ($id ne '') { $self->{widgets}->{$id} = $applet->widget; } } return 1; } sub applet_error { my ($self, $appletname, $error) = @_; my $message = _("Error loading {applet} applet.\n", applet => $appletname); my $toplevel = (split(/::/, $appletname))[0]; if ($error =~ /can\'t locate $toplevel/i) { $message = _("Error: couldn't find applet file {file}.pm.", file => $appletname); } my $glade = PerlPanel::load_glade('applet-error'); $glade->get_widget('error_label')->set_markup(sprintf($APPLET_ERROR_MARKUP, $message)); $glade->get_widget('error_text')->get_buffer->set_text($error); $glade->get_widget('error_dialog')->signal_connect('response', sub { $_[0]->destroy; require('Configurator.pm'); my $configurator = PerlPanel::Applet::Configurator->new; $configurator->configure; $configurator->init; $configurator->app->get_widget('notebook')->set_current_page(2); }); $glade->get_widget('error_dialog')->set_position('center'); $glade->get_widget('error_dialog')->set_icon($self->icon); $glade->get_widget('error_dialog')->show_all; return 1; } sub add_applet { my ($self, $widget, $expand, $fill, $position) = @_; $self->{hbox}->pack_start($widget, $expand, $fill, 0); if (defined($position)) { $self->{hbox}->reorder_child($widget, $position); } return 1; } sub setup_dnd { my $self = shift; my $target_list = Gtk2::TargetList->new; $target_list->add(Gtk2::Gdk::Atom->new('text/uri-list'), 0, 0); $self->panel->drag_dest_set(['drop', 'motion', 'highlight'], ['copy', 'private', 'default', 'move', 'link', 'ask']); $self->panel->signal_connect(drag_data_received => sub { $self->drop_handler(@_) }); $self->panel->drag_dest_set_target_list($target_list); return 1; } sub drop_handler { my $self = shift; my @uris = split(/[\r\n]+/, $_[4]->data); my $file = $uris[0]; if ($file !~ /^file:\/\//) { warning(_('Sorry, applets can only be installed from local files.')); } else { if ($file =~ /\.desktop$/i) { launcher_drop_receive($file); } elsif (basename($file) !~ /^(\w+)-(.+)\.tar\.gz$/) { warning(_('Cannot install this applet: invalid filename.')); } else { $file =~ s!^file:/+!/!g; install_applet_dialog(undef, $file); } } return 1; } sub launcher_drop_receive { my $file = shift; $file =~ s!file://!!g; if (!-e $file) { warning(_('Cannot load file "{file}": not found.', file => basename($file))); } elsif (!-r $file) { warning(_('Cannot read file "{file}".', file => basename($file))); } else { require('Launcher.pm'); return undef if ($file =~ /^$PerlPanel::Applet::Launcher::LAUNCHER_DIR/); my $id = new_applet_id(); my $applet = sprintf('Launcher::%s', $id); my $new_file = sprintf('%s/%s.desktop', $PerlPanel::Applet::Launcher::LAUNCHER_DIR, $id); my $xpos = ($OBJECT_REF->panel->get_root_window->get_pointer)[1]; my $i = 0; my $last = 0; WIDGET: foreach my $widget ($OBJECT_REF->{hbox}->get_children) { my $widget_pos_x = (get_widget_position($widget))[0]; if (($widget_pos_x < $xpos) && (($widget_pos_x + $widget->allocation->width) > $xpos)) { mkpath($PerlPanel::Applet::Launcher::LAUNCHER_DIR); open(SRC, $file) or die "$file: $!\n"; open(DST, ">$new_file") or die "$new_file: $!\n"; while () { print DST $_; } close(DST); close(SRC); splice(@{$OBJECT_REF->{config}->{applets}}, $i+1, 0, $applet); $OBJECT_REF->load_applet($applet, $i+1); save_config(); } else { $last = $widget_pos_x; $i++; } } } return 1; } sub remove_applet { my ($applet, $id) = @_; for (my $i = 0 ; $i < scalar(@{$OBJECT_REF->{config}->{applets}}) ; $i++) { if ((@{$OBJECT_REF->{config}->{applets}})[$i] eq sprintf('%s::%s', $applet, $id)) { $OBJECT_REF->{widgets}->{$id}->destroy; splice(@{$OBJECT_REF->{config}->{applets}}, $i, 1); PerlPanel::save_config(); return 1; } } warning(_("Could not remove the {applet}::{id} applet!", applet => $applet, id => $id)); return undef; } sub show_all { my $self = shift; $self->panel->show_all; return 1; } sub move { my $self = shift; my $panel_width = $self->panel->allocation->width; if ($panel_width == 1 && $self->{config}->{panel}->{expand} eq 'false') { return 1; } $self->resize unless ($self->{config}->{panel}->{expand} eq 'false'); my ($xpos, $ypos) = $self->get_desired_position; my $skip_move = 0; # assuming that making the panel move is an expensive process (which it could be over a network or on a slow # system), we'll check to see if we actually need to move it in the first place: if (defined($self->panel->window) && $self->panel->window->is_visible) { # get_position segfaults if the panel's not visible: my ($cur_x, $cur_y) = $self->panel->get_position; $skip_move = 1 if ($cur_x == $xpos && $cur_y == $ypos); } $self->panel->move($xpos, $ypos) unless $skip_move == 1; # now we do the struts thing: if (defined($self->panel->window) && $self->{struts_set} != 1) { my ($top, $bottom); if ($self->{config}->{panel}->{autohide} eq 'true') { ($top, $bottom) = (0, 0); } elsif ($self->{config}->{panel}->{expand} eq 'false' && $self->{config}->{panel}->{use_struts} eq 'false') { ($top, $bottom) = (0, 0); } else { ($top, $bottom) = ($self->position eq 'top' ? ($self->panel->allocation->height, 0) : (0, $self->panel->allocation->height)); } $self->panel->window->property_change( Gtk2::Gdk::Atom->intern('_NET_WM_STRUT', undef), Gtk2::Gdk::Atom->intern('CARDINAL', undef), 32, 'replace', 0, 0, $top, $bottom, ); $self->{struts_set} = 1; } return 1; } sub get_desired_position { my $self = shift; my ($xpos, $ypos); $xpos = ($self->{config}->{panel}->{expand} eq 'true' ? 0 : int(($self->screen_width - $self->panel->allocation->width) / 2)); if ($self->position eq 'top' && $self->{config}->{panel}->{autohide} eq 'true' && $self->{hidden} eq 'true') { # panel is at the top, expand is set and the panel is currently hidden: $ypos = 0 - $self->panel->allocation->height + $HIDE_OFFSET; } elsif ($self->position eq 'top') { # panel is at the top, expand is not set and the panel is currently shown: $ypos = 0; } elsif ($self->position eq 'bottom' && $self->{config}->{panel}->{autohide} eq 'true' && $self->{hidden} eq 'true') { # panel is at the bottom, expand is set and the panel is currently hidden: $ypos = $self->screen_height - $HIDE_OFFSET; } elsif ($self->position eq 'bottom') { # panel is at the bottom, expand is not set and the panel is currently shown: $ypos = $self->screen_height - $self->panel->allocation->height; } else { $self->error(_("Invalid panel position '{position}'.", position => $self->position), sub { $self->shutdown }); } return ($xpos, $ypos); } sub resize { my $self = shift; $self->panel->set_default_size($self->screen_width, -1); $self->panel->set_size_request($self->screen_width, -1); return 1; } sub shrink { my $self = shift; $self->panel->set_default_size(-1, -1); $self->panel->set_size_request(-1, -1); return 1; } =pod here's how this works: the launch() function sets the DESKTOP_STARTUP_ID environment variable when it runs an external program - compliant apps will take note of this variable and broadcast their startup state when they run. It also provides the user with some visible feedback (eg, a "busy" cursor). The panel keeps a Gnome2::Wnck::Screen instance, and when a new application starts, a signal is emitted which we capture. If the startup ID is one we recognise, then we reset the root window cursor and remove the ID from the list of IDs we're tracking. launch() also sets a timeout to clean up after 1500ms for those apps that don't support startup notification. clear as mud, what? =cut sub setup_launch_feedback { my $self = shift; $self->{cursors}->{normal} = Gtk2::Gdk::Cursor->new('left_ptr'); $self->{cursors}->{busy} = Gtk2::Gdk::Cursor->new('watch'); $self->{wnckscreen} = Gnome2::Wnck::Screen->get_default; $self->{wnckscreen}->force_update; $self->{wnckscreen}->signal_connect('application-opened', sub { $self->launch_manager($_[1]->get_startup_id); }); $self->{wnckscreen}->signal_connect('window-opened', sub { $self->launch_manager($_[1]->get_application->get_startup_id); }); $self->{startup_ids} = {}; return 1; } sub start_feedback { return $OBJECT_REF->panel->get_root_window->set_cursor($OBJECT_REF->{cursors}->{busy}); } sub end_feedback { return $OBJECT_REF->panel->get_root_window->set_cursor($OBJECT_REF->{cursors}->{normal}); } sub launch_manager { my ($self, $id) = @_; if ($id ne '') { if (!defined($self->{startup_ids}->{$id})) { return undef; } else { undef($self->{startup_ids}->{$id}); $self->end_feedback; } } return 1; } sub launch { my ($cmd, $startup) = @_; # $cmd might have some %x tokens in it, provided by a .desktop file. We don't # support them just yet, so just remove them: $cmd =~ s/\%[fFuUdDnNickv]//g; if (defined($startup)) { my $id = sprintf('%s_%s', $NAME, new_applet_id()); $cmd = sprintf('DESKTOP_STARTUP_ID=%s %s &', $id, $cmd); $OBJECT_REF->{startup_ids}->{$id} = $cmd; $OBJECT_REF->start_feedback; # we use Glib::Timeout here because if we used add_timeout # and the user reloaded the panel while we're still waiting # the timeout would never get called: Glib::Timeout->add(5000, sub { if (defined($OBJECT_REF->{startup_ids}->{$id})) { undef($OBJECT_REF->{startup_ids}->{$id}); $OBJECT_REF->end_feedback; } return undef; }); } else { $cmd = sprintf('%s &', $cmd); } system($cmd); return 1; } sub shutdown { $OBJECT_REF->save_config; unlink($PIDFILE); exit; } # note to applet authors: please avoid using # this function wherever possible - if you wish to apply preference changes # to your applet, do so inside the applet and then call PerlPanel::save_config() # to commit them to disk. Calling PerlPanel::reload() may produce # unpredictable behaviour in other applets. sub reload { my $self = $OBJECT_REF; $self->panel->set_sensitive(0); $self->save_config; foreach my $applet_widget ($self->{hbox}->get_children) { $applet_widget->destroy; } map { remove_timeout($_) } @{$self->{timeouts}}; $self->{vbox}->remove($self->{hbox}); $self->{vbox}->remove($self->{border}); $self->load_icon_theme; $self->arrange_border; $self->{struts_set} = 0; $self->shrink if ($self->{config}->{panel}->{expand} ne 'false'); $self->load_applets; $self->configure; $self->panel->set_sensitive(1); $self->move; return 1; } sub request_string { my ($self, $message, $callback, $visible); $self = $OBJECT_REF; ($message, $callback, $visible) = @_; my $dialog = Gtk2::Dialog->new( "$NAME: $message", undef, [], 'gtk-cancel' => 0, 'gtk-ok' => 1 ); $dialog->set_border_width(12); $dialog->set_icon($self->icon); $dialog->vbox->set_spacing(12); my $entry = Gtk2::Entry->new; if ($visible == 1) { $entry->set_visibility(0); } my $table = Gtk2::Table->new(2, 2, 0); $table->set_col_spacings(12); $table->set_row_spacings(12); $table->attach_defaults(Gtk2::Image->new_from_stock('gtk-dialog-question', 'dialog'), 0, 1, 0, 2); $table->attach_defaults(Gtk2::Label->new($message), 1, 2, 0, 1); $table->attach_defaults($entry, 1, 2, 1, 2); $dialog->vbox->pack_start($table, 1, 1, 0); $dialog->set_default_response(1); $entry->set_activates_default(1); $dialog->signal_connect( 'response', sub { $dialog->destroy; if ($_[1] eq 1) { # only destroy the window if the callback # returns true. return unless $callback->($entry->get_text); $callback->($entry->get_text); } } ); $dialog->show_all; $entry->grab_focus; return 1; } sub request_password { my ($self, $message, $callback); $self = $OBJECT_REF; ($message, $callback) = @_; $self->request_string($message, $callback, 1); } # you shouldn't need to access this directly - # instead use one of the wrappers below: sub alert { my ($self, $message, $ok_callback, $cancel_callback, $type); $self = $OBJECT_REF; ($message, $ok_callback, $cancel_callback, $type) = @_; my $buttons = 'ok'; if (defined($ok_callback) && defined($cancel_callback)) { $buttons = 'ok-cancel'; } my $dialog = Gtk2::MessageDialog->new($self->{window}, 'modal', $type, $buttons, $message); $dialog->set_title($NAME); $dialog->set_icon($self->icon); $dialog->set_position('center'); $dialog->signal_connect( 'response', sub { if ($_[1] eq 'cancel') { $cancel_callback->() if $cancel_callback; } elsif ($_[1] eq 'ok') { $ok_callback->() if $ok_callback; } $dialog->destroy; } ); $dialog->show_all; return 1; } sub question { my ($self, $message, $ok_callback, $cancel_callback); $self = $OBJECT_REF; ($message, $ok_callback, $cancel_callback) = @_; return alert($message, $ok_callback, $cancel_callback, 'question'); } sub error { my ($self, $message, $ok_callback); $self = $OBJECT_REF; ($message, $ok_callback) = @_; return alert($message, (defined($ok_callback) ? $ok_callback : sub { $self->shutdown} ), undef, 'error'); } sub warning { my ($self, $message, $ok_callback); $self = $OBJECT_REF; ($message, $ok_callback) = @_; return alert($message, $ok_callback, undef, 'warning'); } sub notify { my ($self, $message, $ok_callback); $self = $OBJECT_REF; ($message, $ok_callback) = @_; return alert($message, $ok_callback, undef, 'info'); } sub tips { return $OBJECT_REF->{tips}; } sub panel { return $OBJECT_REF->{panel}; } sub icon { return $OBJECT_REF->{icon}; } sub icon_size { return $OBJECT_REF->{config}->{panel}->{size}; } sub menu_icon_size { my $self = $OBJECT_REF; my $size = (defined($OBJECT_REF->{config}->{panel}->{menu_icon_size}) ? $OBJECT_REF->{config}->{panel}->{menu_icon_size} : $DEFAULTS{panel}->{menu_icon_size}); return @{$SIZE_MAP{$size}}[0]; } sub menu_icon_size_name { my $self = $OBJECT_REF; my $size = (defined($OBJECT_REF->{config}->{panel}->{menu_icon_size}) ? $OBJECT_REF->{config}->{panel}->{menu_icon_size} : $DEFAULTS{panel}->{menu_icon_size}); return @{$SIZE_MAP{$size}}[1]; } sub screen_width { return (defined($OBJECT_REF->{screen}) ? $OBJECT_REF->{screen}->get_width : $OBJECT_REF->{screen_width}); } sub screen_height { return (defined($OBJECT_REF->{screen}) ? $OBJECT_REF->{screen}->get_height : $OBJECT_REF->{screen_height}); } sub position { return $OBJECT_REF->{config}->{panel}->{position}; } sub autohide { my $self = shift; $self->{hidden} = 'true'; my ($x, $y) = $self->get_desired_position; return 1; } sub autoshow { my $self = shift; $self->{hidden} = 'false'; $self->move; return 1; } # kludge alert! # # the situation is this: # # #0,0 # +----------------------------------+ # | | # | Screen | # | | # | +-------------------------+ | # | | | | # | | Window | | # | | | | # | | +--------+ | | # | | | Widget | | | # | | +--------+ | | # | | + - pointer | | # | | | | # | +-------------------------+ | # | | # | | # +----------------------------------+ # # - $win_pos_x,$win_pos_y describes the position of the window relative to the screen # # - $win_mouse_pos_x,$win_mouse_pos_y describes the position of the pointer relative to the window # # - $rel_mouse_pos_x,$rel_mouse_posy describes the position of the pointer relative to the widget # # To work out the co-ords of the widget, we simply add screen->window and window->pointer values, # and subtract the widget->pointer values. Simple, eh? :p sub get_widget_position { my ($self, $widget); $self = $OBJECT_REF; $widget = shift; my $window = $widget->get_toplevel; my ($win_pos_x, $win_pos_y) = $window->get_position; my ($win_mouse_pos_x, $win_mouse_pos_y) = $window->get_pointer; my ($rel_mouse_pos_x, $rel_mouse_pos_y) = $widget->get_pointer; return ( $win_pos_x + $win_mouse_pos_x - $rel_mouse_pos_x, $win_pos_y + $win_mouse_pos_y - $rel_mouse_pos_y, ); } sub get_mouse_pointer_position { my (undef, $x, $y, undef) = $OBJECT_REF->panel->get_root_window->get_pointer; return ($x, $y); } sub exec_wait { my ($self, $command, $callback); $self = $OBJECT_REF; ($command, $callback) = @_; open(COMMAND, "$command|"); my $tag; $tag = Gtk2::Helper->add_watch(fileno(COMMAND), 'in', sub { if (eof(COMMAND)) { close(COMMAND); Gtk2::Helper->remove_watch($tag); if (defined($callback)) { &$callback(); } } }); return 1; } sub has_application_menu { return PerlPanel::has_applet('BBMenu'); return undef; } sub has_action_menu { return PerlPanel::has_applet('ActionMenu'); } sub has_pager { return PerlPanel::has_applet('Pager'); } sub has_applet { my ($self, $applet); $self = $OBJECT_REF; $applet = shift; foreach my $appletname (@{$self->{config}->{applets}}) { return 1 if ($appletname =~ /^$applet/); } return undef; } # this is just a stub, should we ever implement icon themes this will become # more useful: sub get_applet_pbf_filename { my ($self, $applet); $self = $OBJECT_REF; $applet = shift; return lookup_icon(sprintf('%s-applet-%s', lc($NAME), lc($applet))); } sub get_applet_pbf { my ($self, $applet, $size); $self = $OBJECT_REF; ($applet, $size) = @_; $size = ($size > 0 ? $size : $APPLET_ICON_SIZE); if (!defined($self->{pbfs}->{$applet}->{$size})) { my $file = get_applet_pbf_filename($applet); if (-e $file) { $self->{pbfs}->{$applet}->{$size} = Gtk2::Gdk::Pixbuf->new_from_file_at_size($file, $size, $size); } elsif ($applet ne 'missing') { $self->{pbfs}->{$applet}->{$size} = get_applet_pbf('missing', $size); } else { #on-the-fly weirdo icon (white, two red lines across): my @xpm = ("$size $size 2 1", ". c Red", " c White"); for my $x (1 .. $size) { for my $y (1 .. $size) { $_ .= ($y == $x || $y == $size - $x) ? "." : " " } push @xpm, $_; $_ = ""; } $self->{pbfs}->{$applet}->{$size} = Gtk2::Gdk::Pixbuf->new_from_xpm_data(@xpm); } } return $self->{pbfs}->{$applet}->{$size}; } sub get_config { my ($self, $applet, $id); $self = $OBJECT_REF; ($applet, $id) = @_; if (defined($id)) { return $self->{config}->{multi}->{sprintf('%s::%s', $applet, $id)}; } else { return $self->{config}->{appletconf}->{$applet}; } } sub spacing { return $OBJECT_REF->{config}->{panel}->{spacing}; } sub load_glade { my $gladefile = shift; foreach my $path (@GLADE_PATHS) { my $file = sprintf($path, $gladefile); return Gtk2::GladeXML->new($file) if (-r $file); } return undef; } sub _ { my $str = shift; my %params = @_; my $translated = gettext($str); if (scalar(keys(%params)) > 0) { foreach my $key (keys %params) { $translated =~ s/\{$key\}/$params{$key}/g; } } return $translated; } sub lookup_icon { my ($self, $icon); $self = $OBJECT_REF; $icon = shift; if (defined($self->{icon_theme})) { $self->{icon_theme}->rescan_if_needed; } else { PerlPanel::load_icon_theme($self); } if ($icon eq '') { return undef; } elsif (-f $icon) { return $icon; } else { # remove everything after the last dot: $icon = basename($icon); $icon =~ s/\..+$//g; my $info = $self->{icon_theme}->lookup_icon(lc($icon), 48, 'force-svg'); if (!defined($info)) { return undef; } else { return $info->get_filename; } } } sub get_run_history { my @history; if (!open(HISTFILE, $RUN_HISTORY_FILE)) { print STDERR "*** error opening $RUN_HISTORY_FILE for reading: $!\n"; } else { @history = reverse(); map { chomp($history[$_]) } 0..scalar(@history); close(HISTFILE); } @history = grep { $_ ne '' } uniq(@history); return splice(@history, 0, $RUN_HISTORY_LENGTH); } sub uniq { my @array = @_; my @new; my %map; foreach my $member (@array) { $map{$member}++; } foreach my $member (@array) { if ($map{$member} > 0) { push(@new, $member); $map{$member} = 0; } } return @new; } sub append_run_history { my ($self, $command); $self = $OBJECT_REF; $command = shift; if (!open(HISTFILE, ">>$RUN_HISTORY_FILE")) { print STDERR "*** error opening $RUN_HISTORY_FILE for appending: $!\n"; return undef; } else { print HISTFILE "$command\n"; close(HISTFILE); return 1; } } sub load_appletregistry { my $self = shift; my $registry = {}; my @registry_dirs = ( sprintf('%s/share/%s', $PREFIX, lc($NAME)), sprintf('%s/.%s', $ENV{HOME}, lc($NAME)), ); foreach my $dir (@registry_dirs) { my $file = "$dir/applet.registry"; next unless -r $file; open(REGFILE, $file); while () { chomp; s/^\s*//g; s/\s*$//g; next if (/^$/ or /^#/); my ($applet, $description, $category) = split(/:/, $_, 3); next unless (applet_exists($applet)); $registry->{$applet} = _($description); $registry->{_categories}->{$category}->{$applet}++; } close(REGFILE); } foreach my $category (keys %{$registry->{_categories}}) { my @applets = sort keys %{$registry->{_categories}->{$category}}; $registry->{_categories}->{$category} = \@applets; } return $registry; } sub applet_exists { my $applet = shift; foreach my $dir (@INC) { return 1 if -e ("$dir/$applet.pm"); } return undef; } sub new_applet_id { return md5_hex(join('|', $ENV{HOSTNAME}, lc((getpwuid($<))[0]), time(), $0, int(rand(99999)))); } sub install_applet_dialog { my ($callback, $file) = @_; my $glade = load_glade('applet-install'); $glade->get_widget('install_applet_dialog')->set_position('center'); $glade->get_widget('install_applet_dialog')->set_icon(icon()); $glade->get_widget('install_applet_dialog')->signal_connect('response', sub { my $file = $glade->get_widget('file_entry')->get_text; $glade->get_widget('install_applet_dialog')->destroy; if ($_[1] eq 'ok') { my ($code, $error) = install_applet( $file, datadir => sprintf('%s/.local', $ENV{HOME}), libdir => sprintf('%s/.%s/applets', $ENV{HOME}, lc($NAME)), regfile => sprintf('%s/.%s/applet.registry', $ENV{HOME}, lc($NAME)), ); if ($code == 1) { warning(_("Error installing '{file}': {error}", file => $file, error => $error)); } elsif (defined($callback)) { &{$callback}(); } } }); $glade->get_widget('browse_button')->signal_connect('clicked', sub { my $chooser = Gtk2::FileChooserDialog->new( _('Choose File'), undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); $chooser->signal_connect('response', sub { if ($_[1] eq 'ok') { $glade->get_widget('file_entry')->set_text($chooser->get_filename); } $chooser->destroy; }); $chooser->run; }); $glade->get_widget('ok_button')->set_sensitive(undef); $glade->get_widget('file_entry')->signal_connect('changed', sub { if ( -r $glade->get_widget('file_entry')->get_text && basename($glade->get_widget('file_entry')->get_text) =~ /^(\w+)-(.+)\.tar\.gz/ ) { $glade->get_widget('ok_button')->set_sensitive(1); } else { $glade->get_widget('ok_button')->set_sensitive(undef); } }); $glade->get_widget('file_entry')->set_text($file); $glade->get_widget('install_applet_dialog')->show_all; return 1; } sub install_applet { my $file = shift; my %params = @_; my ($name, $version); if (basename($file) =~ /^(\w+)-(.+)\.tar\.gz/) { $name = $1; $version = $2; } if ($name eq '' || $version eq '') { return (1, _('Cannot parse filename for name and version')); } my $cmd = sprintf('tar -ztf "%s"', $file); my %files; open(TAR, "$cmd|") or die "$cmd: $!\n"; while () { chomp; $files{$_}++; } close(TAR); # required files: return(1, _('Applet description is missing')) if (!defined($files{'applet.info'})); return(1, _('Applet file is missing')) if (!defined($files{"applets/$name.pm"})); # append the applet description: # put the > at the front of $params{regfile} so we append: mkpath(dirname($params{regfile})); tar_extract($file, 'applet.info', ">$params{regfile}") or exit(256); mkpath($params{libdir}); my $appletfile = sprintf('%s/%s.pm', $params{libdir}, $name); tar_extract($file, "applets/$name.pm", $appletfile) or exit(256); my @share = grep { ! /\/$/ } grep { /^share\/(icons|perlpanel\/glade)\// } keys(%files); foreach my $share_file (@share) { my $dest = sprintf('%s/%s', $params{datadir}, $share_file); mkpath(dirname($dest)); tar_extract($file, $share_file, $dest) or exit(256); } return 0; } sub tar_extract { my ($tarball, $source, $dest) = @_; printf("%s => %s\n", $source, $dest); if (!open(SRC, sprintf('tar zxvf "%s" "%s" -O |', $tarball, $source))) { print STDERR "Cannot pipe from '$tarball': $!\n"; return undef; } elsif (!open(DEST, ">$dest")) { print STDERR "Cannot open '$dest': $!\n"; return undef; } else { while () { print DEST $_; } close(SRC); close(DEST); return 1; } } sub mkpath { my $dir = shift; return system(sprintf('mkdir -p "%s"', $dir)); } sub add_timeout { my ($msec, $callback) = @_; my $id; $id = Glib::Timeout->add($msec, $callback, \$id); push(@{$OBJECT_REF->{timeouts}}, $id); return $id; } sub remove_timeout { my $id = shift; for (my $i = 0 ; $i < scalar(@{$OBJECT_REF->{timeouts}}) ; $i++) { if ($id == @{$OBJECT_REF->{timeouts}}[$i]) { splice(@{$OBJECT_REF->{timeouts}}, $i, 1); Glib::Source->remove($id); return 1; } } return undef; } sub expanded { return ($OBJECT_REF->{config}->{panel}->{expanded} == 'true' ? 1 : undef); } 1; PerlPanel-0.9.1+cvs20051225/share/0000755000175000017500000000000010353532415013670 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/0000755000175000017500000000000010353532413015001 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/0000755000175000017500000000000010353532411016733 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/0000755000175000017500000000000010353532411017532 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/0000755000175000017500000000000010353532412020476 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-action-reboot.png0000644000175000017500000000431710172712067025743 0ustar hehePNG  IHDR00WsBIT|dIDAThmlS/MI$bZ-GغimqU4I+0m0 ۺ"UT_JUJb~EV Xĉ{>(sy?+Bn5`/R'<f,RہLX"&<<<آxpu35lq@$Mmmgh 0q4(~`3 i!@7;]M߂@P*I+Qt7}X xi՚|8лg-`U1BZGWuɽ&__'3\A l> wkI7ӽh1-BDV"Q!10b:G$WRXN\QP=f,§~Bj%EA|]MPQi>ݩ)`Ժ^:Z&ȬٽEc&C/ q3T:Ž߹%0"DBa:XJm> {-n nk;3C9`8ymnD+\<1 «#ӓbt]UFNdǯ3egylϦ"*2I|~~ qI#%l-||.pXiPJeL+cR^^[T O /Z|I|/'Stgbz&gc ҩM`݇P=ā]@K SlWuBtGv>˪WT,ϒ!㖪t9\tf_+V> =qlaK'㾚^3Os|-MqȘ#.)[\Ўp^|NY8ߺD/=SO>j c7p~&cVq`72"΁: Ӻ5P+t-llOR+׎)ez=-dt@I\t[4V5~3e'maV(dܻ3 xFe4ݶHtWZsȓie?3F͗ͫJdY$T`IcQt=Զ[97'AA6"wy&̢U0.E0tg鏖r[跣dƀr;}\^qǐ!`m!Z ZVI@c[t>Ik }~y5H#Ht="$oڶwˆ訊*k{![D 5vB?`Կ "), 9~A'0I`3;Xߧ5l-ˈLT7POa Hܘ@Zi s䅓F.DVDq&܉i$nY $ȐEG;2l%N` qeN0ZVeb`¡pD-R{M@'I#K^.φZYZ?_>dd}ς;B輹(3N0cz,oΑ` 5SK0K8r-χ`[E1y< fz:/Qp)ǀML%EBI. ^VsU^EBG$I!G`x=Y,6p.F$~`ƳVQ̭w%O?D\BeB9!= IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-action-shutdown.png0000755000175000017500000000322010112656434026316 0ustar hehePNG  IHDR00WsBIT|dGIDATxMl\d+Tit7~w~{νgag гg;1vc;rǞ?Z5d4%uh|mMo /ev~ingVn6|5U UDmۅuѭ>,u4<3"t!BuUZf/q-BH)A<X\fHw2V*057|ٕ()qk˒DGZ.pFg2TDD૞ˢ1hW@ >UU+Dz"kc8A t\)ThIk*U&%3BqG6; WJp밠u["Z }cwU鰲sx7~I=}|H55W~C?,--s*SDuq[hUc]τl v#ܟ91|gqz$rV#䆐 g^R\W(8t*%%<'?ٖ偦u9m25"sQ\%8Ì;Z^>7d-|,<R808e; MWz.GP@k V9j BB RU%VY("l d{cцwq;)Ud.$)w x,*ZP?J׊* by{z&mTsELZr+bve ^MXЈI!YF0cihܝ.שּׁ9_7R(bhc4"7UJļr[60JJhۖ68Ǟzz}T-566WB"ڄ61ܟl 9򍧞&6O>[ s#\T|[5!((  lބ(>^! (GkosU;w/o`iP<'_i3J-7wojMWe"#%RH![oο~O1y\y'/pH;l qZh7ƾ$cA,WK>"%e8Kh]R ,Wnf1}SWڅDw#ya#BFWaB:{+#ۀK״J݇T@zf<^.ePUwJuGL@{G߭L4x]㩾LovK9oV;-Lѳg=ۑ} d6K@IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-about.png0000644000175000017500000000325710112656434025574 0ustar hehePNG  IHDR00WsBIT|dfIDATxmlSv ^BEnVXTmi ll ith*uSOVi@tSKk5Nf[$N]Bb;NrpI1呮l?sι<5,a KX,Ā&q%D,vpJp`@$-g!{nV9B-f `"Vﭔ,}z]7. ~ ZP`ȧF? .BcCt}c]@h_emcu_h<~PtzDq``!{S?4uAaffxcfݷJ@[5j* %E@Msok<ޒJf$8DO2"[T˫8 wt}aN|h.یlJ J2ChB9ǞL&ScpTgb?D"ǠF*-Hn)4PӁ:"8p`@nvbtÑ96/bu]"#d4^8٣.m@KB?f)^H:'6ui/ڛ?7@[W#gSXbمky $Ez0Qq]M긙Ev 5l{倿(qup#F&kS$GvԖ-F DwE6)i<} 1ߴxͩuX>f7!.ﲭ@jFyϾG_$:嘏h^VN*V!9BkTB9IwOALٻhѮ'ɴdJD&z~*Us:E+`<$CeW1'CP0s:zz?J&R! xwbWqx0'1sgn_ÚYth ǷopG[[?X 32ji$P)r*kf+HjnGv8Z} g0s>`U`J'{|zjORz+~*:}@KSߴg;Xzy qF{~1~*ӱiyh/h* 6Iq&F[:v`L+:23/J;VG݌F̫ .9 ջCG&.PB@?p缑l;XYu_rTJY(txÑ/w;XyL=ZbEO- _ܖmykl򗩴~wG}\5aeR¶ %p3?QĎr:,u:d'̽t"YASqSU"6TRP)d Zvt:ٷ˦ň*7X*Hr|tBZ5`Y>H`ePS'ra er9o~Hd\~tK%eA傚 …?+۵vodŴ> 6;mw1lp+2 KX%IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-actionmenu.png0000755000175000017500000000640310112656434026623 0ustar hehePNG  IHDR00WsBIT|d IDATx{lW~?g^m;؀cyļB!Llb6(R)lTmiYV Uە}Fݰ*U% &h͋c1&p;sg7`ҟs朙ss~s~RR!wQEMEQ5 hkkدrRٳ̛7zL&C2$N xhJ<O9pBb?\+gafrT)?gAJ8뺓uuuNRbYTt:M6˗/#8%|poogHMC2VH+baL XBl2IR#&IN:ٳg1-`!NWZo EU?BiDToC Q*GAQ,6P(Ě5khii0 2 $ m.9{Gkma-|}Ml>MHR{Ke.A/YLk#---Z|>O6ܶmrLD"#G .ZZWǿX͛ywR,ki8COOMMM\~ͨՑ9>NM{{B`Ϟ=ڵBieYtttʵkP2b֖1ƹgvSO=E:D"eYhF%z`!B-jY7t_=71)0߷E+òvr$Td Xߟ+@X!HI#Oݬ[OέsbԔF3%i]WNSSuu܋i)WӾlر;[|E+60a)v%$ B*8n95ْU,T.زk|~_K )qPuaA G~r=s`r0wf֬є9s BgN LHoBYO3/ :A$tgeV+`Y̵$݊ s9h Hp2!X`*Pqq$JH4[,ph&`fk-vܓk" єĕ65e{EkU!rTv͆s`f }CS:ZvaIlE;VZ0Dz)$-S"P$:~ّ.L4I.;;:Kv&?1Vh2—zx z(.t$Ra \ P!PjA+?5s0_VEEA׭- C T* ؾ H H{V FTQp%5NnWʠ 9ERlv_QCxM+t3]o遗x$ŇVU3c/b.SU]AAD-h> _]+jha Ou_R GDxהY<ã8^IQ9ڑ!O-Er7 jxxGJQCAVy AC#. -iJ\scWr|Ox~n3&׸([pk*W0t^3# b:&T\.C>ߋmض= `w0@HNΖ{y=NƙР{M7 ^ZI}<,kbr8mNEXߗߎN@#*27, "hp (3#|9Aћ~X~'xٌ;(JĿ/ ?m*ѨR!( (5 ãѐڕwWzJ3?N4=C+ؼ r&C$iT|1ѨDDш"ZCFO(^3-ش 4m`'˳!POb%PmVt]ex+ .T/Ė e7"]$M-^)6fX03&:Y蚃XOڿK+"X T/P!89 \ W2,%pq}'M3֎Vh?$Q)~_ˁЁg*ERfZ|v<Lu Lj>g ,~ wVgSIj&}uvzlܸz6l@7WoYuP WA`@ۧ8s331ʌB˗/~p,Z__uQbadAS"i&m6%K$zPC*05546T#:r[{W_^~ebdwx-Ia8 {'Vpő!qGPh镕|z<1峍W TBӅI[z8ԞT*E2d֭wE⎩D" q ꢋxb-@Pa0=`MB b֭ݻxH$H)IRHD0bu Z):}3M?|g8qH$8&1m4oxbb1Ν;^]]M8ୟ/Ѯ~xO?2( r9z{{qX,ƻ;#s_sn}Đ)IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-bbmenu.png0000755000175000017500000000640310112656434025731 0ustar hehePNG  IHDR00WsBIT|d IDATx{lW~?g^m;؀cyļB!Llb6(R)lTmiYV Uە}Fݰ*U% &h͋c1&p;sg7`ҟs朙ss~s~RR!wQEMEQ5 hkkدrRٳ̛7zL&C2$N xhJ<O9pBb?\+gafrT)?gAJ8뺓uuuNRbYTt:M6˗/#8%|poogHMC2VH+baL XBl2IR#&IN:ٳg1-`!NWZo EU?BiDToC Q*GAQ,6P(Ě5khii0 2 $ m.9{Gkma-|}Ml>MHR{Ke.A/YLk#---Z|>O6ܶmrLD"#G .ZZWǿX͛ywR,ki8COOMMM\~ͨՑ9>NM{{B`Ϟ=ڵBieYtttʵkP2b֖1ƹgvSO=E:D"eYhF%z`!B-jY7t_=71)0߷E+òvr$Td Xߟ+@X!HI#Oݬ[OέsbԔF3%i]WNSSuu܋i)WӾlر;[|E+60a)v%$ B*8n95ْU,T.زk|~_K )qPuaA G~r=s`r0wf֬є9s BgN LHoBYO3/ :A$tgeV+`Y̵$݊ s9h Hp2!X`*Pqq$JH4[,ph&`fk-vܓk" єĕ65e{EkU!rTv͆s`f }CS:ZvaIlE;VZ0Dz)$-S"P$:~ّ.L4I.;;:Kv&?1Vh2—zx z(.t$Ra \ P!PjA+?5s0_VEEA׭- C T* ؾ H H{V FTQp%5NnWʠ 9ERlv_QCxM+t3]o遗x$ŇVU3c/b.SU]AAD-h> _]+jha Ou_R GDxהY<ã8^IQ9ڑ!O-Er7 jxxGJQCAVy AC#. -iJ\scWr|Ox~n3&׸([pk*W0t^3# b:&T\.C>ߋmض= `w0@HNΖ{y=NƙР{M7 ^ZI}<,kbr8mNEXߗߎN@#*27, "hp (3#|9Aћ~X~'xٌ;(JĿ/ ?m*ѨR!( (5 ãѐڕwWzJ3?N4=C+ؼ r&C$iT|1ѨDDш"ZCFO(^3-ش 4m`'˳!POb%PmVt]ex+ .T/Ė e7"]$M-^)6fX03&:Y蚃XOڿK+"X T/P!89 \ W2,%pq}'M3֎Vh?$Q)~_ˁЁg*ERfZ|v<Lu Lj>g ,~ wVgSIj&}uvzlܸz6l@7WoYuP WA`@ۧ8s331ʌB˗/~p,Z__uQbadAS"i&m6%K$zPC*05546T#:r[{W_^~ebdwx-Ia8 {'Vpő!qGPh镕|z<1峍W TBӅI[z8ԞT*E2d֭wE⎩D" q ꢋxb-@Pa0=`MB b֭ݻxH$H)IRHD0bu Z):}3M?|g8qH$8&1m4oxbb1Ν;^]]M8ୟ/Ѯ~xO?2( r9z{{qX,ƻ;#s_sn}Đ)IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-clock.png0000644000175000017500000000643110112656434025552 0ustar hehePNG  IHDR00WsBIT|d IDATx[l[Nb'I&QHK!i;i.=9 T$Zԇ( i8͈A Js:BTPhI"f0qN&$q޵Ƥ ˰%"w_~/[?7o6=Ow6OA\͛7رVv؁b~~gyK.=XM#?ۀlRVv:d2,lÁ$I|78pjT5w!IT UUQ]q\2] XR`k@3^E{キf׮]ܹ$I"LJb$ \.eee)fhu+rW$WMMM͝޽ݻwt:exw###3;;+›o@4n޼ Ǐg~~۷ E0Y1 J> =[q YyFbB16 Q 8N$Iweicxx^l6$a7n =bX8x (211A<`ΝlݺW;ү05={҂$I$I"Յih8Of׮]8$ QI_Lr9DQdH$tRTT]@!$(H$9sD"_|AKK 7oj:ϟ@ @mm- \&{* GE]EVd[Q4 ===LLL "`.\ ?22B:ڵk=zrnRznzO>A(++[fD>A$I* ׮]L&iLMMp8 6z2a`ZZq:h(l'ˊ7XČ8hx<Χ~in8 J$7l" EŸu`Պ(.c(f2_Ξ=%z BI"(fUUz=,X,V+ॗnmeאz6N<GQЪ,AxT7Q\\\rYN< ԉDIexxQijj*/u|EԳRLCi)~!^N.]j}Ǐy 7N7V333YXn/>4M 4MTU%il .pȑi*] ˊfy%dg2{=$,Cضm===tww`_u0 Cii)LEQxeYBJܾ.2(|'4oƞ~7bnnχaTWWԄiD"(H[sss~߾}ȲܕN׶#[, & $/gpߢh?/ Ffnv܉a2cTU-7^x[X۱bϛKI.>r,Ju>|X>uT!$h]ٲe dUU䩧b߾}!Y;{{{O(0 ͕+WdbbşËj/IϿ .ϑUmUWO?lmֹ~˗>g xall4Ha$IZXgMFEriJv}5լ..2qz闦d-2Xd2Q[[( +UPF V<%(aqXVjk |ɉ?nqxINo|s=\.'`ĸ5x|8MXXVCqVwMNOOc٨JTUe``/h41,7oOCɺzg:-}Ytt^8Z bNii)eee֢: 6w>SDBȿ"93G23l]׌ngi\.@]׉ܸqp8aÆ}FIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-commander.png0000644000175000017500000000467510112656434026434 0ustar hehePNG  IHDR00WsBIT|d tIDATxmL[?=-԰ XGE1[_(KL5>pM&Ͷ Wh4lnSKs0}b9=`v}79~?VU?eZE~ JlEqq8L&FFFztڵ.`|,@g$vtt "(bXHRLLL[oI]0pߩ^6l6SWWG<gzzinf!͸ߑ t:?t:,a٨B$TUd2aذa=XM#k׮b딫Г@`_qi^|E)Ju0?@  UUQU\.GMMMf^/dw}WJ$]Az ):tTUEeΝ;ǫg~EF4bڵ<_D6noϬq:c?v( 26Gy<qEDQZLB]xE.CedYtC٢\.7 d(pXtݤi4XVٵkvwEQEUU& Ʉ twwcX\.===<8p.'SSS] >EQENA@Q~?.]ʕ+x<vA0j">Ʌ tZƍYvԩSW P(uEPuٱc~0^t ټy3[nji\UU .\2vrwQH ŪiZK|MM vROg}`ÖHɓ't `61X,V+[ w1;@HR:`9FY['Е>m6DQg޽x^û l6 .$Ho>Ο??XO?l6˖-[0LLMMq {=r\x<Ν;tGolL&;XåJFU|'ed2I*"J155]]]8Gȑ#$Ic7l8p@Z}GUUZZZχgffX T ԫJ2DQ#"L~X,áC%Ijo^Ç>fgg [lUVVg\. "Р( $QQQix<n7 F4#( LLL<kucDO>a޽F:l߾I qرcG{{;(X?xl.իWikk3 + 5fqǎk(agavvI4 YӽS?3%|rÆ F_ R3ue IRoavvi ^ TUevvovО={ _^tbH }嗱~I#0ׯaxnG'c;d)-e2'NDl6[m}ߴvM$o)BMMMttt l0Ɉj)JY΁|>***hkk{G-!Ν;Ǚ3gPU`eL&SX8 `0(6773??,@" x_0Lu]l۶[ts^XoNd׮] {Fl6-[Zq(.|C;W}O?t@ |B!***nOR@\|arrRs;Ö\hሽbkkkAOŧ4k;K1p1T<gUn2,q;w,KAx|>_I֚cnnuK$x gDJ.{d^z?_Κ5k>~'N :uVUUe=zqg9-`|nn.6::҂ ņn_~`0Hee-QxWR},_oܸ&Q1z8p8>4H$Buuu4M?G&b9GbWt!N7WDhKK*1p:\6BW̙3T*%rYk= Zmݺu,ScUZժ_1}IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-configurator.png0000644000175000017500000000536210112656434027163 0ustar hehePNG  IHDR00WsBIT|d IDATxkLW\3AYdT3jJtӱnEG{ٶ"v7M#f5n,bQqM6[euXDdƹ0BVfBޗ<繜#񄑐+:~:۶m{)=z"0CT|СCBV[O@pԩSfzߊh$ se>˅$Ir fzJe"ıcoNCCΝKzzǛ^+Ʊ|]wBh"N'rRF!22RGՆ KF^@"D֭[$@P P*XV C$v;QQQDBߴiSeII `݋J}'_R'?3v&d2 R#IR{"2XV՘`kӦM#==]Z:6\@yՊzrI(++/K6ʹdɒRl޼v'}J%T|rf3[n& 7jkkm^x˅NzRSbbb|oU*SNtRTTѣ;wt:_J{\1 >;z!00д~zn7fϞ+(ׯ'''=W5piƟرGV t8Nz=1ᔗSPP@UU=\drrrej ;^{"--M;V̟&EĻ+/^öٳ8N w82g[rzBh4͙3b.^Ț5kHx_N: k>|~nd20ڎDӧ~ʄ z#!z q܂& p;aL N!p 311QfqY%ƍ'{ )Axx# 0sDDIDu c5i@ 4[1 @C=lH* ).SQb@O%$ڵkq\n^/J???jkk !'',TbN/R73>V JMؽ/[k+ OMM5\FZ[[;ȷ= , rRӣ? >`І#`¯%͛ߦٮM$IjsVXꉏԡ{6 `IMvh6te} 5:i3f Bɷ?G&((IJJJ . o GAmJx&_f́@ULP@2>Oppqԩ'f֭W^m۶3gp8::Vp999yt.µC`L8|OJ^7T܆n\}c @71(QQQu-[?x`ǙH/(1O`oLs&x:Wz?&!˱E{\XXc/5}7ӗo`G0c.~-C`o% H/~ QXXX{a6M!]ݐ[n\N䫫W'~:LHߩLp6'XLP l6vEjLUN=#Gv͡w"| 6AxhziP"Zi8-)j /##Cө/((ȣR -'f ͍ j 4#'XJ5FZ I'F xcllp8L__Bp8&pP02. Ɏ;̉KdL&)#8Fѣ|>HDGGvI(Jitt:پ} Ufd2rZ#L}d)f |rOϝ; lٰlq,t:0M)B&!͒U<34C++:BȲt5cg.\n#2B ||>ʊ m.(l6'5uk۶!t!iTH) |JB{{;333,--!2. k.S\l6Kqb@k ՜yi.N7BPK%g@Q* z{{X^^6s)Ucgjp:pwy@ UZZBT*3sss\9c5;6&H*0Q5k@uCX]]%Z} *5#dW}$=^6!|hڀ5ukvCt9s{=t;2hĆ#‰%a{@@v8p@uŷ<$IkvWM{QU<=^!~??o4j;z2u5uIc*W|vq8]pÇM?Hs_1ljJ[*a=M2th?3WqkL<}܈} |>~_Ͱ0@]VB (5 ! # EiA"bȃ sL1qF[V"&ZP7x66j$I >g"wLKGty?BƜzՄ."`*&391>Un仌wX_[B[=`cǞM2@ÉP[{!<2Sǚ*Qͱc i+++Y6dKkM]G}T!tf|0LdphfD"Q1UVhј  K\6xUKKKDQ\Qa>F98oE{4 UUі5w׀k7)KkzmjShi(^lcSNIPUll9S~-p*4f /$xxaCXIPX,fBR) i8553gΘvxzzX,f )w{y%$@YbXW Y}8<<,N:%:;;6a~`[ҖZ22QcIENDB`././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-cdrom.pngPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-cdrom.png0000644000175000017500000000453510172712067030231 0ustar hehePNG  IHDR00WsBIT|d IDAThmlS׾I&1yi$&B &藽 Ejj**1uib:i*[;UHeR1+jSЍ.M:Mb4qۉ_>dĎ2M=<9ִ5)ijm,\\ήVk8iZss3UUU477#XǕ+W8 CX⭷hTDQDD8SSS" /<}>OqqQ^Ċدiډ_]X|b1R,*4[uYWw_D rԩSypV͆,В$-:O%k+/ \}{UUB 'Jib2$ a%!L(W ѡޡrl ߺp8PeIt𓆙 2_xmUv?{d".|0?00@<(-p:xJۗl.ZT~Ǘ_ X΀]ӴۃZQQ<$I3x03m1ac7U8-ƆoSS,fMxȑ#nW B—?]|PJsW4fljշv``u֭^$ƒ 3fSGɳ0X4"&et]!C+d 79Rt:Bׇ >0<<0HUU1+*dt(3M*,ME['gc|yM#C@mM&GGG<:D"^RR/))1FGGp؂YU*jRq| s}dilq'wЃSt4ݻWB0<l6[>um۶`^^^Jkn'pkZZ[[RN3{$%|bYǒoǒoMm~m΀a6$xYYYڵkyΝ;r… ?~rc7oތƣrԒoR`ޑ1zɄł,ˤR%S$wBx .fv544le9ebx≌p ԖTUtf,Ν;8ԽS){offfx"922Bmm-$aXz$+54Mea٪jZ0::j޼y3@ p%Y"(hd4H,4"u]",\.Wݻw_|/۽{,O !FܠH~1Wزn6 "~EuEӴJ]pk٪v466NX w3~tۣ-cJWqafHKiQSSS ///rBiiSoooѾ}lP^2@jWL`-Ph4 _/]YS,,~ʕ+.p8_i {ag^TĊEGSf'e73x+ 5M9T bZf)xIu]y.Dp*rl?^a1SL%N(fOߔu 6&&&ԉ 5SUUEcc#'OD!z`.[t,܈̟E4zuL掝N'^ L+K]'.EOZlXUcǎzOdՅŅݝ76Rܟ-& m$Sݫ Eѽa^/---5@0rU݁=o5/'IN5Һ:$ގг _V߅zGj<};ۀ>S4F,< & ?lx;?R:C"p(ޡޞ;EQȒ}790dwm`}f6/~:G $bw>YoWv;7n\ uN>}bfffYRZ..jn~Ϟ=ZSS[la֭K*^/n뺮?4k`3h4'.._.bkZӚo*Kt*IENDB`././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-drive.pngPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-drive.png0000644000175000017500000000244510172712067030234 0ustar hehePNG  IHDR00WsBIT|dIDAThkV?mI1.ievZK2C zܱ z zi9%KCMR 'mٞ-۲vH-vmǁ1'=}?{'=pȑ#G9r\< .?^;atF 0f8Xx<(yܹC&,Eh)EQCeL$b/>u3N,zCix|r,FFUU !N ܿvW\arrFq,k eT6ݻloo `ll,uIQ e3??j_N W^m5(@ѳ,B4|>SSSd2{^pwj, I޵A#QV, Y ,B`&z5ƒ@t@R8Sۍiy]ժ}~VZ6(Ht>4g}> .=z-D2:99)x<(bW ׋rX˅FeHiC4 !O?|O]V`ƱDi|~TU'4$ I͑ѩT*y>ŋ  ivʲlmRcO,ݻw@ w$4M#S\.kMhn5/2Fn6D&YZ\\dbb+DZEӴc1 0( 4oF,[}zT*t]W쑑4M^y\ra}Vf0}B0;;1 DrjnמsSdוDŽD3KbJbOAK_9(]:Vz^xqszzQ(賠 b^e }w˟bȓ'OX__ }jhH$Ç J]]z1oYaPשT*IP JH$xc`G#H" y<FaNR&@XJpsQՎ:n8e#d2I2dww7ٳa<F"{5W汱gIR a E#Hbee%822b~%t:`HRP(ƍ9F֡#G=b\IENDB`././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-eject.pngPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-eject.png0000644000175000017500000000213410172712067030210 0ustar hehePNG  IHDR00WsBIT|dIDAThOLU?3o KcYۦ=D0ɣ&&z&&MЋL5-ؐbhh*RSJK7a`ZhiKA t[Xv3y-.3ˎDd3~o5PWWGwww&9166F__xa4ͼk(P@Q鵆U`0ka<EP0n B^h=0k2n_jB|%ic8IL0<:έ0J)! =.;W s>~:/_/}Ou4Ͷ]\jzNX/)gwOOu4MFzás}ZMۇk t_ sKQ6?Z{??(up#pyN`On(Z#R,R(t;NoAz5rtC ^R28dr 9;_$ϥ}4~ЛB,w_5/R_$ɏyCE_+/p_Oj~q/.rN~j[m5Bx)%RJ) \"v[Y2d BT Z7pgֵ5iNHH$SX)eM0+HϚRJCg;$d)%B(R˫BaIbɛ\9b.1s]lzT"eYH)QҮuC4P`b& S/j wY99  ٖߢzSH`l7' =e;^سwbFyɫC?>қW%ر:7&:%`FŒ._ ]$p;:BWϐ$&C=Xs1d<u#^JyGQqz[(P͟/IENDB`././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-flash.pngPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-flash.png0000644000175000017500000000455710172712067030226 0ustar hehePNG  IHDR00WsBIT|d &IDATh_lG?wutN;0CI\ņ"jRDuTDH+%=ko_s3wDf33م>6vB,1/PlKR>xmڠF!X/UFcu#3dw AP+ Zm H_&}ᥗL~X4BP(93^Gn5 ;,k%Q]tB@05!A3/ D#v33|!/ Ξ>Çy7s?yiZ>ˆeVFHC j!ZהKSD٘갶Vҥ#^xlH$7 Jv^0 .cGj9h4*ҧoLMDV=<= ![s {f0;r ϓ~cF ҒZ:8eg) 3stY:W_СCST*!$QkSъ/VEQ8孡"0ݻ!t-N:۷LӊUa\Aa,iYw|v4L&i4zrgϞubY«qBJp̣z^okO&~%[G\^tm/:!ˡ)c:H;9VWE73hnݷOqĞ'+dԵtJ' jGDq@h*3}`Rb rF"3h"**kwoK=Xό+x&ق`.7!@ֈllb!!hg]1 jax;D%B>|>oXSmDMaBZй6<<0c_MͫI]kNwSJvq:8@|74~2Pk|#ϫν߸_+@hJn3.O*?@EIPY-V>'8'MȤ2G X  yW_G$@P6 `t\P&1¡B"^ N@ΉHXSABÅ1I!F ~nmʗJneVwR" drLN+~>&=C6ѣKvq9Y{aﱽvAm.g$g{]OIENDB`././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-remote.pngPerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-remote.pn0000644000175000017500000000534010172712067030244 0ustar hehePNG  IHDR00WsBIT|d IDAThlgz?3;;];^m,L 1&\UDC?CJџj(ݩt*TUPU/VJHQLlH"B; 6ޟ{޷,l`bҪhvvvw>;qi&Y3MD) HoY Kq`/0-u$j[)dԓxC{kf)%8((=ij]i$[zghԓxn_OU(9%| $Su/ ) @ (Me%lhXq!!EEAA O2d<1[aТ=#A(B,Y;a /}È /sQ֭S%S`8x."4jX?į|Uh70BZI9_(HreI*pe6mR !05HoRQu^&'Pӹi&r)xvr%69d^2[[)V+x*e6a caP"PZ 1XҐ˔2e1#_pe,k%39A`a-Z%iઍ#f!ogkkkgI?\5c*ٛWPC7aF&-U\)pڶ\Ƶ,FHNPՐ.>*{͛7i&6nțo_іu>ML11]2K1"NVJrBS.:h\#w#[ .tF"|߯g>g˻H3ek=4h؎Uo'rېv'nR+R $IJW3OɃ,`ޥĖ-[߿)%BhZs(Bfr\eZΛ̌a̠&Ʊ* 1֍NBF:ѡa殧qGz=Ɋ+%$@Q8eՏݻ~HjB(pV~WsC6uPlfɧ=ė$1r_]9B2DӴoׁ+V޳gi]NDQ6m l obnxeWئcU!VyMDz(Z >1G˖-0 mΑotb^ûvBQBd2a+ ^ظozIh1.+Q_{w @SSL͛7/%dv}?}vڵkdY(OZE8U>~h`߾}Ǐ;qvsHˣ7?4w9q2R 4dE%Ƭq&soR*Ξ$P+)p88Xhͯit;(JK744P.e!x뺘IEf|y>+{'D:Ʋ,.A.\Y7xuf2 SygBԯ+<00CCC/XCk鮮,Ν|% 73]]]7x#H$?#N۷op8 >W\IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager-usb.png0000644000175000017500000000344510172712067027715 0ustar hehePNG  IHDR00WsBIT|dIDAThKoKܾMeNmc$Y AEg,e& $O@ -wb;}d2[ Up(.IeE˲*Aԁ?[C{=Xp4UEE׻e8}]]]b1bXTU0 cMCUU4z1===߿nLt˲mǃ$IȲÛKF)U;4 YE)Μ9ãG>*@}},1m&mc  ~I\b44+{  ?.irE0 4Ν͛pߟ:u qmq$( [RWm{ <ʞqw?/SDI "Yennn0LN7yĉx^B5皦Q(b<2ok#99kvjgǮv4M׃?r9T!"> ~xފT#`0f?~sIRtپ%:C6GQDS(U(Q0DUǎ+LEppx,;i~w-rldYmtϊ5B>粒ٍl) 6J媚B+++fggPx5a[("{x<7A 7ihvBrE0 .LSa7n\9kcai gj!&''O t]w^,..2??O*"`G_-d5C044texx pHR LU2\}C/ex:5ß~su]DD)WVVHdYwyAx1ӹRrׯHTBU8JM߻wo`0ྕJDPќݰ=|vmRtׯsk }7q4vp$qj(beeŭ.1o6a:l˲X^^fttD"'O\U2X4MCarmW5ckxttXHwp!hnnv_+mLfxdd&&&>ܰp!.]F+Хܾ}'~_[_(FW^ Lܺu+_*pwQUSM5մbϴqIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-drivemanager.png0000644000175000017500000000244510172712067027125 0ustar hehePNG  IHDR00WsBIT|dIDAThkV?mI1.ievZK2C zܱ z zi9%KCMR 'mٞ-۲vH-vmǁ1'=}?{'=pȑ#G9r\< .?^;atF 0f8Xx<(yܹC&,Eh)EQCeL$b/>u3N,zCix|r,FFUU !N ܿvW\arrFq,k eT6ݻloo `ll,uIQ e3??j_N W^m5(@ѳ,B4|>SSSd2{^pwj, I޵A#QV, Y ,B`&z5ƒ@t@R8Sۍiy]ժ}~VZ6(Ht>4g}> .=z-D2:99)x<(bW ׋rX˅FeHiC4 !O?|O]V`ƱDi|~TU'4$ I͑ѩT*y>ŋ  ivʲlmRcO,ݻw@ w$4M#S\.kMhn5/2Fn6D&YZ\\dbb+DZEӴc1 0( 4oF,[}zT*t]W쑑4M^y\ra}Vf0}B0;;1 DrjnמsSdוDŽD3KbJbOAK_9(]:Vz^xqszzQ(賠 b^e }w˟bȓ'OX__ }jhH$Ç J]]z1oYaPשT*IP JH$xc`G#H" y<FaNR&@XJpsQՎ:n8e#d2I2dww7ٳa<F"{5W汱gIR a E#Hbee%822b~%t:`HRP(ƍ9F֡#G=b\IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-gnomemenu.png0000755000175000017500000000640310112656434026453 0ustar hehePNG  IHDR00WsBIT|d IDATx{lW~?g^m;؀cyļB!Llb6(R)lTmiYV Uە}Fݰ*U% &h͋c1&p;sg7`ҟs朙ss~s~RR!wQEMEQ5 hkkدrRٳ̛7zL&C2$N xhJ<O9pBb?\+gafrT)?gAJ8뺓uuuNRbYTt:M6˗/#8%|poogHMC2VH+baL XBl2IR#&IN:ٳg1-`!NWZo EU?BiDToC Q*GAQ,6P(Ě5khii0 2 $ m.9{Gkma-|}Ml>MHR{Ke.A/YLk#---Z|>O6ܶmrLD"#G .ZZWǿX͛ywR,ki8COOMMM\~ͨՑ9>NM{{B`Ϟ=ڵBieYtttʵkP2b֖1ƹgvSO=E:D"eYhF%z`!B-jY7t_=71)0߷E+òvr$Td Xߟ+@X!HI#Oݬ[OέsbԔF3%i]WNSSuu܋i)WӾlر;[|E+60a)v%$ B*8n95ْU,T.زk|~_K )qPuaA G~r=s`r0wf֬є9s BgN LHoBYO3/ :A$tgeV+`Y̵$݊ s9h Hp2!X`*Pqq$JH4[,ph&`fk-vܓk" єĕ65e{EkU!rTv͆s`f }CS:ZvaIlE;VZ0Dz)$-S"P$:~ّ.L4I.;;:Kv&?1Vh2—zx z(.t$Ra \ P!PjA+?5s0_VEEA׭- C T* ؾ H H{V FTQp%5NnWʠ 9ERlv_QCxM+t3]o遗x$ŇVU3c/b.SU]AAD-h> _]+jha Ou_R GDxהY<ã8^IQ9ڑ!O-Er7 jxxGJQCAVy AC#. -iJ\scWr|Ox~n3&׸([pk*W0t^3# b:&T\.C>ߋmض= `w0@HNΖ{y=NƙР{M7 ^ZI}<,kbr8mNEXߗߎN@#*27, "hp (3#|9Aћ~X~'xٌ;(JĿ/ ?m*ѨR!( (5 ãѐڕwWzJ3?N4=C+ؼ r&C$iT|1ѨDDш"ZCFO(^3-ش 4m`'˳!POb%PmVt]ex+ .T/Ė e7"]$M-^)6fX03&:Y蚃XOڿK+"X T/P!89 \ W2,%pq}'M3֎Vh?$Q)~_ˁЁg*ERfZ|v<Lu Lj>g ,~ wVgSIj&}uvzlܸz6l@7WoYuP WA`@ۧ8s331ʌB˗/~p,Z__uQbadAS"i&m6%K$zPC*05546T#:r[{W_^~ebdwx-Ia8 {'Vpő!qGPh镕|z<1峍W TBӅI[z8ԞT*E2d֭wE⎩D" q ꢋxb-@Pa0=`MB b֭ݻxH$H)IRHD0bu Z):}3M?|g8qH$8&1m4oxbb1Ν;^]]M8ୟ/Ѯ~xO?2( r9z{{qX,ƻ;#s_sn}Đ)IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-iconbar.png0000644000175000017500000000753010112656434026075 0ustar hehePNG  IHDR00WsBIT|dIDATxŘ{PTw?M yT8Q#JɠnN2:1Y3TT$[[F]11Ec| "Ȼۏa`Vws=x@KMMeݺu,]xl"׷y7+UJ*z]^2 GEME0)vjc 5nES/o\OGaG3 |>~F~d%A Jy^DI`O:)qL88.O.]m[{8ك Zbb"6l ))ǣEHfFl(! $GLSREu#uFZ~<6Dڌ_?qqqh">Lԙ<G)Px `i0Zj4h覹Ɉif#f<^BdbϞ=L) f%jA^?7mM&;uV-tuYtuwVu\}xl;3ϐ㡮6L:m-f'zucnzZ{[G9o? "W&9VXDͅohrSc.=&$sK2&㡇)Zw# YR: UC\8>ٝ #v=BANBA26ʊcddOÚsV+V2{Cvv6N}Dx Q? Zq7wDGTd'rJ6G9!Ey@<*Yf _~qQf/m| nJ $_8\-=w0~x;}s@;mv霹K%?I ws%W/aJBcU[K.@}}=q{кkN-oJǣӨEEEطO/Iɽ\?qk_8h~}v 92K: JNZ(6S8]^^y VQs4mςA(ACy3Qq3DZm.f p}LnF^V@XGdD]f77%2* CQ3.4LƙsobNwE˷ɁjIVVۍDR#~Aq:E 2'Ш||s~ BTrjzr=+P:V1:E/–l\.˅n'>! Qaؑ. N '$L"J J~ZltE/9ub.Fy'xۍ \.̘ [ͅRĉ/E$ΜD57X!!r>?M6nyʢ{ز~z(ttt`0p8tvv2맻N~?=VNA"gR@sb8?ߨ]m4m61A ??Ktt4۶m2,+YS:Չ%Oo ::FCmm]f;*U0j?_C(rΔ%Z bI\ۼy^קѣߚL]eĉTWWGWӭ=X%ÙmekvW˱9Bdee}//lҥKFqh$ BH9@ρD֮]Ν;%]Rpʋyra/#>ɂdט$** MJJ @`?NoARXXxOM#&qvv6g&;;9s搔i /˙7qo:us9X;d2*.Z/bp\v;ǃ p[ %--H4 ^5v[ϢݏXR6%=%s=,_+ln/>y.>&,L&=/ϒp8Ļn<(/ɐL:cxYl}j{<&Z22W̚5Z֭[Py6!6X?9322|>Н`hoo\SSիWl65kְ~rrr'Ix` ~&cs{ihhYϤPohz!IHH(ٳgx===۷*NoB }^JII3 .֭+Kr#bzvZuee宛7o[>vË/X}?"{8迟j͎"P2lXFi)Ta*u _Ҫ+++/`*++-łf+۱c'N@7|h7Sʭd~\[$|fڄՑQzDMKw2e^.m&U6zϾ}PTƒCff&|P7UUUVј'IR+WXx1V g jiq[Aq4*br8 uLVV.aaYURl6c6q\DDDKQQѩGync2(Ee2Guu5/b 0,7] %: b"#VOq$j u8tD`1btUUCgΜIxx8ItA]]uxL9y$-bRBLJoɚ\ZnG.csXۻ-֙ɑeW{K&&$9h&l޼6n8mjj5''gpHT}`S׏ 1b-4aJoIPS^R?j `c:}z}m!qrn݊ tuuz s-3 ~m4ݼO-cLAY}1{u.MAAAia_\9 IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-launcher.png0000644000175000017500000000564710112656434026270 0ustar hehePNG  IHDR00WsBIT|d ^IDATx͚{pTu?VZIH A g@6LDJ&M+ 'MgM V1#i\K-~JZ#! !$XI>WXP i,!g7{9{;wWbK/QSS twwKfc/WݸyzmOjy2:4/YWWV˲p8|Y@\:dkuwa&ite?P i:͹/:9xn3UǏso lѓ{?( e4K8zx(04ۀsB74vz CwpKwr*A<_{")3oS?yfÐ ۆeTp8vE5ATHK,pY\(7~gWߍ]6.;niaqel6M&(,ZLɶ؅g;=O| Az)6\NCnS$EDUMtlB⍟s88LL7Y~7SGCddeɝAn -MPa/ެxGDA*~x1@$˕aI|i2}>t4-,+JIRHS'\ܹs\C3~nxkÆ w#ye, dInFx;47EnDdI$8%8ggKBC===钸,++kٱcG}ǙI1ѱ#1BQ‘8oNoo~ٶ]BV d|BeB|h4c=ի0͇פ@aa[%6 UU9{.HaRL2u,-FFFٽ -[Faa!^gXr$*gGIj&hTTT D%K88XUWt- Xp%1"]'ڸ*,˚C$*++l5Kvҥt@,#;O8222Bt+CQ?nݎ  Lh!ٳg0E08//Og? rС&%.Q;6md7A{[ƀe˖{セ?Sϊ |[[jX$}|ӱnmy>Q&-Drrx{gqY$/-k߸qcÚ5k&')M]QUxR$:211q9S(߸UVGOOϞgnୡ%;; 0e4hp8 twwLUjǂ LA`V̵i#+VXZ I'F xcllp8L__Bp8&pP02. Ɏ;̉KdL&)#8Fѣ|>HDGGvI(Jitt:پ} Ufd2rZ#L}d)f |rOϝ; lٰlq,t:0M)B&!͒U<34C++:BȲt5cg.\n#2B ||>ʊ m.(l6'5uk۶!t!iTH) |JB{{;333,--!2. k.S\l6Kqb@k ՜yi.N7BPK%g@Q* z{{X^^6s)Ucgjp:pwy@ UZZBT*3sss\9c5;6&H*0Q5k@uCX]]%Z} *5#dW}$=^6!|hڀ5ukvCt9s{=t;2hĆ#‰%a{@@v8p@uŷ<$IkvWM{QU<=^!~??o4j;z2u5uIc*W|vq8]pÇM?Hs_1ljJ[*a=M2th?3WqkL<}܈} |>~_Ͱ0@]VB (5 ! # EiA"bȃ sL1qF[V"&ZP7x66j$I >g"wLKGty?BƜzՄ."`*&391>Un仌wX_[B[=`cǞM2@ÉP[{!<2Sǚ*Qͱc i+++Y6dKkM]G}T!tf|0LdphfD"Q1UVhј  K\6xUKKKDQ\Qa>F98oE{4 UUі5w׀k7)KkzmjShi(^lcSNIPUll9S~-p*4f /$xxaCXIPX,fBR) i8553gΘvxzzX,f )w{y%$@YbXW Y}8<<,N:%:;;6a~`[ҖZ22QcIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-lock.png0000644000175000017500000000500510112656434025403 0ustar hehePNG  IHDR00WsBIT|d IDATx[l\GsNbymuݒb(qJ"R@CUBx %xB-B@ BJJmEAAB&iė$$s?3ݑHdצM줡!A8=zӧO']f'46{lҽyf6l@kk+B2 m>J H$r'h顿˗/H$۶q]L&iTWWH$8|0ʅH$2cǎm4ض8L -R[[K:22RTTT TT,>8țoOWWR]n6wS䵢 #um#qYyݐYk"iȐk( xzL5VpOBVW̓{y'vtUl^WA~DM@Oj2t=VEJisk Ck KdZQE;,#(}%2/Mk\-waVGj*( /b9o)}MSAi+;ܺ=dԿɞzeBE A =*@A R·@+.;w t=fَf!_Ct,ŸFz XYs 9@QC/ѵҊv2ь6U?،Ijn2h]!`A^SA f@Ѕ&(#>O>dA=/իt4[yf(DSYLu?ya !=鹍:xҮepD}=i_ Z!wEB] t т] 9h]! B+Gs.$LXBa5(>jC59oB+_F.$"va 2R! sx;zAgxc(.G*J, xTL7TxQrٸU6sDw BS;,(+vzO)@4|dQ)FIoId~XZ }N2TB('bB[}d@(|p[066%_~ )Qr NKO"7N`KɀUd= ) ?z AE]nՅ,{*A,䢫U>d\A4Z4&f<Ʉ˝28?l9f#^Vaِ5٨z t!J8qqJsYfB'@(!MP驐p%4q} L8jo1}Ժ5!PGh*髅Wz. yY EZjV/J(?W#yFh}rm&BdtίO]I+.^OKN--bESzrIwPW4ן I+דkMjm/ sIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-nautilusbookmarks.png0000644000175000017500000000614210112656434030233 0ustar hehePNG  IHDR00WsBIT|d IDATxYl\y;JΐE)Q,ɖ(QbI8J +i!F\$ $/5"#/A nТ lAJ"EJd[H-ErCzP)~ w?o[īNH O?\{{};>mDl怑MuC+~!Vymݱks @Mxrzx#v!4WjjݱwA <Od|<3wSHah5ۜ/vá/{&&sC fvتVM_|zx`ȪK)ХDJz(|~*Еܺ|%@Σ (*e1Ԣp,қ ˷D0xC@> ܏hT\\]~&''`"LF#c!!O<o97664vtK4+/`EMdѭRYr-nܞd ]/gmmW|:f.+.b=ΪBطo@ecYD(;npjl6Zj--LLL 4 ܉;?gMi] Lp yl'mR*RD W)h477x D:LDO|:MbجdMu{\y~%mƲzl܎/Œ_E")DyQ)ӈp"b0|EY-Rp{8кGg*VBM;rYT:g U~HJ{;z )$(g02Gq_$kɚFNRF_MBu/y8TVBp M%VV*Ҙ_LpпQO_B)Є$Q@SM ּxn7/_wO΁cǎw^-;A@rnRSXAܸxsN"bS)6V=]jHQ٪ڵуgg"M;C"fr˛.YjĤH-W o^:C(.@)B)EӰ:M'CCQ= ZmYB2K,5\2.%yg|#:n^/Y(Ngd #iTbakPEluΎz}Aցp;smm*`j:R &Lj7$O|>/Bƕ"LJ"@e bN*z7] `!a׋JyѤ[s~?J) Sbx gl e?LM|/:20w_۳ѝ![*db'?GCP(&b1ƢX_zi^*~('#_~xJP 4-~oץܾ|n/?9DakTpkQޚTi#(O4Al!">MRse⯌ 3CMҨ_n' !849'=88鬚Ʈǁ\]KL'\y #M8wu&8{n^[WΜ93]<_Cي===?~!RJ. O}[WMf\|j1 )5󱭣CΥܤ.xwǟ_03VFRsA)܁wh3v?ip&zM>t4Ppjv]u;m[K?IriXNڃ,J={tQNg0,.g`QF,uI0裮:پ ӑFFFU<'`٪IXACA"8!8188w6Rmճ÷8Uv+mrV{!LL&IRR)4tL&S6-Yw+ו=I?\:?Syնa\.!^Rf#azRXe}zq g㹋 IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-openboxmenu.png0000755000175000017500000000640310112656434027020 0ustar hehePNG  IHDR00WsBIT|d IDATx{lW~?g^m;؀cyļB!Llb6(R)lTmiYV Uە}Fݰ*U% &h͋c1&p;sg7`ҟs朙ss~s~RR!wQEMEQ5 hkkدrRٳ̛7zL&C2$N xhJ<O9pBb?\+gafrT)?gAJ8뺓uuuNRbYTt:M6˗/#8%|poogHMC2VH+baL XBl2IR#&IN:ٳg1-`!NWZo EU?BiDToC Q*GAQ,6P(Ě5khii0 2 $ m.9{Gkma-|}Ml>MHR{Ke.A/YLk#---Z|>O6ܶmrLD"#G .ZZWǿX͛ywR,ki8COOMMM\~ͨՑ9>NM{{B`Ϟ=ڵBieYtttʵkP2b֖1ƹgvSO=E:D"eYhF%z`!B-jY7t_=71)0߷E+òvr$Td Xߟ+@X!HI#Oݬ[OέsbԔF3%i]WNSSuu܋i)WӾlر;[|E+60a)v%$ B*8n95ْU,T.زk|~_K )qPuaA G~r=s`r0wf֬є9s BgN LHoBYO3/ :A$tgeV+`Y̵$݊ s9h Hp2!X`*Pqq$JH4[,ph&`fk-vܓk" єĕ65e{EkU!rTv͆s`f }CS:ZvaIlE;VZ0Dz)$-S"P$:~ّ.L4I.;;:Kv&?1Vh2—zx z(.t$Ra \ P!PjA+?5s0_VEEA׭- C T* ؾ H H{V FTQp%5NnWʠ 9ERlv_QCxM+t3]o遗x$ŇVU3c/b.SU]AAD-h> _]+jha Ou_R GDxהY<ã8^IQ9ڑ!O-Er7 jxxGJQCAVy AC#. -iJ\scWr|Ox~n3&׸([pk*W0t^3# b:&T\.C>ߋmض= `w0@HNΖ{y=NƙР{M7 ^ZI}<,kbr8mNEXߗߎN@#*27, "hp (3#|9Aћ~X~'xٌ;(JĿ/ ?m*ѨR!( (5 ãѐڕwWzJ3?N4=C+ؼ r&C$iT|1ѨDDш"ZCFO(^3-ش 4m`'˳!POb%PmVt]ex+ .T/Ė e7"]$M-^)6fX03&:Y蚃XOڿK+"X T/P!89 \ W2,%pq}'M3֎Vh?$Q)~_ˁЁg*ERfZ|v<Lu Lj>g ,~ wVgSIj&}uvzlܸz6l@7WoYuP WA`@ۧ8s331ʌB˗/~p,Z__uQbadAS"i&m6%K$zPC*05546T#:r[{W_^~ebdwx-Ia8 {'Vpő!qGPh镕|z<1峍W TBӅI[z8ԞT*E2d֭wE⎩D" q ꢋxb-@Pa0=`MB b֭ݻxH$H)IRHD0bu Z):}3M?|g8qH$8&1m4oxbb1Ν;^]]M8ୟ/Ѯ~xO?2( r9z{{qX,ƻ;#s_sn}Đ)IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-quit.png0000644000175000017500000000434710112656434025445 0ustar hehePNG  IHDR00WsBIT|dIDATxOlW?3oެ'RWxcZU-HU{*]C[* RC9 DH8TjW@j"w(\بI'683opx3=Co'=o}ȁȁbSPrh]X򧬋%ڣgO:|>ll[`6mceXmSEQDmhvך4(kv"> Г9'qđq8);%cOaY`+"AktZ!a?|Kmf?˶R"! CIY%eDDD:B P*& lqRVYƶ,;m(B!a CE(”AqL_m;vZB hw%Ʋ,XD*TX dQ^/F@~/pD.\|Ϲrtl깸R"]/ l_~|y^yRPX$H㚉{ځ5$RRWۣBLT2RP,^^/78pD:qD Enؖ.vԂgƼ|"R|Pm@9HK8i\mHRkl6u6<'1P<nf1u%DVo,scq$D7 WWM`… r'I^6vJt_0/|y5SbG]Ij5Fz n´f?Os_T/Xi$c\nVK{/8›D:@=R)lq\D<:N%B^/Jbjjk7LOrj2j2juz_|xe)յ,S0t 󺒨V|Gbgf_^Bsfi.\y}rfġ[BlZvۍVO8eIX_w([=#Ż-E֯wq#cHu#H]g/҉P;sLVZO~p_>7yploMpo XY`ᣈw}?c&2!d"С,#sΕv+n`W {;3222733+92/ދ C2#T(>ixٙ!ÑLi'I,pnlll<|<׾w1z|P)B&mTr^C x( :'{Xx|bbbjnnnWZ_yg!7]1R @BkA@]6Z*<0R   | OS/Jэz^~'RfѠ\.3==Hc|l`TOG J>}sP86W?##rirrJj0ZV J=wKn֚zCiK[*:Iyrrk4RĩSYxfA)7h7"-pJ65zQ[GJϞ=CLTl roV$t8lO$$f\/ڂ~~p{XG۾٢3;"fULjւ+ך76!Z0kG?a G LO͐W5=A:F3:z$+Qe{0ёnH0x`_Lw*#ɓ?G@%N{IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-recentfiles.png0000644000175000017500000000745010112656434026764 0ustar hehePNG  IHDR00WsBIT|dIDATx{p[՝?%aK%dduC; NgaH[YB CKY2,C!@ee]`K:@a6y!iNޒ+޻ȺX-3ۙ3ss߽???H_C.w7"_8_[6vi̡C5 lr\{F3g駟eځhiiriCCC\K/#R0k֬q?Sfxq:̙3MD"w=UUq:n\.W5ysҴ{#GEqjR]]m~w^-[f~ey*hH$Bww7 U`:tY'Nb5.˼Q4ǁ&룭>({졪͛7S]]Mmm- ,jbٰl~(D"J ^&6W^ye7(CCC?墲e+OY)( `O~8S455qw2|JKKZSbpxb ( nf-^W~&6qJ8s ,SZZ̴f ݽ{wͽ?G~<\"IîQv(0cgaj.H"(bH,bUr ?S[A̙BB! q뭷[o|6Gsvn$I;/KXTnAUUBJzbC,.EQҚA" xp<qS6i,3a ,tRv;^,V>^P@`_>EYv3Z,DQf!IB  rVbkx:]w9 t:q:Ԙ@yD"Be @EESMZwNᲊ<̍ed$N2d̙8l6@])**BeΟ?O$aƌQRYr_%aj.~wf1::J,+t. g7XߺRi9ES… )dYnL&s!J 0 d2H, ё̩I2S=fy2iSN(++c޼y&́OnnG !'^$vl6,cgdh~dYFQEp+*TXp '$ul߱^, ֲ|rzjjjPŜVؼu-//YR9goĒN D2|6d2Iii)^χCe$)i8 2,S]]MII %4oG}O>^( ( 䳁?B+(~o]?(QRRBuu5(5joG^ִannb$I" 2sEn-\! ri<UUUf11LʒEd5Iu l64$É4 Ld0 YI*vCJ{h%K'@ P VQOI9l6N'D  6Q&NcZMQq:աilִ[eb}]P"O5cu+ 1cuY##fCB4M# (b䆷Ϧ{t:x<~3?~|ZOfP$Kq(Y̙3kfx:@e  6v-A`ppł.-md p 7F PV N&rhAX^-df!|ʐeL&Ey&Qon|B@-'Jd([UՂY^ 1M&0ci] %dqZxZӧOoorVQQL&#K:IfЋJZTTT0{)ȷL&C  t:Yd \s h! 3dt֯_?E|0d2/]0T D|tc-/V!A%D[ x<t]?6!$I188aDqz G_G}}}tvv|[Q ^p&~6}}'Q:#!"Mhϓfu݄J&|>C1NY0 H}Clܸp8ɓ'$ پ}q B FA8RTTDjk/^}ӽn1\9X,|>!INb13kX,̹/KA*teHdz~_SHR8q;v000Ehjjb߾} pqպW-څ >+x% )UEr %kq iCD5DbHF7I$O;ذzv;ǁg?_\52,6 t7555M+|U]?Ѽg1Wh*c2麑hF86}d6\ G =c%z%BKŗ.|*bvݖIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-reload.png0000644000175000017500000000431710112656434025726 0ustar hehePNG  IHDR00WsBIT|dIDATxmlS/MI$bZ-GغimqU4I+0m0 ۺ"UT_JUJb~EV Xĉ{>(sy?+Bn5`/R'<f,RہLX"&<<<آxpu35lq@$Mmmgh 0q4(~`3 i!@7;]M߂@P*I+Qt7}X xi՚|8лg-`U1BZGWuɽ&__'3\A l> wkI7ӽh1-BDV"Q!10b:G$WRXN\QP=f,§~Bj%EA|]MPQi>ݩ)`Ժ^:Z&ȬٽEc&C/ q3T:Ž߹%0"DBa:XJm> {-n nk;3C9`8ymnD+\<1 «#ӓbt]UFNdǯ3egylϦ"*2I|~~ qI#%l-||.pXiPJeL+cR^^[T O /Z|I|/'Stgbz&gc ҩM`݇P=ā]@K SlWuBtGv>˪WT,ϒ!㖪t9\tf_+V> =qlaK'㾚^3Os|-MqȘ#.)[\Ўp^|NY8ߺD/=SO>j c7p~&cVq`72"΁: Ӻ5P+t-llOR+׎)ez=-dt@I\t[4V5~3e'maV(dܻ3 xFe4ݶHtWZsȓie?3F͗ͫJdY$T`IcQt=Զ[97'AA6"wy&̢U0.E0tg鏖r[跣dƀr;}\^qǐ!`m!Z ZVI@c[t>Ik }~y5H#Ht="$oڶwˆ訊*k{![D 5vB?`Կ "), 9~A'0I`3;Xߧ5l-ˈLT7POa Hܘ@Zi s䅓F.DVDq&܉i$nY $ȐEG;2l%N` qeN0ZVeb`¡pD-R{M@'I#K^.φZYZ?_>dd}ς;B輹(3N0cz,oΑ` 5SK0K8r-χ`[E1y< fz:/Qp)ǀML%EBI. ^VsU^EBG$I!G`x=Y,6p.F$~`ƳVQ̭w%O?D\BeB9!g!IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-screenshot.png0000644000175000017500000000575710112656434026646 0ustar hehePNG  IHDR00WsBIT|d IDATx_h\W~?̽wJџIkQ퍲l4)5΋& a4M$ <QfRV/f{{Ν>vH$biFFF0MVE4M$eq}>s>3:ﳲB.#HM$p9ŲF\."X Q"\E4LӜqc wdW^}U:Zm_1MH$ضM<ԩS"Ay?~ jZlxz =އ"+@}a4*%ZiG__webbEQ<ϣhP*~ׄNMM!2 >b6al6ώV*<("IXṟcXZZٓRUZHӈDk"[VfYYY!v'/^{lg  .eaaL&CP'&=2l pla! ǒȲL"(B<X,L&wRG[jJ^'SI'eTc ʌS'OFi Erj˲p][$}L^{`lnn2::!=Q\OhH&H}("h$z)m>D(LFQ$1`ppZU` $wBJI)}=\iaG( KxQ8'P,(c|χ @} L/\vfq; reQ,d2B"e+EXx AxMd?^#tU|'ܼP{a`%`6[[[$I RaZ UA&iY8@eÌ8ƙ?*UUJdtX0#p .x<33 "px,|>oWUEq kB@" 0>>N hHnW,\x!!v#P(N-`χ iLlL"CByD[`}ڵo޼Ȉt:q:@}ف^/>T2$ɠiZė:N"[]C5z.v |"$ϓrT* ߚX,L&밚 qL\dDs )uu-CCCZ Ń( }}}ٳgf4|afBIw0wm[׃:HD YdZlmmqI-l6kk% bq+H]Gb"ce%DV S/?")Ձ2,L*Z.^ falyMm@uGC>n`DKop=z { 85`π}15 Bj喆GThۀAzݼw3>Oy͉\n=yu !AݣoD0rjRYH$o6;h7&Xѓ//(ny19}? 4"=tS¾Z+%>u>{e [%#af+ʀ?~FH=~Cqd'e)Y3z30c*Q.TN=B|Gط7K@Уx٢Ba3ӘC9/-˃kFm Hٜ}JcZ 9]8R^* o[ݦ 4_0;V?% 4Qs9+@p`; c^&GtmX.%p;mQ&g4y7 Q.T*YdMl ۱L=<טenrӧ^\.[muuisu@ȩ׸49(sg<ZZx ֮ (u` 0RY8(˔J%mVW "l&?~Z `|29Ϋt{(Jpx۰T*E4eiih4J2l.q(`ŷBATMQT1PzBkkk{ !H&b1 :JE;cH$׭{ExiiX,f6ۧKBgϞ}t`bXW |X իWeOODߍg)W HG:ґ^ yo>IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-showdesktop.png0000644000175000017500000000701310112656434027026 0ustar hehePNG  IHDR00WsBIT|d IDATxՙ{p~?{Iu%$cTH"Ab@qz)L jvc/Bj;e=rj@3NC$/(! dsOv7w7^&9D;>~eW5lp=0PMNx]Oo3wA"A7ik#Wk3#Ǘ5aH8ٜxyIZN2Kף3&NV yPUUUPTUՕI2ʸ6;ȝgLx-?Ci #(";?Ơ40A4 P5" ˜s]9=7TF5Y:fގQ]F3 tzqtF:C<~Knhm`J `2Wg?+:M$o4 ވђќdCgah×y:Ds[ZB5Q:gcX t8L30҉c4'uqo8U=j _G9%9sR6N~%'?NRbJ0 oP D9ĉwSJ0i}:v?VڦM4A^aav1/6o|CSl o^ $&&nܻwoJ4IѬ9z(UUUr?/^|`$''3o.1f'Bf0idffߺu+Vz6ζ8vN!f{ z1 (CvpJ'sCFS2#^ SPPue4O?'(l$L.'NfЫ#Kj B%vUMT2ˍ}N6@D$E#0w=)2b\,lx |G8ϵ$9hESc jNG \rDbl<% >DI$*EF#Dh} ?YjFQCg([ΰ]񉋬Y}x*]CQd 3-.FEcH0B~3I:ffa(,,j?^xB!nebk֬alpvht0ƅ}$ڛA7HHܹ::\(EQR4Xo(N.]ij>֎P^M{u}̘xIp#9o"k;Eim8DW,Ef8rdEBR$X?8#1'5{RlukHII~'ryXL`QUza̰{g#ܛS~\2Q UT`4j*<[[} Ve DRD4/b鼻trS\.hhh! HPs 8 q72bZUXQce}ʕ+9tA$ID$7 ,#ǜ|@UU@=gF#J󂰶j੿ .,VۘaM5-ܼtPۿ_Kfi39s_ԇU`7,,\Ȼ˓?K[ R5?kL6ɆʬTcW;딱T_zss֯ bGO>Q'-- uB(B;q7fZ93ՏIM>ޱun:v>z. cq!|A?>pӉ$I` -HCUdBa{”!5U:~Lﻙ~~n g_dݺuz ~ƟoXƜ1 maTUjґc꣺ĕzŊ45:\f\x"77s==wdGkKbdԻl Pe;Alm+ۂWZ{ެgضmz^/.\@ }}}qF/?`#+Fim\i^,D3&eu\+;xwwll6DtcuFFF^^zԸn֯8>"iV5;/H0b@$z{{޹syժUz~?lFe(YäSO1cĞ#;#QG3qt 8ЛEx<Ć@ P3ϔ3CFEQeٌh$ bX0@RRv?eO$!..0ݴގ%6't6E iiiyrr۷TTT ̸eY3>88ᠰ@oo/6l !!D[[uR|C[om=X /ib!`ZIJJbppʽKii)VYx$Ibǎ,Y2hJ)M\˿<RNsyYYY;Cffe->jx'=O^s/btttL^/zl8f~]|ӛ_UU \<BTLMM iLOC=ēO>IZZv PNGDeKgՕkkkq\jIGG``07 6W_}2v;v{/_$! ""`4?2ޥi I~l4P(Ď;n'fc픗_ D"cQ]1A9qĴullȑ#G0TTTIk(}:TF#:bpidYiF!ؽ{7? @UUE!11q "C?qLeJ hU~|M@QQ .bG\\,J(6^{5.\d 3~D۹KaYT%̦>LU67|{f1,h9{~ PTTĢE(//gѢEc 7 \mbo+V;qn/.%!!2 ɩdA 攙IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-slot.png0000644000175000017500000000364610112656434025445 0ustar hehePNG  IHDR00WsBIT|d]IDATx[l3^_A8rd jTUV%RQW D&T**I#6Tŕl)"&&JBEv UFɺ*R!5cCb_ٛwwaf3Y!oIGg笄n݊Rx4Kg<ƹmϞbpCo}gGY^ j72IЮFA˗XrHX0#Kd\'>7T?$-[$xp8'qruHQ@p̒'sW<,B )F' [ iV2_( 3Y\Fs@g嵗hy%o\/hJ$OZ?|L븙>:|%fc^I#ȒdewHME59w*PUU֤3mD(LeY*el, iPOYtYeD͞ȩ`hd4Yى@bV= ,,=gϜ/ZLTUAM|0z%:Ӎu#ea@ߍ1>5Y> h嚪΋0l鴎1GzAFubI^S:̖ZV'-vnsΐCM*$~sŞWN<)t66.:N1^̛|V n \;wŋ-nr#g].-*WpM p896LHKC@"/^8z⏍SsNb!f}j?ww ȎI( ϐ03g$붎o^;Ə>QHiz\"hLx&\S~ţ,!I2/d*xu7`y:J*Hiɟ{E76TzԔ2sH ǸY7ᐯy}7'#G$$ Ӊ,IHz&}=hG-+|c} aC9dz CztG7j,H{!Jʖjf,rǕ_@~A!9'G=eNgL~A!Á;WH>=TVU}l"--8 %``,qRڱ}_!`v*_9{s=%OLFJSQ\V CHְf@ύ ipq:}Q_،>KWg_~W {dw 먯*2|asg8Cw*c䩢,{=R(h.Zۼqsƺ[Y &xEqVBcc#>o}Nⲻ&6+._yAh¢=-/Q~S==K~蚭3'rغu+K/!חanj ;ziii.O==ᄈAsE@cZ s3rJnʖ-[(//g||;wrYl߾Nb gQ(Td)elXYʈ۶m `"E9XZa9y.0}k6.9Ʌl766N v:lذGbZ1ʹSSSCSSWFu ߌPTQFO>̍aGZnl{Ͼuc?ݧ稧d{DQȑ#8u׋lb`6j_*Bty*FSB(ST.ٮ0DCC绲=]>n\7 p1<|?[[Z,HXy akF6m$ir8u&iL&G?ߓ޿CUu ?h)> xX|9"9~?### H$D"DQ;vw s %稪\ P1JvszY7|&^JIIɬA@ʊ+03bD_ի_ۏ8@$,Yv5jVcpl0 QTTNK~82<t:*++QTIߞx_XV_PIN0RaŋW~yh>=)Hb-?RAa\L&CRM h4 dLPiudkrQfePfP*+\i-<VpkjVni|ON3UC# G#ؿQZ΢9(!I"ġO GØ & s0LˤLȈ%arn|gE}}=!|EY D$p4D$"ND5>EEw< SX59Hxf%_li|/N`u\AGNsǰ#,URlr*˗EVV(200s,L'4<5ǕQ<J)bxIy>K"ɒ#.(CCCV`k~0^GwNHL65J 1DQn/\Y__?jU6E  BD"&{Mp1HD4:YeP˧ڈ~\.%el/`J#w t2l6c&3Q;d`|L%RyϭWM_.+e!s0-g 3wvvf6i™<= 6H$$ 93dkmiiYB@(bttcǎO7^ZL . ft$ 9|0mmmV&?iGB[>#cEEEl6v;&2L ,Do)ɴyfflʕ+@ `abA_lͺ-[fɿv;mU iR~ yz2>A>+}IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-volume.png0000644000175000017500000000604610172712067025771 0ustar hehePNG  IHDR00WsBIT|d IDAThml[y)Ki"EJh,U&9`.A.`nV+j[ӠCÚ h-˲9E,-,q YL԰Bedגm5d[$%}ۇ{EJAayB{ |O<=<3e§ &[? qQ{Jω0DkzW{& 86܇ 4wԗ{@' 4w<2k[[[XӧOf9u1``EI`h{J!!O쁖/(|~>?Cͷ4NIl]{Rf(_~v>T*"QA@QbTWU}'@%@ o.d}٦v~?֭#pyo%IBUUTDBFχwV;ϵ 4U8^pH|'`iΝ;Kuo;yt]4MDQ122,EUU;hP V>(j E!Ah~jے82pGۏ /@.+j366,((E$*++\|>}>>EUPT+@"?BsGca\Gee%oصkλ߾}aD"h(H$Iȟ%( ,*@?z_s{~gOXL8Xo<^ޞ>fdY4MŋQp8wMuuGFUUjkkDQ\$.;qtnNA=8 c2ǎk8{lZx,0 @0IJ,/My/]/XIfwtToMj>b@efKD""ӧO377G&Aujjj@aɹsR'~wٕI!xC7)S@$$ɑQ'0^EH$B":[o员öm|>n{wv]i:TukiYRe+m87DwyD"Qjܳ6'of O6ΩS-ZW;zR G_ QRp?Wb,G!,P*b 8k~m= hkD'FFFZ#555ܸqߏ hƑ#GRqtde&ibn '}S731~i'?؃=o]$H$F8z a=[MOOG(i9r9 }7tϹ>]ם, ٤XA>\WWMMM޽d2Y4wEQwU~@LX(͛- ۶l;n3 ̝*$]xԑN`5]"r]Vd$9 1wp´ix{wɟaDm, E_M$SFXEQ@@s w2s\wh셅)~LɱS\EIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-windowmenu.png0000644000175000017500000000723610112656434026657 0ustar hehePNG  IHDR00WsBIT|dUIDATx{pTU?;$<:1JT;:U)˥ur]\jQg DZt}C`BIH~N?{IBn[v9sZ,6{Q?3S^Vp77ްŗ&I_,[C(׋?Lþp\{5lڴrA@^/髹lHcL7B-6U7ȼU؊39*^@ϑcmZ P0|O],nYha!8:l,W+/a~AOU8z|D@0 s|ᛜաS \PrQvαqr***PP(D0$ /u$ \z/dN e Mbn uÇ%33s?~wUoh>r'0|yT.ˉ^?>   y\N̡#\'cZ ]E۷u?8'OB:Evj[dG-nA>`uW_7>H:I[w9:( S]] PyWl4T&3b "b1 ^<^?{pt߉?`d-Q+Dӆ_**TU)d fs݃>tMN2xp}\t ]nZOd`M$! K9(9,$`2%UU1 _~~UUeh?X!zxCըJ,?ѣc۱l ]`$DQ% I8k(\uUzqExrٲeB!bo&Vu֥' UQҰѰ4 XS"Kt0U:tD"A^^,L|>---X,VkAUUGzJb1a%IBD$IN+å*2К}hnnb0sLv;uuugϞx<444|r\.999ez-Y!3' IQR<*8WPUx4YVyy,ZGy䬐,vL&Q~m}72~ f*r.4P+1$ގ amVm~VQQ >mz|rV+\wu#AGmx'(W8_\k/wΝK͂ظq#go455فH$B4M PU%Kf(~])̖S"9R`ŊX'ΉrO>Agg'k׮%r4cǎن +**XtMY zp h=.#"iRGRb=믿3frZTTTp>6&L&駟fҥD"1Sc=pΝov֭[j0 Q-3=ηǏفkM4J9hYB:jKil޼p8̦MPe\ t}k}駫ߏlvHrSbFަt4!(躎 Bt:-X D"H֭[l޼9J=sX,jkk={6\UcT%dIFVࠆiY+|{ LL&9vXjt{rJX,躎,I̘aFQipJfL %%Ehi躊$?'fUк4TmFx<t]g͚5l6VX13rs}gD^r% ?&q(:fbΝQ(t?w&Qٲe p]c'#N׋l]׹{xm0IZRWN;vtZFFƸ~\FQbY?{Ϣ'< 6Lr#`tCM!BGw}wdbÇс< ÿRrgG~hMMMZSSӥp8ܞ~^8ǿѶBNTw)}Y'+_RWQL>_# sP:uHɓ'illgœ dZx7(2Zq fXФCF'y#Jcc#ʹzz`SIܳš$!dtQ%wBs8p/ ʡChnnc4p㡴;cB \~,|5^ޠbH$O۫7lؐm,>ѣGoN'/0ǯKTf&x2N$!aD ?]NNVPP<@mm-h4pgg`ڵN ##,b`p+_@"3I%FJJ @";! Q:{YПwR{'(--y1.6,˄B;Ԋ " `FzAP@8I## d`b(>DRHWYOg}=z{PqJ 3XjPhx vv'S`QQDA8DD_nJN9Fh(H,"64Dl(bAL(p; `606xC'"~?@ԇ?:|h-$g0'7D h0H<@T40 1Z를2@q= s,[`bOi" <#t'8Iu>/H ,)1|0VZZz<0Ì:`|IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applet-xmms.png0000644000175000017500000000611110112656434025436 0ustar hehePNG  IHDR00WsBIT|d IDATx{pT}?wᄉh ZFBBa R-dbSI[jSĚ1$4nR 6XAeiWоwoXi't9s|y,ܶvn º}?T;[?![R%I)//Wnݪ|ᇊU<v˥ȲXV孷RV^9?nS2= Sg2+0[3b\~=(2 kNV JU\IxEWHcREE `C{{;`X,(t:!Nϟ?O2>!ޤ DMp`nVOKJJڵ ٜooo ^dh4&AHM&[nE*+~pflܶm[v؈h$;;鉳]d!@,\4G:OSnv4J5L^ W_}EFFFqv{1jjЈ>g޹xՑ7 ^QRRR'$v;PԤ׃*$tfdz6.YG \ ,,IRscca.I<腡 6$ٳÆ<~;I ;E^*?bYKUJLO=YZJᚍ7-@U{{{>0Immm{?, R4iGj%ff@ht'^Dg)%B0i L2:"`%$kdVIJߴz8DMMM5aF(( j8t`/i 4X1jNL_)mgں$׹#">_]VZ׹ (?>n^?$|OO555yu .xQ\4y:(# t7`NҠs9X]G꣯}vLc @s(LCUJ6-҂L!}ɓ]!( sf_{uK֎>OpႺ]}ïGB:t ڌ\w2HCr3S'P \}}.">AwѠ2,^QcEEEs;::Zdɒg,XP(_Q|>){O˾?l6'tt:ihشi6eX_rg=O=@B|;Fr;N'l)cR [eZ^'B.Oo?Vz|1QbXKXFK#ñBĉoc͚5޽{G Xupd6K.:u*ӦMfp8l߿_e  {RkCC/unm` j3IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applets-amusements.png0000644000175000017500000000670110172712067027024 0ustar hehePNG  IHDR00WsBIT|d xIDATh}pUe~?ܗ^BKX . "lmpt!-:Kvvvvim*%DbH@ BͽsoHIxi;f~{}~oy|-_JzVKŌ<^B@ف Oo ޽f}ph=H߹Z_G;LF =مt=@o a8u4ѽ(\"e@# %e#'}gInZ? ιuhA< SKXSz/ݧU}]5%V&,㛵p8>A_JzԼ<KHHeiٽ|.ُ9`a浕O p8 IJl,q ֱr#/~͝սjq26GG/ D>z=/ S@$4,RR|L`zn3r$7q88HyYz=||~/>22S:- Ӄdf yy/zd=kdC}D—4sșYHx0FA/&8`έ &6o@%-=4.q. "} a Ewfo|2=?)5[GL/n*1 ,ƶllF!px]AK{(ѡ볧;w敷߼d\`t+ꏼoYZ^0c22RHKKz=2,#I8R4Or*@9݄fA@㥟W^ϲfܻV6rW]@0df Nd 9Y^qҸ {3,[~//S ]f_Sq2hMqo%77 lcw2Chw=o3[eIpvBds6t]Z?;Rl <\y!cY4''ŹK~u9@')**b۶mZ?©q:y/o\yA 7u$-!{m޸q#Ȥ'#?Pxcii~-VZuyv|<566-[Yr9s0C֍dO y7RWWՐTW /R#O= @yy9>c]*ZȒDžT,d 8p[ z˧l&˿n>&~a wy'+bMŞn ia]!D|!.3x?׊ V1R8/fV?ǚ?vW΁E=QYYIOO zEn(DYN&]+ZGMkftUE%!𼱓ۀs CP=44ò,:::Xhp򥴷5SSSs}SނD["/GX}Or!*bcZ,zD=BP,!"=mQ!yIeĞP4hq }#/=ĆIG/WPp.x= 8`٠u=_r[I bpvb[,a^4)wE\QQ3f~zZ[[@Ԛ[,ɟ ~y/0-z*::`9:0h@*(˱rg FЁ'PXٖMJe8QX^JpJ&}x43_* I<$H!#F{!ߜ eL@ l.**՛ gߊCi}[B0+͵|R}IPu>KkkGp\OT7a ;- k ZH ZBJ}q&hav:0+7֗%0*$*I Iin'Z2 &3Ԉ;HGC M2O[qj!,Huq\IkX`wn@Kl@͙2=-?1b@qUX6+m)[6I&(:F8.׮pIpf lʝ=޶e7A`܅`<55S\Mq': ]o 7u6M1 )0Qx`'%PY+(2ptV'ALJש.,/LX#q`aX`)'17ňQD`s,% ^TK1w\$24۵怒X"낰fi&nK8{X$7^ # 8|LJoE[J0 lPB#pЭ Tbfk&nn&xB'KaTU k,3\&rL 7F ~YB '(@-tBU @ULԄ' :xd .&`~BJ$xr[dKQ%Dσ+# !DXn뺅I$TW.\L&4^l"܂ Jװ@+:0*>g L0,4B TDQ L&vc!>#\حZX?)BխFc -$5m~F~d%A Jy^DI`O:)qL88.O.]m[{8ك Zbb"6l ))ǣEHfFl(! $GLSREu#uFZ~<6Dڌ_?qqqh">Lԙ<G)Px `i0Zj4h覹Ɉif#f<^BdbϞ=L) f%jA^?7mM&;uV-tuYtuwVu\}xl;3ϐ㡮6L:m-f'zucnzZ{[G9o? "W&9VXDͅohrSc.=&$sK2&㡇)Zw# YR: UC\8>ٝ #v=BANBA26ʊcddOÚsV+V2{Cvv6N}Dx Q? Zq7wDGTd'rJ6G9!Ey@<*Yf _~qQf/m| nJ $_8\-=w0~x;}s@;mv霹K%?I ws%W/aJBcU[K.@}}=q{кkN-oJǣӨEEEطO/Iɽ\?qk_8h~}v 92K: JNZ(6S8]^^y VQs4mςA(ACy3Qq3DZm.f p}LnF^V@XGdD]f77%2* CQ3.4LƙsobNwE˷ɁjIVVۍDR#~Aq:E 2'Ш||s~ BTrjzr=+P:V1:E/–l\.˅n'>! Qaؑ. N '$L"J J~ZltE/9ub.Fy'xۍ \.̘ [ͅRĉ/E$ΜD57X!!r>?M6nyʢ{ز~z(ttt`0p8tvv2맻N~?=VNA"gR@sb8?ߨ]m4m61A ??Ktt4۶m2,+YS:Չ%Oo ::FCmm]f;*U0j?_C(rΔ%Z bI\ۼy^קѣߚL]eĉTWWGWӭ=X%ÙmekvW˱9Bdee}//lҥKFqh$ BH9@ρD֮]Ν;%]Rpʋyra/#>ɂdט$** MJJ @`?NoARXXxOM#&qvv6g&;;9s搔i /˙7qo:us9X;d2*.Z/bp\v;ǃ p[ %--H4 ^5v[ϢݏXR6%=%s=,_+ln/>y.>&,L&=/ϒp8Ļn<(/ɐL:cxYl}j{<&Z22W̚5Z֭[Py6!6X?9322|>Н`hoo\SSիWl65kְ~rrr'Ix` ~&cs{ihhYϤPohz!IHH(ٳgx===۷*NoB }^JII3 .֭+Kr#bzvZuee宛7o[>vË/X}?"{8迟j͎"P2lXFi)Ta*u _Ҫ+++/`*++-łf+۱c'N@7|h7Sʭd~\[$|fڄՑQzDMKw2e^.m&U6zϾ}PTƒCff&|P7UUUVј'IR+WXx1V g jiq[Aq4*br8 uLVV.aaYURl6c6q\DDDKQQѩGync2(Ee2Guu5/b 0,7] %: b"#VOq$j u8tD`1btUUCgΜIxx8ItA]]uxL9y$-bRBLJoɚ\ZnG.csXۻ-֙ɑeW{K&&$9h&l޼6n8mjj5''gpHT}`S׏ 1b-4aJoIPS^R?j `c:}z}m!qrn݊ tuuz s-3 ~m4ݼO-cLAY}1{u.MAAAia_\9 IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applets-menus.png0000755000175000017500000000640310112656434025773 0ustar hehePNG  IHDR00WsBIT|d IDATx{lW~?g^m;؀cyļB!Llb6(R)lTmiYV Uە}Fݰ*U% &h͋c1&p;sg7`ҟs朙ss~s~RR!wQEMEQ5 hkkدrRٳ̛7zL&C2$N xhJ<O9pBb?\+gafrT)?gAJ8뺓uuuNRbYTt:M6˗/#8%|poogHMC2VH+baL XBl2IR#&IN:ٳg1-`!NWZo EU?BiDToC Q*GAQ,6P(Ě5khii0 2 $ m.9{Gkma-|}Ml>MHR{Ke.A/YLk#---Z|>O6ܶmrLD"#G .ZZWǿX͛ywR,ki8COOMMM\~ͨՑ9>NM{{B`Ϟ=ڵBieYtttʵkP2b֖1ƹgvSO=E:D"eYhF%z`!B-jY7t_=71)0߷E+òvr$Td Xߟ+@X!HI#Oݬ[OέsbԔF3%i]WNSSuu܋i)WӾlر;[|E+60a)v%$ B*8n95ْU,T.زk|~_K )qPuaA G~r=s`r0wf֬є9s BgN LHoBYO3/ :A$tgeV+`Y̵$݊ s9h Hp2!X`*Pqq$JH4[,ph&`fk-vܓk" єĕ65e{EkU!rTv͆s`f }CS:ZvaIlE;VZ0Dz)$-S"P$:~ّ.L4I.;;:Kv&?1Vh2—zx z(.t$Ra \ P!PjA+?5s0_VEEA׭- C T* ؾ H H{V FTQp%5NnWʠ 9ERlv_QCxM+t3]o遗x$ŇVU3c/b.SU]AAD-h> _]+jha Ou_R GDxהY<ã8^IQ9ڑ!O-Er7 jxxGJQCAVy AC#. -iJ\scWr|Ox~n3&׸([pk*W0t^3# b:&T\.C>ߋmض= `w0@HNΖ{y=NƙР{M7 ^ZI}<,kbr8mNEXߗߎN@#*27, "hp (3#|9Aћ~X~'xٌ;(JĿ/ ?m*ѨR!( (5 ãѐڕwWzJ3?N4=C+ؼ r&C$iT|1ѨDDш"ZCFO(^3-ش 4m`'˳!POb%PmVt]ex+ .T/Ė e7"]$M-^)6fX03&:Y蚃XOڿK+"X T/P!89 \ W2,%pq}'M3֎Vh?$Q)~_ˁЁg*ERfZ|v<Lu Lj>g ,~ wVgSIj&}uvzlܸz6l@7WoYuP WA`@ۧ8s331ʌB˗/~p,Z__uQbadAS"i&m6%K$zPC*05546T#:r[{W_^~ebdwx-Ia8 {'Vpő!qGPh镕|z<1峍W TBӅI[z8ԞT*E2d֭wE⎩D" q ꢋxb-@Pa0=`MB b֭ݻxH$H)IRHD0bu Z):}3M?|g8qH$8&1m4oxbb1Ν;^]]M8ୟ/Ѯ~xO?2( r9z{{qX,ƻ;#s_sn}Đ)IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applets-system.png0000644000175000017500000000532310112656434026165 0ustar hehePNG  IHDR00WsBIT|d IDATx]l93?&N;.I @ĮD EIR J7-M*U$"H!&&Odo%ı3Ӌn vҔ擎Ƴy;g܍q7KTlb744[T/-@omٲN:::F~ȋ/HR52(B@:FuZ[[ٸqcphh[ZZ˰?0555(ERl˲PK(B$\.-CD".vAgg'`!,cYdxG$<nXs($yvUږ{w{(Z%j,T#o':;;) LNN:mx*q.2˹KI Ou-XPMزl,Dd# oxYebHT0 Ea&᫯8w)EYڵMHvU,Q6۶%-pˎI$~`"-l(LXnWy@۔lRi b~ӱ[¥\݊e p\66Һ]*-.ȲxHH`۸gB}Jm+,e-zmХUQ$28B$8b$ƭHPb"%΀mێ_:諭%$d$-nE _e X6B;^%yxUH(IWQJD 5Y, ,V$<< 4p, σuFlʀm :ufd/"ܲ*E8ϲ Uv!KU`smYq\EFGGI&7d[Y,.b2 [pYUF_пEeJ\).\@4)׊NrPiuyUp gr$p)@*Y>133x{{% ϗrT\Q%H$(@׳nݺgEet%uS)UB> H6 . i*܌id2;̀}}KPUhvQ_B>M'f\.Y?&iϟdFrm hiNɬt/e0sqҥKIXDUU|>xl6 Ņ8zȑ`PX~~>vx08 Oǖ#={4022aTʇxt0L,6Md2I>k-OG__ <{BǠW^G}MӰ,1V^]ejjh4mJ%$Lt:M&HTB'^y>NB2ϲ{;d;~/307 Wa`êFw _E J(ٳ|dY,Bsqb~B)2 4b۟qL8{amTUP }L-~zfF/](py àZl咪Y+eu\.{X>xįw ز@!yW&#G^g4.FGG$ Y4 !"rhaYVsUU믉6_{6BYx˕SuB0s/U l68>>cϞ=JMM aTPʷ,W2Pe[4fppҩ=uP*`zb ,aXS5A0py6lw>>2]k׮*k׮4M,i.:L&/bdd]׹ټy3>o(d!s )slS C:{| >D"r|O=T'BP)D"Μ9tvv R)4f~} + (P XTy`>=p2 gg9ZuSSSd0M^zzz  rRJGO')%`4 W߂v N8@dOFPpxǎ=i<TUUaYVX,2>>N?>7O?e=|> ΒHdn|m,ڵ^`혦ab1$MMM455/ɓ>}t:vGw"*G \mǏ èell>3RK aw*DŽF=11aG"{``޻w XYp8D mHׁyۏ|ݸE7IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applets-utilities.png0000644000175000017500000000532610112656434026657 0ustar hehePNG  IHDR00WsBIT|d IDATx}lg>uc|4%Y?RҤҁDeL@cHtR&l2MjCmP4ml `mHKNč$W컳GӐIi:G:ɖ-<>w'r9Ρ.7/U/ |U_: l:b \ -B$>hhh`l6>C8p"qox$-8zY֣{uTVV(\.fhhl6ND"AMM 'N Lt:YnΝP(D"@PeP /шiݻ/JLLL000M蠯x<͛_d2_+h_O*ىdʕ:\m[Wl۶ QOxhkkUtRPG$aڵd2t:~P(IJex<n7PerKDKKKm8}4Wȑ#q;ٽ{ ajkkD"t:z=fFGGTUUQVV l˕?4z=gΜ ĞMvI$s=|gm;200@SS;wUb, `UUYf vH$D\?fQ@UU k֬:tMc=vl޼@ 7)4ΝQ̄iTWW d2dYcƍ>}>TUh4$Mxh4,qRO>$@`  E,7O&-DWقrQGGv|wrRUH$,ȲL,(l.#LzDN;L&S_kk-[Ѐb᯽cD0)r;ϠT|oKd&:u~]v%dYf|||| zj`{ IR3fB`Gqq1ǿzJ|!S ԗ?x Y/N*z,#{ ]S[bQî]0L$Ida4inn歔݀*+lv#J,x) Q  p_U&vƔgcG?>omJJJ4-Um .4LhSN)Ọ__TRiQGv8и'X۹ne5 o!RXr(>MR'YVY0c5رcE3qt  Dʤfe1`9sbyp&j#P,N uE3tG3$f+2c5 YdNy*eMls61ɂ p}h AWϐrx&V9LXzA_X FS*n[fET&^ qAIsyLLE{dW 8LX i .96x*bpX,FmmmP3$V; pTt\:7| AHtimr "X MдIn `>ܝ&!IL&?ÁFw?!QΚ wjx<>'0LSbvۢ ̐((cok x$Kmı^$Awс4 Ioo_i8/q+<#.R<Dw'l H\ Ok_u| 9"ɡIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/Bluecurve/48x48/apps/perlpanel-applets.png0000755000175000017500000000475110112656434024652 0ustar hehePNG  IHDR00WsBIT|d IDATx{PSW?I !b b0h]L;3]Lg;GAkkWe B6e[D@mxj%!$$@Μ<9=w뾤xS {"4e4[&e I-{'׮]… z:thM]] xe/2ѸndYf`\<*/,,,ݱccccx^Af` s<8˗,YҼ~$IBPD |3r{zz(//2;n"@ ̛7邂< "L⬀u3qxy|InyRSSC7Ll6oNMM16Qhr=Nк4[n套^ƍTWWjժ ~۶mTeYj裏8cũ绚s+Ƨ ^}U>3͛fݎn+W 27ͱ3|ډd'NLɉjv;gΜ!99-/6:3򅴕sa#~>QQQtvvh"6n1|GGncd``BAii)4ٔx(pzzΝ;GIIIǏ7wuuaZeb ֮]fugyBoWbLdZȑ#f^Ozz:K.%&&.rdУa6L 3uI$C|9 q V?F1bk׮%IB$>4ƠCFF;ut,JRTE =C7ۀgUw͑o6XPN|: ZRq&V_<lz (KOO.((@VR$''',gf̑Qd?@,;Q\˕ޝDT$i9F"aaɪ*^V,vbq%0 b _ꣷ\`4'ޝ+&n|9]:ASU `0-1r@`kRх0V ,2Pr*07 >Rt_IggBWTpH_줤Lc5̚6 EVR l*yA%PUQ,&\pA+zu5V.qMP?/I< d-l QYw"ګ/%Mcy ̥>:.E+𠋵myC@jk,?`*0 ReE0 e7ϦU@ƮTr*p|X`eiNׯ(***ٳg7Ν;7>[TUTTO^#cXa޼yx^SְH)'t_|֭[W=T枙L%x`$L駟MYY~Z\Jrd]BQ^}sU;v :w׮]xmu5k׮;9{,/figjz8> +T;v ioog˖-544gʞIT3/RUUENNeg<>( - 444SOq@]]ƢEBYH$ҥK'i`B_yMH)ٽ{wo1gݺu%wyg[UUU4g%@Ӵ 51SMOݻt&Jmڴ;ʼ2J25`X`y?_N% cRJ\Y]7zWI]_?8%D2<qd3&s-6;ni5UwHs;MTi*I jEx|OQ[>شiSJXOOG84T0H&??g\ Yp5t76TU(T0`)DJYc :::ᥔtvv3{KxhHL_Gae -uP8vyXSʤ'fp0/BΝ;477s)"!_bV@3DR $L$*PħiX%Y-[^͆{Fo666\QQlʕ 8}~׊5z%JL`'9TzMJ}o$AAA%* 9+SQJQWZ?ƬL/t l8MOWU]dU-'E!_Ik`QPT$`V?xWOh$Jo: 96v9hk=3<;~ssD¦i###tF~NEx8Do> ú邟Юt&S8#XDSW B.L:[>1 x-_c(XcQeH 3<`8`s^qK.FR41y\%xsԍ8t =toޞիW+i _V)x:Ԍosm0Uv>fR`"1GQanh!.c@ʃ0v? =]w݅nL& ͛ʁoKeڛZFEjǦZsT.$ItY9?1J"oL{]R~2ml^[ЦiӓQ PYY,sTYo %R!L xN\p&.8E $C!ZyIQ1@~)=7"psGn tk xn&8f}URkbvQʞRʑSn3ʺb;~,)$!PP bh>,^{-|>\.B(gϞm7/ܴyiSŨI(.ݐX5o/[ﶰ?3,͛n,I)1M'NP\v* H$OӦ籐%Y,ϞsK埖eI8Nv;!0 $(/P+XIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/0000755000175000017500000000000010353532412017201 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/0000755000175000017500000000000010353532412020000 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/0000755000175000017500000000000010353532413020744 5ustar hehePerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-actionmenu.png0000755000175000017500000000646210112656434027075 0ustar hehePNG  IHDR00WgAMA7 IDATx͚}py?{NHB8qBy'Ɣb2Bǎ#Jc | x:e?n F)0k8@*0 !Ǚ0a@5[2`;81A$IvK当QUe(e~:?܆14 C"ZM `] ۶$8`:TMʘ.FRtj:X?l^$Ib}s;o hKIh[ 1ıxKPEQD"SUU ێ| ;YeDn?~<,6M*{-gz8?yhBʋbsǶHMr5#AYAQdTUEUUũEO&˲$Injjju;<@~~Qܑ#7 dX4;;t{BIzI*FM(.NWCQ`i!F" RYYi8aXsY=E%04/?oI)zrjf݌\BudY&5jP8]NLj.\@]]88{&O!k_.dde0 eQ3/ERij3}A2EtTUҥKRSSC0?8].dڲ, PQQiHs Ghw h: dתWx'~vc[PS[ɬs%%^E!HP]]Mee%y>}NT*dhll$z 8]8sL(qymǭV䍟dc~Dҧ3Г%H]C%-S8}!IhqQRRN5},JH">ǃOI%RL1Pum6w_gtWβgȒ'ڱ2b(_eAc=$"2TZΞ=v#Wdf["x{ҊefX_oOee>xz939k@zݱ'OՕ״,]S50v.]i,PS[D,2,I<2>aStUnX[8z(C_|Dpo-N7XŴiӐ$ !emYfCYē8HE#_<%@ ˶ M?ݻw5wm&nY`?0? U1w\TUq4MC:\]ڮxE6>4gouNĉl߾=}_zp[׋mFӧO`BUU$S&!zk̀( `;ٳ}~?GaΝ8: &N踁̙8΂xxd Ie@rؽm;OOO6mʋ?B|̊FO?yz 3( }ݔ3r3ȗov ٳwy'<6(eD*j;}43gΤ۶u]׸p,x?0;زebs @Q 9sGy5( < u(=hhh`߾}7Nț  8pEQ^^N6Eu<ΟAtMct?FKK [laڵs}.6wL&zzz={6555ضN }}}0v 6nݺN"p f:ƍc֭Y新)[m%n%_ozFUUƌêUX~}bn)iSN7nbҥŷW? T~ZS]hnn+W/.X]*>L\ܓ/wb_+"hsǃ-q3E"Vm@ p~_ s=jGIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-batterymonitor.png0000755000175000017500000000673010112656434030013 0ustar hehePNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe< jIDATxb?P0@Rc"3 L 1013X3#y2<1~7å_t1j @;1h=Gx4q3|gg/0-2W@'3la<[ @axdFGfF@f*Iĉ?+ÿ@z}W03~9ܗC ߎ1p}D~:_; %ꀌgV? bŰl9/7B(ԁe_A=&m DXXX8889Ǐ`G+aվe0Ϗ729h/d,?.>!>oCr#C d?Av8sro84ȡ>|<3 Oar _1' ^gW #мWȞ @!2j g30C ?1333Q JJ >L# |)`fy`!/#_Q*2B(]aLW6~z5BŬZ <2@cnb~gQW!8FC|DE@c ``ɑuI _'opTdD`Pxn]QXC =Ѻ$5 )AT {㥀u*3?`e>P^\ΰ ;f% / 5fd@* *2B)F^jb0+gf lM} ^!XKe{r!,Xy3K':)ˆRr֣ % t6GmeXL!2çL+2"1zE@ٿ| 20r|cez_P Lhz+ɰ ?،:p[^qǒqI0\yRLA ~3y;*8WpiW.b?~ @ y?_63ʈbD##< @f1xp B1 0˳20 .M@ .3| ğ>}Gmj_X=`#Ȃ\a.&DtM Z o9p=PbBEAAC$rʕ+%)_Ljp^`~7p۵?jk*lT+p93ڼ<ĀR4+. Ƞ?tf6C&UKOưdAg?sqq{c8+2L  0&AS?P48q3r0X1111(&e_R fx-A7_!d'mEB*fo} K \PϱA13D?Æ}A#?9f"6@ @002L 7LH#̓? j{nVq7IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-bbmenu.png0000755000175000017500000000526110112656434026177 0ustar hehePNG  IHDR00W pHYs  ~gAMA|Q cHRMz%u0`:o_F 'IDATxb?2hXxxE>s3( 0@ 9\HqN`3se}:- s`@@r\ZbwxtN1?=@]@!߸q)9= L8`|Ƚ?QC|ĉiHF-!!W@b @T[I S%z gϜ߾} <ϰ5c?- 3020+1(~0ϟ ,,dab$y X\v ^ߺ * ( L+@C < CFm뀜f>0|BBTn|t-B0 1 k \0pc( i ޿ ,Tǀ 06aP2"z ( ?G7$0o_Zp-O1G*SpbDya70ę10(=( _#6Ís gXbҗ_@x+-3` |>W~ \8՘bE"bT:99 `, '0\l,4z?#-5>{q>$>`0)7* 'bT8 $\XX֫Nf`^LL@BzF6^UFՏ ^alF/ YKۯ.`gc0B%ZMF 2 \քw^+ `{ /E2033JcPx:{Eq8*FыZªڼzI Y`>~ W _fbbВeZ5akb޿I~ܩRg` \ 7VD``t +WBh~l}<9LNFރ *2ſ  0ۈ(ߡl F^ Bw㣋V80|ƂgE,fd`ûg~KB 732LZJ>EFޓW?{ )BK8ec=}!Hƌ D&v!)^A@O|c R |O10}/ bSAG p݁C_op ߁M n60EAύ xI @4:$@6^';rAAI; j uu spIpSD<'[A`F@<耱w2DjXBd1Ln 5 JgWr80~AL#l*& ,e M%5ܘ P k=G,,8U/gk ڼW`)f3|9X5 ] Rbn (~ٹːT|b R"dv-'g߿_'B5[1 m3#7)FAMÚ cd?X @I uZasy$- /t.?W$gas(H-#ZȞ bQpmSbhc8/Db6/_z@b I= oT - H``Ln Oc ,Y R;] ߿? 11qd94v @,h ,e $i޽y M(w2?x]"g( vs{x@4cM O6L@L䦽,< Qh+fիQ?E/pRed|C/r< ,\yX39{rk}v/@k޷вZl+?Fp c9f/DE/~}@1 X ?p;#_%*3>/=A+0H}t&g8/i J&zA6h` D, ``ر0Oi}PnD 3 WGD׍AWW+Ia Q!gh ̽l _|­IۙAp) __ ):@D@AA>qq /P҅i ]H듴 &J2j!AO- Xx5)2d\j-Fd|f^JZ?hj#!D0m (-GIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-clock.png0000755000175000017500000001120010112656434026010 0ustar hehePNG  IHDR00WgAMA77IDATxgp\u^E_T6FuVdYv؞x'#g/x;xlNlG:HI$EDA($h JER̜ݝ߹s j[Vnvu#.:3?r\}f 1-|Ўj F:_w +{e‘~$aC&[$##`glv+=?D7/ׁvwhg[}/<Ͻ9˱3s̜0ڧs/zE4)V@s{oZkq[=PTnRd_/X`¦gȦ<0in*}qHQ h͟\/|UΛn]#7 Sc4mqvh@4 ylAmyx2K&gPW榱L9vqGxjo%x8P/Xs[(vfXʧEg۱$**溎(O靲87wjq>qm D?v-Co/|*_mݥ}ڹůw 3~&\dILH)6CY.љ}]T7Ҭl765mQYA^0-ު&l98NKMi= kZl7[{Fl9? 'ދ@|ײgqU91$27|鷪JX6;ռH%3&,df$86n$:"(ƩWrř76cKK嚏>kYZ%{mܷ:H:k0U<&T4Tv@S%"/=}Yd',fqܾGO뭍[iKVUL+XIW 8z&EcI*ycD vnbӇnO%QShJk856&tUczPI]V/Kki ;9͍*e::ImY?wn78߿;Y5`٠$*BN&Ip+~be xϲwwѝ7<-7.%3$_HCrC7m*B./i׻\;œ?ßZG /"̤ ;,ࢫj?Q-a nW~b0憶nhΰae рD3|֠K@q4|uE;J&yׇʂ=*c,|@ȫrUCQ@DˮɅv0^/rMO( < ^@%U V/E* ˡX41Li2~wx$̵7>xa4?N9wB*HFxƓ2 MG4+T_eQac6maQdB\jgڐXoW~E &)b[h)޲0@tF\gZkԔioy%'R!,7Й$ӓs9%1/gYs=~.{$BbNw$$'Tx$".ɥ./Ea "(]|Z(]bO{4 aȄn. WQ&IZۣd+#)n 6^D"cb$ I`y@6b#*2E"9_`Q$7tDA(E@ackC+X6F‹ǫ*O>T:}Q Į<" Hp{g%fȲOy,F 9e;􍤹ӲQ] Wz3_oUoEU* ܰ Uv:b$`H#Qp4/^Q" 02`9x FA'==Q":>%S0ظġ#rT5ݗm~yr7 Y$߶>|d6}I%sjdV?5mel }8+gK6 it14|Gfzd\@m v?r<.;:HLf3W(Mm a%d &pתjB^ۏ& rɌ %8wdw?]@+?gG&%Xӓy~^I$UJ>, Q}`s.g0.JܖCFYp;=wW.8  :'Fu.q}W% UĪt6h0,tƲfmܪlƲRt"@uHx 5iǤsejS:=Ύӫm?g]1|}f9yyMMLnu+j/9YRAFUX%q".UD,*2~H_&{$R62Й,z%=_ 䕬>1O~?dv- q|QSf(M5aeVDf&scIC$Yb1/kVU yRs ^ظ#sjc5G~2cWJ@ySyMnʅO#>6Lƶ Q U /eeS)== <cϺ;6cf_G~y)GߥnӖeK>=(m!ѻTV;b|~EQU@$ӴB&egSq+iJ!o0.. ~ump /6A wIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-commander.png0000755000175000017500000001110410112656434026665 0ustar hehePNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?>( )Ƞ/{ [ $o \ym Ö32Su20xYIbUU}uxO3mc4"@(e°AK(A3@I%Fj ]B>a ҇,JoB% K.aS~ er:ï?'@_B |?0[pS1E!DI a8VlFPVn/p8 @Bc`(HɊMHl ?20<2+@!t+n)Gy!  | 2{@G?'0ɰ=>3|bgac` @I C՟ _0|&-<@`Dk20<ᙚ$ـ=̰w0W ffcsbHgy#A`.,]$S1$Rh 9ኈ6ؗ? xyPL:avlZ 0E1rRCrE0,6ظx!qïvpGH 7'(eg? M0(ƫqs0 #g#wv&Fן`T`gD1-qP%Cf7g'PHc[XK8;;p#?(?b`cu8,&徍(19Ga`;Dp'Xy ! 9: "lz /ȡ83PC,Ԗg*K`H&w&(oSF`Q-*B22br%bcF?{@!,䡱,Fd~3GN糼Kd '+A L U+ެ{&cΏ'b0 AA' ь(iSRUnR*TbeSc{k B/n2cP5JS7e}ˌb8 xXmLlj),VaL(fّ(>yg72xE 9EkgvpX%ΠXEj3r ߖ 2va lZs9U#Ĉ#ftŰOX2q `Z?(S'Ke{ZQJ3' +̇3M_+яV OB#,hUTQ0% :2Ǔm9ՒB3tߟy 0:4R <| 1F4-R z-`ހ)4Ov? L/,gP|~cgDjYI:4yfNJ;9?$UЈS,W8A6F}1 ŌH)r; *wjhT4A=  . y0. (W3*fN_>B<48$A Ġ%43AG)F$ CP qܛC=`KOY9AH  @-."P`B+?Z~YOZ9G s?X!FAy/31,-aiccx ÷OUdcOߏ \I P֟p Pzbe`l ,B %0A= 0 G=M@oa`w@LB8x8ϟeA_xX Ypy 0J! QF9n Uc@M :pQIANߓA Akof̭4<ڛ! _|aE zbVjm \b~~̠ %° _qnR7Gg_1@aB'> Y@ U`ha@MK lH~4فЁIUpܱ?0]@dFV{oRﯟ@|<÷p[=V+]<FF&Ă-ZD1+cWW3?H26~؆b:3 t,1Ǡ X^K7ϙSF96 !Bީ0Raf&*½;5@;@g}#? u<fRB#]MfIg#bMe'3fc( b12ﯫ+_>S X911Cc짹,I]#3(2 U73?0 4A&`ٖeQ1΃?.b{/E{*o~eX 0_*.P le \M_010 k2*` G''o )4p1 0|7)j1apyCo/u g>0,:+>?߿]XxAB&@ Cd|+_&a c8`2yX)p ̳l [9n,xbVbͿxl4F6&.fPQ2H*9?c`d׷+Uo Dr |zu'2 fİM, R 4 y9.=̬%~z~LٽP37?>>CSֽ) l†?8hjxPd >7+G|IޔWeKF ߀%׭ k 3p͈%ۋHh`]s/?d9D3UqU``Pg㳛g} g3mҲ Z^Q[-; )g|@{WVBnڶΆߥ]G O#G?4]/}x7y X1II;Ҳ:WYds}6?obapH:շ5.i91_`. y eyQ @ce `0j6pQ T޺ߏODX iAzϑR"JQ_3њXFhڈB$#6ӛ+OA (o_L,MЖ+# 2D%0j5$yY2P؎\ (#7_,_~3d!Ñ| ݀ x?)1 6/11plסֿ.n?Dq&C_I~3poyR'<w3'; -T ש; ̟2aojt]V 'V1l/q'O~~ߎ1eVH&gĒ@-V hl1C{|Ѕ$8ey $DMi|FCs{~˽S89-D!?""@ľC-v$Jr36>~ DqBиy|)y4^0 79-Ya?d &`DžU s"YHAqJ)d{JߟߠXf@iZ*6:`?s` k~", iũogj+~1 @T t@W[|}lorQfg=3L_ֳX~VJt.E|d|.~+ A:OZ3qq{9k9uZ2aK gaۚ5ܗmKJgg~?.:k] um_>x2*@Q-LCL83+ZP;rA s!IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-cputemp.png0000755000175000017500000001000410112656434026373 0ustar hehePNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P0@ yА@1Rˠ 6)211&~JEEFo Gk>}G (O>;thsɞ=,̜C1X 3_ ߿nWw֬l/-<@$y`}Nd`` ( 03|ٳ vc̗uXXa;ЈNVDKO`h31331ʊ. ,̃ϟ _e?$;+֬ZT򙚱@8=laA mNNv iqph'P%ym10}{N<4S +W1@ //Ơ ..+(߾z# ËGw6}|akއ I@1 &deeWUd03Sef`cy<@Ća_q`}{ R /_aƦ!fǷo>@ir %$ əq1aC (|Ͽ L~9ii W¬} @ FPi޽lP!VVf_ٿ~10(3Ñ#TQR˳;yrJ)bp9<&,6o?NT Oi{0 %뮩 l@N K1@!,I0@b  TՍ)R0T?yr9ó;w/v 83WO3x{=+,xDDd8}v AKW @O3< ~-bpd搘OIŇiwo3..IR-`Eu%6Nd|p/897_! ʨw@}6MMuQii!p5AH/8@ /?s1pcRAz X03ε?]'`URCW3'g2< l)(2E=6P2423;>9!$Hc  011p;U< Na/9P S°bs!,>0[ԏao3᷄+ß&V`l -U Z 3|+ #!i/R$pkv: LVwÇ'{?>wO0k3xKgޥy=Bk E@/O?PXݚ L k22|z8JGZlɞo=% XPR:  _Xc[<9SN7RN/dV WN_uh#7,axJ&ȣȞ ŋX͗/ݼsB  oF((*`w؀[hC@/v3fl/)e3G`%,)}owd .##M`QNǏϭi_BKn#ICBд%aex,6J>ӗ{x/_ޱoTU&ׯo=:֭}! /Ps I$/3X>^\%LOϮ2<6 uȁn:tǗBBrvׯ uK?Sp r@]QA`i>[3{pSSP 1[dX9'&:92P ]jgCo{0Y}a#0F@!&(Gs3( 0@ 9\HqN`3se}:- s`@@r\ZbwxtN1?=@]@!߸q)9= L8`|Ƚ?QC|ĉiHF-!!W@b @T[I S%z gϜ߾} <ϰ5c?- 3020+1(~0ϟ ,,dab$y X\v ^ߺ * ( L+@C < CFm뀜f>0|BBTn|t-B0 1 k \0pc( i ޿ ,Tǀ 06aP2"z ( ?G7$0o_Zp-O1G*SpbDya70ę10(=( _#6Ís gXbҗ_@x+-3` |>W~ \8՘bE"bT:99 `, '0\l,4z?#-5>{q>$>`0)7* 'bT8 $\XX֫Nf`^LL@BzF6^UFՏ ^alF/ YKۯ.`gc0B%ZMF 2 \քw^+ `{ /E2033JcPx:{Eq8*FыZªڼzI Y`>~ W _fbbВeZ5akb޿I~ܩRg` \ 7VD``t +WBh~l}<9LNFރ *2ſ  0ۈ(ߡl F^ Bw㣋V80|ƂgE,fd`ûg~KB 732LZJ>EFޓW?{ )BK8ec=}!Hƌ D&v!)^A@O|c R |O10}/ bSAG p݁C_op ߁M n60EAύ xI @4:$@6^';rAAI; j uu spIpSD<'[A`F@<耱w2DjXBd1Ln 5 JgWr80~AL#l*& ,e M%5ܘ P k=G,,8U/gk ڼW`)f3|9X5 ] Rbn (~ٹːT|b R"dv-'g߿_'B5[1 m3#7)FAMÚ cd?X @I uZasy$- /t.?W$gas(H-#ZȞ bQpmSbhc8/Db6/_z@b I= oT - H``Ln Oc ,Y R;] ߿? 11qd94v @,h ,e $i޽y M(w2?x]"g( vs{x@4cM O6L@L䦽,< Qh+fիQ?E/pRed|C/r< ,\yX39{rk}v/@k޷вZl+?Fp c9f/DE/~}@1 X ?p;#_%*3>/=A+0H}t&g8/i J&zA6h` D, ``ر0Oi}PnD 3 WGD׍AWW+Ia Q!gh ̽l _|­IۙAp) __ ):@D@AA>qq /P҅i ]H듴 &J2j!AO- Xx5)2d\j-Fd|f^JZ?hj#!D0m (-GIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-loadmonitor.png0000755000175000017500000001130410112656434027251 0ustar hehePNG  IHDR00WIDATxŚieus}uY !EIT 2,%r "ɏGJ$~X@A ۑ%ŴbARPYHp}y޽ɏzR quUTY'jOO6=}`Æ]7ۘtzy?y,/Z-v'ç+/<5"'"y 8n wIo>?wyw?;b8 WRz}z'nolHN|?ވnIˠH.;R1m;;C8.9^H29Hk o&F&\2w}3OWGgϾ>222>M)."済p' 7( n[H<^$TL@[UuwɁuh |%؅;oO'fXZZ,\pWA{A%1`-13aqpob.T|-ܡr!SVMz.2NSN~+_8:=L*(+7+PKހ+aPs,s#hRw)q+|/b> JUJ!Jwd n*KN*۵㟮ezR-W1QE +,o kI;nk.f&o4嵟a>IR:1uKW;vkL5Nl IAJb KTErKeګBܸ[ƚ tr`<8lXQ$F'5y˂fecF^#9uw>ŠpwqWK]b?##P'mbiSzusG{)K\rUeTU[-ʹj,us<7=B3;3zMDOМ o{WyC80I,//\Yopw-WL*06(dQqw:{K9WWF蕁T9UAJ6}щw&0:¸K[jZX6ԇAD#BuBSӇnPgOr7&_IzEhA:E){7@P<}cvj&?v~ۿg_W۷MD w|'߱ёraނVJTd;cTUܵo͉؅k_}V^Qd4_ͷv!DS5Rόȋ/hϟ׭;6հ7'um~ÒFu/SO9rľoh@0_ 22l"YbTz=,J @駟98qZ,1 ?_%9@@4 ܝ, ܭN?zݙ@T< .WV]1+HRNAWݙN֙HY@LUe>۸K;!ݶյ 1S3q vNo~͟iUn!q͂x5b< <^.]!s?{Kk n[q"dQ~.-CO7nB*EeW6SdA>b^].vNRVzװ]*ȂxE'# ?Lސ+U k]h޶fEVȶ:] ݁V_༼L`dxD-^!IVHdYɂX#L͞-=o3\uTw 6eIu]A10 \}[zWv*n*0~_g{.*<MXPUa\kkw.ҍa`Ԏç>or15*Rq2%R 1s,p̷yll'&V.pȂP'S!]xD`}cEY]]1:Y&Ј+~+<>՟|jkߧB(g}ʝ BOIv^~5H=!dK j\j˔׳N ^A$W>sADEE =~J~ 204fuX记ݨQ,1eܾubuvvUe 6>_;`eSGeVsBJPtqi۷nY2ӵ5RnY׀T({("dYmY1u[_@d+eݶS2??oH bs$"7nsT"YB$,r\c &,f.--"̒$?X1;toW98ZK Cb>NE:̂%Asa`ybbǷi ȯs+^Ǟ'{j]Ǒ#G03$PωR!3{m j *hP3~Sl  J:ovቻ+]^Wh6Pw.8?TѣG)˂:Q)j;uAH j*y) ةȟوv,S I贴4[<ד"k3mV=>b/~_l MbfUĖSC~{3/a:C۟#ϐ`~ 㫉l.bFS<䴙6-F,5_|q:oVkVf/jz۶oiUw/v -t`k\$7(*i#sT@w١c!(=J{hg+AwgSdZms7C<_ӓIV{/"f͜2huh5pDDdl:es[=w=g1)sȥ+WlixV%̮.dסG kog NȁG|r!]\~qtW/ga!֕EQga}BwSSO=uKF̿?26t\<A.~ֶ ynϋϾA.M%*E;GK᷀-?G==596je[rصyrW$f疺W_q嗀sIiu2S jX%un孷;ԯ| d/y7o~{ a:aIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-openboxmenu.png0000755000175000017500000000526110112656434027266 0ustar hehePNG  IHDR00W pHYs  ~gAMA|Q cHRMz%u0`:o_F 'IDATxb?2hXxxE>s3( 0@ 9\HqN`3se}:- s`@@r\ZbwxtN1?=@]@!߸q)9= L8`|Ƚ?QC|ĉiHF-!!W@b @T[I S%z gϜ߾} <ϰ5c?- 3020+1(~0ϟ ,,dab$y X\v ^ߺ * ( L+@C < CFm뀜f>0|BBTn|t-B0 1 k \0pc( i ޿ ,Tǀ 06aP2"z ( ?G7$0o_Zp-O1G*SpbDya70ę10(=( _#6Ís gXbҗ_@x+-3` |>W~ \8՘bE"bT:99 `, '0\l,4z?#-5>{q>$>`0)7* 'bT8 $\XX֫Nf`^LL@BzF6^UFՏ ^alF/ YKۯ.`gc0B%ZMF 2 \քw^+ `{ /E2033JcPx:{Eq8*FыZªڼzI Y`>~ W _fbbВeZ5akb޿I~ܩRg` \ 7VD``t +WBh~l}<9LNFރ *2ſ  0ۈ(ߡl F^ Bw㣋V80|ƂgE,fd`ûg~KB 732LZJ>EFޓW?{ )BK8ec=}!Hƌ D&v!)^A@O|c R |O10}/ bSAG p݁C_op ߁M n60EAύ xI @4:$@6^';rAAI; j uu spIpSD<'[A`F@<耱w2DjXBd1Ln 5 JgWr80~AL#l*& ,e M%5ܘ P k=G,,8U/gk ڼW`)f3|9X5 ] Rbn (~ٹːT|b R"dv-'g߿_'B5[1 m3#7)FAMÚ cd?X @I uZasy$- /t.?W$gas(H-#ZȞ bQpmSbhc8/Db6/_z@b I= oT - H``Ln Oc ,Y R;] ߿? 11qd94v @,h ,e $i޽y M(w2?x]"g( vs{x@4cM O6L@L䦽,< Qh+fիQ?E/pRed|C/r< ,\yX39{rk}v/@k޷вZl+?Fp c9f/DE/~}@1 X ?p;#_%*3>/=A+0H}t&g8/i J&zA6h` D, ``ر0Oi}PnD 3 WGD׍AWW+Ia Q!gh ̽l _|­IۙAp) __ ):@D@AA>qq /P҅i ]H듴 &J2j!AO- Xx5)2d\j-Fd|f^JZ?hj#!D0m (-GIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-panelpet.png0000755000175000017500000000740310112656434026537 0ustar hehePNG  IHDR00WgAMA7IDATxypUU?wy !! 6;آhӎ066bwMӭ83]N+ݶcu8Nk/.بฌ݃2([$H $w?"TֽͯUss~y kHwڹ.IKqzWBJL&o3"4G*vӠ"ɔ\cOlc8MD2|)<r]q'b+QT#7%݁U~憁ex sv'e,3Wlf9>nrυB"+WTَ9UJB\8̾Y6pS¯6PK/VNV4 yP1>H$@H| +~uS&˸"_2gisٴ9c"`%=kxoQryUl\F2ŝʢA)3+k @ve%@tRckw0/+v0cf5/*PQW mMPQZB{dv0b en" 6>=ּ;@ł"wO<4ԓbAFM͛5 b=% lж-zZu5q)8.@j JA~/5ۼ Wv?jvQ˨" |Ӏ!æ4YOJSW@I 7]T3o9;8c5)bhB(gIkSu}@:!?;=NM !]&DHULIc% >$`%|3ysDFq!gԋv] i,fN2oL# @,uȬ E:|̳!0Ng RF2ldd!~1.gU2rXVv68ɷW Bٓ г™,\*DPrJ*ORJ7粼$'w:~0-Nt 0#ж-0rdMHy hbtb&յÔ|}gOL}`"bJwntwr@$&˂y!}DB0p h k X:o Śa1hvr\v|^;4|SVX]2NK$#/+t>:2ҽI-f OF7'g3@n[ Cd?(vNe4V\%#!pm l'w g.Y1}T%}[_?D-Obdo];\gf*okޡ`T> bi9J€p'{ uB'8^:[=-D#olf[Mͱ[YAsA6j[y;*X-ENDM7)K"g)TWr~ jL R$FAj !x4\< p8c¿f:s;];ڠ,vhg喑x (qu ťpdRU#hZ 0Ne2ꀔ2l(h& P y 8i@Dt~cBb_T2lw lu:π&kV!$h"c`L\HCA@i*G(D9nŅ 3ȮNL*,!#$"0 Hv.v sMJީ1{}#Ю6 <myl_U}1bU7.1iȝz7C|P Ts-mH*ݢG-h40{ThOn?.ehFwW}r{ah„#vg'>rl!r="`yZS`D7imd@2g;Dˎ-])YSJUO8D$ ĩI.F &$Z֮ێ%ie#'yp'J,U۹_a'w-K+!`鵶Z}1_a|on8 ]ܳ%]sb (.L 㲦)N [<ÕU=Ff< p!k#plQ_P6(wIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-screenshot.png0000755000175000017500000000671210112656434027106 0ustar hehePNG  IHDR00WgAMA7 IDATx]lucvK.ԒI-QElmH #Kd#HaI҇p (P)`n~(SۍܺhYlJ\Q+~-5s?0;Y"h ^??Y<}kvvvQJ_!aF?+{?x<Ν;7p/N{ϾNQ?+?jڛ}FJ /PwQ3<p(cB~ֆsk-{* >陙ѕJeС]PQQ8G?~5RxH?|!ZLNN288xwkmNkvQ+L5ZKTJ2>$JKR(%<:c1b;u}uvjß~¸Ş6!V{2u`fa(bQ6w||uHJeP'.';{(dzeX fqqST:5=bg@!`ѡ(B#s 5'/q>+⣠wZoE&.fY^F5F\(hT@K2U@EolsG )R rhRdtଣyh>垹iG]Bn)᏿G?>/>zF/#2^ex,fX!/zmqH]b޼D39\_|D,Rk"q=Āufƶ%E.S o_{9p1Bdvמ=ϹR872c pq2RJ>Ή'Q Z-A4P*xw?~nk-`kkeRE1FRѣeqssys`i%RK74Dcm>CA9GE O ͛ `bbNZFFFÐZFf~~A1T78|0ކ'`yq)rBiR0vHF{O`nn)%vׯǎ_xzS'loos癜ZEQw&"O! LiMU P+XRn$j ;[{9~:/?@kMm aZ'(:`A13>@NHiE{iΤ')Is\fll \\.GTm}W /W*?o|5n\.CJR k-*sYf)BxM8u<=Sr4k7/38$Uks琣GRשT*XkY]]EF#VJ!D-<#³!, cَ EQ\.IqhBQ)#u@#dw>hRl6pBʔNNwy?777QJݍ2 M^ e6RFkv*+LV7^e̘9>Xk)(0te;jiiSو&Lvy&A d_w:n֚3g`Tdкv0Y|'94:JӡT*{*I1W^Uڍαc.$JOOfE`/k͡" Cg?{7sG9cYӔJ%nݺ@*^>JnllT^/^|>WN8qOPHvMPQ~ )ҭ^$Q>NDI+@~[-˧Ϝ9ryֹýM^! E?&2 z>tO>Q>0LIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-setiathome.png0000755000175000017500000000745210112656434027075 0ustar hehePNG  IHDR00WgAMA7IDATxkUՕ{}wyJaVJ1IT$)a2J(SBgB(:2Mhtu{pQյ=}zcX>xsԧN+g?6`Iz꩙LoRן?4/9s,ٹs9qٷoY~OZz' /7L\6w.vvvT馛_=AP.I&,\𖑑ѣGOMrwyᇟg?nD"<\u>:OZn)%&{3wӧO+_7ޥr9_]`Acww7cp]0 X,ƒ%Kp])%Or@=h?g޼yw+&f͚uc__߿瀁YfܺuS˗/Ǚ1cd2\%ɐL&$L2sLa۶m'|Z[[vttu-|_3j+JyO,̙Ckk+MMMq28Gw٦M?۾zw7+WEJI ضZ|yP(:tUV=t;f͚'&&&RRT}qp]qb$Iִ>|g&> U^|֮^\.ŋr(VT*E__"a>LmB)g)Ӳ,9222qwv@Q\X,6]]]Kk{zjNzxaꢡ)%Blj6`rY6n믿+(TUHJ%U*( ~L>_פR)8L|> 2uTb#mƏB|'2 X BA D Jk h BE(PƒrLꉤeݺuׯ_?ܹ(oc8x ###q* aR*8r) ".+ePJsPwTHъR.T*!^mx#@~y:kl믿~ KU J$-:u~&&&bJzErtvv#HHI"T `@HFb0B4+2sQ,zÌXjzٚ,T`@lȑ# S,m˲Ν;wڵ%`?paxxRQ -D(K!(} JcaI(eF(n*JHhm@VrllL?c |!Ο?O<'aYb {9{\I!p\DZ)Oh5Ah0h)A,0@ǩ)FKc`쥗^zX,>PWxҤIeFFF>ꫯ+W@vt:E*rS8XXJlYDD)dl6=E"acAY0Ԡ5n̂XyT}`z뭷̞={y:nr\9ܹgΜMCIkku}+Z%\%m,̆OA I"* 5R*ױm6/W&R#WU8wU0 %FDZ$ɄZuJَ:)nrlhe FJ %vƲ%Z.n/n%cwj @L"gunݺPJiW2 ]3hc" dwc( @dQR)lFڀ֠{DiSq)$Ҳ0QZ"LH*bݻpMϟK_:!D]HIR("~ȺQTH$UG}gB08NLJicDaOO_|qk`[r( d1 Sg6 ]v8puO a0zMDyvbȅ XlA066Fsss;5@|Sr7>cs{رD3 0y0˖-/M1xGP L5311MMMÖ{СC9qk5:VϟR> n]D)E*T*Q,9{,Bj˭"ڶ6o~ĉe>>X.O'r\,6$qDq(e>aՙfIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-shellmanager.png0000755000175000017500000000531110112656434027365 0ustar hehePNG  IHDR00WgAMA7 IDATxZml~vvltp9cl u 1 ؔEm܂ʟ%U?PDEDHR ,H)9cvwvf?f;%J[<=sV ɞ={ݻU۶7JU)BH|+SSSސWMwwԓO> zd2?`9ۿwi%g򦦦 y_9rD]Gb6lۆO< `=huֶ`0 r, PJAq&@uB`8 @ [Z}(N8`||sshooǾ\dDUU|Wo9m jhEQ gbO[ZHL@4$Kh9Ν; 8drP][ٳ8^oF6(4d[jjjO#;+&9G mpqLL <4)Eرuuu|2؈;G " ѽ{~'[3m# mPJOYN Ȣ( uù~pQ /oOF&Q&3P]]|>T*y=]HUUs~a Ԅm۰ > @ǑNfM)E:v@1lUU'NsϡG5,LS\3<_3 ͖dXN~$x׮\[D@T xJܹ6gBKݻ1yUJZ"+B@[](BdDm۶ BON,B!Ap\J>EQ9P(B mos!0Mww) 會Z5mTWW;YZىW^{:((ヒig>7Ƙs/HfY,,,-W `&jkka| !ߴsr9^EA@d*҄3dVUZ" ͂1UUA B_.) i*ϗ/J),r깳-b%8$t]iPU:D킶~_TY,kUc,!!ǀP@E.$iZ AB+RBح s,sb<bz xALQ!E@ֶ:’B^ceB.dо)[@^\r qpW, ȗLNPdO(]7ʂ+ + к2"xӯ,+!!$@,E@&!^:yVL|2P7ڋx-rnbUǀ0 +.E \sY94*'wv7b]UTΒA,̣*:L@( ,˩Y:Ɩ-[(ʊPł >CϞīwT3UUJK뇣! (ۜpɝAAv1{WbA4<O=!+Yl5~32 Lٽ{wKIPDR߉cf3&0҂ׯoǦiXtnnnq__O44ģ(d2>>9clQb%VeqqUUUFH&0M\i"H bzzDsTUU!J!JaÆ ξXa]]K.A1/%r ˭WG"L&D"J)BQ @ dY癈X sE… C/RoCCC Q p4zɡ5|%;BW 4\r̷Bh4榍7@vP !]s8 E)8s166{oW/c7fffheʽ/ug@LD<˗הo5?n>|immZZZqƒCIA"199i?R:/+_h 6mڴqΝ;۶oT__alƁ-r2S<ύݽ{w&LE"p*.Y6C@ `F-75444B͵0j8/鳐fMLbx$PJE2M ſYg$IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-tasklist.png0000755000175000017500000001351310112656434026564 0ustar hehePNG  IHDR00W pHYs   9iCCPPhotoshop ICC profilexڝwTTϽwz0R޻{^Ea`(34!ED"HPĀP$VDT$(1ET,oF֋oZ/K<Qt`)LVF_{ͅ!r_zXp3NY|9,8%K.ϊ,f%f(Aˉ9a >,٩<9SbL!GĈ 3,F0+7T3IlpX"61"H _qW,d ėrIKst.ښAdp&+g]RәY2EE44432PuoJEzg`̉j- -b8o׿M]9La.+-%Mȧg3YះuAxEK i<:ŹPcu*@~(  ]o0 ~y*s7g%9%(3H*@C`-pn VH@ A1 jPA3hA'8΃Kn`Lg` a!2D!H҇ dAP B Byf*z: @]h ~L CUp΅ p%;56< ?" GxG iE>&2 oQEGlQP UFFuzQ7QcYG4G۠t]nB/o'Я1 xb"1I>Lf3bX} *QYvGĩp( &q x)&gsF|7:~@&h!$&B%pH$D.q#xx8F|K!\H$!i.%L";r3EHK-AFCbH$^RSIrdd 3Rx)-))zR#RsiSiT#Wd2Z2n2l2d)EBaQ6S))T UEMSPgeedɆfȞ!4--VJ;N g%K-sɵݖ{'OwO%)P_RRۥEK/+))U<د8䡔TtAiF쨜\|FyZbU)W9.Kw+YUEUOUjꂚZZZCu:C=^\G}VCEO#OE&^WOs^K[+\kV֔vv[]n>z^^u}XROm`m3h01$:fь|:kG23hbabhrT4ߴw3=3Y-s.q_vǂbgբ⃥%߲rJ*֪jAe0JOY6rvvtXLǎl&I']$NϝM.6.\ι"En2nnn[g=,=t٪E2}4\j5loDŽǞ~q=''Z^utv&vvEv >mяN9-{ LOgsΝK?7s>xOL n\x }N}g/]>uɫ,u[dS@u]7ot.<30tKn]p;;SwSyoEV Z |:l W޲1|gax̌ l n&~`ab:)1Pp1/ ;PN\-(On>˗oef@11#.ŁB'&:yz #>'%)1f!oH31Wb'í[bx$o|`C ǀ'08yxI~!F'8%!/Xn~'DLz?,lr8mA@1&vHqp#8и93 (aIy -wp1CRڀJv'x iA556AE.+0؀%% _IA*/_2f0⑑R@+#Bd ȑggxlP $Deu9(@ fзXd -`45"n|dR`끁ҴzkPX;juDF`M r$ 0@yh{ӗ XXr@wZPr<(_`,o`sz X(FA Fh-  ۏ Aa/ФLHmcd#?"ؔǏ_C MT + :^Ю {Acx#"HLBD)! 4/߯(}o lN+1AFAʊȞ%P'0%58ALB90?/PӘJ'X`MlQxk@Lqַ8!6XF0'fC_3\9AKK<@D5%TUeOW\쐘``VL"0̌%OwAJJATT$MAn2ÿ޽ӂBԈ#5Gc#''ھǁ$Or7 !wtx9KG>} ԘDv,Ґ %s6{f2 ׮ax--{@LLaPWo_3;v;P*CǂkI݋ }9&5/DN  4M^=z; [:kgHL Fп앩1ܹ,$>}az< G f1CiA6pK %g0F6naظ|'Ǐ_apv6eƫ o3(sc~mkAM,|CĨU}dSEn5-`b=aؽ$03H(2J2HȈ0r30A(p-@:nnVш'/1XY2\x X 0ZB 2lj Fͪg0sBa@cëy,'ȝۏK?~2Sń:'X2|Φn)@pOl>n'奾1 cW o?s`.i&ǫsuE'1%n| #h0z4x𹺲W'[ob`׎exä@pOn4ƫ_1l[A&ᏠӗX d`y,~/lD }ҥh(x P4_hx Nh  -'v IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-windowmenu.png0000755000175000017500000000536110112656434027124 0ustar hehePNG  IHDR00W pHYs  gAMA|Q cHRMz%u0`:o_F gIDATxb?P0@PRR"ڐݻw볱]7GUbį_~^^^ĉ۴9޿O -غuk1 ?~t~@1D&!۷7 ..SW^1<˻;33޽{"̛7O\DDa%#  RRR /^cfffmA@(<@D{zjnݺuǏ߾}c`<{_Ӈ݁F&/<."IIItttzɓ'`ywށ1($# =pʕ p1Ϝ9NyP3ÇXXX$%%X~_R<@dy`ҥ 7 {h>a`^\\ l&@䁂VWW_4K9 ˗/{d?< AѠĞTVV!{ HѣG7CȈ,#;Tbݿa:`q y]]]@eh3s6<+@#r#0wh[[[{߾}p.b!k׮*q<,Y\ 222>|.`m(] u` j=2? bh 30:pX @E&,= 呝;wC4.AwY@ k?S_`~@p>PX(y$ AL 7ưHXhPhjt` Pc T U0Ê}'{:5U\RqB[mPRy| @+|Zi+<3Ňq5 k+ܫ$SU(l4( aw5^(Vv0, _P Ho8PȡAI4 ?P:hFXnp_5 " ֶ( r (ŋAX t7 @ 0&?9D`l0IJJa5+ФI@ d{T?@AfGuP X APY?q0R{C!y˗/F(`$ Ǐg|CP+PYAL`6(}AB f6AiZ,&4C00aP?;V*ԁ<`Z{.(OB}P> @gE7y`ūrZL LH?l<{nE"@AJ"0qXVBǠvLÿ!> bEv,aCN`a'WdO>;ȡU%L Ah%t"/ ,5A<\{{X $L l.<߱>%1 )aiABv(5a1 yP>>@1[zS0 wa0aixX L;wnR @GVe#r FGzA?px[@:K00( "(݋Zɥip?@A T#ek\'`1>/a:`Q( pQwnh>Ăn uA y(ކGd<Լrؙd,T ]{?Gk|`0iaCGhDj @ਊa9yH&DN:N, BHOh!x I`P aa=#9Q A!Ќ_P ub<@`ܻAx/jgA꣢vQc80sIjh`H8fjA%(h A-`~CEj@@;*X~'TdboAv<'gj  DIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applet-xmms.png0000755000175000017500000000760410112656434025716 0ustar hehePNG  IHDR00WgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?P8`6G11h21a`b

#( Ҋ+ACb5}1ahd89@ff vv~ 9555a˗~GzBߠ 3H3$0111X8#j,y`1&&q`\p=! 徢*@09444@bxÿS߿%-O>z);@f YM)D.K'Аpa(X  $79xxx:9994&@`eeefx`){٭@W@XcB?SO0rH^@SO :@1)Vm༂ zXL :SSSEEEpwbI  ~q`< PA%`鿕a3X,J/1x/r1=/fc p:@`ll N:߿'&P P)OWn V(LM u@j$#, `! uuu% 0&@P0C~3fW dgpfZ`H#@J + VyAʎXT0Č˩j]picHd377׸ ߁ h0C%`10|f~Vh,0@pXZZ A`= T^^|@()JPRy TIPށe%/&w r0c2h$2lI ɍ $ @` yvf o?(s>~)r{%?`- '_N<@PPL .2 ?\c(g &hm )=MMM4 ]C_|/7oހK#>|```7~ *R9u (+bX X־16 ' @LP5޽{v8yxP>9[fRP v, 007̘ LjGPdd6b:4 hPZ.2PM JJ tk`PР&ŕA/))M߬a JFzP0Ó, vb:d9(Á2p+۷ XPej---X[Vpܘł8x0b=` !m k@X!hk< $̨dzd& ĘH PIK>ГyyKJBH-pac@IAPaD >l5_~[>ZPc  w3 `ԀWq2*;qM׌X;6V)B,X:?x3@1 9P ѓzF b /`6 [LWf`9 X@eX J r>KA R Cax .e :+G R @`2-R= '@ȡf,֐1 | O ذΞc@@% tr a+Nx, /xlew{CС@Lb ȱ 0@# uAyTg=2NDy >e`CZs[AP]p'@136hADDl/?>(<K|NvaAɓ'=.Nu%?1 6d>L@1=zhQ j`XddduAXA5@e=a, ƘC.CAC<_djPaA{{{XF9P55@/lAfb޽{N6 ~@*ϋQ`=`G2 @E+W4sp%pA4r0_)P`+=ӧO߇Y^_מ18/(mc˰'a,^dddڠ!@Nj[6DrXm9F 0a(P+t2)P@ka|Y'AqĠ6t&b TɁBX:^pPǽeH`gp:! /2Lep(w 4*AA<~\^!UrDhŋ>̬ ejP T: ƍ@Y&)kRX2p3;1j5 KY64v!' 0Hf(bP&SYPA(@3Z jNYXXĺ9#z X,=򡽽}}N _11;/74'놹 0cOw`.@?J[ XfSJb X@l`ڝ5l H_В!0O3 dB`rp8 fOP}-~l X6-t hr` סE,ֹb"u6.`ŰZ+!<[j18L  ڧA^BZic[8't8]:* PЌ?@ `|ѡ! lhݍIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applets-actions.png0000755000175000017500000000646210112656434026556 0ustar hehePNG  IHDR00WgAMA7 IDATx͚}py?{NHB8qBy'Ɣb2Bǎ#Jc | x:e?n F)0k8@*0 !Ǚ0a@5[2`;81A$IvK当QUe(e~:?܆14 C"ZM `] ۶$8`:TMʘ.FRtj:X?l^$Ib}s;o hKIh[ 1ıxKPEQD"SUU ێ| ;YeDn?~<,6M*{-gz8?yhBʋbsǶHMr5#AYAQdTUEUUũEO&˲$Injjju;<@~~Qܑ#7 dX4;;t{BIzI*FM(.NWCQ`i!F" RYYi8aXsY=E%04/?oI)zrjf݌\BudY&5jP8]NLj.\@]]88{&O!k_.dde0 eQ3/ERij3}A2EtTUҥKRSSC0?8].dڲ, PQQiHs Ghw h: dתWx'~vc[PS[ɬs%%^E!HP]]Mee%y>}NT*dhll$z 8]8sL(qymǭV䍟dc~Dҧ3Г%H]C%-S8}!IhqQRRN5},JH">ǃOI%RL1Pum6w_gtWβgȒ'ڱ2b(_eAc=$"2TZΞ=v#Wdf["x{ҊefX_oOee>xz939k@zݱ'OՕ״,]S50v.]i,PS[D,2,I<2>aStUnX[8z(C_|Dpo-N7XŴiӐ$ !emYfCYē8HE#_<%@ ˶ M?ݻw5wm&nY`?0? U1w\TUq4MC:\]ڮxE6>4gouNĉl߾=}_zp[׋mFӧO`BUU$S&!zk̀( `;ٳ}~?GaΝ8: &N踁̙8΂xxd Ie@rؽm;OOO6mʋ?B|̊FO?yz 3( }ݔ3r3ȗov ٳwy'<6(eD*j;}43gΤ۶u]׸p,x?0;زebs @Q 9sGy5( < u(=hhh`߾}7Nț  8pEQ^^N6Eu<ΟAtMct?FKK [laڵs}.6wL&zzz={6555ضN }}}0v 6nݺN"p f:ƍc֭Y新)[m%n%_ozFUUƌêUX~}bn)iSN7nbҥŷW? T~ZS]hnn+W/.X]*>L\ܓ/wb_+"hsǃ-q3E"Vm@ p~_ s=jGIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applets-lock.png0000755000175000017500000000577110112656434026050 0ustar hehePNG  IHDR00WgAMA7 IDATxřk]uks3#tfl,y=ǤrI"m,ZBHPdJ i R\ RťX&)-R*Hh\?pHeHGҝy9g{L;n8眽}w9rD_\foah;<<<\(.^|񻹦܍9={ݺu=׷Os=A1Rĵk'Ξ=o?z@.:zO≯8%I8vqZ*sn||ܽkeWWoY{/?~|91ZsuZj5E3Ƹ$I\\vb ^x#|K: 卑6l>lr9nܸx w;vg711?|c>@a6m~:p###R/{m۶{NKWWփ* b'O ;L5;22~!J)zzzغu+ tܹZo.O~8:Pr/\˙$߿سgpΑ$ sss;w:444L^|LOOOŖJ[lu ^^퇱R)8F[|:;;[kIb8}1j(1(TPE ~:\g8) @$c0dvd[s8YRJscsvUO4ܫZlzd5e ͼ ӔLODHè7~q{\SfϨSazZFˀg!t (l$ #6^xq8 NuEt =mgd֍Y$[! _J,rL3? ,$vD%T!Z05@ l=YIۨJ](cguϮwQڦu(i j}hn$ICx B0A h-j ZQH}_|:!1.:*L }$TiA/3HFTᰐʋX\L[^A8| M-xc,|  aG$([= `Mq9Lm:Zآ#%}s;;5 L),:$~4X`drecQYQ9hp2(m F骧OJ9 R0PF) 5 ks(صq>j3n( 'Gk5S / :lz:FKMk(ʡlE'%(ۓWNb ~ \X!|O/&(폽 3I&LmopRq毜R|ҍ?,J߉֩Ϳݻۓ<}Lw1Xi6-Cl"r\hzp嵪U`.g'?~Lz `@OIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applets-menus.png0000755000175000017500000000526110112656434026241 0ustar hehePNG  IHDR00W pHYs  ~gAMA|Q cHRMz%u0`:o_F 'IDATxb?2hXxxE>s3( 0@ 9\HqN`3se}:- s`@@r\ZbwxtN1?=@]@!߸q)9= L8`|Ƚ?QC|ĉiHF-!!W@b @T[I S%z gϜ߾} <ϰ5c?- 3020+1(~0ϟ ,,dab$y X\v ^ߺ * ( L+@C < CFm뀜f>0|BBTn|t-B0 1 k \0pc( i ޿ ,Tǀ 06aP2"z ( ?G7$0o_Zp-O1G*SpbDya70ę10(=( _#6Ís gXbҗ_@x+-3` |>W~ \8՘bE"bT:99 `, '0\l,4z?#-5>{q>$>`0)7* 'bT8 $\XX֫Nf`^LL@BzF6^UFՏ ^alF/ YKۯ.`gc0B%ZMF 2 \քw^+ `{ /E2033JcPx:{Eq8*FыZªڼzI Y`>~ W _fbbВeZ5akb޿I~ܩRg` \ 7VD``t +WBh~l}<9LNFރ *2ſ  0ۈ(ߡl F^ Bw㣋V80|ƂgE,fd`ûg~KB 732LZJ>EFޓW?{ )BK8ec=}!Hƌ D&v!)^A@O|c R |O10}/ bSAG p݁C_op ߁M n60EAύ xI @4:$@6^';rAAI; j uu spIpSD<'[A`F@<耱w2DjXBd1Ln 5 JgWr80~AL#l*& ,e M%5ܘ P k=G,,8U/gk ڼW`)f3|9X5 ] Rbn (~ٹːT|b R"dv-'g߿_'B5[1 m3#7)FAMÚ cd?X @I uZasy$- /t.?W$gas(H-#ZȞ bQpmSbhc8/Db6/_z@b I= oT - H``Ln Oc ,Y R;] ߿? 11qd94v @,h ,e $i޽y M(w2?x]"g( vs{x@4cM O6L@L䦽,< Qh+fիQ?E/pRed|C/r< ,\yX39{rk}v/@k޷вZl+?Fp c9f/DE/~}@1 X ?p;#_%*3>/=A+0H}t&g8/i J&zA6h` D, ``ر0Oi}PnD 3 WGD׍AWW+Ia Q!gh ̽l _|­IۙAp) __ ):@D@AA>qq /P҅i ]H듴 &J2j!AO- Xx5)2d\j-Fd|f^JZ?hj#!D0m (-GIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/crystalsvg/48x48/apps/perlpanel-applets-utilities.png0000755000175000017500000001077510112656434027133 0ustar hehePNG  IHDR00WgAMA7IDATxYy|~f_2,II DAQX@,hU,f,P$@! ! m& !$l/wꥀ(xoy{~fΜ#o.--?ŖK)U|Vk79ϯ 1cȑ#܏!&X~:{d[V:@P4v 7X'%H/<S/a=bzz!77ךA>s1wkWC?h6|-⡞MuZZZgee%UWWSmm-͛7T*s&&ԘL6*-V*)fJe &NmmmB Ў;( ` :ZՍDDM{Ns0cOuwұc?xFEE%11QaEM~""6:::--rVŋ;T*՟a/">:}ʪ>^r_Cnݦ5uK]}LeeeO?Z]]M%%%tYȠȝo7ܰakÒdR*/zZ?x~nV畟 f#n7^{7 իWf˗/Saa!Z.]J.OP0}',9pUTRee=cF 7D. /de*͛w啚RS^P!!!'O\={6ܹsjjjRRR ۗxJqE~ @ @V֬YC TQQADDIJ,v*//vڨ/[C}"6fϞ'=Lc&Wd0٧[hĈfNn CBBBJ.eYvfX,v8NJ _εZ$DŽ69tC#ܹa_f淯%%&MV{ Xo'dEEŎl, ٌNtuup\He9/oվ0Ed|tGj*B1}ya15gffJJ}T2kj.pN䁟~~~DeADp: !ua ]xaCZq((("pŊ?nkHŎ/Pwlٲg)IfaC x<H$\knGCڠ *ϵp]ZL@]rԣS&J$\<3oBtIlڴAWPpr#@u/bW@@y)r`>`?;Bc1X:`G4< 0aPc ya}Uee:~<;0;̙PP\|jJq1k$ڋhh@,e+fs\+ɀ@` ֦ENνoJj6q?<~^p0a0D//,#"ԯ\aPyÿwdW$N|".\> _YϨJ|{I)pኀ_&?8322`p='9 Y@5-@.E;vo@Xr$"|DPXkT==\.p_C}o.M6Mujw]c'+Wy#/a؈jOF5h"-yuѦ)}TD2 +7D[Itg-#u#_$rV"w\` A˗ZZXxL&3驱::zh$"63clk. &qPFlU4HiaƜ@$R}XJO#b"#ڵWUUtTZzz"ebh۶Lza; ϐYr/YDKP:^D q f꓈;AE[MAJDߍ{N6yС!`7- yP*} rޅO[mNnNjq!.@h+%<`p|c'43Tx&"ys2M=d2p:].9 vl]m'jI0H1?~7[S]#""~aLZ2po;o;{s"up8hTr`Y%0MX  R 9ۯ/1vn XTO JWu&LHyrŊ#"Bݽp8D"7@*B&Aap{<(((Fd7d2C,!Ǐ绒<8pǏ JXKӍ+,hw@x}"Dž~+n.NO4%nݺM9a+W`;r  PAp&\.2/)vBB<pٳ FyWF|; Uaܫ֏Sy{J <~~h4Jx{p#Kڪr+O<"\>9uuכ(`u%:" Dqj{[6E0lrw@k*”eڊVŷVs o6[mA|&+hb#۲\.>mN4V9'OyLh <+=Lc9u9ou.<Bْ61s}U~uM( !ˡVrsgMjiiB_:U%b ͛~vbZm6mܪ. +=E?|· s Q!OE^,ӝƻ ' [;[ *VsdM'*\ Ǎ K،r:]5ň􈢩N JǏ z{;w轍nF;&/{l1BGm=hKڞfM[uONWWYQ nTT`qTV[oŋ!øv0 nn7J Ӏq1XϦ-KY[WTJa(@F>C໻wCIbt~ɤn#J/A`P7eR`_?5GX//)JJp9\ۻ5r8T*0 f{GUp ^az^dL ( @;facGF-wl`\bB>BC!  w")df}Z͠AvvFc|{D&zmN4kNy|9T EphZ^^@]h-t2l_o&@}}[5vf>zuǜJq#lOfcYS]:O 5SMs/ߏYPYNbdPSc mڴ㿪SwX@s1 "[ ܼ+}\+iG'5cC+ >|>Y%Щ/I\ 1PG@q]\Ŷ ӋE ? m zuFU })AW,GV)Ê{2<1,_yAbYmcYE'i-/V|蚊z)Bzq+P( \Qҋ_~ע+E]LF׭#4v*FJŴ]4U!-$p ?v\Ҟ&˩rSݺJTu&v( z}/a RbN60ů3)FQ\!p\ !}/g{PTUU=9F"+/gaUNrH6M<:\ U)ZNԱT[Ǐ"@=,|csEB*mt BB05Ş&׳i Z𲑐 QlדUͯ歊hj)ٸ3^.w=6Zydfbl$Ԯ W8I tYs^/kZWUU'*PW Dcz$դ_fG\;y?|n=e%'8seӘH0LN6ArH[+hjNԜ:xCO|楏ڪPT EpQHmSid8vywRc'a\`9N$HtYR(#06Mh=YO|{3)%|'U+l*W]Ǔw70[0;}Oz1+8e+Q ZGu\!I%غ nnf= q<92L]Mկd⥤LicLڌ$-m4r;hmkH2YsfS+?NalB+)uIDMc:^y{zYHQp9cu!vV矟ZHʴI[IӢ=$fp:N h0b|K靟M%L1` 0YR9Y]Cߨ)ȋ0 ,m+8Q^+9kޱ(]ʂ'fpar^--_Jyy`q%Rz !kkj!=s:ջ8E5y7hKr] 'CUUˉb444pسgwf٤-u;kjWz,37))%X `OB*gF~9>t/Hnp#տyNBt MU3oMҴYirb!xU=uMtύqYQa%-i~~Ebޝ8uk}Ë ]), _8rgQػ'= zJ&4MbtS&k֢k*Z2 I8GdW}} qxL| ճ)KeٮOP5;~#nKҫwothRlۀ(Dt- :ן;H~|, o yAE'2kޅtb_RV^MAA&MBAee%Bnf֬YL:Gyy9?0P8hV]P{Tz?{F .رcK`:|lt:_~% O&b1A$!mXaL/4>OŏZo2$%q )%axȑIf݁>ǩz.FCb7Z䨯mxd_ϸ?.ևA+CST ]MX*H&w3ؕ2p2 iPϲƓi^eiW)gA !SJv^^/ƏGd9d9 b`HIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-action-shutdown.png0000644000175000017500000001066410070606012026016 0ustar hehePNG  IHDR00W{IDATxYkl[y~ΕNݩ%[,G$۵[un7ɂbt̀"S[Ѧҵ R]/wvfKuX,K%ooj%a0 BPSSۍPt"AFA_o0`mmZa}@l~gߺy֕ / a0GHn/ C'0 TAC[en$\"@"O? OJѣ{6n܈5il6>ŊHkVRVv|gy)S`…ܭWQ,q|I޽{Ohb~O[, CCCUKTXi%I xL,P ztdpΟ/[:8>wEpr*ȅ4 lٲW\ie9J.ߍUsY.p (J^G\3r,*AWpkx)J6D"}ky@Ý*@0{ވ(CsJBL&jXVr9|2p` &) ߍK,+)!jYSWT]hjjz@b Lz_>1==]D"i( $i O<é"Jk:P&5;Ri? fؾ};Cw@i:1===nooR@UUfBE)g& ˅>ca@h@<@* \"a.KC( x@Z[fqڵk{"/DnjFӴV^^*WbE\ :EVX c~?  T(@( ٽD*cKo P%#r֭[=U(040$͖U8'E<(Xn j Sat? 0R)0k$v10 Ħn'^#[nMӠ(Pnqur"a@-͡e nOD> 8@_D:0لQ(Ccf|||_$wm DeeYO}}U`Yd2\KK 9zU$Y^GC䃉2@>$E7E"s'X֭[׮]kOzk*dp3;v9*aU4P(v:H($ 1fw rӾ2H" ϣ=4ȉU$@ߏ6l~ޕ~_[e-alhQ2$I ˲$JUߏ6T9&O^AMo/JL,^)@x#XLle}}}͛7VVVެt#@J"xjN@<BEQ)xeh) EPXdž1;vx?;;w:8<6B`\333,˿]c snwwssR]!IqI&U%pww7ξ1l(Ѷo)Y[shپ>L9wS3 ۶D"{/X?;s%)׷}ƆB/Ca&VԄWOY  ( H%0omKg'j?9H6g/~BRv{mP?nGi6t %IBeg6aL&CQ~PY DӾ"G3NaEx~<Y`=xREeí*s֭3mJ (rUA I."L&TĿ-p@KF.q_R.Hp@P100PL/;X TPhwWWtO 0z65M+ߗ$ X MbC `\}@}wM`)`@ss3(q`YMMMM(0t:jP({l6[U*c24UU|>_J|{\MJ%kߏC+_ zzz`ZaN'ZZZ axn#LV=Oɓsyظq#}zy*"jjj< @2"r\YY_3w R4M'oܸ@#f ⤻59cǎСChkkai555p\hkkC&2d:hMH&B~woQU5FaJM5l4#&r:Mӈ㘝E"`Y,˂i$ a,//#-LLL| @nIL oppг^L&l(ZZ]2 Mp8 ""$ 0r qke;8dYMӘ&n;D!XKYAL~}ӦMʴZ,+8t]q$ AQB!D"B!(MD ]ŐL&Q(0992o|>Wg?I{`nnnC{{;W`Gٰa H$( 4h.,Ek`0+bIa.],MVKˇ~B⪪_oߺ^[nKKKet||֞u~4MY^^N+| xPJ$PjdSԨ닳u۷o\>C2L&0 ra1x<EQT8v޸qͺRY3@O8KLLLXWWWP(T'4T*BH$B7oqYbX6oLuttе$ . ~?ܶ .jZӴ>l߶m\v AE,//`0(k>=(]]]B[[Fy<p0NBj,v[3g@EP+W +,,,p+++CPرcޱzzzV8b+ HA`-3 xv) 5"GWWW韄BaEQ|څ wܹ^Ÿn2 u=JQTe_'>9T*ڥKBAey(?˲W4M+Ȳ-Crl0pis\ ۝Z)UU,'7o,SRWSW4M/k!!dNBjT9gKiP8>hZf1A(F4Mihhi/9lIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-about.png0000755000175000017500000000553510070601556025301 0ustar hehePNG  IHDR00WbKGD IDATx͚yluμGR4)ы6,9*R-P*l,+i9AiQw Wiq Fn\^buE[ɒBUU17q7s9c#1e;lwhXaŠ ܆+\g-EX ( j:p5`fVX!Y mnݷ{w6omͺu;{mŤi >}C^W@@"'r`>~ "(*x8q_?s@qՒ2Сy__uNr/lWyUz"zy柿mRR*EJ(XkQD29``ͷnػNMMN w ؐ]ۻwߟ=~juQ[8΀fsUIhEv/j]~lo YJ*!sOlpSdž8QUS㜠\xQ+> ru߇ &! {ol۶ZxK~4rQ5(wr<Qjb^W=ΝQd(EU}edd]H=4jSBZ-Q[9^&50|^~."KI$E"f>go60f& I ϟ:y),)T{s-i;O/IB;uIf}o2c3;.ZRrQhx'UO*)w39~Ki\ {RiFhf ?^ eN@|駞{XeRMIq)mh;G4ɋlE,`EkG2F SXxӏ?4<2DI% #!E}T"Aw3f>0 C tN|hr!h#ǧ2QISng/`Ȫ`K7N ><4-GL/p_/g$S't{O ^p"Icyw3NUH6B*u6md]ЈwM ^-` hY"8w_|oZ&#gH}BwjD\2KJdR)”'#^s:"M`0XvE%^|޽ѯg7]`Q%(gM6ej<_k_3\@k_"q `HS%2-"ڈՍO9vy> _ ;r#uh\viō poB{&DYE}Xk R28CN%h"P kQ+bmȷSP~dL c $fvMl9&jtc_nyꗸ1f*$C\fc6h5W\m[zHq_*5Oyܰi ׾HC\B-?uxz_D+625z Q-|{V}VB$TkmZm*ӃLk j4fh* ı~ܹ]9z_jSu?VoE5Aõh FM'jKrʭL7mb'5  I;9O2:Qlʡ]/ PȵzWjҬѨMnHRG;qiAz$zM7_S`g] B2K8%*L a|L/i4?:rzSUQ٪#M*xTKP[W.~]~螮U+{pITk;VkmɊ<+@gM+`wq?l*^3::::ah-Q LB<7l_z8ccc9|8Yhf|<WadIit9\9䖿7Zyt9r7ˉ_mrYx/ڥ>1WIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-actionmenu.png0000755000175000017500000000671110070601556026326 0ustar hehePNG  IHDR00WbKGD pHYs  tIME9$4<tEXtCommentAdobe ImageReadyh 2IDATxYLT̽wf`fOf"?dU@PMn[7Mِ,yM}[hWjMUF 0 0 sg!nēN9ssܞs{kooO=nܸA ߞ)+++UWWb@&pwo߾0-|~mMOO!\iXi&allx<Ǜ86'S{|w7mtl9հZ;w CNhfڌNxb iFN>Mz=9p^FP;l"5x 9S⋈ dʕD"tj_|ol@ %T/򂄄mmm=`$johhX 7͢bؔOZ[['׮]#6luCA_`mvvvV{{ol6[Ӗ-[8aHbb"y&qݤ; YLNNz G!ńa"HH$""H$yD~6xŲ̙3mj4MJ%ihh uuuݻOo~С?}7srrXaȪUf#.ڵ4MR)i( OMӄaGv} ?̟8qB}V;JjjjHnn.ٵkWoyy{aaa;***bwӧO` لiRTTDj5(d2IHee%$-"ŤR9:Lя&/>|7_~dҥŰlӖk E߱cǺNiss3rss122N)8T* (**‚ xq @Q[n~zvww3===ljZt¦_leek׮Eii).]QDEE!%%+V@zz:N'R F{}qs>hٳgãR覦 ;w;vGee%z=!qVXDH\z EQH$Xhv;Z-z{{q]Bv166`II?655]0&IHP _~D"Ib.\Fajj x<ǒ%K Fxx8~?l BvxvՅ\.*779)r wll{b0 (,,Ğ={`2ja,[ Ӱ`Y4Mظq#l6n70>>\122^0L&nerr/D Y45i;O!j5Z-N'XEZZF# !H Hpi$''b\.0h8h NZ~}AccA?ٮ=;w\xʕe,"++ ccci, "77BGGa Hqz=r@|ZF\\ǡa6T*fsP|4 >==Vq=($&&`ِ[nattt``nX,0sFJdN˲8"xh_?jUUU۶mB@UUT*d2RSSqQL&r ---Z8``(,,Z.\ߏY<B!( ]BOIId].8xš@A !GNN`ddCCC( < D|>ƍ?(BFFV^M6_xQ.Fd>{!?^[[[\PPTIDEEl6 ߇K/ .v100!MRDii)JKKyB1R__szz`D+ToO^ygyaѢE `ժUhĝ;wVT*0 ._ =DpcժU\AAn444Xxm޽an{>Ky8yW\ 1'~?:;;rC4CRzu/^lll4 C+qБK̜O>ٹ%%%0L0s 111(--Ś5k111ׯ_W_LNN *-}F|F6T*?_lٻ:.,;;p8ubaHMMꩭ~h'@ܥO88 SEEENusY"3§W8?(T?22R>555i+Wb͚5>B}kkkۇ !N u؇(X{y]{{ ~ CUdڵF9rj( ^Yő?7N˗/{ɇ(2+u Ѿ/Dyuhe7|3ri=Yi(zERY; UH= O? ^?'_3]qVRIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-batterymonitor.png0000755000175000017500000000434410070601556027246 0ustar hehePNG  IHDR00WbKGDIDATx]lW]{iU 7RC*Q$$(BUR( PM!Jv6k|ܹ3Ϯz@>љݝs=ށ=ٓ=ٓ=ٓ=Iw*ρGnj <}gp2Io_|_ou "pnc!{s3طOzl$xua1 J,_=/:|̹=z;>}_']/Ke!eJk"tXu еSo,훬iy곬m{ׁc@x3=姾ا_W=pǾf@PRW}f WNə^ŵ+k~LF4m\ؙqxfsxoTRxH)dʛK𼘋=\Z]g* ׭2QnZ<³? [犜i!T ^7}d:D3bS(#A3$>0RYXzw~У1v1L> O<ƕA7;aSZ'h) aiDJs$rC<2w/˻oιrnETF_rA7k8QA* :RO&z%~Lcvd^Fcq,IB]30 tra1@z"!$Ił^#660c,G*E@IhnYFݰs8ea' ~ LBB Th(H\}7<G5iJȤ$$i"8X"eFH ri`8lQE *AI f(y6~MCd9薆ijFg#gn Mq;D!*6 (P ,'We 2PضbVe|ή(nMO~7ݠђ&*p>Y҅Rinqċl.u$ivfJ:j1\ץ鰰@LNNy>apqM4qJBB6qr8j*PZ}\<* c6oi6z=&''?VU&333CP@ ֯4u}fI8C8Cj5<@4 <uB=0 Lb1"bMDvA.` ڶ1h6}Z~ j&&&}z^>`hHDBUVI& q8U1 8FpH,{ L,ªVǶ^1(Xp8ĶmF=$Gd\ץ^cx0d1B'J*k!qZFXEEX5DcOȌl\ph3B*qcxآ:EB_I8qc&QC{HmQDZm)eyI K$m$IT*ma$ aIq<NEض۶uB##Nv;&)e!qnՎzeYiJZ-c,z Sl! Knw4Biiiژl C o&o $őK\|UdsBu<߱5 ,uNCcOZ-80(v\ 2Yu/4 [6r'vDzY4*v۶9~8^/-pP iA}!s_}'<͑9e!F>MVhLOO3;;'N<z%H59z(9ru0 8I$ B(}N> qԩѸz'-q; < rţ>liVeH)4MB Pqgaϧ+++X/|J!37Z;[Zvw9]~DZRat-!Rz S.m[H᪂XTϟ's v,[eb9*E,H b6wOW2q Ģ\pFATٳo_`Ex~XR6mɓ'z*o|ʖ0t!UXiu]%TOe(4͛7ӃeYe&JqLΝ;J%4X ]W'Vj}Mٯg!s9._oߎu||!#rT ]W ;w>>B@&oyulYQHOBRJbdbb VR)4Mw}z86vZ1yh;v 0twwS,) <~8ZSU, )K =#rݻG?cccܿQjf3(b 8|0۶mŋ aJ%ml(~ި A8r94Mcdd]vH&$IX!B_ROXKmn.b!qT*tZFTm iיƲLOOu#zI|ڵkԩSƯطocfggq0 Vifffuir%!ϓL&1 cYߖLlY~_N&14iL&d2LNNd8p366GA7|M5K")B )пu+[ba޽.c#=cXF.H$rY| D!!FD<> 6g,###ԟ=#ebFDe[Au$\ÈQ\@C͡BYZFG!|>L&bvѲ$ $SI KJapCqMb#7؅iŢzj!"HRAHX{+oB6\Ezϯ_V/ZAR)4Sr9JGaiEuhex[n+K)%e377GjBA4ufsT.o]@y @xz:ߎ:pB @,m ;b6)Z@D[tN7d]yIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-clock.png0000755000175000017500000000642610173504715025265 0ustar hehePNG  IHDR00WbKGD pHYs  tIMEp IDATh\u?{fggg^{v lVwcPp[n#TDUZZS"JiVb"JBTh1 5k;dv<6X4+]ݙ}o9sSxP Z_(Y o0k#\sR8e4ea,N&$I뺈xT*;==؉Bp^O@iH===lB|V\Njժ]_qI29AۂGͩE(0uI$#$ID՚p\|8bh75%oݴiӮ< Y2Α/Xɝ@2 UU Qbz:PGvϢJ%T=eYυucx;_}`=NHY^#/C$I$>(V9|Dz,,BN!ňS,w;w/*J(m>Kf-eVhiiAEqеXmaU*%>s`89?G_CqlQUUQEQ*q 4t:y*@ , -e aE޿Fr"ٲeˏ~n!}LA^kfҥhaXͧR)RB' 2e1y70ޯ%@ `Dlu|e Lg>NKb-ZQ<mW4YeddT*" $IP gj}oNkΈ+Z@6me:KgO.EQ*Z;"jضE2i^wxQEM6_A}.+Re˖=6~r%i% .DQ4Mkc6rRٳgd2;u:YBE0V]WM h_ sy_3I!;Dꠣ!m뺳M7ĪU흥5 H &)/69up'|+0 EQ*4l6K&ajj q}T(8MbD\g=Qu~L\{ LM'[Nچi'k躎y266F\گݗe0}) ߾`EiN tϋc(fG堚:]]]y:L j$Ix-BTZ`Q R. m$ IӜ6nʕ++PU˲2PE((B"Ԅ$II.\pY$VI7 aYV]wy'{%WdYƶmD5 j3QPx9Pc LLL,Sq$I9rRTÑdY={pQ,_< a\$YG :8N6-ʉWfڵq7~'bʼn[H}v,Xc*~0V U!tN a ϙ"QϲnݺYԋ,Ga߾}tuuzJT;y.3C3Yn\m5\i 誼GmHhW_^|~ilƶm|߿,j>|0X~=iL&1 IL5"a8FӡwG<H ZBᕰ] |ܶ= ?Y51MqEQfy饗x駙fhh.\ettUU?@z}:{:\ 2jlyK\(9nl-فivq BD"A”s~ >YN>zW9< UN:r X. ۶d2ض,˳Q]#g2e6 ep7rNp)\#Zdok70R!A_A/EU^vFg$ic:?I\- 8n x`*l-6JWzGߊ$ ?jJG()%<,Isx$SHf xcC7"6_ܭF ܷ/z+H0(Y.z> &yL l_; c}&i`jrXXB ;z;{dEo5Q5ymO8|"/~/Jq>:Tkb."kŽYU+B:XF/Cas0p!t\+&j$|-cS0!f \ O풯9zv*N͌Y=Y=_ ^4kt~f@rr7ɘ&QIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-commander.png0000755000175000017500000000463410070601556026133 0ustar hehePNG  IHDR00WgAMA abKGD pHYs )ItIME 1] IDATx{pTlH>#j!`ǩN1vT3Vm:ڎvPjZZ)Uh`'&!<6sGMې!0|sw|^q6O|Nqs`i Ǫe; `rh|&.`W6.`哏ߍ>${y-@)ɮ.yس%;z˖;"dk)eee -mAx{%m(++kg; 1{߽ -ijjâ76S0JZZ:[ 911 W-c -oDf9i㛔˯b%t{ yzL/2T`F^hm;q֢ЙHd?% .>p,Z@r, +jY'?} B=1EYyKWxvW皙D #@}DiÆʴRzu% ]LL`f1Te¥i \1qBʊC\s̞1e0Z&f`}vUe@>0u$ ņ2!~puggu{Odsȱ}hHnZrش|5+QWSihD-(u@LW<"fMHD ΝEIT{BhhB">>Gݔ/G D PYр6N`Ѯ Wj&nxQtͤ&4ֺpxH$̯{!$ ±5l)?x PuLƣl/y M u^ 8^ORRqS1U>NW1`qwJAD-,m{ǧhB)蠢$uFyӏ>o"5Jinj ۜ 'Wf{9s`MBXQ\q?ooĦ"LIyٹ9Yn G B:+>tHn% tfjD"!x;I&֗0`$2L!B",ϴ*l5Z"%R>'q 5ΡPΥon>?w:75f΢`d n޼˰|>)%gT4pHFX\|x3>R0iDV] 0 px꩕ZB0md&?a$і:1Ff̋.]>H{G7RB]3?a:H)>`3PB)k{pV-Car2>v|6HDD- t[>aƴ,@b &hty LHK'ͣ-ŋ ( B>?ɉ7a#":"v\S"cZEQ{9|7١|ovkk%M\f b`?0]11}(S) >6 0zY+qI3W@qAN7.qnq~8_{H +uW^b ϋɓ*"WbzGJ bvO8:; CmjWb1`xrH~/}^&"~KB lz1ٱ.O@@5MJ 0"?=1jh8qjB̸H52 0 ϴV,Vt: !;>3=W}b@ѨN'li'{7mt4 Oe+d0a `7+>SimmWLVM-GŢBUTKH,;b?A4~q >6끇4NP"0"v?z稡Qчx5d쬫1AUՕ+qP,e%͢R}p@o֝m-Mƒ" KX0xqtu`ЛY||^w^esR;.}J  >"UxJ GoЗgڒϜ"d2)- 9QРAsB2˖khm95cyN@e vUJe2^9q-ngGՖmׇG5b"DC zPUABB2K'ia{cV_@FP\Xā q4 A2{TO?y96 ȴ1.' FHeG Y|"?=5t=hL*rś 49z+R\3&=C":xUٖV%'FvvV&ٌOWW+,(--mk)"^ QrO%i5:GKfO$$ݲSBD.m*g[ۆ? J zQON^k:&Io{DM;F5r}?K$&賿,JJJZp=ŷ/Mҙ<دI8/~LҮR[)SIАX4BiҬV:޴'~Ϋ)EFz~7]`}I>@ ͚̦qFB!gRSHfκ!W_Tl;8o!a@QI9j4B(bѢE} W ?t)Gyi s}h E`D_,XL`x/̝=7FАK(gמ=>/|R Su ~ PGM| K+2LOf3*P \<_n,6DBA?38)eS- F G@kzUqsU c'ќM*d]^:{:KDUF?ctѶZ/qt$ +啕D#1纘mg>/7l9S0qͧn_D{sseB0}8|ǎ D 8W=A|;וQ!)ǚےkN(eew/pxŶۅPcn_TZC~Q19ya ru\)'vԂ۴/U?.!#u=v"àSwmmF=C;SҗE< Ǜ lÆk/.#+;`8D@^[)(/Ğw^=EP(z7;{}Q%-rܛ*k[$}zK-D`MUTMUAi$rr Q4P2 xYx} UWC芋mc*(Ozy۠VRVD{a/DaY %eA"L+H#7M/psyNەPT,P()ed#;S^C &Q=GxF.m6r3ԣ -]j,Tؔx.Lq6qAp3Ot`K10qt}^IM01AFA.RDX42_nP;ƢըocZ rxO^6D>Go?ջ:&e1bv/_ww1ΔM) "$ dSJFvY3nY #\/\%^. @U#j``hh$BM(h$7NJB{&6~< GW#S#^xٽ>=8]81^ =9;F/Qc~^﷤Y4w3w04݇P/b>4us 9r3?lr{mnEasߍPIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-cputemp.png0000755000175000017500000000300310070601556025630 0ustar hehePNG  IHDR00WgAMA aIDATxX[lUR" &i HBh hL|01Q51!5%!C0nb4@m"bm,ݮ;v.ڳLK/.s//1۶0>>ײ,ض:\mspMDڍLUX#`7_uOܵ k=q?xor?>T~/`]3e.?l|-YVwa-GǦus8, RU;61Bm|Ś|vV5oJ^V^"$y{9{8~,.'f@vf+@*? ~]n@vgg^N獹 p OL|8r ΢V>3 {c@AID AK#*KFB*EJDK$$MC @p1B1[|Yv׻s9LnTF:˲g{ݽ/z&7`ʕD"`4M)i_~bZT*}>999yL$X3555cǎwvvH&bP<4Mj5T* ȑ#t>8,:}eY>sϭۼy34DQD< 8 ˲`&LDKK \E\ >#?4#wL@_mڴ۷oqTU(et_[N" I۶m{<@4.I>pxD"x(hkk˓:ujbH,z]]]( ѦdYn-!q( Ea#E$I$a rʕ+ؼy{?7== 48OHHPq,hhx8\k<;5:::켛>c|[[RZ[[q*:t]a!(HR (~ihG-A4=/]3 ZeV<7H$rSK巡8.J!LB|YBǟ4tZ`vvaC+x<`Y$I!mL!d@X(֭[woܸ1afr$ 4y2 .]@EBXI Bbg02_̀ rڊZqnâ%ifgg:6l؀~Tbhmmi8Y _<σy nܸ۳gO*Ҽ۷ƣ(K%u/I\E6#\vbBOel> 3neG"gi~ggY@kood:<σmۨp4MxϙoqJr9-bhD*Qzt @Qa``ϟ:66d͉^p}0 h&@O7q|,EQRVT*}4M|FJ|ɺ."OݐR XPUUPU5~iaa{D}JSSSS wQZ՘UNbt#Lxi$ID"f_~rrl6Eu\˲022c -!bѹv횔L&FY˧/ 5ymcjjٌ@1;;jITUȲ̂A-5w4ۄLNNP(f^`^rO0dZh!|&TUp8^gΜ껮2BsFJ?3?A:f ./ DaAPB<ϣX,_GPGW0ȔS J6˭NRhjjjBE|,1 ٳGԶ? J,!{ܹH$ҵd&s,Z<ϳ #1==^{ [ƃ*B5Ba՚5kX [_'ܠ( xWpLM~,O88wǯ[R):55҅;qxcSe}3338x v7Ƹ]|_h`HC\{Lfu"X!rBζm߲,\.V*RoBgA+jȬ}_h b=iP=0gzp#ZB?脖]Jyj~'{ݽ_W'AIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-drive.png0000644000175000017500000000174010140216364027726 0ustar hehePNG  IHDR00WbKGDCIDATxXO1]MRD%b"K]`R]: 6KR4bG/}h?wg{(P@ ( S\/?zh4PJd5wzzCx`Xv̽Ny`uuջj9ptt4W@OHJ)Gc39(X1q#c$I$I4MqrrHQ v D3RJH)'OˬihZpUu!CV1/ʌ˼C+d嗋eKc agz!w e|j̲ Jy{MѨ vwwquu @s#]#clnnZ:ɢq Z@ 6\,0qyy9i3Ӹvvv& 7R5KͰ-iI+. T*Z-$I&7^Oԅ#l4|EqP4kkG/_kfe\R666Su{{;`Lө+#G1^pYAk[@lVfYA\ WQǪUbHuP."5mE[ A0p8PA2T3f9:]:@Ꮪ><i;< 93 IStk9/0}[yNlQ7|? +X_t l ݯIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-eject.png0000644000175000017500000000433110140426572027712 0ustar hehePNG  IHDR00WbKGD pHYs  tIME  :PT=fIDATxMh=+^K^ٖv.r-A!)Fiz*D1!$@ݴ`FƋW!i23̮V%=2W;[[[[#?#&mrL& ~P]rg}(!priiAk IҦ!r $! |P`׮]ڽ?{$ώ޽];w$,t UU M4 ]u`&/^LR HjBG+t?eddুZ֭|iMt{dxy Xn٫xBeC Xl?̆^ &Uk׮׭h܀q#r9rR rHB ogl6#=qO?4KKKB& hDdWc騀Q8IdhNXDe$I^X,y$188Uxٳ0:SըVp (Sc#gddS(xصkD0u=*b6Jz;w200@>gff14M#yކ!|\B+5QRCCCcǎQ*z%d J }6LLL#$Il۶VE2hbD>`}}}R)dEQe_˲8{,sQRTMx9{XW'!_}.SSSivI6lR(p]jJV<6$a&ibL&1 UU$)":'Odǎ;w 1lrԕ5˗/sU^}Up]Vyx8,//sE0r$IQljOƲ,&&&us8Wy0LNNi۶mnw<^H$`rr}8rJaݻ;v`6R EQBl6q]ui4!ojJ+B3qe !f8޽{ٳgo&=?0K/122B:Ν;j({mw Q"=`òq˲cweJ$ȲLBUq]rŨu+++8NԵ ti>cJR_X|@H1@9'Nbuu5*q>H$طo]E4YXXP(D`v(w133C>/3_ ͐\|;o~CyeD刔ܺu ]I$N٤VJXl"r`6Bl?p9%VDlז.93566&(XEQ2:lbh4T*,,,0??eY1EQ:@o !x뭷o bHBrLV*.\В$G2 Ra4xGV^SV, l6i8IOx  } #D*r4̓LL&$I88Q) ywl'B+HtPeyw裏 c-ס^qЀr?f`` :ʲ5)EQ{mjX[[VaYa`dMӨT*h[xkQ{Cq ^|E) ~̙3Çi4<öm&z˲[x7eY?ɬ>ˤR)t]穧 `|||`d2G .7>*vk" H#Vp.o Ӧ (+“O>E Mj&\Nuy7,.]&~/@3*\7%"3gLE q&fnn{VlVlŏ/  ηIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-flash.png0000644000175000017500000000445210140216364027715 0ustar hehePNG  IHDR00WbKGDC pHYs  tIME ; ftEXtCommentDesktop-sized icon ============ (c) 2004 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orgkVIDATxOlY?v&a4dCMP&XtцFhaJV+8p eQ P5{XJT$@jjNw[oy29kho}gx2'bTu~͏/>6՟ &Nz[nȤj.Yd?2״8 nw,j[x7 _"?W |ܙYB({ccG?qC2p>L0t^y|4Ô{=qO5YeqUp/@)4f2g u+Y@"AZJHJ^2i3͵h0(Affc&0)S[wBBn-TE M0}f\ܥ 23/*X-̣ !̯ 402 8ʅrRB{-@-FqXNQq<)i]T3FO @Pk??1!\JAA r?~eY )FnˮUm])ft|k;]PEp8*,AI@ 06ޜ'2ٳd-IWB4M,"C˸MUo𺶾HXy k9KVN Q;K6k1h5{[\#} 3a@94}o~{ %j @0 3&BgXAwN6&S`^yw sgI 76{ @^#hz^)0i_l=^}忭= ;K+u>9 N/ uX MW|qek:ɩ^22vo bYV ͂9VWTQ=.𻎣p\gXxk1Tj ;Hip̣&z=~ȇ'&jEΝHۯ/O}5l.%3Aq/Or:Gy{NSA:eDNS_6)1)*e!tDRTù+.e+fXxdE(Nٯ={75!ZevPR!t0nF5mT~kJBk𢬫{t ]exɠ[MؾHd,hI7n݂#c턈 [A->yLUQnV#\!V6ڊ~(IT-P~ p{ͬAZVr졤d1yh{X, 'O0#\%lk%#퐖WMڏ~C.?/ s9gSba6*^qj7EEr%8!FlYC*# ^ݍ֚|U Au{KDve<v?E}T2ޤjbG\X$FrD*|.;:VirfA\=-"+MyN%|s6;ggu~ݨm*%c|q"wJIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-ipod.png0000644000175000017500000000470010140216364027547 0ustar hehePNG  IHDR00WbKGD pHYs  tIME2jtEXtCommentCreated with The GIMPd%n $IDATxklKnBoh)8QMjժͤ Ĵ݇ijTBkRQP[t+XV`$FQ\I|}>q;B&8>9<\=~0㫫hyږ BZf#KBP!@QB* (">6=> .\`݋))bVkڬW RW$AR$!RUB HXUU.ZS]s/V%Eذ=vc0ڶɬj9.?l9}9nkj7kE d,FurFVaIwmf˖-YUo~Ozzz8y輾j:::*Hg3dkoo'OR#O/Q~t2$P_|M=ꤤhOC#Ȳ|oBh+o.{у Gנ(ʽpR;|B8/|yP,tIǔжOx*{?~p: V2Ǣ\4Ee$)m6<OMM͒ܲh*B 2L%:EVEeI$YP=*"gqcF|#Bjc2X,){*0}}}IS%  Ea(X[ث΅搹 NFFFl6 C 000@ $uVq$~-z1'&&F/KWn; f|BZjY!u&''\cccάfwkxxxA"'VEx~?b(1JJh4Y=6==!flLEE7nbIHHX9:eeeTTT+S8|o^)px(%DƳaމsh4233Coo(V%v$6Qdz!JKKw &SX 5Βf^_}vT__ػwov&"S/p}QTT-((kVYY Pf͚>Cϝ;waZ.r*tL?PQA~~lC ]]]tvv~p8Gt'_n>HrݗgB< 0屾E{޹s`ooC=߾EM:R\L$$6nHR9Nue IdE۱cG ._dtϞ=1,eLL;Fgg'HdW^MkgOQPovY" FZݾ|Hoƾ'N-nnn:\f)QBtǎ`0EAQ"|Hv>/]]]477vy_;hg6.+r7!`|! ^>qUUU9sfF#@>Z[[lёb3w޽AB cX(..歷v''ܵk6m~n<͛79rΥK r[[[^uVjSN:Z^^&) U Gf@矟^x*++)//'''VnwhPÇFv؁I,yn̙3% T>8::UKKSSS)h4彯dTjM:JGGdž~B|>qu׋Bբh5d2U zꩊ5G_v6//OX,{zb[}Ҳv;:PxѩMb1FFFz%IjL8KoߎbAܸqCijjFQ#06t:m.QÑk2b,8~髉WH JS!pӪ,ﯫ{'ڵkc3@pz75&$TJeoRJӤqۿ'NGg2DQ=RD"ӹܷ9)S_*1Ԥ1oRJ&hp5{JN_֞" `n iP ȢiCIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-remote.png0000644000175000017500000000355210142647500030115 0ustar hehePNG  IHDR00WbKGD pHYs  tIME  "(IDATxYoIUuWw3Gqde'$R p{BZnkN բ '>Brs00iH⍌jTT:ݶ!0;?Tmw{﵁'=IOzT7.B:YV1== T)GQ\.c``3˗d I?bpp0q~ޥK0??=z0,˂"vSBȞA)3 5L3c`,Xq8Ǐg܋Sl\loo'9<ڹ5\cccWѭ cڤfG7hCRW%38ܯ_ 8氹Qȅ4|A}߇bvG籺 / e b]X)-А %mTIISYO&=G35?ԫC}Ç0M˸wc圻f9oߚq#t$,SSS1&gnmhJ)J`xxJ, KL&A0.jp΅eYb||\x'<z]4 QxRqpJ897|ߧsB)%ny>}ò,Bu]BpAPJضgHPsss4f(ԶmpIm_u`,,,0J Bi8Kcii R^ZTRŋDAPBA19& -ᥗ)H/9_fGc0x%,%0jcD嘺TTh(BZ.iGۈHzI%"͊Db@DK/tMFqrԙD4;(cFIիÇx5N:F=σ!.,,`jj oݻwq-LLL̙3<^hVo%v`vvMboH( C&AD\Q8vXdB`cv޽׿FGFFbк1R>#q$7IENDB`././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootPerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-removable.pngPerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-removable.p0000644000175000017500000000211510140216364030241 0ustar hehePNG  IHDR00WbKGDCIDATxMK+Wg2Z1DEU.BTP![p+t']\DuS1H[zɜn O&3IzM8眙>q~~wY@qGRT#tt:yxsrr5GBFc :z8̞B@.xK>x?A 7^ `|/U8؁= 7D^N\69??Ǣ2e ʹwl6+E#H-CޱJ1QTUh6X__Vu)g768@ q븀wZkd2LNN2333Gx3!|)X|>O.#ϓdlV;7%/]Z?ee}?6[ ki4[CmD[B=?ּ<pss>,iTdvOj%4M988`cc#|ܪBsQ#:JJBf?Ƣһ(ŹШ *kkk]vvvxSD<0<== T&nBU*(J9 q{ХW<b䷗noo{:Ѹ*5oqzǮUUjB*%h;uQa m)jl` DŽ=߬LCݡs$D/Um?Gi<@ x#*6}DͩPO/ 2sX-h%ia9G Y>iO,-˱}nIҲV1IR9XS֘ b=W~-|'Rbnl*nDD5a.A H !9\ IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager-usb.png0000644000175000017500000000234510140216364027410 0ustar hehePNG  IHDR00WbKGD pHYs  tIME HFtEXtCommentCreated with The GIMPd%nIIDATxke?8I䠇%$[PbM/!+ m.$˸u\ō_۟p+j֚(9?j4$I4`8/,w/TR31rb8"Ix@dQ9u 0=a}z4h404588D9!вy9S޹͵/5P(066F'…z^~j?LrO7?pW{j+++-Q̝UJiA|,Bw|\)sϔYmFGGG8d:M Nqk>/_iwxxƱ W,h6%sB?'^:u6.UJlmc g|n Wxq]0x'P`Z`fT-nәC)EX{{?b|q"j։&a6Jqk묮]j`BTgoV}[\Kew'pv~(C#iG$xkЮk?/!M [pV$b=|V۱abհZw#J// mԼӺY4-1]7$h1b9f:hSh+ :ϤV:xH* %H%>l:XA]FeQFG;۵]IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-drivemanager.png0000644000175000017500000000174010140216364026617 0ustar hehePNG  IHDR00WbKGDCIDATxXO1]MRD%b"K]`R]: 6KR4bG/}h?wg{(P@ ( S\/?zh4PJd5wzzCx`Xv̽Ny`uuջj9ptt4W@OHJ)Gc39(X1q#c$I$I4MqrrHQ v D3RJH)'OˬihZpUu!CV1/ʌ˼C+d嗋eKc agz!w e|j̲ Jy{MѨ vwwquu @s#]#clnnZ:ɢq Z@ 6\,0qyy9i3Ӹvvv& 7R5KͰ-iI+. T*Z-$I&7^Oԅ#l4|EqP4kkG/_kfe\R666Su{{;`Lө+#G1^pYAk[@lVfYA\ WQǪUbHuP."5mE[ A0p8PA2T3f9:]:@Ꮪ><i;< 93 IStk9/0}[yNlQ7|? +X_t l ݯIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-gnomemenu.png0000755000175000017500000000602210070601556026151 0ustar hehePNG  IHDR00W pHYs  ~tIME !??G IDATxmpnt@MIH͒]ܠ@"@Q8M@iE Ji+`U)*kkR-[B[Xmi$Vc /BD /aþI͋f_<3$ϹynKR7ѣG;` hDb#+cƌq*1J BΝ;ګk>!w*7Bzz=!b!e\RC%%n%% 1#R붅 B :)J)QvPXXX~> =JOdBK#SLq~sD'[J]_f~v!O`lycǽ9%ͬP^%95Ms4|(;NJ+0 ސ__K@HQ)zo^uu^)X>/D{n˗ԧOo wy aO!)D?>&iqgaqG@zDaH)RH֬^npKBb4ΝX eA%Ü՞aR!+ !(B4.ȑ#ti+&xJ)-[+:)-n޼e z>,k*V)k(JOCi½5P6>UJPJlBH/P~>~Cr!d%gb@%X',<(bζY!hXB`QTdt96,<_pR=,3H-6~/옹|HDdž \)Uo !R#&i.COO掯/23j) @îkY`5UL!<Q.d0"GJ9똏wD4Ο?AW44G ^3w4TllG~5Jy=% |ttii)2$.Ko؀R !Ē<A҅kn1?<<T ,LhؔTN:q)I&'JsoD$#=uԴhS'HNMgG](95*@A,y3IMOSƧ-]`ОBw"N녤tzGF */"ƴLihk=..Ν` dўB#\0@BJF;`"=%Hb wWUUս|ܵ4]tq$f:2R!IHH`c=@w8cM7ck8kd6c0$pE~ Gll6<9Ԣ%-|3^puXr&RX0#mZ(=pBĞBR5#A~eU%+- ?-9WEEAEs !BBG[ ugVZuSu,"L&RO6kmFtk%esz8ܰEʻAŢaɶ;c^ &{ޝ/혬5Sئ \jȴN xَ 69^?x@! dONz0Tܱ XcqCaO6lDNKg 1 * OooGLݳC+ B17\ꬿ)!^_ruz:E7[w/ucfiy'Lro ̠"}Ŝ{gs8}+uzozoBT^ćۦlS=gA`Ac,? B\+Z͡o#tq8s+[A1bq\Hw0om| ϯmHK R8ߴIFXϮA]e`O2b_؀_9k&`͡t]y뙿Йu%wW5JF%%s/.]eoɞn^܊u !?M4JneG u-w{[̡D#)KkeXp_@kmސB(yiO\5-Vf.p?s`K;@4ȏem,/eqQH_evg 깸iOoc8d6rw!aitu]Nw5=m9נn +d:K,P:Z :^r Dp[v@4r |2"'- oeϞwR‹[dƴA"6":s^`ۏDBE2%<,u$NG] ͜?,k>#X.?2>;GȎET %;yZ!w`/$@T|uX-= ]54ů=|xd|ε!,{SWQ;-:#^R|GcԽ{uo''ZǜUnJ |ڪxՕ݋: @s[ӈT+Y0R ÜWwXtÌJ/Ƶԇz?Gq)IIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-iconbar.png0000755000175000017500000000727010070601556025602 0ustar hehePNG  IHDR00WbKGDmIDATx{tU?g:M@dH$Ȉa&:{2,쨳utf==(. g\ACdAA^+ HȃWNU]u41`x=v}Խ\\nL 9@ rfΜOtttENO,Xz9`0?p]!D@@ 믗Ev6vk駟5k۩SļyB'(=zt 0~%IzС@ e˖\`u ^^JKK_RUsqzzzسgPh#0 n P-\{{6d_>μ#9Bss3gϞ)o-7Lnw_yOl뀧me^>̙3gv8q"'Nĉܹ_nlٲYTT޽{r>xq@\#Eɂ dAYYH$8v555:t~@u/۟}}ذa}pډ[n9WǸI&yUUoo߾e{eQ .^瀜P(Ν;V}S)=rk׮=ߵ,k̛7;vp]wаz@eŊM;cƌY+fΜL1FQ"(B!B!D/Ȑ$ie[[۾x<.u].8s挨r6mo9ruuuoB5xƖ啕O޽;.I\@z~EO+**j&hIp\8NdY&X׮] E__4Mtttjqm{=,0]@lgy)J()8r;pbU~[ʁ5s -++˸Bd @FF8 5*,>| uSUJ}ݧw$O?YLIJ,Ea__|,0; 5NMMWbXeI,^f_L6mz]]ݧ-0ayԧ@O!Ki۷-믙&Mə3gvoܸqi?߲e(3%Wz/':)dYB(.Cggg|eժU9!F c)II$XaYq]JKK7.[l ͛k..=T?0JVY3.WJUU]b7ܾ}MqwRnhpB3]Av:c o*еZ2;3E@!ݫQFȗeaf::`ޡ Xqƕ6>fUWW}EH|{>JJ,4MTUMYի_^~"kmy={Si:0 +@):ď'Oe۶m}Ӄ;EQv&OK 'T!3\6Ǖ  b%MoꠧQ<4|_oݺڊeY`iZ*:x"ӧOg+>9ni#ʼn!~Cϟx"E]]]~>3ԹQ<1pyӉ`0H<0rT;)Be EQpO=?Ȥϋ9p?vOEE9K.O{#bΜ9DF#ʙ~t]Ddz{{Yd se˲$)-49<K'4_N`1bg?Yr|+;MsH$B$z'|!^zdY4Mxʙ%EI$:;;Yhg.(((80A|홙߿_===δ ?|9͎R&K؄H$a8ƌùsR"t9JJJO4p*4-eVӹ¢EÇr(ܼuܹ=ng\tOL<]Yl/G%8}4Xaa/3gxyb FiBҶs̜\.2227n=|>4X,$Iرӧz,իWj*yt$!H I$i(woڴMgvix\(444pjjjxgÆ 8N MMMr8~8RA"a>9p;ǎ{# 4-PpGݻ_KD< |q&|;jb1عs'6misa:;;xӊ$*N>u(08%aư+4wم$HZE8QL@FBRZJXNB|e@j~ߘs^_ rŠ8eW22@BDQ,O!C (/yIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-launcher.png0000644000175000017500000000371710142154637025770 0ustar hehePNG  IHDR00WbKGD pHYs  tIME  Vw5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDATx_lTY?3v㴝vYm)2*D7 T-&dK YH|#J6aH6YŠk0&]CTÊ+(+TdJ vg:;s~>sg 3L8s9=,xJ<{x1w`rm>۟!Ѥ*.۟ KS쁯~%0/sӿЍh1)=K,q~ah"XO}@೛H_xn "FD)~D^yDͫ Z_A**U ( EB|4'(B@ JRDtvvt#V@  W @DFbV }hqB`1@*nV}"PZi8%oV!B]]]EZ.TyJa6Aq4 ZCTo%ҟ:S?H" LwAy3oj+"= Vo9zRxׯ3;;(9v޽[֬Y#%+W@<O:>c9t3^]biS{}ovl`0HGGuuu,[P(D$H$ޫZWn }nT&P:*jժo߰aCs}}=PF0333LLLH$sxw2::@jʈXE@!_eT_aڵkV6*-?544UKt֌cB&xG5zFWg>llooʕ+*F0H$z]5AzF)xg\ /_AاtрYL-]= Ҁe.~M(0z 7V{91BUpivZ=>88ѣG;rܦu֦Hдi&xӱK:ЀޑrK~c -[ضmpt:eYܿ 9MdZ) 2s*HSC߫U\cH oU|Z$0> ) >eD%Ǚ)A"`8nf1=6|`JkaF)rE"d=qҺ3;Dϵ׼~NK| i;I͝ʾJY#3Bb=F$a4+yJ3q5yp \?hcU R57R-; \KarL_ H:y]ϔ[RʲKE)W2RP \[o(  euQUIB, EQB8!rߏ۶ hp8(ض aidYƶmr'OK@V OM@[[UUUFI&TVVI}}=dD"0Dd2ҥK)--%.X\.GCCiR__O$@ @" S__ŋqbqjkk}kR9w***fv'ٸq#,yra-ZD$,4M>M`Xʅ)*~+B4,4R! C l6/D1DCXfϞDz^+/HDss3?<PTeGlROp=?(hSFfrȲɨ*~?29#L .IJ,&''Yv-? ikkGebb? ' @IqheeJ '/RʳhjYa!(!lc``YekdP $E&;i~3p]p(DyzT*ljb$|-5McժUB%bso3P\TDP?H& iaDz@vedE뎻)*2?X,Ɩ-[r<#v{"8T5- INڡQ@`2Nubˎa\Ķ]VccN2I4l .ͼwwAΞ=KCC?ωb_>A9s(++$IbڵyϘ&&vGz=ZP_12:cs L\,'|K_`m&ur[}{nY~=MMMq֭[HdfP/*6& , HCܰ)-/4mjPD9U:nhn } gni`17kwze۶mN" rJ BB,Y:ئQΑ3161M %x!gאKN17Xߴ#Ɨ Q[k.ٳg{'xMffuȻf,G4Yl 2XsztSGP4*5!"N8Ass3aq0eԄa3,˅aR\6{<`'.624GWA^wFe09 Er ɷ_ =2^U_|T*iXYgBd2R*00& }|-.H%A"a~w#~J cR|ގy<R$=t˲f  Bzg!<p-`&y7,_1Y{C+.i܄="!<L׭t!ۋi3w<1,>X3Uۘi䵱s8Gz[uGq/160aR}C9??YFGGI%Gp3^HS(#7lɌg_12֮eǎ#28qe;30Ef9]jPC+Ҹ~b yH2l y{B"Pw?v|ٹs'L'x=4\?,Y7R"td7w*Xous+Oa:ayKi]%y7/s]\Kl$ @CCL}QSSòeHRx$I\wu,%OK/˩36;LA/a˽9dr|D-by6esiN-9ñ=$ó'x^~eKGGaӃb1gȦ-`L&F3d3.B($I"=>l222<q0L1_rtIdeQ1LoV\ץ388(D"TU% ,˅Li*gCPZ\DCH$RlO0:0=?w\rsQ__X뺅ь銊 8cֶʑ#Gu]oΎ;W6t^?)7?хE᳟, 1w\Yp!CCC$ R $I.\K.x<{GMM +Ccc#,Z!y;wdpp@ eKիWst+pDIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-lock.png0000755000175000017500000000716110070601556025114 0ustar hehePNG  IHDR00WbKGD&IDATxڽkEvUw?/6߭OiKw (m,`h3u*"Nc~K]`o;yBmM٦n@70*7o?x{ߴiBx`,=a ,n%JX|M?22KT*T*1?22>8?3e˖" j~bb5@o)C1pu.9p_~9IRPTi1bȊ+xWYfͯ Z֚AWU` x}ƍoB@ 2:Zj @gg'bB@EXk9rRz*|^.ŋ5k9_Dcrˤ-ۗmٲ%ݱcGitt44W>sRJϟ֚oO>Sp@i&%I !ؿ?u&&&x뭷֯_Oe\P-[{WQJ%irA\wuxnY`,[ )}}}ˀ@%{> ڰ_4M_X~}`3eѽ [o+rXk ͛{ {OeڵhQLtXW !]z8( q_>vt]w|$adɒ/p ˓§~ziٹssn &nݺFqgҒ6l .x4$s* ,Yt)BJyu x8< Ԁ-}+s_{REtuuQ( }Ç b @;^T*W>UE%|ص<IEXV={C؝^D3~89FATLW3[kQJ1ILUV4 t*q㽟LVm!vDq^ZkIX;Uԥ %h=xbѢY+0uyf7NT7YxFX gZ_%x졛pzk<[5 Slbt _DQQP ,".M9'3 k..첍! AuFZI..jc_rFΐ׫<'O3LZ9Ysȉ""(F1RJHbM3lV9V( o6+W|4Dh|u\b& .13\S7йh+:@H+aݱ( E$aʕBRj]B"ER!z(H'9'%JI(!xH!"D !-#aÕR4 ?|->GWS9<5j,%iX_Gc4F[X0R"("bT:U@v" ,`ر K'sr!=HB1G"2R(!'k-[1xcN2x6>8Ѵ5h3謁5d9[;X뉔@E|JP A'R bǽB ΔU@(@!EJRM m NXscR8!H#x-߇V$TnaH,ЂsoAXg0f,9[<+ ^f zco~|j̝;>kAyS(8dڵX;vd59(/|8oyGn,LaҔ 0F[ Bpasշ}}}w}jɹ\uUpn3`"&5}$Q{8DCno_&q&>W\qcccIRvg}vw}{k1Vк MeO 6 tΔkk֬gpppܹsh\m۶m@#>y E4Iqg4?wᡇC mZkyBEw/_ 6(Xd tvvR8t/6mr?/)1ͩ~]-K, ο}wW _1KpR?/YY'Nwh,4ohK|ۉ>tj8HIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-missing.png0000755000175000017500000000347110070601557025636 0ustar hehePNG  IHDR00WbKGD5 pHYs )ItIME (:>:IDATxYMOTg~{g qSE~&WMste\ TiڤvSDBW0̽tqy3af{ssW^h?kii o͛7˺9>>b V;w`ffMrX~ӡ{ccc(xnܸq0]~E(Q(088!ܿ K/B/(B0WP*pILLLݻ !NJ 5&(V|ǵk0::[nu@,!03l4O+l6QV-oĉ DfbWI͉  В20l!azzA DQry<|<DHۖh4rFR@C^Wx( fJ-r*/l̇^pjkl6+8}S,/`kk [hPDg,<:`[S(XC *  0J\ lVPQ0-V,wZȤTf2RZ|B˄?BS{B h4 lomP, ;I4s8Z/ # `lL(ϖ+U^[E 0LZbzF>&0'k "ũGz62uB;;; Y(IcN5qYKumܗz$s@"dͨ@+2M34i[6a li4Q&40DXB *&&13_m`kM6`\2++ ]ej): vZt_pY vl!VVW5@F01Yc` l4m[A\EB)B$jA:Hi18:Ț壌p,Y.@'жi5kqn^w} J0qDq0I>A.vD:b"2 Awb)vl ccCaHDWx{ߨOA0 @úhNFoe`.= +Jby`fzT6J.'F4dqF*@boe"cFF$R13ٳ7^=tbƧ>׮a32PIjlRVe?W_^[ BKR .*Fd2QZJs &9~b Z8$6T M,b4zxe͚5l۰q.?p饗^3F[l>+ nÖMג8Q c!Ufk ,ͳ1J-r1'N͒Lj\ My8LoΟL&D"eYyq<N5SiKl>0ӭfG#k˗9V\#Ė!*C,b\j|@!G"fskO' ;6m&nґ!35IoN&c+)E$IDqD"xG:&͒df l8ڵk9?5=zpp +T=u >ߜOSӪ)FFL3m6L?ڬJo:'B ,_orЋV::y* aؙ{xH1aWuHA3R ɗe|g>x|$i5^$|TU[>3-w?5ٶb2oZ7F}h?-|Ш5y7yf>N\.>_5 ']XG[!7:8 N/j\Іy1~lVy+oolD#L{U:vWm vaisOCBnFr[F{ +5,޽N3K%z4*mӿ_5˵`w v՚Z6xӬREͫ4,U`.ؒuUOiehO9dsǒ0̃ݧjZPe붙=OEٕ)NpH 7SpH$ s>R9 . VߑSZ@Ϸ{oK]p%,}ǹv>ꗼ zW/Pu_bzIF,IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-notificationarea.png0000644000175000017500000000415310120101231027453 0ustar hehePNG  IHDR00WbKGD IDATxkl\37^&I !iMDJi*RPKi*UR~$  !jKT /4!Mbǡ1`8k{wL?xlkS\#fss/L˴L˴Lqq~;W1޸FJB?ČɌ9QFV>$xODxvjR)3R)"|20HcZ[1p_j-elqfESSvIN9}lٲԙHBk-1ŽZP`JcF\ GqV[ J))ҤerGƥb3|22! /9qd@ hhh-^ػb =!'@gg'O<%cXR PJd|;?pkᄋ.dA|!Oj*'C?YϢ_߭ϥ;oE9БL@^.7m``՟ٰaÂd2ik?Xn/mkG~J}Bފ]v][ GCbYj6m}}]ũ *ՕKUMP8{ȑ===\.'']'L֣R" B`!L/7u~<')/-u]]]Us̱|>ԔhwF8bH?m+rK`L¡ ~?Y'?PPooo(JّHdjrHx|>e93kpryMHg(*ZQJىDbF>SiXOJI:¶]м}A/j+hY+V c0u-lFѪ#BHo" _2tX|L)Z#4RJw \!礰J(h30LHeT0"m۶+0Sv{<{VJIqF¡"(n`P"ԡP(׫ /Q>ߔJ)._mgϹ n[ܹs;jkk~_sw^>B" x<%3ggѺnTUΨ20Y62 wO&;vp^1Pz`ɒ%zy̽o=!N'lLP"S]佞X9"㭭$,S@ )bLA\w{ n{䄔bwT:1U+$Nږ怽Nͧ2s"zє@ue_hjmel6K0Wu9P]Q1 >Ul/\yTT&q;ɤ8;_h+?Xdhie.W=@x ,lAi\D*R梔!;MDZ7rQ98V@֜ >*~Z1#\tRjRiZ'Թ͂Qȥ0ޢ95.8n0UFJE.3 I~iix IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-openboxmenu.png0000755000175000017500000002227210070601557026524 0ustar hehePNG  IHDR00WbKGD pHYs  ~tIME  $Vp IDATx0$]F/)$" oT9oT9oT9Жy;IDATmxK|eIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-pager.png0000755000175000017500000000055510070601557025263 0ustar hehePNG  IHDR00WbKGD pHYs  d_tIME IDATxٱ 0OL cKb\H,e 'H'g HS2-FBTU5?GD|]EE]Șbw3!V@<7v=kX]~0M,RGVes,ˎ#f3B\~.76'<`m 16@s8qځ҃$_=(IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-panelpet.png0000755000175000017500000000623010070601557025771 0ustar hehePNG  IHDR--:bKGD pHYs  #utIME #ؕ %IDATxky.眽/^_v 75BITF*UOJUURUTi (m%)j`Ԁe6oxwǞ/ƻ6~TFf{}ߙ}gD؏ 䃈\W]V_'*=[G* A {OO: Zm^FI))H)I)h񘛤&?BOݾ73==}lzz=RlŽeM~^QZ~; Üko=tw?7-v|{;I$08<{ַ5,+ĞJ'781+/<‰$BЪR+nx}iλ}3:F ɴ$h ~G߸S_~ ,?;>͙  d@Μ.޲~Rk558p%kY9^v|kz:vYOQ(߉A0~j߻Wbͪ~FFÏo2SLۻ+AK!]78, ֮\Q( s(tB16q%H)QJQd S8c瘝Dlz']qnt2Ov1BqjBX((A)a !L Q&IrsSwI4)ZMY)J8<^|M7ojݟAx}z,eG!hMV"Y,M@D[Vn$Icz^O!\!aV:֒I܁ JOǴVs. 4ФEAqIS\aP FZ,j !PsænA#TgmJ9K*'N".VD +myߊ %0!c($D̈́jl8N(m,Rz0gβm6nڸ5k^:H=HɵTe\\*<#K mmo6Fdf Ece\$V(Gx.`:#}O7l`S]^opz4VhAEcL63iBKMEUCf|$P4!=󻺇GXvu\sIї$/) ma0`I R9.$\* I1Ms]iR bxϽNTPlp(brfJNel4mڷوKEb y屝v KkW?][a #AXȧg \Zgoт]̏?,6U0iqobW j"'?\>䲕"]Q|\rD ]IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-quit.png0000755000175000017500000000377410070601557025155 0ustar hehePNG  IHDR00WgAMA abKGD pHYs )ItIME )$PyIDATx՚og?5]ۉ E$E:Qd@J $ o/x[ ( JRJ"\! RN)Rs8uv׻;/fv^#v} xNt}u(,lZBt'N݉ߦT*Q(LR.JBq zmt;UOV\V$w>y%5JJ\%4N)!B{^lsw i11/(;NIQv8H)Ъ;_rAAH3L/2͢"P,yr%$ҕ Ƕ0%)- 櫀dk'T eYiضM6|@Xr(x$Ʋ0 nm@.7dc BJ֚TqJE&%*2R@`Y%㭒/sESj<c JkT )[X[SJ`r&xٻ>}1eOq4i+U ¶,|KGM%uf4 \+ nk|(6?FFJ۶, $ZJؖsV1_SAw=ڰ jH%J)Qhc!E+M*)~ {m2i?M%PR&cZ#Ăr@B z^s@%@*>wjbU?e0D juhj^J+);蜓V#Fh J{yq9}MhtL&'>F0R3wzp8+JEKc{JۇݩU|g uv@o޷A*RT@\xk8 Cs \Wع.\+]c" BE k+`""U5fיg99]{ݳcǏ8NTm;Yi1*SD4۷l %طyko=C>lAbU"Jۨ@G#]OE$=ή'bƍ|6LvP֯zBȘĶ:_ Bq_,;v M_8qwuViN2.dr/̑|zh]z/ |o3]<ôPN+Bɓʑtr\kީ1 8j[_~whha\v\#*a`7AKW 1tR~G. :C(vm~߾dⶋAg|w:ܕ+u{f-?_AIIO D rY?f9~24eR!6&uüܰaV/NoɆ_q,tuNޣ<C^"bU }i9aXij,Cd,F)Aqw+9گRւKR6fet#fmR*Zy+櫝9ϼuhB_H Dm隊ZGy:?Jww۶JBذMț~j-0{eI,dYhn7pYr|t5se_%#ɠ7k7s7Ǹ1zsa*RG}Wlͦj5s \zv :۰mm[6ԚWbM78s }=ɸ̼MD 6ν}ߞ=NJOبکFS /sy2=b̘SNN}_78u$ORljQ;Yq[ #Ngum(HdşGKwG5*77?cN IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-recentfiles.png0000755000175000017500000000460510070601557026470 0ustar hehePNG  IHDR00WbKGD pHYs  tIME ;S?tEXtCommentCopyright (c) 2003, Gavin Brown. Created with The Gimp.ǀwIDATxkl3;v"?G*P#5X((!!!mDPDHURb! |hMp"{z]{fݨRt3;9s9ܗ(7999uf*rҥKtbB,ZH~ u]666wyGx0M(1)Ht]OJGIJr>B<YYY^={l*,,gZJj #v#fl26mڴ2??O@V@h;@< ୔O{{;>… X,+n)1 ]>xcǎBhFII   `ֶvnݾ &,63-nE+1k,>ZZnz|{3ƛ ;\=xn}ׅG0ƖIΆײ|REd2a)((`y׳{nN( ?ͥl Jfi߬smdef&[2[E[__UW3s^}-fΦ7`#d82Oo=CH$um]eLbo~B!=n,!dhýO;:hiq2õ י5d#Suw2', heEfvzhFՌnDpuw矓v NsW8p#2"wJJҟ5k-;0><&G#l޼)Sڸqؖ :yŤID È`acl|~.\m_[[ٳgimmtri>5~׮])!ZAzhڴXϟeJ^6ln >ӧ_SRRBww73f`߾}p8hhh$"n{޽{iiiHhw YrƗ_Ne9ܾ`2#`uфSܹsN8l$pTx/YSp\oꠧǍYS"BHDalPYYdn>8%ݖ4tρ{GמQ#0(yyl߾K@a0x50bk(c*0f%a$bE @JɎ;:9?/AҬfz:FD$iZRvR>w II%ٌÑÑ=vɟMˋL*m ^H ˇP(4l]ۢHJ1$n~4ɹvL *84:VY`gΜAJCF$Zb27O<=(d2A xtP'\***F$Н8>JćjxgK$/nSLQ۰a=R 6mzRP[[{=@È呍NqHaDJ L  N9t`t3wp7-ź;I_-JBmCI aTEb1kX$"$scd< ^gɒ%‹n>5:3S6C=6 ] Ȉ @1i DyE<uDqGl}^۳@^e8ڵk)**lْp& KÊόAo@g9`g}H)8r/^ju@I񥥥ԩx^^}ٳgpB"Ann`oʕ+ܹcLhlldR )9M4t=D[[M9!SNrQ\\痢ϟg޼Qbih'v˟N)@}x񥩩%OF dBO?-~ϟ/b8yO=UƺuT~JZ~c%Yl}\ʖ&[& I,qxIJ"/ xWI`y=|CwB<<8$(bR@,h|RFK/s ^IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-reload.png0000755000175000017500000000467110070601557025436 0ustar hehePNG  IHDR00WbKGD pHYs )ItIME(N FIDATxU?y{. ,** $ fGVLFɚ g24ZaV6b 4#KU]Xw޽}ycϽ{˂tfyy: Gx<iӾ=\A$_$ z7 J,J$BZ!G'OX27c1EDK B=\}q)V/WY`eBI$,_p#k:/*ع;GVS%SéEqPbzwEj77#9GR"9C+|Ɵ2\HA|>Ǟ{VF JĈ49l0jE0Xрmi7qbO_JZZRfHT du#3b82l]Z2 oVQJEC4'Csޒc=G ?,yQR/'-}~\0|x@#v, [sž, 2YbD @'oE.yungYp3@8o jP.ΖHuw7 |;!8VxDRlgkiƝΤ'q9]\5 ߱(UJ u޾VR11m-̢D8"V̢g*ϗL)v~z=:G1I?*RE;:lN u jFW>V*Q6:Q'tfĕsKʞ%"]TW]~9G4âƖL[۩̨3i:,);ArFWGj)IʴxW|bHﱥr4xLTFq_] J@λM9zHɄ`>0!w^w?q' Ѐqc%exjB%ƒ@ƗN=4h#Ɣd+=$xecbjuTjo,~n8vau6#ځ׊$E,ۘsɁ÷csA{zX0U`W1f|?9}4&!UU7X1A*-u\3o Ȉ Srq!O:;J>v9fƫH(9|g'.:@j`i'0z OQ[&EG+-;”;Cz0%e]p3YZ %%IʪWQ U#1Z"~D` UqXر}7!={ %?t2u-(+zY25=8:C  Jg>>N]ذ~6#*1QzCY.B U*<_AB`Uoa$!AA R) &g82)C!B`,3||LB lq$tCUV+Qr.a4`c@0(>E`PJwrͥyU?W13ݯU抿5q )cꡋ`L(DD-HF uvei *?96>g&?q"ED` H1`LAEP' lzg5< X1NVNO"$1e88 0@\_uN"ˮ\>)999U |U&ڟBΙɔǣ8o?cN GQެ +p,]wjDuC{UfPr {]S'. (~yt$NW%N96QW? t^O* UR9-qcX"7术`7 *H\6@EuJǑ@9wdP:؟,u/q"PWQf YzGIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-runme.png0000755000175000017500000000146710070601557025316 0ustar hehePNG  IHDR00WbKGD pHYs  ~tIME TjtEXtCommentCreated with The GIMPd%nIDATx1k"A{lĸ`ElҜ_ .GgtVr^ B%D9VH#HvՍFsyβ7of@ ,d.@I܂;jS}ȟ7%R9í2$t{~> |Vw1Ҕ!([P[IXeat%O$V9 a jT T H lzP@2DTbq2FQaoooUi}օusִֽ.+ u]i ücc8&Iz=*2=6UUeӡF1[[[ll6<<<$c 蒼%yM ɏ$s$H p8D,{vi~?|>0&cH$qEM6wgg:nnnIZ-jp0@e\^^" N@$uNh4PUD\j6.N r0 WWWo]$wwwQ.z6ESrXuYȤ9fVsan:Ozi}`/<}Mc%hk ൈ[0~j%@QP>IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-screenshot.png0000755000175000017500000000701310070601557026336 0ustar hehePNG  IHDR00W IDATxkl\ez9s_Nq.xm~, (_RT H|J|i~B芛Jea j.e7b8{|vf93Ǝò^{?n7MGN !PL&~O}sĉ\^^׮]eI)ek"o)y晣_7 2 c4MZib&px!~,oat]\(w O'P.u"i=qL#(ʏfffGFFx7B ĭ5CJI^'4 oS sssc xRn @1im'ethhhR9988H>'K 7xGrO8tz!ʕ+nIuirbbBB!s[n B2 P(t[k1h4y?ɐZɶ퇁6z(qۇH&ܼyh4mۣF#@ -Ȍ{%38288/Apw$ J=@?PCϓ͛Z<wKO, UU9|v,\.399Ʌ 8{w);v,kQLc@-FyB ޽{u]$ dxxqfffx"cbw}i;kZauu5)PÑHӡD11@ @^_Buj#1*v._?O$auu^zG}uEA}}}ŋ,H$ixG:faa{Z8i\yqţGfpp>ȤݹOIP $cx]IRtvvh4-&''Rh4BB__Tj~yyh4(SSSxAFFF`ǎ~?r;-Ouݝ452eN~gΜfz򺞱J9sn,b~~%z{{R"lh8=\cq>$ BTBA RPd2E4M^o<|*wJ6v׮4v]S')+4 LgŲ,8 ضM@SQ`4װ*VLVdlVVbRXXX`qqp8LOOϗѫWw֪qR:j5jCT&Z/(Wm._{ eJ""=;L8N ([%R.M_b}qk-+$RR"I u"HBg3erj\Ta(ȬQKfehgJ1a_]JHH)"mz-4+8}l᝻DdaMz~΍%vF4cp5_^*(F|f]-U$6^mGlvuvvbYUr&KIJ"=f7':C6p8LWn>CO!0eӔK%݉D!<4&'vYYIQȯqϡyf*@H$!( |rceGX"Ka5YͤNlE r!}q971LX0C(LMc?0 OƲ,E<!\dvӫv ~ׯU Em=yV ZT&MŮ8/Nr} ؏yWB!;FWWWq¡0|muSKe.^ȥKmpb I_ݵ\h҆hlc&U`:}.](PU~P(s=itttpUVhU狌P(PoHMh8NTX֮J&z{ B$ANJg,JjSVt]Gu( 9rRDRiH說Jus 4X%ۜ.nՅ T+z-?i:uE t9S1ǮBJٳg[Upyꌷ1a[Q61u],:.XT6KREJaBo"Gi̙IRAUUEizנ;wnhn 7>1oz]66UH$Boo/HSx^PPym~~RDGGiRVyx'1a$J*sd7۶ PH&'bhv]U,3Tx$)g]OU=ST*YLTUtM#JV̴WOeCyߓ_I}xM0'y,:.!`DHlu]lƲ, \l6K.c-FGB灦 ]f|~Br9fffVk&p3}o)UA4cRh mP*Y\[TΜ9a8 5v9BBUu=@W:n]Qq]'Onv}?ǧPCACvǎX4J('Vufd::T (Jy7q N !44]GT4EEglp}i _mW@k]ZveU怌OAV?@U~r BO7CY]ss!~z|tCL#_Rb"`K*5?&ܬHsD@/q\ѝwW8Et<顨*a`t0)54]Zp?=+VیRlڷ%&kt4]U횮asN_B볳]cM|X@on[oXDV4$D(EU@4WpgDJA(@ ~0\OFft:zUV b3f.imkRKof=5j4yWgV#/4VJJ[(m`e7`isTԶsmS>6Guodb [W5x?$Ӷ͎IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-separator.png0000755000175000017500000000245210070601557026163 0ustar hehePNG  IHDR00WbKGD pHYs  ~tIME%3ͽtEXtCommentCreated with The GIMPd%nIDATxXm7}U{z,#\HDNZi?^~Y$;?"ui^yXl[l&}9>}ȯ/_ND>GNDDD燪޻g$H~&y 䕻_ yaf.~{ x||Dd! 11xBcCq!ĔithfCy9fvss΃ $ӗ/_".͛?ZtRP 1B )c,!ad^z9sSeK4Ew xgIi6wSwp7! ^?ׯze-ö73SbW+^ I:yO~^ւ =CU}\{>:yכ0H'(ps06 ٹ.Ya>qrV yTMCZq@^I 8:ة`enw6ʐw鶐@A6 ,X/ % ("@ ; WPR'iDvKIY]ǧ%Fק[* zlWIӟSpvGy2w4JnPTGcQ&ق~4Ξl7i&Y!f"m{+ρzz]TI"s$bdXҋe+e+X,l77_CzLŁR#;Se[HȚG#$* t&l ^p(' `($"JE@Nq&9O6D;S1+D_jx7KְOp3Aqz dVl>~0K٤j=R ;Q!3SUQ. MOv?̴!3?"ƈTuB@)%wrΜ9gi\s[TU" !PUB@AB !`ftw9MޟGRԮ-w2iϵۿ@n5^~b-b-orrsIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-setiathome.png0000755000175000017500000000521710070601557026327 0ustar hehePNG  IHDR00WbKGD DIDATxݙ{l3;~mlc d2ra5$ø\.Bz,Y˗/|zTè-HU}(s%ϯvz7 !@$$i|kGYd޼yWr<22BQQPL Gq3hmGaaa[o X,u^LL ,;;J*">>w\uQFk7n`Νl޼97IIIz(T dUU6lpʕ+ M=_`֭:xo߾M(BAzz;wuS!WHvk׮+W,.J]#B u0###!BM}}\HR~b9kjj2ٰalܸ1= zzohkkB=($L©~kjj"##_GӼaMk`-K8B!O3I#ڵa΅ hll̙3?~<1|Ġ(NBeRRRp8akDw[ո?!+[l,v7oRUUkFggWR -jt:B066Frud` ʢUnݺO8m8q/$>>}oFHbHwwwx# LXL9m-|IMMe|>v;UUUݻ4KMM`08@KK˿M"-`?Cyy9ΝW^GɓnpvBiԿx"===ΔBqq1',QՊ,z+ uVjkkٻw/>HcpA/S))D '' b!666<XVECw@ (w7jZ-F=Y@kcYl} 66vBi !ݵ%IO?d5rdY_J=LR6֔/z@ ,\p>|cͪ>7)Xj " 8E@J7ҥKx<x0x00㡩O>g ^Ϡmĸ bҬ5캶:I,VBWMMM۳|V+ܸq|>nN'N|.ǛIgc[uers Uk݆eR" 8Gii-[<+WaѢED֭[tuuqeիW;Vg)VXAH3w>nw)xIHKłyXNZ{Y@ !Ku2ut}j*n]@ܷ~#!Bxlݦ0,l6Ol1A@(\#fs[6+I-j/[4k5XV$ ijt?LB65B~$?{} >~o,.^۵n Gϯ{_~b62)BI =>x ;11c0bA1c XׯW8ٸ ʲPR!@xDֽCw,yw8k1j1ehn@{ @ Isֺ-OdD ? 9 Pt D?;,)$RIVx]bd!r>>slcamumXg w\i!pCBs8ci6֡v?ZWPJ0#(b +++t׺|2}1Cygm Pσ>4YeY )4q:֚&oA( Nh\L EgK2 ޣu!&:,ݺE]d6PJ!\mZkFSjꦦ]Be0099T"ѣ1)@a"7,sdYFH%ɲ !8 BFZ`S9y399&g-B5-]G~ؒ5=hVWVYYY!/6ISH>uSt{]^EիRF9cF[M4J)fRE~&Si eXeQ"/sL <mJfRs6y.,O%RHMwm |{8h\m4F1wz3 (br>z r u$G7!g=íPR)cl@MiJʢdP H#ZvX$Z4 TXL/s#t? p磘Q2Xk'MJ5LtmX޳4M GLL);,,s NIv_''yk,dYձ>Dcm c4.6tWW1ڲsN?_W~+d*;9qn\VczQKxW}HNTF#kH%,K~W?`yyq3ayu|ByʌW18(K:N:0&9q4 @B*t]S."?qX ZJxoqa$iw))bs(%l1g s;ma; ilF' χ>`nvȆO!|Be']b<LQB@kq XK[oC԰u%> pZb|,Kfm*VWWGJ, @7y"=mhVB}R { hfv+>;.{sn}3!|<(΁څP;#S_zH%cJ f}qo;cR)%'h$ +κ%">Z37nSgUDP'7oՅ杝uΨ,ÇsyΝ;s=| UU<]umCVJiyo>!@e)>RJ]Ν;YZZ( &&&\k.vAhvS<ٳg0cJ}XZZ4W_}Uu:WZRJ9G]x'NpeSfkc 5B})˒+WĨ>uJ\pAkr׮]j07nȲ,ދl:yd.,\gYtx78}4{W0#&HMΝO0f]?io; N,?KGB+RJtS5n)%s9s ġϘ΃ԏ:/u'`[sL=\.XTة&hj"?}L6; /wcCΤGe 1>t ={J& !Jq?ʵJ V@ODVLW;uk=UisΜ;&kß: ii9U[C׮8gʵzf)q4xBSum#Xj+/l y Z[S=TbYVo 9<˖-#QWW /n+ W li>A}}=bW8! *WFP>!]]]yʖ-[52 T k{w*Sk3hLt MB lo@2$1yd6n̯@q*570qp67>t  JzMáP(H$b„ l߾RRaݚmܺTLX#G iʷ"*2ʍ(pI!I{k}ww|lv:ٓJ,('1bF"Mn(z K7rHdRz"Ȩ0P!jq0j1g67P(tp}tGߦp-O? Dcp 8Bn6w3W4Lr> _݊JI[eX-݀%)$i {OHA<ǶP]UE>coP(\"V_h[ )c*|E2KPx9$( 8)J&mvxpyMTe??5 IG{@hhR~~eMm6\AwT/NASwRSIV4CbPĽW@e\ Olql} JyK/!$nV3;u5YH aYI2Xh"-<,Id=Q*ͦ?&H'&U@}&QLJ좕NJmK!(J5jv? Jւl|VUp , W3R#G%(IY**Q '6vItttx<` LD0kpW;Wg_hg?btQ+O^+0ӧOH !0 !BP ݝԁggT OHĉ^gtdxE/(upH 뺁 2ӆ|A < VOa+KNWXr5ڒqϢ%o}awF#>uj?eL ML&0M#4Q俚r+ _nf̘::;m }ihJcE:#֍l_| ߘ0門bJd1zt2c1%O1FX#:!3XtXʔT7o8jL11 =>;) :F4!JtRDZ+^JbZેR_-5huw}-Ur멾\'[I~?.\n7:a˾(8߾H?w+[SrIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-slot.png0000755000175000017500000000375710070601557025155 0ustar hehePNG  IHDR00WbKGDCIDATxYn=VUwMQ؁d  `d$U ^zO^[%31GdQ"T?**")2+ [Ůsuxa\_B R\no) "a?y4M?@GSsZ;wnr~ќZ )%̕A$I`Yp,1KϹ`fAݽ.31<(ZڝgeB!(ZE5",K0_Fx"쩩 Z/= vܜ1fFWEqJ)Dc ,CYpEEJ>޽{Si8FǏ^nm7(V&sRZyJD`fawwa" CDQAc9WO #/_D$X[[CρXէ% x;lox 9}ejWe6R2N {0[(5!ccsEQx]oW"›7o$ ZP`Lj ־Fy z10 Acawĵ5`*Xcu cn.+{{{aBJ )X%s\@͂O>$Y*9.E Cq쳳~ ĕT'\2/_TW'CaT}S b: ATSgRA4oKqk9PJ,h$k3[VŖK4h) u5 kYq^%5{/~_HBD P0{?%ф ,@a\ `rJ!L Qq~mzX+z=loooVBk;YWpu;q^Q1V>{A b'|E.66~ :D5J sJ<`*J6L \T"PQX0(Ds^+ȳ ,a$U%Iqb K*' 5"j'wyeS(0aptT!t1`-,YY5c'ikT]ш NONfzGe ‰ zBL5 Nވ[(KB\#4C7!$C*F3 "?R>G{u9)%! # Q]աF0 Јb8:: oL6s. 0X0h4>ՑL,RH("n"3ihL먼s;:9SZcccJ)$#Su1H$ɺqc u$R7 \]wjlcJ)]( Z|0B(Z-4MAk D&?`hzn}o:>;>ō1HEQL,Gϥ繷du 𝊥L:TERz*y/\xyƙRJUn22/2fVPJ^SEEGQTY ZKDYF3tLFg b8;;CSgXңn#I4F~SnЗ{0 ֖mZҍ+~0xwl5+7IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-spacer.png0000755000175000017500000000240010070601557025431 0ustar hehePNG  IHDR00WbKGD pHYs  ~tIME&0tEXtCommentCreated with The GIMPd%ndIDATxXmnG{v-0!%܄!HD dCʏ[BaG)k<;.bŊ+VXa?0g?NC~IJ̞x1S3;5#wx I~p%RgI|tI ׯ{2?xِRrۜIJisrCJ)Rr8jCu'muARKف {Ol6S.S)ۿa(i;v{{no\k-<ֱD2c&#ގ~ss/~ e,N%90$&W?GǽM a@5h6ӧn6pwB A;|Ͷ  @s^ͰC (A(OH`=lfV/Ndkh@VRC[dpn_ V3A8-b23` mh6MDmQ(ߴn߫mnCK e-P`9W䔻 F0Hւq LI0j""^GCF%H>9عp 4pnkrPow i>^@[w6͛-ᶇQ 5 pLS4)-Ե$ʪ]LH}^ $֑m L篩E0qd;-j; 3A 4[ըOpcgAnwp{jgܚ'iSlWBl~@"B7V88yJJsyl/ف> R RBYM972Z5jZ-J)rw;=%RJrwRRJGq "TDA"qyt4v|˝Qwܧx{3#9K_ZbŊ+V xIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-tasklist.png0000755000175000017500000000264610070601557026026 0ustar hehePNG  IHDR00WbKGD pHYs  ~tIME ^q>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxX=k\G=3$ecbD%da)QԩjSM"V7aWn,0Iܸ0X`0A>6{;sI1jw"w`{;ow=ܙ(QD%f9; c}ңZKrd6m; `䖈lY[:=mݍoŋg"2B!TD\BaCF#_w?*M|n{oZk|B !d>! 2TŵZ6MlH~G^?U0qy$Rď4@U HQDX vPQ199y&H"P$aPa>GV;A+++XZZ:]-U4RJ0 U "P^5m{ U (C?Ai× _j?}3#j5֭[K bIn'a5N홻{.&&&WbгHJD*1L"CbsO c~9XCl˗}6W.sp֦H^aff^zWr֢` 5~@ _˸v666-1 H&%xz5 .0F;,z籸wOc` ;VEgG \>RĻUCsR#Sն<5Β ,--xyp L\C[[:%oj}T橮F/\g1,M;4HZW(΍€VneVqYIJ݉;I9C"bs!S4#{=?xB!Pծs[/~u?<EĈDJTUU*=o% Q>Ip |s~5 H iV%J(Q%VIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-timer.png0000644000175000017500000000647710173504715025315 0ustar hehePNG  IHDR00WbKGD pHYs  tIME, IDATh{\}?;wΎǻgďŁK, +M$8R$KmUSM&-E Z%dLl`{,^]{_3;<E*e̡d߼#]466ňD] }\Ų,lwrj .f?wf证i!<|l)'It<3=]<H$H)F.BfϞ]!", -LmnZc7Jɐd( 5!B4M#P4%{oǀF Da e8qGq29wdrfX3 pMB(2el',j׬~vLsc} e+;vRD$}t]q2sΝU$EAQ("VCo~ݴqA0U.$a4MhEeJgϞettwynPW̥aD̗D ZrNrźX]TYfy8ex⊛T~}MӐ\S{vgC)z*&q_ MfIR˅ (˘ɜ9sFSx&+mض=IVGq`C@p9H9*Fa+[tLq~#ZZZ;|^u"100@,M*jwiEt]G7C>t.NjV[@9ƛ-YH&s.f̟?2.>V&&&8v:3Z`J@* y":EOsyjb@# /.&, ]F2 ^f$iCWUD"AOO/^T*yκuXlYX24+0*>Ge|CL6i$I,"LDu]\t~|>eYvfLLL|*m(zDѣQfrʕ[ TUE8y$}Mjp)Ν;X,Vvl޼4DLb& qƥo!%SRUVf\\H~T808Ĭ0b0*}[?<===b TUL&3J5q& #7^DHt}hWW'N4M^8t4QUnZX,b&ҹmNt_TUH l>۶8).aY)C5%VZXd2Ib umHD÷. "v_ՅS `p|>INckrwJH^7nYP(Lvpqs8{1hUU.0}a]cQ]#ꞡ\.Wu]|ߟFJΝ;YnMMMlذO ޙK>'J;8ygAIi+빐 'x)8S)ksz4innf޽dY֯_M dP!'Fx=%- 0ڋDo0gtt,r>T[ ٴiCCCS*zP+0 17щo ¶C WS,^~o/1U⸡NJ'-[hoo'J^7B< Y:;qOk]K`\$\b'EʎI]HW_#_׍\e``]i݈zq'gd=nZ <.VYe -}>rKPbUDs1 !$0`CP(( R)Rqi}[0}_O#/U-B9ǹ+#EwSsۛDX=L]y |?͡XZ?zs""֭ @牸"`qҍ$q$0ЅWuR矷LC ,aI ̗n{F x,q=P18UCzeWb|| u֏7riG4fJ-Z`o_ͅ.GӬ8zTrg[.CNt_`ێaz@G  Lޑ{5bA,| 5 6`;z#} ׹b'V D2fZ cȫ].dS-\v*N6l=>kVrJDZ'jPowɯƯ// "D}8IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-trash.png0000644000175000017500000000537410227313327025306 0ustar hehePNG  IHDR00WbKGD pHYs  tIME-/`5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًo HIDATxM%GT{gޛqff& q1" n\d1 D)*" PD Q/DABŏQPdf${{s׼{o9.nE\?s׏׏׏ݎ'?8#!e7}c>r#GO5wE^<~''*YY[>IzQUEUk"*#D ~Q4H퍎w(Cڿoo7¿za$dBT/*ODq7kg{fĶw<_׮;>?7̷}]ɍvs яw~ӷ 1xѼ[o w OW>|G>x{}[ԓ=G֝0 m+mFѷ\>ןz=LJ?eͳ?>s`{Pݳx'"}=ױL6S3bw9[%3!??țkP-sxDX=q7 w-d1cQgЄjG8s wYMĚ`poy۱/~ӃgzM܍͍M"f6," Hk<:.-cI(ܬ.NrP "\*L`k5^@UUݣ-7B T̍}EjKODb4" k"8 Ópff6Kl6QT#x|x9 1Nmt2%Tj&w\\D0U+D#nz$mHD1KVFH*=eoqbM# +KjpU~b4Ih&T]^7V3;Ak1 PT'3cp]1{k2I5B8]ۦ=YJG}+PTs%`ANmMX\yg OIN˼m{ L68{%꺾2Ac -}wB"[IfG۸-{גP6,[W%h]xdEg,s z-r⨪Z󶙬҅x(zשr?"**!Z͝P`bi zzҹWNLܝ^2 \s:n&6뼽e-bNBXZ_qz6/6 4 hi/]w3CY^S\mZ.txiɬ+>|6qq,?xn= 6`)o )Mt0Gc"2,P#]WnTu3 $21L~L P ~w/);]2#P|n0-'n3qKx20`&pګH]Uje-ŦiB kٯ= vϤp504IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-volume.png0000644000175000017500000000766110167764057025512 0ustar hehePNG  IHDR02XbKGD(fIDATx՚y]U?眻~u'tgt Р$"1*J1aʩ083 NpfqB@ Re"&h d_;ݝu޽};>D(sNν~y+#w _k-|a[%T $B9Ypv$p"A?(x-mx,N*Z)EK[w))Hsbqc?[8l:rήaGrKTi1/GV?j1𫏭zc3ck$6Xq[zs-m. ?sJ汍9;{׼釚t V<12dW~o5 i '?~RBpZO/jUΦ?0yr{%M =ZXZ,_M&DEN> xج-1LPR>xS'j!x[B|;e#J.Y< )E6||dw=DWψa(y9U|ĶWœk&MٍpS_qefܷRyl|@w NPv]M{D8dO?x'x:J辳}zr2>cMuӴYFb(vaې]4}[ǜKPu!;w y^pu3:ӛ6j.+I[>Ѧ)VOX*i)u=x<>s Z6o%'!>>V"zQaE1||n6o9sV}÷7 ~bJ`؅32kߨ 9Tvj$T9փi^{-o||eRJB00-Ohbϛ+:aҤI(ó;?xvy|܎MZ{oݺV\B !@*L Y|ijbV 9?XutsM5 Y\mv[B  zPT۶HȶAOO?^LlꅥϮ{zˁox`yKx_ot/gޢAh R!RAzY|ٕ8 9-HکU' ӗŪW^~Fbg2ʠ\r}'VvfS_\aL;Z* nY4̩5 g}{X𤭿BX83XJxb~6!|GR*2RցDaFx*pחNMD~Ys͔#]C?}v_hh;1h4y{QN #<4BR.La#=&5B)2Q'Zz bO`GtXpᴦ|^oyKy_yo)ݍ$B lLP$FgZD)!5a'pk(Z/n>G>WuI']}`A>ꮝx2d֔= SSH̹LIȉ}!2mP*P5mcH8t0f'_M3l>z?2/0J xG hr:hD"##d8RJzB8xkFM m'im7k2<d{)LD1B.hW/}7;^L#A8ŲJ2'R#䳙v>oL?-C˛?&[_5gI>w֖(u3z~l6K.]$$RH,ƉHgҔ > .ĺ"m9sw}zhHuwweX88HˉabIH zrK.R.:m6hh,FMm-z[sf7]Uf4Xli;(H'v88x hXġo4CM9=`%VsIf>N1ۯ^L\00icʰDf(Lȉ)Jth衳vFS= tPWWǬYHSW1:IOQB$B!.7mtB4vye=VIea('ŶB= 2#)ʹ!,UUQnXr#2?P14B>M>aJMnnTu+iFJ)ՙgJ)QTa0y:Nfɤ)bx߾Y3g#"~:ZaGjȦSXv!zO-/R V4irv<4B0 ab[&!'LMMYײPNcJsX;dbZ;( s L_xLR,réT#@?^|}C!01-0m۶D"ĪOat.dC)L gMC*;{l?!N?FP*dQR]we <`gJ@9].Xu!{vPĢ1"q0 d T#TWijNP _,12c6:NVnLرIw2=~l  @>P] dК'D,*!G"ئT(P<pX3Ǜeno hlײq[.lP`h;~X*{>8SkWEm"e(yLDˉnZrW(KGS8AQg!Dr"Kh@^wxIh\$$}}xǔ M&d)L%1 > q}H۟b=Ert8 qw@Y?Tn2FDF/؅EoR^؞!NPH5/] C#lٲ#{M6;@o[*P`]A~p] VsnL{㵤NgŴ(Xrɕ<myP'n!; %ʁ~p^1rpE?fW<>]mXp!M`(X0}hٽ{ӃdC:zh @ˊ3=<R4 -pshf4.rB$bQb1vzF)s e?| hcY] f9M= <,JM\18ؿ=ם7[IZwƓɁᡁ|. qy"zh7=r@1=qW{3pl+` '8ZA7+Up-&q` _J5oBJ{>&u'(1~=uU2AVyKȠhLPh%h}kWLYX5|'Ɣ6M7^7wY=FIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-webcam.png0000644000175000017500000000525310177525045025425 0ustar hehePNG  IHDR00WbKGD pHYs  tIME ' 8IDATh[luȹƆI *RU!T^mB%HU}內jU!JS( +Ilo`xo3s;}lL$v%TӎF{fΜnpCn !W}'d&9W"2Xĉ,R 뺪RÇ5"@:^br5ݻ7 aq |<JÇ,kkVeY^~W^qWxٲ,4Mkoٲ%ܶmۆ\.G*kZJ%GaJ6oLTZ-3?ηhhRb$ vݶcǎ|I>R uño%c&l)<3seML Bh1 ^.cYu:k!ƍֻp5Im7ߎa[NŶl-YXRJLdhh OLbJm#(lmZBy̮M :L@@ׅ$IR8C"i[s0 )5$ t]c5@:S B( 0 Y~J(Xx"BiyӳsTku*[6m86ƹ3gh6fٹs֮,JlxAr5 o %Vٸ3gP4sssp7m"m77 C0h!yE]X)0u]?[oǩX:?{jJ^VЕ!˿/099[ _Bv?̩%KWW؃0 MڎC*u8-ٳgw}7 ↁR C7BCӴ:v Y@[:vꠥnm/LMM166F&nZ8RJ3`ƍf|qЗ4ߡo~jizLr$ Ο?ۋmu]<󸾏$) u〷0̰+Rhך!9=>e[xGIJ\|o7v ݅CØ44;Kz$ $BHs %_^^nJ"I=W=$<[!溾UV _N%@a Ӥ}=4LOV,0 LBJkiICm[> c3}:imXZi!r]F/VV+B"rgZt&-ViI -2ܣ]iT )~˲GW%k>"+btu**bѷF)5i"VwFw:45w͎;HR=zF&%N: XL~] [5MR(iJ)"gbbt:MX ` ۷STy9yna8#|O)5La8}ߟx]@|8!JJ|G4yFGG[uxiKСCOk69-i,( /ǹ曗REab6aP MNNrqjbOU*$ !4!D, CCBh|kycތX Oӑ|xphT*.my1cuāˈȥ8w9 ;ud`G@2w\z[C*#^,{3oGxE+*Emqz G7ܐO~?mIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-wifimonitor.png0000644000175000017500000000333010071227734026524 0ustar hehePNG  IHDR00WbKGDIDATxKTUzwwAE@ZlĀqJ2$..\tb2_w.gvЄd@'3mS@즊)꺏sqQ޺u~bC—[u^{|pnMK2{콕̏o%9y2/sk\ٵYMb i]kj"o&ҙ>tQoN@$t8J7ۗi'%ie4D*ܴ%^$zy%  R,cf`"!i Hd@ 8QJa&<;ҕ(PJD^ `Oz_88ʥً (kLe76{up ߿C Q_tLʦow]۶9|07aYJJD 2->DzT_N\EJ!DKs۶V>=ѣ7{Q{(U o|h Dt1YPJu]ǡX,"M7?y_W_҃ L3р$szl6KX$NzGiBJ۶m;mR4TXnRJ8H)yaܫ}m6D_ad4_[n>lqDi @J<~*GINqTt:z_#O`/exw) o |uV} )[PI[]=[259Ͽ ˱1 kP>3eܷ7KWTc^4۶PXX ۶5C?6i mB)_2-l q $RIlBJIݴ˶8y7qÎL[dM zw'0 ė`J)4MCu\4?ݪao-QAd~ `NS;sGn_!D5]GuP Bwͷœ$q4}R~=T ҿ]-?pC@z;%JtQDj1)%D-0?jiaT)Ž;oO|Yo̻nN84CDҜc6l^5J PԡS3~2XMhi Tu-lQmizSV|?',+MldxZ޶vBiZ9rJ};eY8i͵Ez\0jdҩn3>>̋NZj&#ye I.jlr^1N.~-|p=I{t !~>ƽ73[9&B*^WyO u6şL: ݷƺc6c-}899MM9VGGGB}g쨏d;,őtDc @Y[qe)]&R2cWR_$+1VH5Э`6?. 5JQ2ף0$e4¡xZX K^łJLR6Vƍ-ߤ(۳I)9 g{bP( %BV\tp$ %I.\5Ň} lI)@\QϺi+`1\?m^l nmk.1]t$ JS{{{7@jgggks=~K׫)tu;U:1v?h%dZp2P/m۶Ͻ ӪIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-windowmenu.png0000755000175000017500000000303510070601557026355 0ustar hehePNG  IHDR00WgAMA|Q cHRMz%u0`:oIDATxb?P4 ȈO^I@ `@`٠4?9_P'@^#(g  ĔJ05 6)jaϟ3hii  (I =g\;`}, L LL@ dLL1f3X "cef %5@^@ 1@b@W @`1<~p*,, r`>E9R`\.HZVif` M</@Jȅ 5h<}G@!4` M60IRX%fD#36k߿d/0.b z 7%tqe486}Ċf1lڴ  zx;;;vC"brO pze8XB #1@`LMO3M *xxx(2X@Xci >>>2<1 &!t1b ~~~Lj@aq=I!=@ 85p /^ ʼ?1:ZPc p6t l_z֭[=;oj5H$ %<r('qy:Ɨg@~$M [}40yPɃb&.@dp%1bF &U21fFŠJ ˗/T@-F9|~JÉu<$l>[FdCA ƀCB,5#XYY :X ;v%D`o߾5Jl =O ! dGrC0&4 #Pw9P3Xer\`z@%?P{ޙqA.yd8ADDѣGXK+JBԜ0ǃhBg@/^ y"AP Fp =F$" zJ?05P{@πH)[=@Jg( Hr<(c a~*2Dd)oĄ?ڑ0*KD~ H?HI%2@ *mQ OIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applet-xmms.png0000755000175000017500000001105710070601557025150 0ustar hehePNG  IHDR02XgAMA abKGD pHYs  ~tIME%-IDATxyU?ުWod! !1D "D$1ptN#(3A #f[dBXCXN{~K۷GWcgsOUWW-Wk-\aj_hsoZ_?XJ|`Rd@Y❻u1 쉷~|E  ~&N4 U,aH`_%Ѡ/\gްhGx8x]?@돓$N&놆zmR 9/ی6 aJ1vE|A!Lu'Km c^ۀzȥ ۢlEQ)W\gzt`K5\ǹ\|9SvΝH~צ7wmg~F|>~jx1Ò7RXy&dZl|nStI.F(cƓ'ocӖݽSe{˯hͺFۥ)994n[;BJ h}s?\aݿ77-D|~uvt}{B[V*Dcu:q&#ĢQ^ܸSkڶB(Qr-x|Iƛ[ $F_\fve9% (òdg o!.0wۛ|Pz)s %w+EyOm)/tKϚ-SᅗwOBog!FHe R&RJ*8sؾ9<N{c dc=^vjB{.*Ɠeg\g/wb`zv}twNdGڬ9`5kh!!)APR61z8-|$So.gsn۴͜5wpgss<֎ùso@H<i.ڮ!$JI%Ƣ7zmURD2fϛeL6Anc7o?`{eͯ?7n/^6ICK* jU;[AZ~hxe-{vs9;-]}]XJuf<…@J9䅷녍hw]4 B()m:(aFcƻ|M\3枨xoC=l*o`(޼ iXe R@&P1ȑX(jҌIS->w6q:ُginn(b(qgKHeaG c)ZD)!5&V._F^ylg7T|^TJɶʟ}q:Xm";v۹c E0뀫550bilN? vCiJyL+xtͅ[wm>N& ?R3l@:2B62L43gQW!_,!PBJI8Z8+c&q]cBA# =cw<у0 G uMXT.RCa|5TV ItzjJuWthk>(\>{kwwXzd:/m۾7 ;PJg4/E&P(P,p]F)";i7vm<6ˤ8|U7]w酇Nd<[Pkk+`hPm.@t_pǏPd29 h@(RXh&h_9zX[&н\-aÃM%^yo\W=\Oݿ(JaZ~L_ &`ܓ@&`S*W)JJ9HBgQ,T(]M߶o;PZ5#6o_έITKѧ{ӆpX" hLӇTڵq{hR':Ig UUbHTV-2q H1cH{H{1C]O\qݷ??pRk҇vd=814!s(%`8/v|/T&JJR(%=F 护r$SY2J$JI'JoNN.gRJ)zz{? 5%W'3 “"_ho=f|'! 'CBa,xDԊ)jhES9aIR(ʥZ vU Vҿ=e/;߶$?sltKۻ㺏lf{RēlPR*oC2e ÇcY~ `رĻhkJ6A>A!'bIIj@?QFB.]+Q-)RO}S/s .vuk”1wu#Hoi4B0 abL }kPaJSOSW}SB[gJB2}|WZ8mDc+G5`5K{߻6C*gՅ\O% 罸 :5 gbeaYPH4Lc}ΜE !LcJ:eRHfttNf0šJ82rLf>fY7:ԓc78Еxa 6{PACB! E$! 0 (hh cִeJ*";vz;uصRh=]oLO'yx:eVQ=zTvH2hMCcH$D4>! LE\ U[w_ [P*hh, ԧ6/+TjPYjMxD\)Vx͸A* PcFb0E(`3 pp]AT`m-ܼrJ.&:ː(ڶ~T1/> 8+OY >fΘgaq} SI C!FH6Hg ym&^y =5BRJ.;جNy%r#5|\.G0L2@j\q]IdS(I 3& \:>@s:=SxT<`|%w >p 5ۡ7DM꠵ hyJjh۬y[׈zK`灪810% X(0?׶. ̞9:}0xO[nIue3,pe/YsZ $.ȼy=2e%ZC;KʐG#XD_B1KRDkS-mۮ p<:Z'xﯤz!p$rirM|b].64(Cb. {P9qpK=^iuBk|/ރ}@D1JJ9I1Y16VWwZ,x6BADZJ-rRv]LH<›*PZ:y1B)XπF  6=Ò. y:Ϡ81R !JF]:8Oa !R@L1~lhCPGk]=/󢷈 >b<{5ȉa/H/ni(ʙX׻`av+xTeÆ9@M"zd\KR@4;){X5,憒1#ƺ#3`Q`:`_cIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-actions.png0000644000175000017500000000671110071234137026002 0ustar hehePNG  IHDR00WbKGD pHYs  tIME9$4<tEXtCommentAdobe ImageReadyh 2IDATxYLT̽wf`fOf"?dU@PMn[7Mِ,yM}[hWjMUF 0 0 sg!nēN9ssܞs{kooO=nܸA ߞ)+++UWWb@&pwo߾0-|~mMOO!\iXi&allx<Ǜ86'S{|w7mtl9հZ;w CNhfڌNxb iFN>Mz=9p^FP;l"5x 9S⋈ dʕD"tj_|ol@ %T/򂄄mmm=`$johhX 7͢bؔOZ[['׮]#6luCA_`mvvvV{{ol6[Ӗ-[8aHbb"y&qݤ; YLNNz G!ńa"HH$""H$yD~6xŲ̙3mj4MJ%ihh uuuݻOo~С?}7srrXaȪUf#.ڵ4MR)i( OMӄaGv} ?̟8qB}V;JjjjHnn.ٵkWoyy{aaa;***bwӧO` لiRTTDj5(d2IHee%$-"ŤR9:Lя&/>|7_~dҥŰlӖk E߱cǺNiss3rss122N)8T* (**‚ xq @Q[n~zvww3===ljZt¦_leek׮Eii).]QDEE!%%+V@zz:N'R F{}qs>hٳgãR覦 ;w;vGee%z=!qVXDH\z EQH$Xhv;Z-z{{q]Bv166`II?655]0&IHP _~D"Ib.\Fajj x<ǒ%K Fxx8~?l BvxvՅ\.*779)r wll{b0 (,,Ğ={`2ja,[ Ӱ`Y4Mظq#l6n70>>\122^0L&nerr/D Y45i;O!j5Z-N'XEZZF# !H Hpi$''b\.0h8h NZ~}AccA?ٮ=;w\xʕe,"++ ccci, "77BGGa Hqz=r@|ZF\\ǡa6T*fsP|4 >==Vq=($&&`ِ[nattt``nX,0sFJdN˲8"xh_?jUUU۶mB@UUT*d2RSSqQL&r ---Z8``(,,Z.\ߏY<B!( ]BOIId].8xš@A !GNN`ddCCC( < D|>ƍ?(BFFV^M6_xQ.Fd>{!?^[[[\PPTIDEEl6 ߇K/ .v100!MRDii)JKKyB1R__szz`D+ToO^ygyaѢE `ժUhĝ;wVT*0 ._ =DpcժU\AAn444Xxm޽an{>Ky8yW\ 1'~?:;;rC4CRzu/^lll4 C+qБK̜O>ٹ%%%0L0s 111(--Ś5k111ׯ_W_LNN *-}F|F6T*?_lٻ:.,;;p8ubaHMMꩭ~h'@ܥO88 SEEENusY"3§W8?(T?22R>555i+Wb͚5>B}kkkۇ !N u؇(X{y]{{ ~ CUdڵF9rj( ^Yő?7N˗/{ɇ(2+u Ѿ/Dyuhe7|3ri=Yi(zERY; UH= O? ^?'_3]qVRIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-amusements.png0000644000175000017500000000706710167764057026547 0ustar hehePNG  IHDR00WbKGD IDATxyp]}?.o$k%b6q KLg55Ǥ!dRSNthZ&@Y KqiPb8X,ٖ$Ko޳w)t̙s{Oo\b|1=7,^C-E\?Щ=3=} ۶mYp+ٟʦ-c@ގ;N?潹MSZ={xk:Y.㉟>so['ZӆRw_  l,90i$q7OH$m̜9U'9v?Է̢S|;;W_}5&?%EB6l8ϯRS}s^z)T*ŗqќAu^dg_ϲ9pSSQv#J z~a{?TBl&>J@@ck~iKT+<j.|g9~|?`>2#i̞5XNt_/ĺA{{;Vl g~3߈`0b7Z֭2h(- .Ȓ#7oNoݺ5lٲ}Qr#i2CGJ384DhԤ4hEX&;%n$J,*;RbM;r P9({ v%A~[.Fӯ 1D!$"ed xh[y ҆m*bg0_FJR m @K0׳wޝ@7p x>H СC/- Cx^`[ P!V>0TSe<7u6& e mD 6X y>IY|,8 gQ2ul븘&llK q-=3KƀcK7H6[`Ѣl۶:BB˗p ( qД5k\6²,,B0hZc(Q"F+R' u]RH1',,nR=2(h"3ڐNQn}Ja.䒫E%<\±--\k$&1qs,?H! ;cYV,8 ԅ*X%`ZT;/xABiIܵp] Jat8e}_@XhZk6(PJj8K .A<b=D?b TkFa #  |PF)1`Y6f@*[)1[O){j~$$MD@D"¿Y%hC%J@}Q11|aЁ $:02;SJ %cB`0#bns9-DĸGuZ(P4Zhm=%\ Wd 1Cd(x B%V3Πf9thV$Y6n܈1@E9蠌aJXr(Ha\PQ]~Rԉ-I70ټt~4qm`*tʕ P__N2|O%L0\272/\в?X¶qRi:O[s=tbgo?abΙ@}\nvq0N~D5xTENTx]u9Q2(#ל 6:bL#mGDK嫧jPAS⛉R&:>9ʚ}QR' dLtZgM93(Xь q7:'o1gjIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-launchers.png0000644000175000017500000000727010071234137026327 0ustar hehePNG  IHDR00WbKGDmIDATx{tU?g:M@dH$Ȉa&:{2,쨳utf==(. g\ACdAA^+ HȃWNU]u41`x=v}Խ\\nL 9@ rfΜOtttENO,Xz9`0?p]!D@@ 믗Ev6vk駟5k۩SļyB'(=zt 0~%IzС@ e˖\`u ^^JKK_RUsqzzzسgPh#0 n P-\{{6d_>μ#9Bss3gϞ)o-7Lnw_yOl뀧me^>̙3gv8q"'Nĉܹ_nlٲYTT޽{r>xq@\#Eɂ dAYYH$8v555:t~@u/۟}}ذa}pډ[n9WǸI&yUUoo߾e{eQ .^瀜P(Ν;V}S)=rk׮=ߵ,k̛7;vp]wаz@eŊM;cƌY+fΜL1FQ"(B!B!D/Ȑ$ie[[۾x<.u].8s挨r6mo9ruuuoB5xƖ啕O޽;.I\@z~EO+**j&hIp\8NdY&X׮] E__4Mtttjqm{=,0]@lgy)J()8r;pbU~[ʁ5s -++˸Bd @FF8 5*,>| uSUJ}ݧw$O?YLIJ,Ea__|,0; 5NMMWbXeI,^f_L6mz]]ݧ-0ayԧ@O!Ki۷-믙&Mə3gvoܸqi?߲e(3%Wz/':)dYB(.Cggg|eժU9!F c)II$XaYq]JKK7.[l ͛k..=T?0JVY3.WJUU]b7ܾ}MqwRnhpB3]Av:c o*еZ2;3E@!ݫQFȗeaf::`ޡ Xqƕ6>fUWW}EH|{>JJ,4MTUMYի_^~"kmy={Si:0 +@):ď'Oe۶m}Ӄ;EQv&OK 'T!3\6Ǖ  b%MoꠧQ<4|_oݺڊeY`iZ*:x"ӧOg+>9ni#ʼn!~Cϟx"E]]]~>3ԹQ<1pyӉ`0H<0rT;)Be EQpO=?Ȥϋ9p?vOEE9K.O{#bΜ9DF#ʙ~t]Ddz{{Yd se˲$)-49<K'4_N`1bg?Yr|+;MsH$B$z'|!^zdY4Mxʙ%EI$:;;Yhg.(((80A|홙߿_===δ ?|9͎R&K؄H$a8ƌùsR"t9JJJO4p*4-eVӹ¢EÇr(ܼuܹ=ng\tOL<]Yl/G%8}4Xaa/3gxyb FiBҶs̜\.2227n=|>4X,$Iرӧz,իWj*yt$!H I$i(woڴMgvix\(444pjjjxgÆ 8N MMMr8~8RA"a>9p;ǎ{# 4-PpGݻ_KD< |q&|;jb1عs'6misa:;;xӊ$*N>u(08%aư+4wم$HZE8QL@FBRZJXNB|e@j~ߘs^_ rŠ8eW22@BDQ,O!C (/yIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-menus.png0000644000175000017500000000640510071234137025471 0ustar hehePNG  IHDR00WbKGDC pHYs  ~tIME 7>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3X HIDATx՚yU՝? ^w@4H#4І bhiŚdfIbfr03bCSbTIt-"AfTp6lc^׷{o= %s9sE:YSrw=X)3ܽ2څpu-.Y`%ff_y?7$L:8ԥNd R"Zo1&EZ~K^q9p]uvuu݈!uHDkz)|>uݠ뺶:A81:;V.3U 8EO#"ٳ}zzzCCaBppkC7GcxQ"cBc2F[6JkmI hak'Okf>x{c'1a>3fΤx,>,&Nmvm{`۶ AlF) ch1Xe"0T kZiz7- q Ӽg -j'dz.XP h_ݻwL&I&$S)~LJ&Lx鴀%B6:$0ݛ:C&^EvY7߰D4@M i$ ƍZc5x0F {jT@ylmIz5c˹|zgډ"V\o'37y'jUxчQ FNP>*c1xKlAa1ޠa &3e,3M,L@Y!H>ܳ;vfknH1f=LH3ޜP0j\ȗ'{ 5$ULE.'AYYfMEavŢ ^/2VRRS36Eژ/ElRF"w *#^!ZfQh<>IҎ;Bӧ-飳(6:ϴCwO/oj)(=N`)`T1 $O0t R$9&KGkg%̸&ptymK:b9wVbG`|7ꩉ.,X"4b?\490g'Co""mobT,ƗRH:x'ShR(3e fqEΉ`Qye ZbWLʥQ6@(Ģ"Wl}d,tL.A,eĕݨ֚ FllMe,\r&Nb̘ fSV^73z v+E90en߶wSW@Cqː4̿ZRT1.j@0hDjTFϜ fRxQ-U`VEyja%ൟl)4:d5T1P(\<9Cz+_7d2رc¸2c9QI?hĞ` mihg]T$SI]o"n`Ŋځs}J6 ]kx !0,RL2f-Be̛7|>eY(ֲZ:ES!.@ U| 8arŊ#o'ƪ@?a,Ro>z{{/ uqq]5`9u]wl|ǥkEkh#Zk1"b61H(Rϱ$N%J;aJ /@>il= vSe<IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-system.png0000644000175000017500000000441610071234137025666 0ustar hehePNG  IHDR00WbKGDekq0IDATx]lwfv]0C-Qh))"E ` D**k֬A)ũSRBgg'RJ6o̵k׸}6t_I)yꩧmy'PWW@{{;Vbڵr9::: &WA;U?U1઱8}}}b1JD"H)D#~ol6[KK6eH)ioo&xu!sׯ_'1::mDQ={6sappJ***ձtRx'Ylg˖-b1+Vw Ú6` W\ellp8oVqAJI}}=D)%+V^Z[[&ȇ~HSSoǏ|rRDdٲexɓ'm 6 x5π-~s]'Nd0 ՃVFss3###ܺujjkkRRSS8d2}l߾:طod//D@V(1.9 Jr 1MMMC"F0b1\tɟW^&LﻮΝ;z*Ѐy Z@,u]\-M(X6,426MFtp09W8?\J)\k:U҇ Z/ԩJ^}m`HNITxmwSZrz7nэfOwX*Qp Qˆg Y | )xT ZB@0ѸF%?Ge}qT)e6`IENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel-applets-utilities.png0000644000175000017500000000555710071234137026364 0ustar hehePNG  IHDR00WbKGD c pHYs  ~tIME& IDATx{pT?w!v,+W1tP ?EQ*ܨN!h^,1IXlI)qwdI.`ww8̞=JJJ8p 8pUt̼ǒ@@=B܍ߞCoSýE #p8ܹ;vpIA>692^IO6֭?zM5Ubwd :&O\tuҡ.·5{nݺPVVf\|Vy##Î#_cTʀא T$ErAjj*񐗗F d7 p+YiBeޒPr!t?;HL[9S]U-H }mpheeek. AO ٬Xl,wޒChp굅Xs{/Ñmbs@TTTTz)`vd~=< TW(0ڻ4:̡WB4奰(W*jѴ&bYt`X酩6<2WuM7>Y۸+H_B0vb-_,C2`ۗ(nΜ:ӴzF2M_C .!-(ay`☁ΈJG `ժd/dPU_´9<74a=onDfYҭ2 ܻyH":B wIMz'ǑУ+}R3of6-@rINw>>COcCN]3cNY\ug--TpT+_[9MZQ>z όnsŘ[̬ -c2ٝojd*`_\S$1twՊETޕ++M@n ].$>!W.^K"[ lGXX$K EX;] V :buSy~`MD? JMLUԋ3[1#Ɔщ9Kǜ.njŮ/lBQos"JX J >-=|>Y^D Z\觋@hO&mTs3N'G\K-tDh<o^";3z5H z#{^HEvoQT sz( QPOUP]X3lҚ/CgwiM7@oBoؐEB$ "hUZѪGۺVkns{NlZ ,Q% !$!!pdL;3ܻgNZt{=sf{g~<_%p ~޼̸A^˗W'+ .TֳO>vtpW#X^)pp#`y@&s-4 Vk9=`?e ]aopU{,*5ZYǏkn2Ϸ4[ .LOUes{[kD c[hxs*yκ۹pFM/C17mP4lTGU]`I H(-f&Y@ZOʦx\NUKMO7O,؜f/J"mf֧i`i>m ։}-{M< RZ.tXɖ&l;ߜ8q.9}u&`.0 ȶ%@8sn-a HT5`8UuG?Eg $Fh}L@:x!D稄uI(FףQ=hDj'I8V2a:~y)~+s@# tu K3J5D#QT)B!L\s4ӧOZRVDQ^1GcR ]7.k< (/0 ph/ꇜ=StĹ6/1-@_"PGzHX!l)%D!^קYf֭ao^^kDw=r$<6?vlZZ„0&aĈC#)M>'qi=̪Uo;e&yL?}A2@З&@w]DiY6:}q)11ȸ)RL?{y%s}:QO-7^7Eʼwi[@-DvhQ(~"Xw@ ]C@JfҤ\<_>'iRJ"(z8<*ٶ22l߱Z6_ϛo`=Orh ۭ*i! )n)%MXuhPNBQkK=`&50.A8^:;:X򻟒/ASc#7m/[(3.# w` XiazkBvQZ q IvÇFӲ]4kX^>z{p/Wq۷O|8RY5$Ra [אh~Y,Zٖ0)F NEQ*@"jÕać46ױuj-~z~<^#'ӇCQ).j<>8U'ˁ7Vj azSZ*׼iS$7$F R [*KļoCy :/^0m{x| 9ʼnsh^SX(z9rQ  OΊ, N%9(.e;xdc̻xnaD19XކM+0zb.1k,\a7C0 oB!1nYƖ}9Rw --̛R`wAUTDUHi`82LNj4++_K"i'UYMbD\Sm%w(PL~,KCK;27%VpH 5u;/ނ@55hl bLLw|JDt]l|sJom^OٴL((&KjnVo*rBm>g鎐30xl!cI0t5`I?#v[qǁLşX:}E2CB&ƪM:IL<)X)x\>4(((]7ys!͛W~.+Y U e+}8~m&O+|dA}Qé:Xp,/a饠Fs{HI,D$RU1_󓝧~}P 6\J5y}kwP¢Bfξ!#ϩ0| [euģۙ=m*;?CG{+pXJ{W+ۃ;IIAA1H=[W@JY1D92],V,iP ?46|ves޶~ڔ^HRk@ȱ:Iڠi0m@aSEei5ЗRpڹ >J(vذ%N)ExӎIA/ ?Z)a s̆MYVX귔=6KV*"wgP҆N-?1Js6tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxoCzXTڮ~®$ (m&i&]ٛi, &EGZmq1HK,[t13K7P0Lu8DZ(cȉ\NC}YjbZr(Ƙ޹l4G,--B@!(A!B!9A1ըzDAoDn?՗w9Kmn|>S{9z$bjjr)F=q\s89GqaEUUAP3`bVtqYj_rZq,׹}w|eCN?ij/!W(s)JCCU6>Hn߫IatVb2꽧@ilɭqE>w{211ΑÇOos`CU7+)^V"AU2W >zaFt7̱Z_[G;bF2Рj`Y/2Қu,I*ir@b?s];WVKbgV3>>so Jk^tW^yJBR! C&''{l^FfE}u~'{sPo/sR.\ŋrpqzIoA+\J219sks>y;} .Z1kLbl7TB8 AksmBo|RDTz6B`J(fw7oޤlnqkE1{(BD8#n_WWQj""*"Eco% P1c; =C75 0 SBCIENDB`PerlPanel-0.9.1+cvs20051225/share/icons/hicolor/48x48/apps/perlpanel.png0000644000175000017500000000623010070603266022674 0ustar hehePNG  IHDR--:bKGD pHYs  #utIME #ؕ %IDATxky.眽/^_v 75BITF*UOJUURUTi (m%)j`Ԁe6oxwǞ/ƻ6~TFf{}ߙ}gD؏ 䃈\W]V_'*=[G* A {OO: Zm^FI))H)I)h񘛤&?BOݾ73==}lzz=RlŽeM~^QZ~; Üko=tw?7-v|{;I$08<{ַ5,+ĞJ'781+/<‰$BЪR+nx}iλ}3:F ɴ$h ~G߸S_~ ,?;>͙  d@Μ.޲~Rk558p%kY9^v|kz:vYOQ(߉A0~j߻Wbͪ~FFÏo2SLۻ+AK!]78, ֮\Q( s(tB16q%H)QJQd S8c瘝Dlz']qnt2Ov1BqjBX((A)a !L Q&IrsSwI4)ZMY)J8<^|M7ojݟAx}z,eG!hMV"Y,M@D[Vn$Icz^O!\!aV:֒I܁ JOǴVs. 4ФEAqIS\aP FZ,j !PsænA#TgmJ9K*'N".VD +myߊ %0!c($D̈́jl8N(m,Rz0gβm6nڸ5k^:H=HɵTe\\*<#K mmo6Fdf Ece\$V(Gx.`:#}O7l`S]^opz4VhAEcL63iBKMEUCf|$P4!=󻺇GXvu\sIї$/) ma0`I R9.$\* I1Ms]iR bxϽNTPlp(brfJNel4mڷوKEb y屝v KkW?][a #AXȧg \Zgoт]̏?,6U0iqobW j"'?\>䲕"]Q|\rD ]IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/0000755000175000017500000000000010353532415015652 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/0000755000175000017500000000000010353532415017322 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/panelpet/0000755000175000017500000000000010353532415021132 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/panelpet/oldwanda.png0000644000175000017500000003130410171572257023440 0ustar hehePNG  IHDR(Wi sBIT|d IDATxwfy{9_lEY  QLRTvql4R"yƙ)Ό83)d?(J,+J˱d"bA]l{Oy˓?ιwJ493~~O}灂$PDD)@% Zy@¿1 |MlDV4J"*$j:У#AFr[H KMz>īa>zc(?{ :v5,cV*OcͫAPxDy/"A!  \4,Z}EtElȥ2-PA>`/k&ÒeDAJ6ilGfY vPv>SV! 2T $sM|@ ӜW3PIr7uE2U834JE^+N H¾W*^kD4 GARk%  ewI&兠I ʃ(mТan;IGB>uduUqUŵ Z,  Q38=DM.4n dR%(Cy 9"=LESJ@N4fq3H4qŜE.gI"|ƃq]#?1$A cVa$BfFK"M+e[m޳]ō&IYFA%W0Q#b!l,/o[)^2i {:4.r(1sC!"ٴ 0$셽x_mN9CSw"FjT7P.(҂PfJ- G=ª:m$Pd莡y ㋷pBu.ť =JQ6} ;\Aż Ͳ)Jm^pɻ6^;}OfPz93|8abLdiDŽ+I03]Lh\֑d7q[cjwcmL@`Cd/ެ4PT ]Y#PǾRAOޣ D'J%ty(D::P&p􉣨{gQa#rnN!{&Y'9@B=6pK`,b,13^y,EBrcQsP F)K)zug-jN-1^ +F:=}QK_~ ~{D(wǀ"=D )fYLq{tv ^EͶ͑cA~յ)F{ufwZ y ԼU0z`h;E2$3>zŋo៻}I3-xd|xZfP"T%, jƢ[SdQ$V (][JSytClLzě>2t$ǖ0*! sBVN L=Jb)ivژv9Pl p 1T^֯ H h}[cA PYBMik bW)`z>%:!YX4F6K }0 (%y܅M ˷fR@p0p[hH&9FQX$@,JdZYly3 &qNZh] v4Q]R>GomF7p~J]+iDM,'>@7_ X񘾣2 y/čOkQz791ˑ&7PN\ūteT u"cێ0 ڃ}oM#A\y^ASnE$.W1GP$#G^_.- AhZ="/1—_NiXԱ%԰Ƚ\/"/.uxO{R hv( aQ#4Z+Z2Њ}VA a8!jBiӥ ISb eI:GZDMܞvfluLHѽ.P--gQ;L,l%E](W膧`c?i%"NycX=@=oI FN%y9ҡ1 1)3D) /[ EWoQ6/\E nU7?EoTa +R-UPhYֿttSOTU)-<7n0h#-sl,,PUB j } Mܰz*=ޕ(#FB8; @Dc%d7\NkuF/hDR VPJ8̐a% oqC`sSƫY5ң\@Nv9KuTXx4n[9Ccn_#(+s 4tڄ>8sXY>yvKʝ\1y`{:B[ %(QnQDNb9xϜ@}jMt^h%h E0G:M̚ǽ|?g1WZ=3 uP 0s:}#P^cz] .xE~} hS? i>:#[#ʝ̤fe/[rDEnpp/U[x/e ˛켾Aj5lq@lb}SOȁ/#{yk n_1Ȋe'^h}4tɵ-L6Gq LQG4R4:Cα=q 3ďgH.p3&;xK9 [oi6(gd[yM;'g>ͷ oeYl$ /5!)&WP i\ =}pՁ⍛98ņo6Z4Mkid8fvۘA' z ~3orCϽo>dAJAgO= >Py[B;y/m - Ř(UL&RѤ{V8EXY2EXX} x C~y.~҇)7[9@Q|6"'NiuF<'|o݈Z+-0F 铴gP&, ߢlӲ3L_xE)QIբ#LweIДu~旪__D@LK\~s]2`aCH;:VBSC>_caNM CCi^ Bu!=]!*v)r RL@[O>oxw^1g>͕oBOK$!=A)_nxUro'aMxٿϵ/6@CuX `<"~ mڐh^݅bG1JZ ~O=σ-D* ۯoQ;럕;w_r˟"d960KM(=g8rE?5NČ-ؾb\G(Gj&A(QfI."L6h-=[h }!0+$=-ʯ O4&ՔsWy~՗+J(oՊ,oS;.Ui쾾'_pKF7ó$v_c*T*BIgCCKDe |u^t _f>yO6hmZ2c ?/@>b>seds9QeH{xJAx|;A or"9|&_ag_9ͫ?iЧ> ?sޞ[B:!\en4JbZ,l5N<|qmP/PޚW;YoC߅}{Zm?`S8/Y]|7X=efoJy 2"R(QoY?9K&=߲_o&!FeOD.2Xg?ΉńukY\nP/樭UZZBcP8ڋ;R`Uk \k`-! \L q<W}Nwi?e烟a^OS\:鏽̓{ (% 0 Rp**kPc_av&jy*69SIS4eXj9TPzL'Fud\;-⤄ܣ# G0poѿ!;<+_!9ɇL1><%=1Ov9c`LCVROrlwmh>5>;W~/1F-Չ6o^bM?<O~X{U+k"V՟*֬_N_~PlsCH8TȠz㫔vPY"_b]\ǘ]}ÏBgUvbXYhC+%~TT`uc? Q/?̥3.s{y>w׸e[S?K*/y[Nr_nk/qYL*l8.ra+V] .{<ymHФD&4v p|{wt^ JygsD3a%:CÇ)MxM䈘H&՛d8~/5V=wW`)JZi-yo Ct$w/'O;BHfq1NucX3Xf7Fpғv@B,mνGQa0}m *cxxW}9VN^\!zHn`1a#ſtݰBGu`T%!a/nC$sn!La]EazQfת=Tޣ 9@9\O=~5" 3Ϭa7n"F> oB BE񽨚23Kh4wQL)-=c3} v#':A,(~r#~;up{)G $(,`4Sh{mA?JΊ1y2NUMYw..(M.|#D_(gnC_zΡmko>B1(fНy}bQՉ:ۼtR4U8$;9' Ž)n(+Ca[y|so}?heAH hJԧ[o/ QF}$ؤ4 JŻ}6?@\e|!UBC2sg 魾Y% n/{jaz)&s9COsua s [6T &Kw/3qW ZN46 c4% G1y179IN]gsGr;ʜu٭a.dFI?? - Acp[_I&d.mt=+ф5O'zCq \5ECtN}讼^A.,qwrVބ$UB 씌?jLC>Ǚyp^d/}n=~X{{G>:GĻyTbRzuvT7E&uCi=3 oI TZ2_$liޅ7JBo`_Ʀ ~\D3yCfÓHx^¸G *j".Zt=,ծo6.}G8Z-)݅U_įa4Jw)cTQ"A0IS0晤O qnF7=v$fG>'O!j)h.З#o m')#ѶG50Y .d4q5ӄg?}dCxyf~"nhZ8/ttY^Db\J,}RK-1s:HnFӊp^;p2N&n'+ֆ'~de~k̽27XKDȇL54I?1*Db{@t(m+,5 \¿[5Jݢy͊hEuus !#? /C5PEWf 2^8Cv2uBz 7'UB,hVqac/~3T -5oZ!{ dcP)I(:T= CkA$8O$4)5#)YMTHQ/&HyZsL66 TCu0<5+dw&RlPHw):#^܅W1:V!UoFx$f^̱ժE̵nQu}A歾D Y=7x}FE*ޕ9ʋ޽x$uEޛp㵣|ZnW0\>ŔK4@:{cLʈX }h#3/"hl@#N-ʪIBp#^8$R@M{qr: Q*z^v"Ũ(L"zr#kBn0F(Gl {'v+$Dcѫ3 ) I `Jk66Ģcw!z$E\oF.V1m$@h#l+&0Ş\ښ7)NA*VUr4 X̡9%1^T:-DXmQUN%hH*P `i?z sfd&$- =Rj]xMA<ډ@LUu9Q<{y*Լ 4vYR[;u& }vs͇o1tW*/$&,Ѵ ۤC)ocfpK%`0Q;إ9Y& C{RUlR82td6oՐ8TWzQJN=rt?F틤^٣C fXZxe]eEQƏ.'DedZ0k^rgB1*!wOˬ=*U> /_&5qE2-|bI s\_ &F+Ek#&5^ϾѤGBXgFZ Yxx1(k7;"l;;y`^j>ZjcϣW{t~b;#i "0O(@hV 4ObZ $AvƸqAtU9;F+7_8OO]ZQRU M;80'R ;Dȝm6fm;5)AʻiTEFIl8 G S B5FHh?pZ؝Fːf_]cwW}b6mSZӇXOLQ 6ܾH֡«EjMaP"&C[SjbBW~-}$@BFV|xtO³W[h n ?v ;贇fR;հPD3&n{s%Y]O>?@'+}ԥ! Dr 1acN-ëTbPF$QJa%MH ΈaH:'IFL"vq뫡&C1?K]Bq b%b:@7ic&G%.Ô^X $BIr|.aLS((UWhHz3-Au{J+CY#tV%yVCۀWcd/ĎXL1g_fqkE'47Xh0:q<&G%9Bh =DMPƠy<"r(UTyuH!"W]hfbqkc*[!*bT -w*3;y+NнÔ/]@۔MwfL_YG*)2AFӪή㡫i82P St`2*P+ Aw5+11+QFC$&JG̣7q0 Nc @/qUK9u s&eU9=Oqd$'khҙyr_&z]TNJմ?p|9l {Vּ Z39PWFlUU-]e#´| ]l@A4=bD "ո?/bA<»a:#{} Il AđV: \Lc EYzb%&)o^FO,:Γ_[M)u >yUvװhJBU>LD#r8Lj4Mg*+sLN&V ${I4%҂ Z_}|>^zc[6magX Y? /qIn>iIgܧsTd7IW94ūGTG _ϩ=c]Ye.JW\50;~8Gqc%@`pEx=#^h:2&9K.n_ߡ/qWC`"eF)` !I_ߣ :OԠq5"joc$v+Py -QG1v3䳅hM^/ެ( K:n<%LUV}9ٚT'Z6fD2-Y#]4nn۰ -a吖$Z-P#^vK6cKXbHj@#ِȀ@>?@` Ga="U|Fc/[xERD f-Y{O>qˀiŦXta`ֱ/˸Usfk L*e }\fCC0zc9maIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/timer/0000755000175000017500000000000010353532415020442 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/timer/alarm.ogg0000644000175000017500000001445410174241246022244 0ustar heheOggSt }>2/vorbis"VOggSt 힕-vorbisXiph.Org libVorbis I 20040629vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳<>@A><=>:<7:7=;9@JKGP744 @svPMA^nn?^_??=EG8q`?N>lߏ/F.o¯CmAYzcE@Z.Wb:Ek \z> tjK>Wհ%̆L7]WZ-7C7m"MTRZr5[{(*(.Q%10|UE˭&kEQ弸|rFmIQR7 >ȪƫWwb0: e}Y$qUY~TUO2L`4I-͚ۢJIdZ ZÍ@}oKM`dmUĂMu+2 F>mUiʤPQU`gtz_- ( d ȕ {r[7? C,]uUy ٴ`#b D|Dܻ\=JG8 )+2tnj) }<2=N~iCǬ+)]|$Kyc5Z[=oB(ld˨Q J9o[/NYب Uj^zS2~{[HmU@ 6 +V*N~:D'uTgm{gc=3p Wѽi@Ypu{/R7_/ nѓ&F(Wg6ީ]]Y%aٮSz^P_w%0h"9J3Eΐ{>؃xvg\NRK!*=P(^ ; SrtQ9o0XDWNꇓ_qmP9Ec>dJ lL@>*khw q繥yV1efNE5 HNع{~j##UX6%[2BW^'؟aA|Qz_P)c"<[3%+>ٴ${t7)IpS rqo*?QϽ] h&pk1opмX  p}Ȕ!8yx&2r @s#}1LcuUq.2}{, pi)r/@R}(]%j˺k#Muoy0 Jɐ *c<#{ 7 08ZƅE:O2e6 P@O4Sw+7 -/spcXEʁaG|6oppƿ(>ɮdŬ|W >7Ȏq[ûpv??g-@A6N - LccTTyAx>}y!\S ytڪEbcnPBmᱷc>Q34Txo iu{hA-A@EKkn^~um I“C#|tZU]wvy-IoFWJ,ڱ_cY ~-Ӧ~hAx o"/n_lR4J3q^ڢc= {:yZ=2Ӫ8{w6̒径P٨壅X@GZiRyZ.x=ԧ2 -j>g{ƪSc=+dʼwڹ.}9C pR_R iSu#D-~ԯR rs<P@&;Y1 @:O_Lx=(UE7U*Jȑʧ^n8]T_wQZ|uˣ7kNj`"kŦfgS~4C7Cpȱ_o8w橾vD{]Om[VrkA{Xۉ)Gl6x,9}Ht,@ȉ-M-s0) RYMoxtL1"PNSH<ȡ'\מ>:1zti$S6kEU=-<>m}܍He۾(`> W"cY]ؼun^t)O[A4JYi, v: Fv:l&6<<|b%|xL8A u biirQ8vնm1ѬG#l%PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/0000755000175000017500000000000010353532415021670 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/broken-0.png0000644000175000017500000000075610173160024024014 0ustar hehePNG  IHDRw=IDATxՔA;_0)pER$6Zf4 B: ̟O@_!M4l-x\%X^7la3 ,̼}oPzzI5\U_@Uj'tVէRxWgqg,fY [nů7bO z]?/ ^r/C o)tEy<߅x>8"a,z \:简=䜻 !"$IҘ|q]bQaa2lQv}X`0(H4L\.bCDZtjޓ$ {Z["HӔ^W{_VAi6JfFZKՊ"h"V*h ZKөd "cޗ숺vТq V!8T"8xrfߏ[8bmNIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/no-link-0.png0000644000175000017500000000130010173160024024065 0ustar hehePNG  IHDRw=bKGDy pHYs  tIME htmDtEXtCommentCreated with The GIMPd%n$IDATxՔkTA?3pWh!".BWI0C|<Tt> ZH B4??p-n_yĈ8վ}wE9jEˋr&kyQ^=+0|ɋ!ɾt `GD.A51qp LWSIo%@AnݾirrZ3N뵭8;칅=v;v&daq@D\kЀNmzADj߼9Ab'Yly8y*zؔül47=ܠthj@͐)j@͘>>jp&V>x$B%5eVEtoj&@L u.%Q#SX0#xQSoY5Չi6T@dҲ`Ni9X_@لG>5l:4 ~f1(0*1^c-O}rlAIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/signal-1-40.png0000644000175000017500000000127410173160024024227 0ustar hehePNG  IHDRw=bKGDy pHYs  tIME u} tEXtCommentCreated with The GIMPd%n IDATxՔkTA?3z!`%ZH, Dr*9 D,=W@^ AEM#b'ZZ^_/bDjw|3-ˋ,/V6ȧ,/篫E;ˋzfyq@o5ˋ迳o66V3{<jBЉOwc q{&@A߸jr^.7uN BU'̝>EN-VL7#@߮ff $H%IS΁13sx8[3,yéBLr:|}qyt$[U;7>.O@GL u.&Q-S~2H =7Ԭ?;ձ9P%oC5OZi/;+(0?M Ve$I?°uLe+Ol~^$$IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/signal-41-60.png0000644000175000017500000000125510173160024024314 0ustar hehePNG  IHDRw=bKGDy pHYs  tIME {tEXtCommentCreated with The GIMPd%nIDATxՔkTA3{h!F0.J*9 D,=W@^ AEM0(zQHa]ۓ{w!9#T;|3}-ˋ,/V6ȇ,/L&gyb&Y^0|&oN ЂЂl~K.=O@oknBn} Akj` 7ڥ-חr}|tgMhQ{ (\86n/fe`٨LCaE & pfҢڣAlêX_isXk0BHlF5s8x_o젂XI٭:9T˵9k-E/lTULPd{rh$t0Uu>Բ/VAj$GTB2ջ%{O)WQ,~J1"c%떓^ѲAҼBoXeh b́(@t&!e/djv?E{Ȝt[IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/signal-61-80.png0000644000175000017500000000120110173160024024307 0ustar hehePNG  IHDRw=bKGDy pHYs  tIME %$}tEXtCommentCreated with The GIMPd%nIDATxՔ?kAwf6*Bb<2D,]ĭM ≅X.E ji7T۝x3{F[͞ٹg9guy1ŹM"͋ӜU i^Ӽ]`-͋{B|i^x}p}pYz~ѯMJ`Ȧ|;4{[W~pA)"s]6$: eI($1Jk!Nǻ.p+K;cK?smE(%saI%.ķ^mL0V:{6dt RBQb%G{Z=lzœV>&h6> ~AHتR `A+(ٛz3k:V9ic[Oj8*G9HR q.|"IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/wifimonitor/signal-81-100.png0000644000175000017500000000106010173160024024365 0ustar hehePNG  IHDRw=bKGDy pHYs  tIME -*(tEXtCommentCreated with The GIMPd%nIDATxՓJA o`{ (2(YX[~A"Vb( vZjvw1$;bD>ġ }IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/0000755000175000017500000000000010353532415020306 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/next.png0000755000175000017500000000077610072263007022003 0ustar hehePNG  IHDRw=gAMA abKGDC pHYs  ~tIME!3{IDATx1OQy]7X,&l!kХЍZjDkh $;LƂ`kk(gkdf$Ӽ9;}p I ~; <S@[BTNJ `w~a@)]9Gݮc67J!ii=yn49W "(s>~k6PAUQQr 0iC jVW`}98/d5@Qkyl\BDQvK㘇#`#^=*B=baq)~ecӴ0@ALTh6x{]~9lvuQamǜzl"u'0g_}b?u/ IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/pause.png0000755000175000017500000000055710072263011022132 0ustar hehePNG  IHDRw=gAMA abKGDV pHYs  ~tIME4 TJIDATx1n1EwưWV H&G.7KOi#;_~S|ϗlCK@ 3nf_ι"wN (M `^=fix!^KCOby65U!0jxmӄ&*f`xmlE_Du=EEe=T"ۙ%@D%z.58a>/qݯJfr _IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/play.png0000755000175000017500000000057610072263012021764 0ustar hehePNG  IHDRw=gAMA abKGDC pHYs  ~tIME!%9XxIDATxA.QzӼX !Lwp $CvBf9[W_UŘa6af͢IZ!fbbҍaý 1"4G(}E=`@b &&ׁ/~^PJ74\d9HsppH9zJD YApjSՍ4c9k7WՍm{j79`<ߛnY$4`X~fyIiTS"JU۲+nmGg> dM+PuUy{?&a)IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/stop.png0000755000175000017500000000052410072263016022001 0ustar hehePNG  IHDRw=gAMA abKGDV pHYs  ~tIME%2IDATxA0E!֍GӍӹ"ai?iLϟ|AGl ۽.@ 4-+P硢6[C2y/+:g͌jEu~O˫:%7nFbIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applets/xmms/volume.png0000644000175000017500000000114610072263017022322 0ustar hehePNG  IHDRw=bKGDIDATxOHQ?o3M f^v3CBo$]"B!؃X# !(W]Ib]7"<N}|gAU/ux)<р1`E~un&ėszne~vx3PR.k3$E4g  0s+,%. lN;?!8?5w.MnQ4x|/PZ+6xͫZ-}&S@̎ 46*[U /oT$I?x%G4hf}͝}à Q^Ǐݩi<| hԻ' çiQNxjl06|{7tM ȤO pxg5*||nOf2i_y?j*8tgKbHY\g h.Pe?Q K4K?5㢿DW N3U(kIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/applet.registry0000644000175000017500000000456210177525045020745 0ustar hehe# Plugin Registry file for PerlPanel # Format is very simple; AppletName:description:category. # As you may have noticed, lines with a # at the # beginning are comments. # # When writing the installer for your applet, have # it append an entry to this file. # $Id: applet.registry,v 1.21 2005/01/31 21:59:01 jodrell Exp $ # DEPRECATED IN 0.8.0: About:A button to show an "About" dialog.:Actions ActionMenu:A menu containing useful actions.:Menus BatteryMonitor:Shows the status of your laptop's battery.:System BBMenu:A Blackbox-compatible program launcher.:Menus Clock:Shows the current time on the panel.:Utilities Commander:A button to show a command dialog.:Launchers Configurator:A comprehensive configuration dialog.:Utilitiies CPUTemp:Shows the temperature of your computer's CPU.:System DriveManager:An icon to manage a storage device.:System GnomeMenu:Your GNOME Menu.:Menus # DEPRECATED IN 0.8.0: IconBar:Shows launcher icons on the panel.:Launchers Launcher:Shows a single launcher icon on the panel.:Launchers LoadMonitor:Shows the current CPU load.:System Lock:Locks the screen.:Actions NautilusBookmarks:Launch Nautilus bookmarks.:Launchers NotificationArea:Shows notification icons on your panel.:Utilities OpenBoxMenu:Your OpenBox Menu.:Menus Pager:Displays your current workspaces.:Utilities PanelPet:A friendly creature to keep you company.:Amusements # DEPRECATED IN 0.8.0: Quit:A button to close the panel.:Actions RecentFiles:A button that shows files you've recently opened.:Launchers # DEPRECATED IN 0.8.0: Reload:A button to reload the panel.:Actions RunMe:A simple command line.:Launchers ScreenShot:Capture images of your desktop.:Actions Separator:A separator.:Utilities SetiAtHome:A Seti@Home status monitor.:System ShellManager:A simple launcher for SSH sessions.:Launchers ShowDesktop:Show or hide all the programs on screen.:Actions # DEPRECATED IN 0.8.0: Slot:A socket for applications which support the XEMBED protocol.:Utilities Spacer:A spacer.:Utilities Tasklist:Lists the programs currently running.:Utilities Timer:Set an alarm.:Utilities Trash:An icon that can be used to trash files.:Utilities Volume:Controls speaker volume.:System Webcam:Displays a webcam image.:Amusements WiFiMonitor:An applet that shows your current wireless signal strength.:System WindowMenu:A menu containing currently opened windows.:Utilities XMMS:An applet to control the XMMS media player.:Actions PerlPanel-0.9.1+cvs20051225/share/perlpanel/menu-arrow-bottom.png0000644000175000017500000000032110070607053021747 0ustar hehePNG  IHDRo&bKGD pHYs  tIME1#tEXtCommentCreated with The GIMPd%n5IDATx] \R_dlS`I3}Ġ r5bJ4IENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/menu-arrow-top.png0000644000175000017500000000032510070607053021251 0ustar hehePNG  IHDRo&bKGD pHYs  tIME2'CtEXtCommentCreated with The GIMPd%n9IDATxe1 _GJq{.-6G .> Zs\*\ċIENDB`PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/0000755000175000017500000000000010353532417016730 5ustar hehePerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/about.glade0000644000175000017500000001255310175031730021040 0ustar hehe About PerlPanel GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END 6 True False 6 True <span size="xx-large" weight="bold">PerlPanel</span> False True GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 0 False False True label2 False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 0 False False True 0.5 0.5 0 0 0 True True True label1 False True GTK_JUSTIFY_CENTER True False 0.5 0.5 0 0 0 False False 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/applet-error.glade0000644000175000017500000001507510125536431022347 0ustar hehe Error GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True False 12 True gtk-dialog-error 6 0.5 0.5 0 0 0 False False True [DYNAMIC] False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True True 0 False False True True False 0 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 True Show Details False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 label_item 0 True True 0 False False PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/applet-install.glade0000644000175000017500000002716310125045602022660 0ustar hehe Install Applet GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 1 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True GTK_RELIEF_NORMAL True -5 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-ok 4 0.5 0.5 0 0 0 False False True _Install True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False True GTK_PACK_END 6 True False 6 True gtk-dialog-question 6 0.5 0.5 0 0 0 False False True False 6 True 0 0 0 0 0 0 0 0 True <span weight="bold" size="large">Install an Applet</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 6 True Location: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True True 0 True * False 0 True True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False False 0 True True 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/calendar.glade0000644000175000017500000016162710227475252021517 0ustar hehe window1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 6 True False 6 True True GTK_CALENDAR_SHOW_HEADING|GTK_CALENDAR_SHOW_DAY_NAMES 0 True True True 0 0.5 0 1 0 0 0 0 True <span weight="bold">Events:</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True True True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True 0 True True True False 6 GTK_BUTTONBOX_END 0 True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-remove 4 0.5 0.5 0 0 0 False False True _Delete Event True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 True True True GTK_BUTTONBOX_END 0 True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-add 4 0.5 0.5 0 0 0 False False True _Add Event True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 True True 0 True True Add Event GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True 0.5 0 1 0 0 0 0 0 True gtk-dialog-question 6 0.5 0.5 0 0 0 False False True False 12 True 0 0.5 0 1 0 0 0 0 True <span weight="bold" size="large">Add Event for %Y-%m-%d:</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 3 2 False 12 12 True Time: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True 0 0 0 0 0 0 0 0 True Notes: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 1 1 2 fill True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT 1 True True True False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 1 2 1 2 expand|shrink|fill expand|shrink|fill True 0 0.5 0 1 0 0 0 0 True False 6 True True 1 0 False GTK_UPDATE_ALWAYS False False 23 0 23 1 10 10 0 True True True : False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True 1 0 False GTK_UPDATE_ALWAYS False False 59 0 59 1 10 10 0 True True 1 2 0 1 fill fill True Reminder: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 2 3 fill True False 0 1 2 2 3 fill fill 0 True True 0 True True 0 True True 0 True True Reminder GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True 0 0 0 0 0 0 0 0 True gtk-dialog-info 6 0.5 0.5 0 0 0 False False True False 12 True 0 0 0 0 0 0 0 0 True foo False True GTK_JUSTIFY_LEFT True False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 0 0 0 0 0 0 0 0 True True bar False False GTK_JUSTIFY_LEFT True True 0.5 0.5 0 0 0 True True 0 True True 0 False False 0 False False Edit Event GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True 0.5 0 1 0 0 0 0 0 True gtk-dialog-question 6 0.5 0.5 0 0 0 False False True False 12 True 0 0.5 0 1 0 0 0 0 True <span weight="bold" size="large">Edit Event:</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 3 2 False 12 12 True Time: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True 0 0 0 0 0 0 0 0 True Notes: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 1 1 2 fill True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT 1 True True True False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 1 2 1 2 expand|shrink|fill expand|shrink|fill True 0 0.5 0 1 0 0 0 0 True False 6 True True 1 0 False GTK_UPDATE_ALWAYS False False 23 0 23 1 10 10 0 True True True : False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True 1 0 False GTK_UPDATE_ALWAYS False False 59 0 59 1 10 10 0 True True 1 2 0 1 fill fill True Reminder: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 2 3 fill True False 0 1 2 2 3 fill fill 0 True True 0 True True 0 True True 0 True True Delete Event GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-delete True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True gtk-dialog-warning 6 0 0 0 0 0 False False True False 12 True <span weight="bold" size="large">Delete Event for %Y-%m-%d %H:%M:</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True Reminder text False False GTK_JUSTIFY_LEFT True False 0.5 0.5 0 0 0 False False 0 False False True Are you sure you want to delete this event? False False GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False 0 False False 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/configurator.glade0000644000175000017500000014247510151611613022435 0ustar hehe PerlPanel Configuration GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False 200 400 True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True True True True GTK_POS_LEFT False False 6 True False 0 True <span weight="bold">General</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 5 2 True 6 6 True Size: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True True 0 True top True True bottom True 1 2 0 1 True Position: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True 1 0.5 0 1 0 0 0 0 True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 100 1 10 10 1 2 1 2 fill fill True True _Autohide True GTK_RELIEF_NORMAL True False False True 0 2 2 3 fill True True E_xpand True GTK_RELIEF_NORMAL True False False True 0 2 3 4 fill True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True Stop windows from covering the panel True GTK_RELIEF_NORMAL True False False True 0 True True 0 2 4 5 expand|shrink|fill expand|shrink|fill 0 True True 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True <span weight="bold">Theme</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True False 6 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True Icon Theme: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True here is a list of items 0 True True 0 False False False True True False 0 True 0.5 0.5 0 0 0 True True True Panel False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False tab 6 True False 6 True <span weight="bold">BlackBox Menu</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 6 True True Control items in menu True GTK_RELIEF_NORMAL True False False True 0 False False True True Applications in a submenu True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True <span weight="bold">GNOME Menu</span> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True True Control items in menu True GTK_RELIEF_NORMAL True False False True 0 False False True True Applications in a submenu True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True <span weight="bold">OpenBox Menu</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 6 True True Control items in menu True GTK_RELIEF_NORMAL True False False True 0 False False True True Applications in a submenu True GTK_RELIEF_NORMAL True False False True 0 False False 0 False False 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True <span weight="bold">Action Menu</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True Put a "Close Panel" button in Action Menus True GTK_RELIEF_NORMAL True False False True 0 False False 0 False False False True True False 0 True 0.5 0.5 0 0 0 True True True Menus False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False tab 6 True False 6 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False True True 0 True True True Drag and drop items in the list to move them. False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True GTK_BUTTONBOX_DEFAULT_STYLE 0 True True True gtk-add True GTK_RELIEF_NORMAL True True True True gtk-remove True GTK_RELIEF_NORMAL True 0 False True False True True False 0 True 0.5 0.5 0 0 0 True True True Applets False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False tab 0 True True PerlPanel: Add Applet GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True 450 350 True True True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False False 0 True True 6 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-add 4 0.5 0.5 0 0 0 False False True _Install Applet... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False False PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/cputemp.glade0000644000175000017500000000723010066773274021416 0ustar hehe True CPU Temperaure GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 16 True Display temperature in: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True Celsius Fahrenheit Kelvin 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/drivemanager.glade0000755000175000017500000002672110143452630022400 0ustar hehe Device Properties GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True 0 0 0 0 0 0 0 0 True gtk-dialog-question 6 0.5 0.5 0 0 0 False False True False 12 True 0 0 0 0 0 0 0 0 True <span weight="bold" size="large">Device Properties</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 2 2 False 12 12 True 0 0.5 0 1 0 0 0 0 True Mount Point: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 1 0 1 fill True 0 0.5 0 1 0 0 0 0 True Type: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 1 1 2 fill True False 0 1 2 1 2 fill fill True False 0 1 2 0 1 fill fill 0 False False 0 True True 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/item-editor.glade0000644000175000017500000002666210170466455022171 0ustar hehe Launcher Properties GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 350 True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True 5 2 False 12 12 True Name: False False GTK_JUSTIFY_LEFT False False 1 0.5 0 0 0 1 0 1 fill True Comment: False False GTK_JUSTIFY_LEFT False False 1 0.5 0 0 0 1 1 2 fill True Program: False False GTK_JUSTIFY_LEFT False False 1 0.5 0 0 0 1 2 3 fill True True True True 0 True * False 1 2 0 1 True True True True 0 True * False 1 2 1 2 True 0 0.5 0 1 0 0 0 0 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 1 2 3 4 fill fill True True Launch Feedback True GTK_RELIEF_NORMAL True False False True 1 2 4 5 fill True Icon: False False GTK_JUSTIFY_LEFT False False 1 0 0 0 0 1 3 4 fill fill True True True True 0 True * False 1 2 2 3 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/menu-editor.glade0000644000175000017500000002774610044477225022200 0ustar hehe True Menu Editor GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 600 450 True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL -6 True True True gtk-ok True GTK_RELIEF_NORMAL -5 0 False True GTK_PACK_END 8 True True 150 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False True True True False True 3 3 False 8 8 True Name: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True True True True 0 True * False 1 2 0 1 True Command: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True True True True 0 True * False 1 2 1 2 True True GTK_RELIEF_NORMAL True 0.5 0.5 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 2 3 1 2 fill True Icon: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 2 3 fill True 0 0.5 0 0 True True GTK_RELIEF_NORMAL True 0.5 0.5 0 0 1 2 2 3 fill fill False False 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/pager.glade0000644000175000017500000001256110122605310021014 0ustar hehe Pager Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END 6 True False 6 True 0.5 0.5 0 0 0 True True True 0.5 0 1 0 0 0 0 0 True False 12 True Number of rows: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 100 1 10 10 0 False False 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/screenshot.glade0000644000175000017500000002032210034353565022103 0ustar hehe Take Screenshot GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False True True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL -6 True True True gtk-save True GTK_RELIEF_NORMAL -5 0 False True GTK_PACK_END 6 True False 6 True 0.5 0.5 0 0 True GTK_SHADOW_IN 6 True 0.5 0.5 1 1 True 0.5 0.5 0 0 0 True True True False 6 True File: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True False True 0 True * False 0 True True True True True True True GTK_RELIEF_NORMAL True 0.5 0.5 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False False 0 False False 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/setiathome.glade0000755000175000017500000003571010043563531022076 0ustar hehe True Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False True True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL -6 True True True gtk-ok True GTK_RELIEF_NORMAL -5 0 False True GTK_PACK_END 6 True 4 3 False 12 12 True Location of Seti@Home data: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True True True True 0 True * False 1 2 1 2 True True GTK_RELIEF_NORMAL True 0.5 0.5 0 0 True False 2 True gtk-open 4 0.5 0.5 0 0 0 False False True _Browse... True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 2 3 1 2 fill True Seti@Home Account E-mail address: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True True True True 0 True * False 1 3 0 1 True True Check on remote host (requires SSH) True GTK_RELIEF_NORMAL False False True 0 3 2 3 fill True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 2 2 False 12 12 True True True True 0 True * False 1 2 1 2 True Remote host: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True Remote user: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True True True True 0 True * False 1 2 0 1 0 True True 0 3 3 4 fill 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/shellmanager.glade0000755000175000017500000004544410172517173022407 0ustar hehe Connect to remote host GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True GTK_RELIEF_NORMAL True -5 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-execute 4 0.5 0.5 0 0 0 False False True Co_nnect True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False True GTK_PACK_END 6 True 3 2 False 12 12 True User: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 fill True Host: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 fill True Port: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 2 3 fill True False False False True True True True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 0 1 True False False False True True True True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 1 2 True 0 0.5 0 1 0 0 0 0 True True 1 0 False GTK_UPDATE_ALWAYS False False 22 1 65535 1 10 10 1 2 2 3 fill fill 0 True True Connection List GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True 300 300 True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END 8 True False 8 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True True False True 0 True True True GTK_BUTTONBOX_DEFAULT_STYLE 0 True True True gtk-delete True GTK_RELIEF_NORMAL True True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-go-forward 4 0.5 0.5 0 0 0 False False True _Send RSA Key True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False False 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/tasklist.glade0000644000175000017500000002127410142700556021567 0ustar hehe Tasklist Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END 6 True False 12 True 0 0 0 0 0 0 0 0 True 0.5 0.5 0 0 0 False False True False 6 True 0 0 0 0 0 0 0 0 True <span weight="bold" size="large">Tasklist Preferences</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 6 True Minumum Width: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True 1 1 0 0 0 0 0 0 True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 100 1 10 10 0 True True 0 True True 0 False False 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/timer.glade0000644000175000017500000003423410173764415021061 0ustar hehe Timer Properties GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-stop True GTK_RELIEF_NORMAL True -6 True True True GTK_RELIEF_NORMAL True -5 True 0.5 0.5 0 1 0 0 0 0 True False 2 True gtk-refresh 4 0.5 0.5 0 0 0 False False True _Reset True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True True True GTK_RELIEF_NORMAL True 0 True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-go-forward 4 0.5 0.5 0 0 0 False False True _Start True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 False True GTK_PACK_END 6 True False 6 True 0 0 0 0 0 0 0 0 True 0.5 0.5 0 0 0 False False True False 6 True <span weight="bold" size="large">Timer Properties</span> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 0 False False True 2 2 False 6 6 True Minutes: False False GTK_JUSTIFY_LEFT False False 0 0 0 0 0 1 0 1 fill True Seconds: False False GTK_JUSTIFY_LEFT False False 0 0 0 0 0 1 1 2 fill True True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 60 1 10 10 1 2 0 1 True True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 59 1 10 10 1 2 1 2 0 True True True Sound Alarm True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 0 True True PerlPanel-0.9.1+cvs20051225/share/perlpanel/glade/webcam.glade0000644000175000017500000002634610200171554021167 0ustar hehe Webcam Preferences GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 6 True False 12 True 0 0 0 0 0 False False True 2 3 False 6 6 True Image URL: False False GTK_JUSTIFY_LEFT False False 1 0.5 0 0 0 1 0 1 fill True Update Period: False False GTK_JUSTIFY_LEFT False False 1 0.5 0 0 0 1 1 2 fill True True True True 0 True * False 1 3 0 1 True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 2 3 1 2 shrink|fill expand|shrink|fill True 0.5 0.5 1 1 0 0 0 0 True True 1 0 False GTK_UPDATE_ALWAYS False False 1 1 60 1 10 10 1 2 1 2 fill 0 True True 0 True True Webcam Image GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST False True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END 6 True GTK_SHADOW_OUT True 0.5 0.5 0 0 0 True True PerlPanel-0.9.1+cvs20051225/src/0000755000175000017500000000000010353532421013352 5ustar hehePerlPanel-0.9.1+cvs20051225/src/po/0000755000175000017500000000000010353532421013770 5ustar hehePerlPanel-0.9.1+cvs20051225/src/po/de.po0000644000175000017500000002504510353532123014725 0ustar hehe# $Id: de.po,v 1.2 2005/12/25 15:01:39 mmjb Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # msgid "" msgstr "" "Project-Id-Version: PerlPanel 0.7.0\n" "POT-Creation-Date: 2004-04-05 22:08+0100\n" "PO-Revision-Date: 2005-12-25 15:53+0100\n" "Last-Translator: Marc Brockschmidt \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" # lib/PerlPanel.pm msgid "A lean, mean panel program written in Perl." msgstr "Ein schickes, schlankes Panel geschrieben in Perl" msgid "This program is Free Software. You may use it under the terms of the GNU General Public License." msgstr "Dieses Programm ist freie Software. Es unterliegt den Bedingungen der GNU·General·Public·License." msgid "Couldn't load the {module} module!" msgstr "Das Modul {module}·konnte nicht geladen werden!" msgid "Can't open pipe from {prog}: {error}" msgstr "Kann Weiterleitung von {prog} nicht öffnen: {error}" msgid "Error loading {applet} applet.\n" msgstr "Fehler beim Laden des Applets {applet}.\n" msgid "Error: couldn't find applet file {file}.pm." msgstr "Fehler: Die Applet-Datei {file}.pm wurde nicht gefunden." msgid "Invalid panel position '{position}'." msgstr "Panel-Position '{position}' ist ungültig." # lib/PerlPanel/MenuBase.pm msgid "Lock Screen" msgstr "Bildschirm sperren" msgid "Run Program..." msgstr "Anwendung ausführen..." msgid "Take Screenshot..." msgstr "Bildschirmfoto aufnehmen..." msgid "Shut Down..." msgstr "Herunterfahren..." msgid "Are you sure you want to shut down?" msgstr "Sind Sie sicher, dass Sie Ihr System herunterfahren wollen?" msgid "Reboot..." msgstr "Neustart..." msgid "Are you sure you want to reboot?" msgstr "Sind Sie sicher, dass Sie einen Neustart durchführen wollen?" msgid "Configure..." msgstr "Konfigurieren..." msgid "Add To Panel" msgstr "Zum Panel hinzufügen" msgid "About..." msgstr "Info..." # lib/PerlPanel/Applet/ActionMenu.pm msgid "Action Menu" msgstr "Menü Aktionen" msgid "Actions" msgstr "Aktionen" # lib/PerlPanel/Applet/About.pm msgid "About {name}" msgstr "Info zu {name}" msgid "Sandbox Mode" msgstr "Sandbox-Modus" msgid "Version {version}" msgstr "Version {version}" msgid "Author:" msgstr "Autor:" msgid "Using Perl v{perl_ver}, Gtk+ v{gtk_ver} and Gtk2.pm v{gtk2_ver}." msgstr "Mit Perl v{perl_ver}, Gtk+ v{gtk_ver} und Gtk2.pm v{gtk2_ver}." # lib/PerlPanel/Applet/BatteryMonitor.pm msgid "No APM support in kernel" msgstr "Keine APM-Unterstützung im Kernel" msgid "The system is running on AC power" msgstr "Das System läuft mit Netzstrom" msgid "The system is running on battery power" msgstr "Das System läuft mit Akkustrom" msgid "The system is running on backup power" msgstr "Das System läuft mit Notfallstrom" msgid "Unknown status" msgstr "Status unbekannt" msgid "BatteryMonitor Configuration" msgstr "Konfiguration BatteryMonitor" msgid "Update interval (ms):" msgstr "Aktualisierungs-Intervall (ms):" # lib/PerlPanel/Applet/BBMenu.pm msgid "Menu" msgstr "Menü" msgid "Error opening {file}: {error}" msgstr "Fehler beim Öffnen von {file}: {error}" msgid "Parse error on line {line} of {file}" msgstr "Syntaxfehler in Zeile {line} der Datei {file}" msgid "Applications" msgstr "Anwendungen" # lib/PerlPanel/Applet/Clock.pm msgid "Clock" msgstr "Uhr" msgid "Date format:" msgstr "Datumsformat:" msgid "Tooltip format:" msgstr "Tooltip-Format:" msgid "Calendar" msgstr "Kalender" msgid "Configuration" msgstr "Konfiguration" # lib/PerlPanel/Applet/Commander.pm msgid "Run Command" msgstr "Anwendung ausführen" msgid "Run in terminal" msgstr "Im Terminal ausführen" msgid "Run with file..." msgstr "Mit Datei ausführen..." msgid "No description available." msgstr "Keine Beschreibung verfügbar" # Configurator.pm Glade msgid "PerlPanel Configuration" msgstr "Konfiguration PerlPanel" msgid "Icon Size:" msgstr "Symbolgröße:" msgid "top" msgstr "oben" msgid "bottom" msgstr "unten" msgid "tiny" msgstr "winzig" msgid "small" msgstr "klein" msgid "medium" msgstr "mittel" msgid "large" msgstr "groß" msgid "Panel Position:" msgstr "Position des Panels:" msgid "Autohide" msgstr "Auto-Verbergen" msgid "Menu icons follow panel size" msgstr "Menü-Symbole an Größe des Panels anpassen" msgid "Panel" msgstr "Panel" msgid "BlackBox Menu" msgstr "BlackBox-Menü" msgid "Control items in menu" msgstr "Kontroll-Schalter im Menü" msgid "Border on button" msgstr "Schaltflächen-Rand" msgid "Arrow on icon" msgstr "Pfeil auf Symbol" msgid "Applications in a submenu" msgstr "Anwendungen in einem Untermenü" msgid "Submenu label:" msgstr "Titel für Untermenü:" msgid "Menu label:" msgstr "Titel für Menü:" msgid "Menu Icon:" msgstr "Menü-Symbol:" msgid "Action Menu" msgstr "Menü Aktionen" msgid "Action Menu Label:" msgstr "Titel für Menü Aktionen:" msgid "Action Menu Icon:" msgstr "Symbol für Menü Aktionen:" msgid "GNOME MenuMenus" msgstr "GNOME-Menü" msgid "Number of rows:" msgstr "Reihen:" msgid "Pager" msgstr "Pager" msgid "Drag and drop items in the list to move them." msgstr "Ordnen Sie die Elemente in der Liste nach Belieben an." msgid "Applets" msgstr "Applets" msgid "PerlPanel: Add Applet" msgstr "PerlPanel: Applet hinzufügen" # lib/PerlPanel/Applet/CPUTemp.pm msgid "Error opening '{command}': {error}" msgstr "Fehler beim Öffnen von '{command}': {error}" msgid "CPU Temperature" msgstr "CPU-Temperatur" # lib/PerlPanel/Applet/IconBar.pm msgid "Add Icon" msgstr "Symbol hinzufügen" msgid "Reorder Icons" msgstr "Symbole neu anordnen" msgid "Delete..." msgstr "Löschen..." msgid "Edit..." msgstr "Bearbeiten..." msgid "Add..." msgstr "Hinzufügen..." msgid "Reorder..." msgstr "Neu anordnen..." msgid "View Icon Directory" msgstr "Verzeichnis mit Symbolen öffnen" msgid "No desktop item editor could be found." msgstr "Es wurde kein Editor für Desktop-Elemente gefunden." # lib/PerlPanel/Applet/LoadMonitor.pm msgid "CPU Usage" msgstr "CPU-Last" msgid "Couldn't open '/proc/loadavg': {error}" msgstr "Fehler beim Öffnen von '/proc/loadavg': {error}" # lib/PerlPanel/Applet/Lock.pm msgid "Lock the Screen" msgstr "Bildschirm sperren" # lib/PerlPanel/Applet/NautilusBookmarks.pm msgid "Nautilus Bookmarks" msgstr "Nautilus-Lesezeichen" # lib/PerlPanel/Applet/OpenBoxMenu.pm msgid "Error parsing OpenBox menu: can't find the {id} menu" msgstr "Fehler in Syntax des OpenBox-Menüs: Menü {id} wurde nicht gefunden" # lib/PerlPanel/Applet/Pager.pm msgid "Workspace Pager" msgstr "Desktop-Pager" # lib/PerlPanel/Applet/PanelPet.pm msgid "Hi, I'm your Panel Pet!" msgstr "Hallo, ich bin Ihr Panel-Maskottchen!" msgid "Preferences" msgstr "Einstellungen" msgid "About" msgstr "Info" msgid "Remove From Panel" msgstr "Vom Panel entfernen" msgid "" "Just a hello from your Panel Pet!\n" "\n" "Bark Bark" msgstr "" "Hallo von Ihrem Panel-Maskottchen!\n" "\n" "Moin Moin!" msgid "Panel Pet: Hello" msgstr "Panel·Pet:·Hallo" msgid "Frames in animation:" msgstr "Frames in Animation:" msgid "PanelPet Imagefile:" msgstr "Bilddatei für PanelPet:" msgid "Choose PanelPet Image" msgstr "Wählen Sie eine PanelPet-Bilddatei aus" # lib/PerlPanel/Applet/Quit.pm msgid "Close {name}" msgstr "{name} schließen" # lib/PerlPanel/Applet/RecentFiles.pm msgid "Recent Files" msgstr "Zuletzt geöffnete Dokumente" msgid "Couldn't find a launcher for files of type '{type}'" msgstr "Starter für '{type}'-Dateien wurde nicht gefunden" # lib/PerlPanel/Applet/Reload.pm msgid "Reload" msgstr "Neu laden" # lib/PerlPanel/Applet/ScreenShot.pm msgid "Choose File" msgstr "Datei auswählen" msgid "Take Screenshot" msgstr "Bildschirmfoto aufnehmen" # ScreenShot.pm Glade: msgid "_Browse..." msgstr "_Auswählen..." # lib/PerlPanel/Applet/SetiAtHome.pm msgid "Completed {units} workunits, {percent}% of current" msgstr "{units}·Arbeitseinheiten beendet, {percent} der Aktuellen%" msgid "Completed {percent}%" msgstr "{percent}% abgeschlossen" msgid "ERROR" msgstr "FEHLER" # SetiAtHome.pm Glade: msgid "Location of Seti@Home data:" msgstr "Pfad zu den Daten von Seti@Home:" msgid "Seti@Home Account E-mail address:" msgstr "E-Mail-Adresse des Seti@Home-Kontos:" msgid "Check on remote host (requires SSH)" msgstr "Auf entferntem Host nachsehen (benötigt SSH)" msgid "Remote host:" msgstr "Entfernter Host:" msgid "Remote user:" msgstr "Benutzer auf entferntem Host:" # lib/PerlPanel/Applet/ShellManager.pm msgid "Shell Manager" msgstr "Shell-Manager" # ShellManager.pm Glade: msgid "Connect to remote host" msgstr "Mit entferntem Host verbinden" msgid "Co_nnect" msgstr "Ver_binden" msgid "User:" msgstr "Benutzer:" msgid "Host:" msgstr "Host:" msgid "Port:" msgstr "Port:" msgid "Connection List" msgstr "Liste der Verbindungen" # lib/PerlPanel/Applet/ShowDesktop.pm msgid "{home}/screenshot.png" msgstr "{home}/Bildschirmfoto.png" msgid "Show the Desktop" msgstr "Desktop anzeigen" msgid "Restore Windows" msgstr "Fenster wiederherstellen" # lib/PerlPanel/Applet/WifiMonitor.pm msgid "Wireless Signal Strength" msgstr "Wireless-Signalstärke" # lib/PerlPanel/Applet/WindowMenu.pm msgid "Window List" msgstr "Fensterliste" msgid "No Windows Open" msgstr "Keine Fenster geöffnet" # lib/PerlPanel/Applet/XMMS.pm msgid "Play Previous Track" msgstr "Vorheriger Titel" msgid "Stop Playing" msgstr "Stop" msgid "Play" msgstr "Wiedergabe" msgid "Pause" msgstr "Pause" msgid "Play Next Track" msgstr "Nächster Titel" msgid "Adjust Volume" msgstr "Lautstärkeregler" msgid "The XMMS applet requires the Xmms-Perl module!" msgstr "Das XMMS-Applet benötigt das Xmms-Perl-Modul!" # menu-editor.glade msgid "Menu Editor" msgstr "Menüeditor" msgid "Name:" msgstr "Name:" msgid "Command:" msgstr "Befehl:" msgid "Icon:" msgstr "Symbol:" PerlPanel-0.9.1+cvs20051225/src/po/en.po0000644000175000017500000001716310071234137014742 0ustar hehe# $Id: en.po,v 1.8 2004/07/02 10:26:39 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # msgid "" msgstr "" "Project-Id-Version: PerlPanel X.Y.Z\n" "Report-Msgid-Bugs-To: gavin.brown@uk.com\n" "POT-Creation-Date: 2004-04-05 22:08+0100\n" "PO-Revision-Date: $Date: 2004/07/02 10:26:39 $\n" "Last-Translator: $Author: jodrell $\n" "Language-Team: perlpanel-devel@savannah.nongnu.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" # # lib/PerlPanel.pm # msgid "A lean, mean panel program written in Perl." msgstr "" msgid "" "This program is Free Software. You may use it under the terms of the GNU " "General Public License." msgstr "" msgid "Couldn't load the {module} module!" msgstr "" msgid "Can't open pipe from {prog}: {error}" msgstr "" msgid "Error loading {applet} applet.\n" msgstr "" msgid "Error: couldn't find applet file {file}.pm." msgstr "" msgid "Invalid panel position '{position}'." msgstr "" # # lib/PerlPanel/MenuBase.pm # msgid "Lock Screen" msgstr "" msgid "Run Program..." msgstr "" msgid "Take Screenshot..." msgstr "" msgid "Shut Down..." msgstr "" msgid "Are you sure you want to shut down?" msgstr "" msgid "Reboot..." msgstr "" msgid "Are you sure you want to reboot?" msgstr "" msgid "Configure..." msgstr "" msgid "Add To Panel" msgstr "" msgid "About..." msgstr "" # # lib/PerlPanel/Applet/ActionMenu.pm # msgid "Action Menu" msgstr "" msgid "Actions" msgstr "" # # lib/PerlPanel/Applet/About.pm # msgid "About {name}" msgstr "" msgid "Sandbox Mode" msgstr "" msgid "Version {version}" msgstr "" msgid "Author:" msgstr "" msgid "Using Perl v{perl_ver}, Gtk+ v{gtk_ver} and Gtk2.pm v{gtk2_ver}." msgstr "" # # lib/PerlPanel/Applet/BatteryMonitor.pm # msgid "No APM support in kernel" msgstr "" msgid "The system is running on AC power" msgstr "" msgid "The system is running on battery power" msgstr "" msgid "The system is running on backup power" msgstr "" msgid "Unknown status" msgstr "" msgid "BatteryMonitor Configuration" msgstr "" msgid "Update interval (ms):" msgstr "" # # lib/PerlPanel/Applet/BBMenu.pm # msgid "Menu" msgstr "" msgid "Error opening {file}: {error}" msgstr "" msgid "Parse error on line {line} of {file}" msgstr "" msgid "Applications" msgstr "" # # lib/PerlPanel/Applet/Clock.pm # msgid "Clock" msgstr "" msgid "Date format:" msgstr "" msgid "Tooltip format:" msgstr "" msgid "Calendar" msgstr "" msgid "Configuration" msgstr "" # # lib/PerlPanel/Applet/Commander.pm # msgid "Run Command" msgstr "" msgid "Run in terminal" msgstr "" msgid "Run with file..." msgstr "" msgid "No description available." msgstr "" # # Configurator.pm Glade # msgid "PerlPanel Configuration" msgstr "" msgid "Icon Size:" msgstr "" msgid "top" msgstr "" msgid "bottom" msgstr "" msgid "tiny" msgstr "" msgid "small" msgstr "" msgid "medium" msgstr "" msgid "large" msgstr "" msgid "Panel Position:" msgstr "" msgid "Autohide" msgstr "" msgid "Menu icons follow panel size" msgstr "" msgid "Panel" msgstr "" msgid "BlackBox Menu" msgstr "" msgid "Control items in menu" msgstr "" msgid "Border on button" msgstr "" msgid "Arrow on icon" msgstr "" msgid "Applications in a submenu" msgstr "" msgid "Submenu label:" msgstr "" msgid "Menu label:" msgstr "" msgid "Menu Icon:" msgstr "" msgid "Action Menu" msgstr "" msgid "Action Menu Label:" msgstr "" msgid "Action Menu Icon:" msgstr "" msgid "GNOME Menu" msgstr "" msgid "Menus" msgstr "" msgid "Number of rows:" msgstr "" msgid "Pager" msgstr "" msgid "Drag and drop items in the list to move them." msgstr "" msgid "Applets" msgstr "" msgid "PerlPanel: Add Applet" msgstr "" # # lib/PerlPanel/Applet/CPUTemp.pm # msgid "Error opening '{command}': {error}" msgstr "" msgid "CPU Temperature" msgstr "" # # lib/PerlPanel/Applet/IconBar.pm # msgid "Add Icon" msgstr "" msgid "Reorder Icons" msgstr "" msgid "Delete..." msgstr "" msgid "Edit..." msgstr "" msgid "Add..." msgstr "" msgid "Reorder..." msgstr "" msgid "View Icon Directory" msgstr "" msgid "No desktop item editor could be found." msgstr "" # # lib/PerlPanel/Applet/LoadMonitor.pm # msgid "CPU Usage" msgstr "" msgid "Couldn't open '/proc/loadavg': {error}" msgstr "" # # lib/PerlPanel/Applet/Lock.pm # msgid "Lock the Screen" msgstr "" # # lib/PerlPanel/Applet/NautilusBookmarks.pm # msgid "Nautilus Bookmarks" msgstr "" # # lib/PerlPanel/Applet/OpenBoxMenu.pm # msgid "Error parsing OpenBox menu: can't find the {id} menu" msgstr "" # # lib/PerlPanel/Applet/Pager.pm # msgid "Workspace Pager" msgstr "" # # lib/PerlPanel/Applet/PanelPet.pm # msgid "Hi, I'm your Panel Pet!" msgstr "" msgid "Preferences" msgstr "" msgid "About" msgstr "" msgid "Remove From Panel" msgstr "" msgid "" "Just a hello from your Panel Pet!\n" "\n" "Bark Bark" msgstr "" msgid "Panel Pet: Hello" msgstr "" msgid "Frames in animation:" msgstr "" msgid "PanelPet Imagefile:" msgstr "" msgid "Choose PanelPet Image" msgstr "" # # lib/PerlPanel/Applet/Quit.pm # msgid "Close {name}" msgstr "" # # lib/PerlPanel/Applet/RecentFiles.pm # msgid "Recent Files" msgstr "" msgid "Couldn't find a launcher for files of type '{type}'" msgstr "" # # lib/PerlPanel/Applet/Reload.pm # msgid "Reload" msgstr "" # # lib/PerlPanel/Applet/ScreenShot.pm # msgid "Choose File" msgstr "" msgid "Take Screenshot" msgstr "" # # ScreenShot.pm Glade: # msgid "_Browse..." msgstr "" # # lib/PerlPanel/Applet/SetiAtHome.pm # msgid "Completed {units} workunits, {percent}% of current" msgstr "" msgid "Completed {percent}%" msgstr "" msgid "ERROR" msgstr "" # # SetiAtHome.pm Glade: # msgid "Location of Seti@Home data:" msgstr "" msgid "Seti@Home Account E-mail address:" msgstr "" msgid "Check on remote host (requires SSH)" msgstr "" msgid "Remote host:" msgstr "" msgid "Remote user:" msgstr "" # # lib/PerlPanel/Applet/ShellManager.pm # msgid "Shell Manager" msgstr "" # # ShellManager.pm Glade: # msgid "Connect to remote host" msgstr "" msgid "Co_nnect" msgstr "" msgid "User:" msgstr "" msgid "Host:" msgstr "" msgid "Port:" msgstr "" msgid "Connection List" msgstr "" # # lib/PerlPanel/Applet/ShowDesktop.pm # msgid "{home}/screenshot.png" msgstr "" msgid "Show the Desktop" msgstr "" msgid "Restore Windows" msgstr "" # # lib/PerlPanel/Applet/WifiMonitor.pm # msgid "Wireless Signal Strength" msgstr "" # # lib/PerlPanel/Applet/WindowMenu.pm # msgid "Window List" msgstr "" msgid "No Windows Open" msgstr "" # # lib/PerlPanel/Applet/XMMS.pm # msgid "Play Previous Track" msgstr "" msgid "Stop Playing" msgstr "" msgid "Play" msgstr "" msgid "Pause" msgstr "" msgid "Play Next Track" msgstr "" msgid "Adjust Volume" msgstr "" msgid "The XMMS applet requires the Xmms-Perl module!" msgstr "" # # menu-editor.glade # msgid "Menu Editor" msgstr "" msgid "Name:" msgstr "" msgid "Command:" msgstr "" msgid "Icon:" msgstr "" PerlPanel-0.9.1+cvs20051225/src/PerlPanel.spec.in0000755000175000017500000000515410227501062016522 0ustar hehe# This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: PerlPanel.spec.in,v 1.8 2005/04/14 14:46:10 jodrell Exp $ Summary: An X11 Panel program written in Perl. Name: PerlPanel Version: Release: 1 Epoch: 0 Group: Applications/Accessories License: GPL URL: http://jodrell.net/projects/perlpanel/ Packager: Gavin Brown Vendor: http://jodrell.net/ #define __find_provides /usr/lib/rpm/find-provides.perl #define __find_requires /usr/lib/rpm/find-requires.perl Source: http://jodrell.net/download.html?file=/files/%{name}/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/root-%{name}-%{version} Prefix: %{_prefix} AutoReq: no BuildArch: noarch BuildRequires: perl >= 5.8.0, gettext Requires: gettext, perl >= 5.8.0, gtk2 >= 2.4.0, libglade2, perl-Gtk2 Requires: perl-Gtk2-GladeXML, perl-Xmms-Perl, perl-XML-Simple, perl-XML-Parser Requires: perl-Locale-gettext, perl-Gnome2-Wnck, perl-Gnome2-VFS Requires: perl-Gtk2-TrayManager, perl-DateManip, perl-URI Requires: perl-X11-FreeDesktop-DesktopEntry, perl-Audio-Mixer, vorbis-tools %description PerlPanel is an attempt to build a useable, lean panel program (like Gnome's gnome-panel and KDE's Kicker) in Perl, using the Gtk2-Perl libraries. %package themes Summary: Themes for PerlPanel Group: applications/Accessories Requires: %{name} %description themes This package contains themes for PerlPanel. %prep %setup %build make PREFIX=%{_prefix} MANDIR=%{_mandir} VERSION=%{version} %install rm -rf %{buildroot} %makeinstall PREFIX=%{buildroot}%{_prefix} MANDIR=%{buildroot}%{_mandir} rm -f %{buildroot}%{_prefix}/etc/perlpanelrc %clean rm -rf %{buildroot} %files %defattr(-,root,root,0755) %doc doc/README doc/README-IL8N ChangeLog %{_bindir}/* %{_datadir}/man/* %{_datadir}/locale/* %{_datadir}/icons/hicolor/* %{_datadir}/perlpanel %{_libdir}/perlpanel %files themes %{_datadir}/icons/Bluecurve/* %{_datadir}/icons/crystalsvg/* PerlPanel-0.9.1+cvs20051225/src/find-missing-icons.pl0000755000175000017500000000361410167764057017435 0ustar hehe#!/usr/bin/perl # $Id: find-missing-icons.pl,v 1.1 2005/01/08 14:03:27 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # This script is run against a source tree and reports what icons are missing # from the various themes available. It assumes that the authoritative list # of icons is the 'hicolor' theme. use File::Basename qw(basename dirname); use strict; my $icon_dir = sprintf('%s/share/icons', $ENV{PWD}); opendir(DIR, $icon_dir) or die("$icon_dir: $!"); my @themes = grep { !/^(\.{1,2}|CVS)$/ } readdir(DIR); closedir(DIR); my $themes = {}; foreach my $theme (@themes) { my $dir = sprintf('%s/%s/48x48/apps', $icon_dir, $theme); opendir(DIR, $dir) or die("$dir: $!"); map { $themes->{$theme}->{$_}++ } grep { /(svg|png)$/ } readdir(DIR); closedir(DIR); } my $missing = {}; foreach my $icon (keys(%{$themes->{'hicolor'}})) { foreach my $theme (grep { $_ ne 'hicolor' } keys(%{$themes})) { push(@{$missing->{$theme}}, $icon) if ($themes->{$theme}->{$icon} < 1); } } foreach my $theme (sort keys(%{$missing})) { printf("The '%s' theme is missing the following icons:\n\t", $theme); print join("\n\t", sort(@{$missing->{$theme}}))."\n\n"; } exit 0; PerlPanel-0.9.1+cvs20051225/src/make-rpm0000755000175000017500000000211210157316205015007 0ustar hehe#!/bin/sh # # A simple shell script to make RPMs from a CVS directory # NB: make sure cvs2cl will work, and that your user has # write permissions on RPM's build directory. # # $Id: make-rpm,v 1.4 2004/12/13 13:43:33 jodrell Exp $ CWD=$PWD export VERSION=$1 TOPDIR=`grep topdir ~/.rpmmacros | cut -d " " -f 2` DIR=`basename $PWD` if [ -z $VERSION ] ; then echo Usage: $0 [VERSION] exit fi echo Writing .spec file: perl -ne 's!^Version:\s*(.+)$!Version: $ENV{VERSION}!g ; print' < src/PerlPanel.spec.in > PerlPanel.spec echo Creating temporary copy of package: rm -rf /tmp/$DIR-$VERSION cp -Rp --no-dereference $PWD /tmp/$DIR-$VERSION cd /tmp/$DIR-$VERSION echo Fixing permissions on pixmaps: find share/ -name '*png' -exec chmod 644 \{\} \; echo Stripping CVS files: find -print | grep CVS | xargs rm -rf echo Creating tarball: cd .. tar zcf $DIR-$VERSION.tar.gz $DIR-$VERSION/ rm -rf $DIR-$VERSION/ mv $DIR-$VERSION.tar.gz $HOME/ cd $CWD echo Building RPMs: rpmbuild --quiet -ta $HOME/$DIR-$VERSION.tar.gz mv -u $TOPDIR/SRPMS/$DIR-$VERSION-*src.rpm $HOME/ rm -f PerlPanel.spec true PerlPanel-0.9.1+cvs20051225/src/old-perlpanel-item-edit0000755000175000017500000002140410137474045017725 0ustar hehe#!/usr/bin/perl # perlpanel-item-edit - a Gtk2-Perl .desktop file editor # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: old-perlpanel-item-edit,v 1.17 2004/10/26 16:15:33 jodrell Exp $ use Gtk2; use strict; Gtk2->init; my $desktop_namespace = 'Desktop Entry'; my $PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); my $namespace = ''; my $data = {}; my $theme = Gtk2::IconTheme->get_default; $theme->prepend_search_path(sprintf('%s/share/icons/hicolor/48x48/apps/', $PREFIX)); my $file = $ARGV[0] or print STDERR "Usage: perlpanel-item-edit [FILE]\n" and exit 1; open(FILE, $file) or print STDERR "Error opening '$file': $!\n" and exit 1; my $line_no = 0; while () { $line_no++; chomp; s/\;.*$//g; s/^\s*//g; s/\s*$//g; next if (/^$/); if (/^\[(.+?)\]$/) { $namespace = $1; } elsif (/^(.+)=(.*)$/) { if ($namespace eq '') { print STDERR "Parse error on line $line_no of '$file'\n" and exit 1; } else { $data->{$namespace}{$1} = $2; } } else { print STDERR "Parse error on line $line_no of '$file'\n" and exit 1; } } close(FILE); my $language = $ENV{LANG} || 'en_US'; $language =~ s/\..*$//g; if ($data->{$desktop_namespace}{Name} eq '') { $data->{$desktop_namespace}{Name} = $data->{$desktop_namespace}{"Name[$language]"} } if ($data->{$desktop_namespace}{Comment} eq '') { $data->{$desktop_namespace}{Comment} = $data->{$desktop_namespace}{"Comment[$language]"} } my $pristine = { Encoding => $data->{$desktop_namespace}{Encoding}, Type => $data->{$desktop_namespace}{Type}, Name => $data->{$desktop_namespace}{Name}, Comment => $data->{$desktop_namespace}{Comment}, Icon => $data->{$desktop_namespace}{Icon}, Exec => $data->{$desktop_namespace}{Exec}, StartupNotify => $data->{$desktop_namespace}{StartupNotify} }; my $icon = $theme->load_icon('perlpanel', 48, 'use-builtin'); my $window = Gtk2::Dialog->new; $window->signal_connect('delete_event', \&save); $window->set_position('center'); $window->set_title('Launcher Properties'); $window->set_border_width(8); $window->set_icon($icon); $window->vbox->set_spacing(8); my $table = Gtk2::Table->new(3, 4, 0); $table->set_col_spacings(8); $table->set_row_spacings(8); my $name_entry = Gtk2::Entry->new; $name_entry->set_text($data->{$desktop_namespace}{Name}); $name_entry->signal_connect('activate', \&save); my $name_label = Gtk2::Label->new('Name:'); $name_label->set_alignment(1, 0.5); my $comment_entry = Gtk2::Entry->new; $comment_entry->set_text($data->{$desktop_namespace}{Comment}); $comment_entry->signal_connect('activate', \&save); my $comment_label = Gtk2::Label->new('Comment:'); $comment_label->set_alignment(1, 0.5); my $exec_entry = Gtk2::Entry->new; $exec_entry->set_text($data->{$desktop_namespace}{Exec}); $exec_entry->signal_connect('activate', \&save); my $exec_label = Gtk2::Label->new('Program:'); $exec_label->set_alignment(1, 0.5); my $exec_button_label = Gtk2::Label->new_with_mnemonic('_Browse...'); my $exec_button_image = Gtk2::Image->new_from_stock('gtk-open', 'button'); my $exec_button_box = Gtk2::HBox->new; $exec_button_box->pack_start($exec_button_image, 0, 0, 0); $exec_button_box->pack_start($exec_button_label, 1, 1, 0); my $exec_button = Gtk2::Button->new; $exec_button->add($exec_button_box); $exec_button->signal_connect('clicked', \&choose_program); my $icon_label = Gtk2::Label->new('Icon:'); $icon_label->set_alignment(1, 0); my $icon_image; my $pixmap_path = sprintf('%s/share/pixmaps/%s', $PREFIX, $data->{$desktop_namespace}{Icon}); if (-r $data->{$desktop_namespace}{Icon} && is_image($data->{$desktop_namespace}{Icon})) { $icon_image = Gtk2::Image->new_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size($data->{$desktop_namespace}{Icon}, 48, 48)); } elsif (-r $pixmap_path && is_image($pixmap_path)) { $icon_image = Gtk2::Image->new_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size($pixmap_path, 48, 48)); } else { $icon_image = Gtk2::Image->new_from_stock('gtk-missing-image', 'dialog'); } my $icon_button = Gtk2::Button->new; $icon_button->add($icon_image); $icon_button->signal_connect('clicked', \&choose_icon); my $icon_align = Gtk2::Alignment->new(0, 0, 0, 0); $icon_align->add($icon_button); my $notify = Gtk2::CheckButton->new('Launch Feedback'); $notify->set_active($data->{$desktop_namespace}{StartupNotify} eq 'true' ? 1 : undef); $table->attach_defaults($name_label, 0, 1, 0, 1); $table->attach_defaults($name_entry, 1, 3, 0, 1); $table->attach_defaults($comment_label, 0, 1, 1, 2); $table->attach_defaults($comment_entry, 1, 3, 1, 2); $table->attach_defaults($exec_label, 0, 1, 2, 3); $table->attach_defaults($exec_entry, 1, 2, 2, 3); $table->attach_defaults($exec_button, 2, 3, 2, 3); $table->attach_defaults($icon_label, 0, 1, 3, 4); $table->attach_defaults($icon_align, 1, 2, 3, 4); $table->attach_defaults($notify, 1, 3, 4, 5); $window->vbox->pack_start($table, 1, 1, 0); $window->add_button('gtk-ok', 0); $window->signal_connect('response', sub { save() if $_[1] == 0 }); $window->show_all; Gtk2->main; sub choose_program { my $selector; if ('' ne (my $msg = Gtk2->check_version (2, 4, 0)) or $Gtk2::VERSION < 1.040) { $selector = Gtk2::FileSelection->new('Choose File'); } else { $selector = Gtk2::FileChooserDialog->new( 'Choose File', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); } chomp(my $path = `which $data->{$desktop_namespace}{Exec}`); if (-e $path) { $selector->set_filename($path); } else { $selector->set_filename($data->{$desktop_namespace}{Exec}); } $selector->signal_connect('response', sub { if ($_[1] eq 'ok') { $exec_entry->set_text($selector->get_filename); } $selector->destroy; }); $selector->show_all; return 1; } sub choose_icon { my $selector = Gtk2::FileChooserDialog->new( 'Choose File', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); $selector->set_preview_widget(Gtk2::Image->new); $selector->signal_connect('selection-changed', sub { my $file = $selector->get_filename; if (-f $file) { my $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($file, 48, 48); $selector->get_preview_widget->set_from_pixbuf($pbf) if (defined($pbf)); } }); my $pixmap_path = sprintf('%s/share/pixmaps/%s', $PREFIX, $data->{$desktop_namespace}{Icon}); if (-e $pixmap_path) { $selector->set_filename($pixmap_path); } elsif (-e $data->{$desktop_namespace}{Icon}) { $selector->set_filename($data->{$desktop_namespace}{Icon}); } else { $selector->set_current_folder('/usr/share/icons/hicolor/48x48/apps'); } $selector->signal_connect('response', sub { if ($_[1] eq 'ok') { $data->{$desktop_namespace}{Icon} = $selector->get_filename; my $new_image = Gtk2::Image->new_from_file($data->{$desktop_namespace}{Icon}); $new_image->show; $icon_button->remove($icon_button->child); $icon_button->add($new_image); } $selector->destroy; }); $selector->show_all; return 1; } sub save { $data->{$desktop_namespace}{Name} = $name_entry->get_text; $data->{$desktop_namespace}{Comment} = $comment_entry->get_text; $data->{$desktop_namespace}{Exec} = $exec_entry->get_text; $data->{$desktop_namespace}{StartupNotify} = ($notify->get_active ? 'true' : 'false'); $data->{$desktop_namespace}{Type} = 'Application'; $data->{$desktop_namespace}{Encoding} = 'UTF-8'; my $changed = 0; my $empty = 0; foreach my $name (keys %{$pristine}) { $changed++ if ($pristine->{$name} ne $data->{$desktop_namespace}{$name}); $empty++ if ($data->{$desktop_namespace}{$name} eq ''); } exit if ($changed < 1 || $empty == scalar(keys %{$pristine})); open(FILE, ">$file") or print STDERR "Error opening '$file': $!\n" and exit 1; foreach my $namespace (keys %{$data}) { print FILE "[$namespace]\n"; foreach my $name (keys %{$data->{$namespace}}) { print FILE "$name=$data->{$namespace}{$name}\n"; } } close(FILE); exit; } # we could do all kinds of clever stuff here, using gdk-pixbuf-query-loaders to get # gdkpixbuf's supported file types, or using file -ib to get the file's mime type, # but they're all suboptimal, so just regex the filename: sub is_image { my $filename = shift; return ($filename =~ /\.(jpe?g|png|bmp|gif|tif)$/i); } exit; PerlPanel-0.9.1+cvs20051225/src/perlpanel0000755000175000017500000000252010033255000015247 0ustar hehe#!/usr/bin/perl # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: perlpanel,v 1.12 2004/04/02 12:18:08 jodrell Exp $ # # are we installed or running in a sandbox? # use lib (-e '@LIBDIR@' ? '@LIBDIR@' : $ENV{PWD}.'/lib/'); use PerlPanel; # # set the values for prefix and libdir: # $PerlPanel::PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); $PerlPanel::LIBDIR = (-e '@LIBDIR@' ? '@LIBDIR@' : $ENV{PWD}.'/lib/'); # # if we're in a sandbox then it's handy to add ./src to the PATH: # $ENV{PATH} = $ENV{PATH}.':'.$ENV{PWD}.'/src' if (!-e '@PREFIX@'); # # start the panel: # PerlPanel->new->init; exit; PerlPanel-0.9.1+cvs20051225/src/perlpanel-about-bg.xcf0000644000175000017500000032552710067034174017556 0ustar hehegimp xcf file^BBl)Ujpeg-exif-data):ExifMM*  (1(2 iFUJIFILMFinePix4700 ZOOMHHDigital Camera FinePix4700 ZOOM Ver1.002002:03:21 15:01:47 Y"'0210au     |0100d2002:03:21 15:01:472002:03:21 15:01:47*d0ddd,ddFUJIFILM 0130  !01FINE R980100+3(;$HH          }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx! ?K?<ᆫ,~moDp"(|v7g{i[ʋ  i$ |ݎk^< aP<=Fa^I1&m:mhkF,qck+{Onx~;H5flB; vRI} 63qtOKZItZnc6-bk[>NKhsռ;^:oAui_E/pY7PHʹBdab,G8ky󠌢ϯQ``;y517z T\R,DwE4<4m؜ ]n]yAh3\WKf8n9#\?^1˝I ݆\0=ο67(}}#~1ÚŃpW`0lW :b O.> X4s al5 >n\H% G`d}**58)v_ipZvۿ/oF[H}G@gVN/Hdqb qWr4x˳?kHEF&uݶ<H]9C}Rx&Imyq@'-+d+ێ[nNטQ-{__v,K{BUGZ~26E{Gs$s1CZY/}GQi_\IfaK\w˹f'.̒ɪiR(eYcfZL::W´fiv`hh92#T燩*s^_EԜ*5aw:,Q j\qjCt7T-(͒b-yOsIsq]x^Ú= }%6q6AMѹ ^xŞ Eq $kgA-#Gv!Ul@3q&2P TV{kѭKEoS,<~zV׽=Kܞbr8\c>HxϷzI?ND\ c j9cČCҪkR\0F{O*PBW{ԍjSJQ Rs>\q ǂ%zqIupd'ݪ%YOT2w>&Ŀ (:9cܜ9S|f4HhUvٗP"<ʒtԴ#o¾Э|xu%lR`UU`^kґ-UT#,d֝oznhr.U.K2[[-^t-B->_Dyq6>Ԁܯ[غ)sv;k(ngt)av,b̗2a\90L+|jO{y,u?е+HInDAbm*2f)4*rou~ւq}=:g<<#Nϔ$1R0$˷㨰VEnU7^/\+·SS} *Xnko%mɎiA ʣ )Ӧ%BEl cb8 IZ2RwӦA9}N[v 53(V:,_^e^|8w7^iͷjO>2$hĨ#’0s7۲ʾ#a1෿z{hi߯$=_2ObyP;H,Ԡ,I4=FPDQU.a2OOֿkŎd@("=đ7|A 5+sis|6pq-=Rp|leR>{E6=*y,YCVz⿷oo|y[ESyA]cHP[wGj~&}<$|'p %YYyq^]mOzZbiF1j{IY5ߣ]w+9O{'xSkf=AeMUoHVR $8O':bV65$EY2`p=qmH#?`۽Nּ 4P]"1D .P085ifi&9}'\H,LB2P)R$ɵ&W]'V6K>ϫ44Wx[[ Ru9TCد3aTGG?>K5}J([:Qؙpp+Ҏ#眜cc+t,>cI78mf&220NΠ4* ^nUNZR&;Tgi^;frs!>۸|ak𿆖島M2C拸7AXM2̪XlFy:S'z_(I)Z?5xkׇK~ҋw,PJva3+ce_;X8tHGEB[p8'Tg)8E^_|fMwo3.8L77!c~c*]6E.,-]aBU51[s4'(O-eǧs=QB8 l}Zo~ɑnEm܆#W¸K* 5 FE}7 Hѫ1'l|f) K؟Zh`&`=ךլW1u#ҙh`J{ ur}p*;tEFq( E{$)$rGrUTsRC=jE i]>fCn~}/iu*{3/UŜ[o_/PI 0Â1y?^ {.u($ )3`TQWVzgN\2\1􋳛 QdP*͑C V^ҡVg~b T'хXZq_S? _xM9A[t21g)u_> B]jcerJ҃y`=;sRT[Ov1XJa_5iO wUhWS`wPzs^x6a76p1yFF*)F>SPS k S.`6۫#')snW?gcEό-MqpdTwH|0 ~]n qѝ~=?љJqu/CnԀFZL7<ioc 6ӽr$y s k>D==*vj_!oWωrwv5KktKrDqWk̤>+\ʌk~KXǝ*}BLq4֫"GfXCnx+ L<;bi2MI8bLUae̱n-[X ÞEDq Rt_߯%Es*{4wxx<_T);WC6-!k{~N ~UeiXrMu kˣUvAkhSaY&-p8į[iGIcbKDaLlbwgsEKvUfYo" 5+-Hf2!) p#`?ξ'}kN~Vms+;̛SO# ~uެs߱ pTaۦ*;VʪszSBw*NwqҘ^HDm{UycDoǮ;Siҍº6A9ퟥ|R>lv C[)+9K qGM-0oᅲݾbUUd$rtGh\zmŋB>Lc5T́ :փz-*6-ldV?`R:*E[?k؇cw?-j:SIut.!-aXuQ&N^}8Pt2El2I28$F>[cKDFgjnlr,BH*( )stwZmu_Z|.ݗ ctAUlrLzb._}m:ioq?|GV״6ɻ85#f z- wZ.2 $a+HǹsM`SfT*hΛ.{GOð aɁ g@px^+<)_ xZ ѡk5}ynU1]Kn߻c.͵( z\D+3 vֽ._0oI{qg4}N+7Bǡj[ynxz喅;ō`}+.'9i3KQsx<UT푊db LvW723?*~؈liqqJ.Zj=ϳVWo3{8I©A31^Szq"͆KK.2[v$ sӶ??-&\XwPc0*(s˂zg ܣu_HR|NgBg+(cvjF1goN9"^Կ~;&fF_%dH\A?iN̿eztG>0񝗇Xi`XVv&ab3zOm5 Pʲ[jX7e|̀$q{c-=>lcӷ~/xCÚ;JA'|1$Qv#%H")D!xcU)ڣt~*Զj^]gJ%ͱBBD2-B9nA{| |T|3+fG^QB5RByh<*:3HM|hJ_.-亷[I9R7c }F)GzZ5#^ϊ98tT{(K^%ll:u0lg,?t.~ZfxaF1N0~2HO\ZQ&"[.0/䜃_jY>)_:>* Ǭ~+#-u\H}Îyjh9Wc?/⨒-6p#f=1_MB !˩!>R8ߎ3׿wNK&vf "SҮB[_[ƺ.Y6o,%Ǹ땯!>Kaky-UUoq٣x~"O)'~UYjмZrFEܲ.V+eoz>ۿ Nlɀb<.lzzۺQ3hzmđM0ʺ>O `|m~ x<~~I7<|ݹׅ8 \Snc4I/|$O~=||5wt|9a(o{iy4rkg=cGK ZZ Eyw6ùQ.@Gӝ|JtO~~1DQQsM uzWg˺Wt:8?%l,#*=NWm7\ײyMsa*0|:[ OKjX !۸޾K&I&SR^?Z&Hx܌z#tCY.r5kO0嗒2_?wV/m5[浂[eq?&8洷6214'U/i+!S {Ux | TX;>i=ğ iӧ]B>nIǾ+HjWO:ʓIFYI coja R2:1kqJ߲OMͻuΟ1%sS'#]fzy9ִvhAcrwa_ҫLTKO1&Fp 98J qQygwom=^NP]'w8LlV'Ze,!*RLD0#gኡQ'+WxBc_)qn{< y_ Ϳ+ gc sw&R<*|Sr"Gu`$\pb+t7׮_j>);%_!dx0@D2CTSI)XR5~:uMŸ h[SȎE$ft8ܧ1=F^ٶ,|dy%A88WvMXlu*z6q}pݮZw9\z nO'rkEVDRT۞ç֛TC犾I*yjpeg-exif-data):ExifMM*  (1(2 iFUJIFILMFinePix4700 ZOOMHHDigital Camera FinePix4700 ZOOM Ver1.002002:03:21 15:01:47 Y"'0210au     |0100d2002:03:21 15:01:472002:03:21 15:01:47*d0ddd,ddFUJIFILM 0130  !01FINE R980100+3(;$HH          }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx! ?K?<ᆫ,~moDp"(|v7g{i[ʋ  i$ |ݎk^< aP<=Fa^I1&m:mhkF,qck+{Onx~;H5flB; vRI} 63qtOKZItZnc6-bk[>NKhsռ;^:oAui_E/pY7PHʹBdab,G8ky󠌢ϯQ``;y517z T\R,DwE4<4m؜ ]n]yAh3\WKf8n9#\?^1˝I ݆\0=ο67(}}#~1ÚŃpW`0lW :b O.> X4s al5 >n\H% G`d}**58)v_ipZvۿ/oF[H}G@gVN/Hdqb qWr4x˳?kHEF&uݶ<H]9C}Rx&Imyq@'-+d+ێ[nNטQ-{__v,K{BUGZ~26E{Gs$s1CZY/}GQi_\IfaK\w˹f'.̒ɪiR(eYcfZL::W´fiv`hh92#T燩*s^_EԜ*5aw:,Q j\qjCt7T-(͒b-yOsIsq]x^Ú= }%6q6AMѹ ^xŞ Eq $kgA-#Gv!Ul@3q&2P TV{kѭKEoS,<~zV׽=Kܞbr8\c>HxϷzI?ND\ c j9cČCҪkR\0F{O*PBW{ԍjSJQ Rs>\q ǂ%zqIupd'ݪ%YOT2w>&Ŀ (:9cܜ9S|f4HhUvٗP"<ʒtԴ#o¾Э|xu%lR`UU`^kґ-UT#,d֝oznhr.U.K2[[-^t-B->_Dyq6>Ԁܯ[غ)sv;k(ngt)av,b̗2a\90L+|jO{y,u?е+HInDAbm*2f)4*rou~ւq}=:g<<#Nϔ$1R0$˷㨰VEnU7^/\+·SS} *Xnko%mɎiA ʣ )Ӧ%BEl cb8 IZ2RwӦA9}N[v 53(V:,_^e^|8w7^iͷjO>2$hĨ#’0s7۲ʾ#a1෿z{hi߯$=_2ObyP;H,Ԡ,I4=FPDQU.a2OOֿkŎd@("=đ7|A 5+sis|6pq-=Rp|leR>{E6=*y,YCVz⿷oo|y[ESyA]cHP[wGj~&}<$|'p %YYyq^]mOzZbiF1j{IY5ߣ]w+9O{'xSkf=AeMUoHVR $8O':bV65$EY2`p=qmH#?`۽Nּ 4P]"1D .P085ifi&9}'\H,LB2P)R$ɵ&W]'V6K>ϫ44Wx[[ Ru9TCد3aTGG?>K5}J([:Qؙpp+Ҏ#眜cc+t,>cI78mf&220NΠ4* ^nUNZR&;Tgi^;frs!>۸|ak𿆖島M2C拸7AXM2̪XlFy:S'z_(I)Z?5xkׇK~ҋw,PJva3+ce_;X8tHGEB[p8'Tg)8E^_|fMwo3.8L77!c~c*]6E.,-]aBU51[s4'(O-eǧs=QB8 l}Zo~ɑnEm܆#W¸K* 5 FE}7 Hѫ1'l|f) K؟Zh`&`=ךլW1u#ҙh`J{ ur}p*;tEFq( E{$)$rGrUTsRC=jE i]>fCn~}/iu*{3/UŜ[o_/PI 0Â1y?^ {.u($ )3`TQWVzgN\2\1􋳛 QdP*͑C V^ҡVg~b T'хXZq_S? _xM9A[t21g)u_> B]jcerJ҃y`=;sRT[Ov1XJa_5iO wUhWS`wPzs^x6a76p1yFF*)F>SPS k S.`6۫#')snW?gcEό-MqpdTwH|0 ~]n qѝ~=?љJqu/CnԀFZL7<ioc 6ӽr$y s k>D==*vj_!oWωrwv5KktKrDqWk̤>+\ʌk~KXǝ*}BLq4֫"GfXCnx+ L<;bi2MI8bLUae̱n-[X ÞEDq Rt_߯%Es*{4wxx<_T);WC6-!k{~N ~UeiXrMu kˣUvAkhSaY&-p8į[iGIcbKDaLlbwgsEKvUfYo" 5+-Hf2!) p#`?ξ'}kN~Vms+;̛SO# ~uެs߱ pTaۦ*;VʪszSBw*NwqҘ^HDm{UycDoǮ;Siҍº6A9ퟥ|R>lv C[)+9K qGM-0oᅲݾbUUd$rtGh\zmŋB>Lc5T́ :փz-*6-ldV?`R:*E[?k؇cw?-j:SIut.!-aXuQ&N^}8Pt2El2I28$F>[cKDFgjnlr,BH*( )stwZmu_Z|.ݗ ctAUlrLzb._}m:ioq?|GV״6ɻ85#f z- wZ.2 $a+HǹsM`SfT*hΛ.{GOð aɁ g@px^+<)_ xZ ѡk5}ynU1]Kn߻c.͵( z\D+3 vֽ._0oI{qg4}N+7Bǡj[ynxz喅;ō`}+.'9i3KQsx<UT푊db LvW723?*~؈liqqJ.Zj=ϳVWo3{8I©A31^Szq"͆KK.2[v$ sӶ??-&\XwPc0*(s˂zg ܣu_HR|NgBg+(cvjF1goN9"^Կ~;&fF_%dH\A?iN̿eztG>0񝗇Xi`XVv&ab3zOm5 Pʲ[jX7e|̀$q{c-=>lcӷ~/xCÚ;JA'|1$Qv#%H")D!xcU)ڣt~*Զj^]gJ%ͱBBD2-B9nA{| |T|3+fG^QB5RByh<*:3HM|hJ_.-亷[I9R7c }F)GzZ5#^ϊ98tT{(K^%ll:u0lg,?t.~ZfxaF1N0~2HO\ZQ&"[.0/䜃_jY>)_:>* Ǭ~+#-u\H}Îyjh9Wc?/⨒-6p#f=1_MB !˩!>R8ߎ3׿wNK&vf "SҮB[_[ƺ.Y6o,%Ǹ땯!>Kaky-UUoq٣x~"O)'~UYjмZrFEܲ.V+eoz>ۿ Nlɀb<.lzzۺQ3hzmđM0ʺ>O `|m~ x<~~I7<|ݹׅ8 \Snc4I/|$O~=||5wt|9a(o{iy4rkg=cGK ZZ Eyw6ùQ.@Gӝ|JtO~~1DQQsM uzWg˺Wt:8?%l,#*=NWm7\ײyMsa*0|:[ OKjX !۸޾K&I&SR^?Z&Hx܌z#tCY.r5kO0嗒2_?wV/m5[浂[eq?&8洷6214'U/i+!S {Ux | TX;>i=ğ iӧ]B>nIǾ+HjWO:ʓIFYI coja R2:1kqJ߲OMͻuΟ1%sS'#]fzy9ִvhAcrwa_ҫLTKO1&Fp 98J qQygwom=^NP]'w8LlV'Ze,!*RLD0#gኡQ'+WxBc_)qn{< y_ Ϳ+ gc sw&R<*|Sr"Gu`$\pb+t7׮_j>);%_!dx0@D2CTSI)XR5~:uMŸ h[SȎE$ft8ܧ1=F^ٶ,|dy%A88WvMXlu*z6q}pݮZw9\z nO'rkEVDRT۞ç֛TC犾Igimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 1.000000) (yoffset 1.000000) (offset-unit inches) TQN4»^Border     TT^U^UZZZ[[`eee(e8eHjDoDoTodototyyyyy~(84h@>==============================================================@>==============================================================@>==============================================================@>==============================================================????????????????===============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================?===============?===============?===============?????????????????Wd+2^Camel     ^y^ *:JZjz *:JZjz;AYi !1}8Yt U-tU m gqN) q6P p{x00(FZhtsg_`= %8p1,i~oejd_qn'$!W[<_VRLQOW_ "!u]wgID=75BO\"Y!@>Ocʡnosb" Ä8IZzbW9Vn@`"hkl[XvOQ`4e@0! ChR>ma֣[L-r9~ $YtjXCAz t톍Dog[L5Wt{mM{qlaV;Q xwsrCkd`S>K fuc?@e}yqb@ `u\W\_eghi\^d7TG0%, bpxvrk.=L*! bkD5gZ! M|pe)L0b!6rmrP) -  %1x7Jog O-dP c o{X) `/N^urroccnp+0(=E`tjmpe]\TN|X7 %0Y% PjgediYQVRM[h&$E@(pusnJBB<@>DY "P?srcW53.+)4Dq{iU "{H /.FQ~Z\`\" w)5DwbhQH/EY5]"vS^`H?Yz@DQ*S5z-! 3xO>1XEwƓR@%k3p (fA'au{c37?yxL9A~{\$(NPXR5/+*0/0nx{qurqqhzP "/*PHG?!%:^\lswwtniYEK" U^y- ##?A_hpvvpw??BQ"`i|f !2_GPdmnu|:3".8"T"bZaI2MN.!AX]^esvt+1;:#h&!$ifdK0,B)SZbbcrtxyzl;/]h!XhknZ@,PXXdecafrmvmP%w)2W[hgqbR2+OZV_``afienqinc@% FahnpdTHZW\Z]__d]YJjoofUG9*NtHD`hqpfXMZWZ\_`chY3K]ml[K@7$"s Nkom_ZUUTSXZbgi*kbbl_J:9/)j @dkaTSSXSTSPY^R%pTXUG;:3'I @hcXIJKBGKPRVY_cA4ooNKDA82EDbVPA943_uw~vq)Ok]>?3; >aTIC20HmSSWZQPKJim#%=\gaYL, MLNSG6* OK!.ZX][B<@7F32/ N! fZZVCB42=   :W- ` *B &, #}   o;! l( (  P' q& 7#d0 <$E-K5P:!pR=# S>$S>$S=#Q;" ]YURn[M7 `YSKC>. 1yplT?82Tg[WG1I-  1 X_XUL-@* 13]dTIH>54! 1]_jRGB94# 03d^eUO>:."1oe`SZPE-) # dRD4$RxFE9%nTD2! '22(  -aI6"  S?)  6fK5 ZB+ * #6FORSSVSG6"*-7<>>?>>;4& + !#$$" ,  .6=Wd+2^Line     >^^*6B^"2BRbr:JZjz *:JZjz  2 L 2 L 2 L 2  ?L ?L ?L ? ?L ?L ?L ? ?L ?L ?L ? ,L ,L ,L ,Wd+2 Line Shadow     $V(6 L                                             ?????? ? ?????????? ? ??????????? ? ?????????? ? ?????:::::: :  :::::??:::  : :::??|                      F#^Title     ^—£¯^fbrH'7GWgw'7GWgw‡غQ (%&u$##:"&a"!h H\nzkW: M+[ ) P ^ y PWy m* ' &b!QX  g HǗc    X1=  b Y] 𻘋55 غQ %u:&aSr~}[hQMZPm –'p5D&b Q_   { 9 H=  Ǘc  `       5Ofpy{n`O%Ts{jR b ]B +k ). ^ ;yBWֵ ՛OSVV ?WH EX 3w D  ? W 9X1 C`﬏ 555555555!H\nzkW: ![! P! ! ! y!*!(!( g)!!!!!550=- b!Y]!𻘋!X s X 9 >' ;Vfwzm`E I   &  s= XesX A,^s{nK6 !!! 9!>!;Vfwzm`EWd+2f Title Shadow      dfÄ3?KføwQ3Vc r5  '   ̿                                  '   ̿                                  '   ̿                                $                               "#$$&&$#"    #$&&(())(&$"    "$&()++-.//11/.--+)((&$"    #&()+.1133466431/.-+((&#"   $&)+/136689:<<:9864311.+)(&$#  "&(+.1369<<>?AA?><<98631/-+)(& "&(+/369<>ACCFFHHFCA?=<96431.++  &(+136<=ACFHJKKMNNMKKJIFFCA?=<8631/  $(+138<:86 "&+/38CINSX]adhkloprrqponlkigdca_]ZY  &+16DKPW]cinqvy|~~}||z "&+39>FKRX^dinrwy|~} "(-39?FKSY_dinrwz} "(-39?FMSY_dkorwz} "(-39?FMSY_dkorwz} "(-39?FMSY_dinrvy|~ "(-39?FKSY_dinruy|}~~}~ "(-39?FKRX^chlptwy|}~~}|z|}~ "(+38>DKPW]bgkoruwyz||zyywyz|}~  &+18=CJPUZ_dilpruwwyywvuuttuvwwyz|~  &+16CHMPTXZ]^__a__^]ZZYXWWXZZ]_bdgi  $(-16?AAC  "$&)+/1369<=?ACDFFHII$"  #&()+/146:=<:9986643134669:<>ACFHKNPUX\_bfiknpruvwyyKIHFDCCAA?>==<<:989:<<=>ACCFIKNPTWZ^bdiknqtwyz|~PNKKJIHFFDDCCA?>?ACDFHJKOPTWZ]_dgknqtwy|WUTSPPONMKKJIHHFFDFHIJKMNPRTWZ\_cfilprwy|]\ZYXWUUTSRRPPONNMMKKMNOPPSTUXZ]_bdhknruy|cb__^]\ZZYXXWUUTSRSTUUWXZ\^_bdgilprwy}igfddcbba__^]\\ZZYXYZ\]^_acdgiknqtwz~nlkkiihggfddcbba_ _abcddghiknprvy|rqpoonnlkihggffddfghhikklnpruwy|vvuuttrrqponnl klnnopqrtvwz}zyywvutrqpopqrtuvwy|}}}|zywvutuvwwyz|} ~}||zyz|}~~} |}~~邃󇆆~~}~~~}}||~|~}||zyyz|~y|}󃂂~}||yywwvwyz|~uwy|~~}|zyywvutrrtuwyz|qrvyz|~~}||zyywvutrqpoonnopqrtwy|}loqtvyz|}~~}}||zyywvutrqonnlkklnprtwy|}hklortvwyyz||zywvtrrqonlkkihggffgghiknoqtvyz|~񂀀bdhkloqrtvwwvutrrqpnnlkiigfdcbbaabbcdfhklnqruwyz||zy8 , ) %!̿̿̿̿         8 , ) %!̿̿̿̿         8 , ) %!̿̿̿̿         @=7+'%  "                  #"   (&$##"   .-+)((&&$"    4331/.-++)((&$#"     <:98664331/.-+)(&&#"   A?>>=<<:866431/.+)(&$# IHFDCCA?>=<:86431/-+)(&$" PONMKKJIHFDCAA>=<96431/-+(&&#"  WUTSRPPNMKJHFDCA><:86311.+)(&&$#" _^^]\ZZYXUUSRPOMKIFDCA><:8631/.++((&&$$#""  fddcba_^]ZZXWUSPOMKIFDA?=<96431/.-++)((&$ #lkkigfdcb_^]ZYWUSPOKJHFCA><<9663311/..--++) (rqponnkkihfdca_]ZYWTRPNKIFDCA>=<:9664331/.ywvurrponkiigdca_\ZXUSPOMKIFDCAA>=<<:98 64~}|zywvtrqonkihfdb_^ZYWURPNMKIHFDCCA?>= <ك~}|ywvurqonkigdca_\ZXUTRPONMKKJIHHFFD CA߇~|zywvtrpnkihfdb_^\ZXWUTSRPPONMKJIڏ}|ywvtrpnlkigdca_^\ZZYXWWUUTSRPOې}|ywvtrpnnkihgddba__^^]]\\ZYXWU~}|ywvtrqonlkiihgfddcba_^]\~|zywvurrponnlkkihgfdc䜛}|zywwvtrrqppoonlkkiឝ~||zyywwvvuutu vutrqpoon~}||zy yz |zywvutr~}}||}~~}||zyyw~⃂~}| ㈇⌋􆇉ᐏ~~㓒~}||}~㔓}|zzyyz|}~~|zywwvvwyz|~ᙘ|zwwutrrtvwyz|~ę~|yvtrpoonnooprtvwy|~☗|ywtqonlkklnprtwy|~~zwurolkigffgiklnqrvy|~䓒|yvrolihddbaabcdfhkloruwz}ʍ|ywtpnkhdb_^]\ZZ\]^_bdfiknqtwy|勉}|~|ywtqnkhdb_]ZYWUUWYZ]_bdginprvyz}ዊ}zywwvtqnkidb_\YWUSRPPRTUWZ]_bfiknqtwy|}󆅃~|ywvtr5+)' %$"!                   5+)' %$"!                   5+)' %$"!                   5-* ('% !                                ""#""    "#$&&$#  #$&(()++)(&$#    "$&((++-.//1//.-++(&#  "$&&()+-/11334431.+)&  "#$&(()+-/1336689986633/-)##"  "##$&&(()++-/133689:<==>>==<:8631-((&$#"#$&()++-/1134689<=>?AACCA><:631..-+) ()+-./11334669:<=?ACCFFHFDCA><8344331/.-./1346689:<=>AACDFHJKKMMKJFDA><6<::986434689:<<=>?ACCDFHIKKNOPPRRPONKIFA>:AA?>=<:<=>?AACCDFFIJKKNOPRSTUUWWUTROKIDA=HHFDC ACDFFHIJKKMNOPPRSUUWYZZ\ZYXUSPKHC?NNMKJIHFHIJKKMNOPPRSTUUWXZZ\]^__aa_^\YWSPKFCUUTTSSRRPPONMNOPRSTUUWXYZZ\]^_abcddca_]ZURNJDZZYXWUTUWXYZZ\]^^__abbcddfghiihgdc_]YUPKFbaa__^]]\\Z Z\]^__abcddfghiiklnnlkkifc_\WSNIhggffddcbabcddfghhiikklnopqqrrqponkifb^ZUPJnllkkihghiklnopqrrtuvutrqnkida\WPKrrqpoonnlklnopqrrtuuvvww ywvrqnkgb^XSMwvvutrrqrtuvwwyz|}|ywvrplid_ZTN|zyyw vwyz|}~}|zwurnid_ZUO~}||zyz|}~ ~|ywrokfaZUP~~}}||}~샂}zwtpkgb\UP 솅~|yuplhb\UP ꈇ|yuqlhb\UP鈇|yuplgb\UP 뇆~|wtpkgaZUO芉}zwrokf_ZUO抉|yvrnid_YTN򃅅}zwtplhc]XRK~~}}~戇}|yvrnkfa\UPK~||z||}~ ~|zyvrokhc_YTOI}|zyywwyz||}~ヂ~}|ywvrplida\WRMFywwvuttuvwwyyz||}~~}||zywvtrolifb^YTOJDvtrrqppqrtuvwyyzz||}~~~}||zyywwutrpnkifb^ZUPKFAponllkklnnopqrtuvwwyz|zywvutrrqonlihdb_ZWSNID?y                          y                          y                          \                    $  ($  )&#  -)&" 1+($  3/+&" 61-($  83/+&" <61+(# =83.)$  ?:4/+&  A<61+&" C=83-(# D?93.($ FA:4/)$  HA<6/)&  HC<61+&  IC<61+&  JC=61+&  JC=61+&  JC=61+&  JC=61+&  JC=61+&  IC<61+&  IC<61)&  HA<4/)$  F?:3.($ D>93-(# C=61+&" A<61+&  >93.)$  <61-(# :4/+&"                    !                   !                   !  $(-16:>CFIKMOPPONKKJHFFHIKMOPTWZ "&+.36:>ADFIJKKJIHFDCCAA??AACDFIKNPT  $(+/36:=?ACDFFDCCA?><<:<=?ACFIKN "&(+1369<=?AA?><<:8664689<=ACFI "&(+/3469:<<:9664311/1368:=?C  #&(+.133664331/.-++-/1348:=  #&()+./113311/.-++((&()+-/346  "$&()++--+)((&$##"  "#$&&(+-/1  #$&&((&$#"  "$&()-  ""#$$#""  "#&(     #                                       %   !                                                                        ]_cdhiknopqrrqponnlkkiihfdcba_^]]\\]^_acdgiknoqrtuvvutWZ]_bdfhikklnnlkihgfddca_^]\ZYXXWWXYZZ]_acfhiklnnoonPTWZ\^_bddfghhiihhgfdcbb__^]\ZYWUUTSRRSTUWYZ]_acdghiihgKNPTUXZ\^__abbcbba_^]]\ZZXWUTSRPONMMKKMNOPRSUWYZ]__abba_FHKNPRTUXYZZ\\ZYXWWUUTRPPOMKKJIHFFHIKKNOPSUWXYZZY?CDHJKNPPSTUUTSSRPPONMKJIHFDCCACDFHJKMOPRSTTUUTSR:=<<=>?AACDFIJKKMNNMK469<=?ACDFFHIIHFDCCA?>=<<:986689<<=?ACCDFFD/1368:<=>?AACCA?>>=<<:9866433134689:<=>??AA?>)+.133668::< <:986643311/.--++-./1134668899::998&&(++./1334466431/.-++)()+-./11331 "$&((++-../11/.-+)((&$#$&()++-.-+ "$&&(()+)(&$#""   "#$$&&(& "#$$&&$#"    "#"                             @   (                                     rpnkifc_\YUSPOMKKMNPRUWZ]_dgiloqtvyz|}~}|zywurqonkihdb_\YUSPMKIHFFHIKMPRUXZ^adgilnqruwwyz||zywwurqonkihdca^\YUSPMJHFCAA?AACFHJMPSUY\_bdgiknoprrtuvvwwvutrrponkihfdc^\ZXURPMJFDA?=<<::<<>ACDHJMPSUY\^acdgikklnnoopponlkiigdcb_^\XUTPOKIFCA><:86644669:=?ADHKMPSUXZ]_abddfghiihgfdcb__]ZYXUPOMKIFCA=<964311368:<:6431.++((&&()+-/1469<>ACFHJKMNOPPRSSTSRPPONMKJIHFDC=<:8631/-+((&$##""#$&((+-/1369<=?ACDFHIJKKMKJIHFDCCA?>=64311.+)(&$"  "$&()+.13469<<>?AACCDCA?>=<:9861/.++(&&#  "#&()+-/134689:<<=>=<:98664331+)((&$"  #$&()+-/1133446 64331/.-++&$#"  "#&&()++--.//1/.--++))((&&  "#$&&(()+)(&$##"   "#$&$#"                                 )  ! !                                                   kihgghiklnnopqrrttuuvvwwvutrrqponnlkihfc_]ZWSOKFA:6ZYXWWUUWXYZZ\\]^__aabccddfdcbba__^]\ZYXUTPOKIFA>:63USRPPRSTTUUWXYYZZ\\]^^_^]\ZYXWUUSRPNKJFCA=:63/NMKKJKMNOPPRSTTUUWXYXWUTSRPPONKKIFDA?<963/+HFFDCDFHIIJKKMNNOPPRPONNMKKJIHFDCA?=:841.+(AA?>>?ACDFHIIJJK KJIHHFFDDCAA?=<:8631-+($<<:9989:<=>>??AACDCA?>=<<986431.+(&$ 644334689:<<=>=<:98664331/-+)(&" 1/..--./134686431/.-+)(&&# +))( ()+-./1/.--++))(&&$# &$$##$&()+)(&$#"    "#$&$#"  "                             G7%**X ̿           ̿           ̿          63-($  4/+&" 1-($  .)&" +(#  ($  $                     w3G# PerlPanel-0.9.1+cvs20051225/src/perlpanel-applet-install0000755000175000017500000000555010135317277020226 0ustar hehe#!/usr/bin/perl # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: perlpanel-applet-install,v 1.1 2004/10/19 23:09:51 jodrell Exp $ # # are we installed or running in a sandbox? # use lib (-e '@LIBDIR@' ? '@LIBDIR@' : $ENV{PWD}.'/lib/'); use PerlPanel; use Getopt::Long; use Data::Dumper; use strict; # # set the values for prefix and libdir: # $PerlPanel::PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); $PerlPanel::LIBDIR = (-e '@LIBDIR@' ? '@LIBDIR@' : $ENV{PWD}.'/lib/'); # # if we're in a sandbox then it's handy to add ./src to the PATH: # $ENV{PATH} = $ENV{PATH}.':'.$ENV{PWD}.'/src' if (!-e '@PREFIX@'); my ($user, $site, $file, $help); GetOptions( 'user' => \$user, 'site' => \$site, 'file=s' => \$file, 'help' => \$help, ); if ($help > 0) { print <<"END"; perlpanel-applet-install - install a PerlPanel applet. Usage: perlpanel-applet-install [OPTIONS] Options: --user install applet for a single user --site install applet for all users --file file to extract from --help show this help. END exit 0; } elsif ($user > 0 && $site > 0) { print STDERR _('Error: cannot use --site and --user at the same time!')."\n"; exit 1; } elsif ($user < 1 && $site < 1) { print STDERR _('Error: must choose either --user or --site!')."\n"; exit 1; } elsif (!-r $file) { print STDERR _("Error: file '{file}' not found!", file => $file)."\n"; exit 1; } else { my %args; if ($user > 0) { %args = ( datadir => sprintf('%s/.local/share', $ENV{HOME}), libdir => sprintf('%s/.%s/applets', $ENV{HOME}, lc($PerlPanel::NAME)), regfile => sprintf('%s/.%s/applet.registry', $ENV{HOME}, lc($PerlPanel::NAME)), ); } else { %args = ( datadir => sprintf('%s/share', $PerlPanel::PREFIX), libdir => sprintf('%s/%s/Applet', $PerlPanel::LIBDIR, $PerlPanel::NAME), regfile => sprintf('%s/share/%s/applet.registry', $PerlPanel::PREFIX, lc($PerlPanel::NAME)), ); } print Dumper(\%args); my ($code, $error) = PerlPanel::install_applet($file, %args); if ($code == 1) { print STDERR _("Error: {error}", error => $error)."\n"; exit 1; } else { exit 0; } } exit; PerlPanel-0.9.1+cvs20051225/src/perlpanel-item-edit0000755000175000017500000001452410226750217017153 0ustar hehe#!/usr/bin/perl # $Id: perlpanel-item-edit,v 1.8 2005/04/12 13:43:43 jodrell Exp $ # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2005 Gavin Brown # use Gtk2 -init; use Gtk2::GladeXML; use X11::FreeDesktop::DesktopEntry; use Gnome2::VFS; use File::Basename qw(basename); use XML::Simple; use POSIX qw(setlocale); use Locale::gettext; use strict; my $REQUIRED_VERSION = 0.04; die("X11::FreeDesktop::DesktopEntry must be at least $REQUIRED_VERSION") unless ($X11::FreeDesktop::DesktopEntry::VERSION >= $REQUIRED_VERSION); my $PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); my $GLADE = sprintf('%s/share/perlpanel/glade/item-editor.glade', $PREFIX); $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; my $RCFILE = sprintf('%s/.perlpanelrc', $ENV{HOME}); my $LOCALE = (defined($ENV{LC_MESSAGES}) ? $ENV{LC_MESSAGES} : $ENV{LANG}); setlocale(LC_ALL, $LOCALE); bindtextdomain('perlpanel', sprintf('%s/share/locale', $PREFIX)); textdomain('perlpanel'); my $ICON_THEME; if (-r $RCFILE) { $ICON_THEME = XMLin($RCFILE)->{panel}->{icon_theme}; } $ICON_THEME = 'gnome' if ($ICON_THEME eq ''); my ($ICON); Gnome2::VFS->init; my $theme = Gtk2::IconTheme->new; $theme->append_search_path(sprintf('%s/share/icons', $PREFIX)); $theme->set_custom_theme($ICON_THEME); my $uri = Gnome2::VFS->make_uri_canonical($ARGV[0]); my ($result, undef) = Gnome2::VFS->get_file_info($uri, 'default'); error_dialog(_("Error opening '{uri}': {result}", uri => $uri, result => $result)) if ($result ne 'ok'); my ($result, $size, $data) = Gnome2::VFS->read_entire_file($uri); error_dialog(_("Error reading '{uri}': {result}", uri => $uri, result => $result)) if ($result ne 'ok'); my $entry = X11::FreeDesktop::DesktopEntry->new_from_data($data); error_dialog(_("Error parsing '{uri}'", uri => $uri)) if (!defined($entry)); my $glade = Gtk2::GladeXML->new($GLADE); $glade->get_widget('launcher_name')->set_text($entry->Name($LOCALE)); $glade->get_widget('launcher_comment')->set_text($entry->Comment($LOCALE)); $glade->get_widget('launcher_exec')->set_text($entry->Exec); $ICON = $entry->Icon; if (-r $ICON) { $glade->get_widget('launcher_icon')->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size($ICON, 48, 48)); } else { my $icon; if ($ICON ne '' && -r $ICON) { $icon = $theme->load_icon($ICON, 48, 'force-svg'); } if (defined($icon)) { $glade->get_widget('launcher_icon')->set_from_pixbuf($icon); } else { $glade->get_widget('launcher_icon')->set_from_pixbuf($glade->get_widget('item_edit_dialog')->render_icon('gtk-missing-image', 'dialog')); } } $glade->get_widget('launcher_feedback')->set_active($entry->StartupNotify); $glade->signal_autoconnect_from_package('main'); my $window_icon = $theme->load_icon('perlpanel', 48, 'force-svg'); $glade->get_widget('item_edit_dialog')->set_icon($window_icon); $glade->get_widget('item_edit_dialog')->show_all; Gtk2->main; ### Begin auto-generated signal handlers # Widgets calling the 'on_icon_button_clicked' callback: # # Widget ID: icon_button # Widget Type: GtkButton # Signal: clicked # sub on_icon_button_clicked { my $selector = Gtk2::FileChooserDialog->new( _('Choose File'), undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); $selector->set_preview_widget(Gtk2::Image->new); $selector->signal_connect('selection-changed', sub { my $file = $selector->get_filename; if (-f $file) { my $pbf = Gtk2::Gdk::Pixbuf->new_from_file_at_size($file, 48, 48); $selector->get_preview_widget->set_from_pixbuf($pbf) if (defined($pbf)); } }); if (-r $ICON) { $selector->set_filename($ICON); } else { my $icon; if ($ICON ne '') { $icon = $theme->lookup_icon($ICON, 48, 'force-svg'); } if (defined($icon)) { $selector->set_filename($icon->get_filename); } else { $selector->set_current_folder('/usr/share/icons/hicolor/48x48/apps'); } } $selector->signal_connect('response', sub { if ($_[1] eq 'ok') { $ICON = $selector->get_filename; $glade->get_widget('launcher_icon')->set_from_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file_at_size($ICON, 48, 48)); } $selector->destroy; }); $selector->set_icon($glade->get_widget('item_edit_dialog')->get_icon); $selector->show_all; return 1; } # Widgets calling the 'on_item_edit_dialog_response' callback: # # Widget ID: item_edit_dialog # Widget Type: GtkDialog # Signal: response # sub on_item_edit_dialog_response { if ($_[1] eq 'ok') { $entry->set_value('Name', $glade->get_widget('launcher_name')->get_text, $LOCALE); $entry->set_value('Comment', $glade->get_widget('launcher_comment')->get_text, $LOCALE); $entry->set_value('Exec', $glade->get_widget('launcher_exec')->get_text); $entry->set_value('Icon', $ICON); $entry->set_value('StartupNotify', ($glade->get_widget('launcher_feedback')->get_active ? 'true' : 'false')); my $data = $entry->as_string; $glade->get_widget('item_edit_dialog')->set_sensitive(0); Gtk2->main_iteration while (Gtk2->events_pending); my ($result, $handle) = Gnome2::VFS->open($uri, 'write'); error_dialog(_("Error writing to '{uri}': {error}", uri => $uri, error => $result)) if ($result ne 'ok'); $handle->write($data, length($data)); $handle->close; } Gtk2->main_quit; exit 0; } sub error_dialog { my $error = shift; my $dialog = Gtk2::MessageDialog->new( undef, 'modal', 'error', 'ok', $error, ); $dialog->signal_connect('response', sub { exit 1 }); $dialog->signal_connect('delete_event', sub { exit 1 }); $dialog->run; } # copied from PerlPanel.pm: sub _ { my $str = shift; my %params = @_; my $translated = gettext($str); if (scalar(keys(%params)) > 0) { foreach my $key (keys %params) { $translated =~ s/\{$key\}/$params{$key}/g; } } return $translated; } PerlPanel-0.9.1+cvs20051225/src/perlpanel-run-dialog0000755000175000017500000000252510126023162017320 0ustar hehe#!/usr/bin/perl # perlpanel-run-command - a command dialog. # This file is part of PerlPanel. # # PerlPanel is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PerlPanel 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 PerlPanel; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright: (C) 2003-2004 Gavin Brown # # $Id: perlpanel-run-dialog,v 1.9 2004/09/27 14:40:50 jodrell Exp $ use strict; use lib (-e '@LIBDIR@' ? '@LIBDIR@' : $ENV{PWD}.'/lib/'); $PerlPanel::PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); $ENV{PATH} = $ENV{PATH}.':'.$ENV{PWD}.'/src' if (!-e '@PREFIX@'); my $PREFIX = (-e '@PREFIX@' ? '@PREFIX@' : $ENV{PWD}); use PerlPanel; use Gtk2 -init; use PerlPanel::Applet::Commander; my $commander = PerlPanel::Applet::Commander->new; $commander->configure('no-widget'); $commander->run; Gtk2->main; PerlPanel-0.9.1+cvs20051225/src/perlpanel.xcf0000644000175000017500000004362707676304455016074 0ustar hehegimp xcf file= =BBE/ gimp-commentCreated with The GIMPPath 09 AA0AA0A`A0A@A0A A0AAPAApAAAAA AA0AAPAA`AApAAAAAAAApAApAApAAPAAPAAPAAPBAPBAPB AB,AB,AB,B$B4B$B4B$B4B AB AB ABBBBBBABABABBABABAB ABABABABABABA`BAPBA@A@A@A@AA0 u.n46= PerlPanel     )B=Z }=rg u@@@H ŁH VH2HHKHHHv@KH<HHHM  HHHwHHHH[R1M/HH:v^H d oH͍& NHH HHHH oHHHH b[ ;HHHH HHHH HHHH H͚U HHH@@@HŁ3HV2H21HK1HviҚ8H8@KHM  HwKHHZ'f[R1MH:Efv^Hd bO H͍& JI H)KHHHQHHoH PHHb[ ;HHHH{HHH5HHHH͚U H<<<<@=White Outline     4 3= K= c/ $%&=I== B/ $%&=I== B/ $%&=I== B/  y{y y{yy y{y{y{{y{y{{y{{y{y{y{  A81/.-  ;;;:   A81/.-  ;;;:   A81/.-  ;;;:   A80y{.y{-,  y y { {                {y{{{y{ {y{y{{y{  @<<<<@=Outline     u=i=*a<>f6Z3 U3Z<x7x5556>87<=0P0#1I/< <>f6Z3 U3Z<x7x5556>87<=0P0#1I/< <>f6Z3 U3Z<x7x5556>87<=0P0#1I/< 9Vz͉5䒣u554ؔ5/5/3/21}Av6}5=x5(f4A;/55p4CmC(/>~3zImV7aaC4f85NF(5#W.1Z/P0UdZ5//_m_(///]J;0((/8hxU8(5.5//\z(2_2EMŧ03F3M03G:;O/;0^YK.ZU/p=i9=D59<=>0;0^YK.ZU/p=i9=D59<=> 0;0^YK.ZU/p=i9=D59<=>0V1V/Vеဎ-ϷZZUPUaΏjN-f(q֚8-]W||.8kd(f-85]3-Pt((W.7/n///PidPr>4//f4(73(r/a4U3</<C;(;Uj;U//(U4(p<x<t/ x/V 0 0#$/)0+ /((0 /   0-<<<<@=Camel     =/.b=G%m.Zemw7fslMbqy6blvhn`o2rs~fslM1lqblvh/m\xrs~.oR`lqƳ-r[Miom\x-^JRnoR`,aT]Tr[Mion,`F?W^JRnrmnu,_:AaT]Tenvgd+wO9W`F?W\hmy+V9DF_:ATZ`l+>99>O9WRfw+?83V9DFPh~+A25>99>Ok|+B*;?83CXjt+;*>A25L[gow+=29B*;Valq{z+SF,;*>S`dlz,5,=29Q[elee}-/SF,%0GTXghbne^\-7;5,:LXjx]_k-?JY/+AMl^\07;Ca}`0?JYvufej7r}tOYaf6wk|i]]P[2vryr}tO1kl}wk|i]/mPevry.xQPi{kl}-x`CT\mPe-eCDYxQPi{,bLMEx`CT\Zj~,b@3JeCDY\Y[a,_15bLMESZdVQ+yP2Lb@3JMXbgq+U6=;_15HMP[h+;533P2LEVery+<3+U6=;AUhxpy+>.,;533@Wer~o+<%1<3+8IW`qxql+3%5>.,@LUZjwutsZz+3+/<%1IRY]gkqwd|x+I>#3%5HTU]jxql,0$3+/GPY_VTikhjmq-'I>#(;EIYqSKTNGJ-.30$3@I[lGHR-3>N'$:A^uGD0.3Nl`YS[7ehkDHMK6k\_YIH<=2h`gjgglxehkD1\W_hger~k\_YI/e@I\hqh`gjgglxt.pE6EYi\W_hger~q-jU-4?e@I\hqqruq{n-Y3+8pE6EYintwwsld,V95.jU-4??I_pvvph_,V.1Y3+8=AAEf|unmd,U#!V95.:;I?7_tvse+nI%6V.14@GKP`yxtrc+K,-(U#!488AH]mvmrfa+/'"I%6-;HWTiqneifa+- K,-(*9GUfoojPY]d+/!/'"$7@K[lm]\KYh+.- /9:J_lbWVAci++/!'3:;GUXTUATi^+(.28ADKNOXH\gc_+@J]TOcqvml,"(4>EG=:GhNJKPQ-01854-"" '/@J377-(-4#*>R740"!:M90(-4NM"ɝ}9&67563n2 1 1_ 0 0B 0h 0 /' /n / / / / /k/,8/+507l0<9.׵&ingke1kstqMV0~x~ingkeY8L.emwkstq\MV-bqy~x~jYY8L-n`ox{L7:\-~_gst|uM?n-q_djeo~wMR-cUQLRV_M[.bH?7=DIgwju.\ME;0'/Cn/񓋇ZI=,1M0𢣚vXOLJh/𩨠aRPRh/񣜗^[j.rzm.f.讀j.𢚘//{/𣝚rsw/cu/ihge_\W\u/rvxp/]k/W^kr|/R|cWwmr/SN`NLYpy/USuRNVqx0RISN]rz/WOUSS_y~2RIYl~1WOQZrnroinp}1cmgoqtunRKx0jdklroinpa3;p}}.fejcmgoqtunJ|RKx-Yafjdklrrob_a3;p}-]P[ccorrusb>,-J|-iNT\]epmjtW]>1U-[MRVQYidegj[8>j-iNC@Oxs/{uDGPfvw.~ykZ`xyU.}{xnzwK.~{yvvq~}M.~xoqqv}z/wnnlrtwvy/splic`cjgo/~|u^QRVl{w/wuqsspbHUisys/VTROJGADWqq~v/Z`omu\Q^hn{u/DShqojkal|a/BGQQiY^fjx/9gN>YORhmzz/<6L70>RoXnzy/;:`93:ScWuz~0=5<6CRYfpp|/E<;:;EY]kq{2=5AN]hu{1E<;?TlpynjgX`f^p1U]TS\cd`K.]d0SLNLjgX`f^)Ef^p.YS[U]TS\cd`$QK.]d-HMKSLNLVTSOZ^)Ef-H<=FHPOMVTF+)$Qk-O=:@AIQPLR<>(-\m-A9>A;?NOHGO:"8`m-F730*+/5RXPN?Z.Z<(!?GH`0/Qb.S:,& $8[fUDa/[QJ2!!Nki`[0^]XA!'&2IaZbbZ/bZS)(,0Kdfi]S/cedXX0/7@ZnkhXWg.`_VZOA?Rbqgh[W@._]Z\WZHTdpnhaW7.c`_\ZWZMXfpqh`_;.gbZXSTUUZ_mok]V/YPSTSXSSTakd``/YVRPKGBKJIXchaa/keaYVB349APVbge/ZWSSH02CITaoY/=:;942-,8LJTes\/9AOJYD38DKW^fqX/06GSNLM>JW_^_jF//.54F7@HITdemc/1(%%#$49BGRjbjm2) $.:>OUe^muo11(")-EPZS`hurn!6.4{n '-Z:-H-+--z. . / 0 / >/ . .5. . / / / / }/ m/ l/ l// l0 t1L 12g 1z21 n<<<<@=Shadow     /=/)4*=/A1A4"@@@:5 $1E4#49>K^kn37_wwnhe^P2BjtkXI=1$1CmlJ.  0Blh?  /CmiB&#,. .?psN04;;<2.+mdG=EA:@=/G{[URJA=?6/"hdORNGC=/ /2|P>9321&.:n=' -=c*(+-=^ 'CC&-<{U&DRD$-CINRW[_behjlmnnml! %+28>DJOUY^bfjmprtuvwvut!#*17>DJPV[`ejnrux{|~~|  !(/6=CJPV\bglquy} %-4;BIOV\bhnsx} ")18?GNU[bhntz&-5DJPV[`ejnrux{|~~|! %+28>DJOUY^bfjmprtuvwvut" &,28>CINRW[_behjlmnnml#  &,27=BGKOSWZ]`bceefeec# &+16;?DHLORUXY[\]]\[$%*/48<@DGJMOQSTTUTTS%#(-15982,& )rpmjfb^YUOJD>82+% ({xurnje`[VPJD>71*#(胀}yuqlgb\VPJC=6/(! '苈}xsnhb\VOIB;4-%'瓐ztnhb[UNG?81)" &盘ztng`YRKD<5-&&棟zsle^WOH@91)! %櫧xqjb[SLD<4-% %沮}unf_WOG?80'%庵yrjbZRJB:2*" $}ume]UME=4,$ $¼xph`XOG?6.& ${rjbYQI@80'$ž|tlc[SJB91( $~ume\TKC:2)!$ºvne]TLC;2*!$ûwnf]ULD;2*!$ºvne]TLC;2*!$~ume\TKC:2)!$ž|tlc[SJB91( ${rjbYQI@80'$¼xph`XOG?6.& $}ume]UME=4,$ $庵yrjbZRJB:2*" $沮}unf_WOG?80'%櫧xqjb[SLD<4-% %棟zsle^WOH@91)! %盘ztng`YRKD<5-&&瓐ztnhb[UNG?81)" &苈}xsnhb\VOIB;4-%'胀}yuqlgb\VPJC=6/(! '{xurnje`[VPJD>71*#(rpmjfb^YUOJD>82+% (jheb_[WRNIC>82,& )b`]ZWSOKGB=72,&  *YXUROLHD?;61+& *QOMJGD@<84/*%+IGEB?<951-(#,@?=:841-)%! -86420-)&" .0.,*'%! 0'&$" 1 3 5 7z<<<<@