Add LXTask - task manager ported from xfce4-taskmanager.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Fri, 25 Apr 2008 19:03:43 +0000 (19:03 +0000)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Fri, 25 Apr 2008 19:03:43 +0000 (19:03 +0000)
54 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
configure.ac [new file with mode: 0644]
intltool-extract.in [new file with mode: 0644]
intltool-merge.in [new file with mode: 0644]
intltool-update.in [new file with mode: 0644]
lxtask.desktop.in [new file with mode: 0644]
po/ChangeLog [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/ca.po [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/el.po [new file with mode: 0644]
po/en_GB.po [new file with mode: 0644]
po/eu.po [new file with mode: 0644]
po/fi.po [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/gl.po [new file with mode: 0644]
po/hu.po [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/lv.po [new file with mode: 0644]
po/nb_NO.po [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/pt_PT.po [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
po/sq.po [new file with mode: 0644]
po/ur.po [new file with mode: 0644]
po/vi.po [new file with mode: 0644]
po/zh_TW.po [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/callbacks.c [new file with mode: 0644]
src/callbacks.h [new file with mode: 0644]
src/functions.c [new file with mode: 0644]
src/functions.h [new file with mode: 0644]
src/interface.c [new file with mode: 0644]
src/interface.h [new file with mode: 0644]
src/main.c [new file with mode: 0644]
src/types.h [new file with mode: 0644]
src/utils.c [new file with mode: 0644]
src/utils.h [new file with mode: 0644]
src/xfce-taskmanager-linux.c [new file with mode: 0644]
src/xfce-taskmanager-linux.h [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..3bce9d4
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,8 @@
+LXTask is derived from Xfce4 Task Manager.
+Original authors of XFce4 Task Manager:
+Johannes Zellner <webmaster@nebulon.de>
+翼varo Lopes <alvieboy@alvie.com>
+
+On 2008-04-26, the LXDE team derive LXTask from 
+Xfce4 Task Manager for LXDE project.
+Copyright (C) 2008 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+                   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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..377d4e4
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,37 @@
+2007-01-12     Nick Schermer <nick@xfce.org>
+
+       * Change version number and svn revision support in configure.in.in
+
+2007-01-12     Nick Schermer <nick@xfce.org>
+
+       * Apply patch from Álvaro Lopes to fix CPU usage per task, with
+         more then 1 CPU.
+       * Added a THANKS file.
+       * Remove some svn executable properties and add svn keywords.
+       * Added LINGUAS support and removed the configure.ac > configure.in.in file.
+       * Improved the configure.in.in and Makefiles.
+
+2007-01-12     Nick Schermer <nick@xfce.org>
+
+       * Apply patch from bug 2714.
+       * Fix all typo and compiler warnings.
+
+2006-06-26     Johannes Zellner <webmaster@nebulon.de>
+
+       * rewrite of the taskmanager ;)
+       * now using seperate files for each os to get the processinfos
+       
+2005-07-05     Johannes Zellner <webmaster@nebulon.de>
+
+       * added finnish translation
+       * fixed a memory leak in functions.c
+       
+2005-06-30     Johannes Zellner <webmaster@nebulon.de>
+
+       * bugfix in the sorting function
+       * name of about-dialog changed
+       * scrollbars only showed when needed
+       
+2005-06-30     Johannes Zellner <webmaster@nebulon.de>
+
+       * started completly new ;)
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..5458714
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,234 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..1b4b0a7
--- /dev/null
@@ -0,0 +1,25 @@
+SUBDIRS =      po src
+
+desktopdir = $(datadir)/applications
+desktop_in_files = lxtask.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+distclean-local:
+       rm -rf *.cache *~
+
+rpm: dist
+       rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
+       @rm -f $(PACKAGE)-$(VERSION).tar.gz
+
+EXTRA_DIST =                                                           \
+       intltool-extract.in                                             \
+       intltool-merge.in                                               \
+       intltool-update.in                                              \
+       $(desktop_in_files)
+       
+DISTCLEANFILES =                                                       \
+       intltool-extract                                                \
+       intltool-merge                                                  \
+       intltool-update                                                 \
+       $(desktop_DATA)
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..5f17613
--- /dev/null
+++ b/README
@@ -0,0 +1,3 @@
+LXTask - lightweight and desktop-independent task manager derived from
+xfce4-taskmanager with all dependencies on xfce removed, new features,
+and some improvement of the user interface.
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..8b09097
--- /dev/null
+++ b/TODO
@@ -0,0 +1,6 @@
++ *BSD support with the 'kvm' files
++ ability to switch to a tree-store
++ sending custom signals
++ overall-cpu-usage and mem-usage display
++ more languages
++ tray-icon
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..73d10ec
--- /dev/null
@@ -0,0 +1,21 @@
+#! /bin/sh
+AM_VERSION=-1.10
+AC_VERSION=
+
+set -x
+
+if [ "x${ACLOCAL_DIR}" != "x" ]; then
+  ACLOCAL_ARG=-I ${ACLOCAL_DIR}
+fi
+
+${ACLOCAL:-aclocal$AM_VERSION} ${ACLOCAL_ARG}
+${AUTOHEADER:-autoheader$AC_VERSION}
+AUTOMAKE=${AUTOMAKE:-automake$AM_VERSION} libtoolize -c --automake --force
+AUTOMAKE=${AUTOMAKE:-automake$AM_VERSION} intltoolize -c --automake --force
+${AUTOMAKE:-automake$AM_VERSION} --add-missing --copy --include-deps
+${AUTOCONF:-autoconf$AC_VERSION}
+
+# mkinstalldirs was not correctly installed in some cases.
+cp -f /usr/share/automake-1.10/mkinstalldirs .
+
+rm -rf autom4te.cache
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..b388aad
--- /dev/null
@@ -0,0 +1,51 @@
+AC_PREREQ([2.57])
+AC_INIT(lxtask,[0.1], [],lxtask)
+AM_INIT_AUTOMAKE()
+AC_PROG_INTLTOOL(, [no-xml])
+AM_MAINTAINER_MODE
+
+AM_CONFIG_HEADER(config.h)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+AM_PROG_CC_C_O
+
+dnl Check for UNIX variants
+AC_AIX()
+AC_ISC_POSIX()
+AC_MINIX()
+
+AC_HEADER_STDC()
+AC_CHECK_HEADERS([dirent.h pwd.h sys/types.h sys/stat.h sys/param.h \
+                  stdio.h stdlib.h string.h unistd.h stdlib.h signal.h])
+
+PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.6.0])
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(GTK_LIBS)
+
+GETTEXT_PACKAGE=lxtask
+#AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION(0.14.1)
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.])
+
+ALL_LINGUAS="cs de el en_GB eu fi fr gl hu ja lv nb_NO nl pl pt_BR pt_PT ru ur vi zh_TW"
+AM_GLIB_GNU_GETTEXT
+
+AC_OUTPUT([
+  Makefile
+  src/Makefile
+  po/Makefile.in
+])
+
+echo
+echo LXTask....................................... : Version $VERSION
+echo
+echo Prefix....................................... : $prefix
+echo
+echo The binary will be installed in $prefix/bin
+echo
+echo http://lxde.sourceforge.net/
+echo
+echo Have fun!
+echo
diff --git a/intltool-extract.in b/intltool-extract.in
new file mode 100644 (file)
index 0000000..7b83435
--- /dev/null
@@ -0,0 +1,861 @@
+#!@INTLTOOL_PERL@ -w 
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4  -*-
+
+#
+#  The Intltool Message Extractor
+#
+#  Copyright (C) 2000-2001, 2003 Free Software Foundation.
+#
+#  Intltool 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.
+#
+#  Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#  As a special exception to the GNU General Public License, if you
+#  distribute this file as part of a program that contains a
+#  configuration script generated by Autoconf, you may include it under
+#  the same distribution terms that you use for the rest of that program.
+#
+#  Authors: Kenneth Christiansen <kenneth@gnu.org>
+#           Darin Adler <darin@bentspoon.com>
+#
+
+## Release information
+my $PROGRAM      = "intltool-extract";
+my $PACKAGE      = "intltool";
+my $VERSION      = "0.36.2";
+
+## Loaded modules
+use strict; 
+use File::Basename;
+use Getopt::Long;
+
+## Scalars used by the option stuff
+my $TYPE_ARG   = "0";
+my $LOCAL_ARG  = "0";
+my $HELP_ARG   = "0";
+my $VERSION_ARG = "0";
+my $UPDATE_ARG  = "0";
+my $QUIET_ARG   = "0";
+my $SRCDIR_ARG = ".";
+
+my $FILE;
+my $OUTFILE;
+
+my $gettext_type = "";
+my $input;
+my %messages = ();
+my %loc = ();
+my %count = ();
+my %comments = ();
+my $strcount = 0;
+
+my $XMLCOMMENT = "";
+
+## Use this instead of \w for XML files to handle more possible characters.
+my $w = "[-A-Za-z0-9._:]";
+
+## Always print first
+$| = 1;
+
+## Handle options
+GetOptions (
+           "type=s"     => \$TYPE_ARG,
+            "local|l"    => \$LOCAL_ARG,
+            "help|h"     => \$HELP_ARG,
+            "version|v"  => \$VERSION_ARG,
+            "update"     => \$UPDATE_ARG,
+           "quiet|q"    => \$QUIET_ARG,
+           "srcdir=s"   => \$SRCDIR_ARG,
+            ) or &error;
+
+&split_on_argument;
+
+
+## Check for options. 
+## This section will check for the different options.
+
+sub split_on_argument {
+
+    if ($VERSION_ARG) {
+        &version;
+
+    } elsif ($HELP_ARG) {
+       &help;
+        
+    } elsif ($LOCAL_ARG) {
+        &place_local;
+        &extract;
+
+    } elsif ($UPDATE_ARG) {
+       &place_normal;
+       &extract;
+
+    } elsif (@ARGV > 0) {
+       &place_normal;
+       &message;
+       &extract;
+
+    } else {
+       &help;
+
+    }  
+}    
+
+sub place_normal {
+    $FILE       = $ARGV[0];
+    $OUTFILE     = "$FILE.h";
+
+    my $dirname = dirname ($OUTFILE);
+    if (! -d "$dirname" && $dirname ne "") {
+        system ("mkdir -p $dirname");
+    }
+}   
+
+sub place_local {
+    $FILE       = $ARGV[0];
+    $OUTFILE     = fileparse($FILE, ());
+    if (!-e "tmp/") { 
+        system("mkdir tmp/"); 
+    }
+    $OUTFILE     = "./tmp/$OUTFILE.h"
+}
+
+sub determine_type {
+   if ($TYPE_ARG =~ /^gettext\/(.*)/) {
+       $gettext_type=$1
+   }
+}
+
+## Sub for printing release information
+sub version{
+    print <<_EOF_;
+${PROGRAM} (${PACKAGE}) $VERSION
+Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+Written by Kenneth Christiansen, 2000.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+    exit;
+}
+
+## Sub for printing usage information
+sub help {
+    print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... [FILENAME]
+Generates a header file from an XML source file.
+
+It grabs all strings between <_translatable_node> and its end tag in
+XML files. Read manpage (man ${PROGRAM}) for more info.
+
+      --type=TYPE   Specify the file type of FILENAME. Currently supports:
+                    "gettext/glade", "gettext/ini", "gettext/keys"
+                    "gettext/rfc822deb", "gettext/schemas",
+                    "gettext/scheme", "gettext/xml", "gettext/quoted"
+  -l, --local       Writes output into current working directory
+                    (conflicts with --update)
+      --update      Writes output into the same directory the source file 
+                    reside (conflicts with --local)
+      --srcdir      Root of the source tree
+  -v, --version     Output version information and exit
+  -h, --help        Display this help and exit
+  -q, --quiet       Quiet mode
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+    exit;
+}
+
+## Sub for printing error messages
+sub error{
+    print STDERR "Try `${PROGRAM} --help' for more information.\n";
+    exit;
+}
+
+sub message {
+    print "Generating C format header file for translation.\n" unless $QUIET_ARG;
+}
+
+sub extract {
+    &determine_type;
+
+    &convert;
+
+    open OUT, ">$OUTFILE";
+    binmode (OUT) if $^O eq 'MSWin32';
+    &msg_write;
+    close OUT;
+
+    print "Wrote $OUTFILE\n" unless $QUIET_ARG;
+}
+
+sub convert {
+
+    ## Reading the file
+    {
+       local (*IN);
+       local $/; #slurp mode
+       open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!";
+       $input = <IN>;
+    }
+
+    &type_ini if $gettext_type eq "ini";
+    &type_keys if $gettext_type eq "keys";
+    &type_xml if $gettext_type eq "xml";
+    &type_glade if $gettext_type eq "glade";
+    &type_scheme if $gettext_type eq "scheme";
+    &type_schemas  if $gettext_type eq "schemas";
+    &type_rfc822deb  if $gettext_type eq "rfc822deb";
+    &type_quoted if $gettext_type eq "quoted";
+}
+
+sub entity_decode_minimal
+{
+    local ($_) = @_;
+
+    s/&apos;/'/g; # '
+    s/&quot;/"/g; # "
+    s/&amp;/&/g;
+
+    return $_;
+}
+
+sub entity_decode
+{
+    local ($_) = @_;
+
+    s/&apos;/'/g; # '
+    s/&quot;/"/g; # "
+    s/&lt;/</g;
+    s/&gt;/>/g;
+    s/&amp;/&/g;
+
+    return $_;
+}
+
+sub escape_char
+{
+    return '\"' if $_ eq '"';
+    return '\n' if $_ eq "\n";
+    return '\\\\' if $_ eq '\\';
+
+    return $_;
+}
+
+sub escape
+{
+    my ($string) = @_;
+    return join "", map &escape_char, split //, $string;
+}
+
+sub type_ini {
+    ### For generic translatable desktop files ###
+    while ($input =~ /^(#(.+)\n)?^_.*=(.*)$/mg) {
+        if (defined($2))  {
+            $comments{$3} = $2;
+        }
+        $messages{$3} = [];
+    }
+}
+
+sub type_keys {
+    ### For generic translatable mime/keys files ###
+    while ($input =~ /^\s*_\w+=(.*)$/mg) {
+        $messages{$1} = [];
+    }
+}
+
+sub type_xml {
+    ### For generic translatable XML files ###
+    my $tree = readXml($input);
+    parseTree(0, $tree);
+}
+
+sub print_var {
+    my $var = shift;
+    my $vartype = ref $var;
+    
+    if ($vartype =~ /ARRAY/) {
+        my @arr = @{$var};
+        print "[ ";
+        foreach my $el (@arr) {
+            print_var($el);
+            print ", ";
+        }
+        print "] ";
+    } elsif ($vartype =~ /HASH/) {
+        my %hash = %{$var};
+        print "{ ";
+        foreach my $key (keys %hash) {
+            print "$key => ";
+            print_var($hash{$key});
+            print ", ";
+        }
+        print "} ";
+    } else {
+        print $var;
+    }
+}
+
+# Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment)
+sub getAttributeString
+{
+    my $sub = shift;
+    my $do_translate = shift || 1;
+    my $language = shift || "";
+    my $translate = shift;
+    my $result = "";
+    foreach my $e (reverse(sort(keys %{ $sub }))) {
+       my $key    = $e;
+       my $string = $sub->{$e};
+       my $quote = '"';
+       
+       $string =~ s/^[\s]+//;
+       $string =~ s/[\s]+$//;
+       
+       if ($string =~ /^'.*'$/)
+       {
+           $quote = "'";
+       }
+       $string =~ s/^['"]//g;
+       $string =~ s/['"]$//g;
+
+        ## differences from intltool-merge.in.in
+       if ($key =~ /^_/) {
+            $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT;
+            $messages{entity_decode($string)} = [];
+            $$translate = 2;
+       }
+        ## differences end here from intltool-merge.in.in
+       $result .= " $key=$quote$string$quote";
+    }
+    return $result;
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub getXMLstring
+{
+    my $ref = shift;
+    my $spacepreserve = shift || 0;
+    my @list = @{ $ref };
+    my $result = "";
+
+    my $count = scalar(@list);
+    my $attrs = $list[0];
+    my $index = 1;
+
+    $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+    $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+
+    while ($index < $count) {
+       my $type = $list[$index];
+       my $content = $list[$index+1];
+        if (! $type ) {
+           # We've got CDATA
+           if ($content) {
+               # lets strip the whitespace here, and *ONLY* here
+                $content =~ s/\s+/ /gs if (!$spacepreserve);
+               $result .= $content;
+           }
+       } elsif ( "$type" ne "1" ) {
+           # We've got another element
+           $result .= "<$type";
+           $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements
+           if ($content) {
+               my $subresult = getXMLstring($content, $spacepreserve);
+               if ($subresult) {
+                   $result .= ">".$subresult . "</$type>";
+               } else {
+                   $result .= "/>";
+               }
+           } else {
+               $result .= "/>";
+           }
+       }
+       $index += 2;
+    }
+    return $result;
+}
+
+# Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed
+# Translate list of nodes if necessary
+sub translate_subnodes
+{
+    my $fh = shift;
+    my $content = shift;
+    my $language = shift || "";
+    my $singlelang = shift || 0;
+    my $spacepreserve = shift || 0;
+
+    my @nodes = @{ $content };
+
+    my $count = scalar(@nodes);
+    my $index = 0;
+    while ($index < $count) {
+        my $type = $nodes[$index];
+        my $rest = $nodes[$index+1];
+        traverse($fh, $type, $rest, $language, $spacepreserve);
+        $index += 2;
+    }
+}
+
+# Based on traverse() in intltool-merge.in.in
+sub traverse
+{
+    my $fh = shift; # unused, to allow us to sync code between -merge and -extract
+    my $nodename = shift;
+    my $content = shift;
+    my $language = shift || "";
+    my $spacepreserve = shift || 0;
+
+    if ($nodename && "$nodename" eq "1") {
+        $XMLCOMMENT = $content;
+    } elsif ($nodename) {
+       # element
+       my @all = @{ $content };
+       my $attrs = shift @all;
+       my $translate = 0;
+       my $outattr = getAttributeString($attrs, 1, $language, \$translate);
+
+       if ($nodename =~ /^_/) {
+           $translate = 1;
+           $nodename =~ s/^_//;
+       }
+       my $lookup = '';
+
+        $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+        $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+       if ($translate) {
+           $lookup = getXMLstring($content, $spacepreserve);
+            if (!$spacepreserve) {
+                $lookup =~ s/^\s+//s;
+                $lookup =~ s/\s+$//s;
+            }
+
+           if ($lookup && $translate != 2) {
+                $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT;
+                $messages{$lookup} = [];
+            } elsif ($translate == 2) {
+                translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+           }
+       } else {
+            $XMLCOMMENT = "";
+           my $count = scalar(@all);
+           if ($count > 0) {
+                my $index = 0;
+                while ($index < $count) {
+                    my $type = $all[$index];
+                    my $rest = $all[$index+1];
+                    traverse($fh, $type, $rest, $language, $spacepreserve);
+                    $index += 2;
+                }
+           }
+       }
+        $XMLCOMMENT = "";
+    }
+}
+
+
+# Verbatim copy from intltool-merge.in.in, $fh for compatibility
+sub parseTree
+{
+    my $fh        = shift;
+    my $ref       = shift;
+    my $language  = shift || "";
+
+    my $name = shift @{ $ref };
+    my $cont = shift @{ $ref };
+
+    while (!$name || "$name" eq "1") {
+        $name = shift @{ $ref };
+        $cont = shift @{ $ref };
+    }
+
+    my $spacepreserve = 0;
+    my $attrs = @{$cont}[0];
+    $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+    traverse($fh, $name, $cont, $language, $spacepreserve);
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_comment
+{
+    my $expat = shift;
+    my $data  = $expat->original_string();
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    $data =~ s/^<!--//s;
+    $data =~ s/-->$//s;
+    push @$clist, 1 => $data;
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_cdatastart
+{
+    my $expat    = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    push @$clist, 0 => $expat->original_string();
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_cdataend
+{
+    my $expat    = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    $clist->[$pos] .= $expat->original_string();
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_char
+{
+    my $expat = shift;
+    my $text  = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    # Use original_string so that we retain escaped entities
+    # in CDATA sections.
+    #
+    if ($pos > 0 and $clist->[$pos - 1] eq '0') {
+        $clist->[$pos] .= $expat->original_string();
+    } else {
+        push @$clist, 0 => $expat->original_string();
+    }
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_start
+{
+    my $expat    = shift;
+    my $tag      = shift;
+    my @origlist = ();
+
+    # Use original_string so that we retain escaped entities
+    # in attribute values.  We must convert the string to an
+    # @origlist array to conform to the structure of the Tree
+    # Style.
+    #
+    my @original_array = split /\x/, $expat->original_string();
+    my $source         = $expat->original_string();
+
+    # Remove leading tag.
+    #
+    $source =~ s|^\s*<\s*(\S+)||s;
+
+    # Grab attribute key/value pairs and push onto @origlist array.
+    #
+    while ($source)
+    {
+       if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/)
+       {
+           $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s;
+           push @origlist, $1;
+           push @origlist, '"' . $2 . '"';
+       }
+       elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/)
+       {
+           $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s;
+           push @origlist, $1;
+           push @origlist, "'" . $2 . "'";
+       }
+       else
+       {
+           last;
+       }
+    }
+
+    my $ol = [ { @origlist } ];
+
+    push @{ $expat->{Lists} }, $expat->{Curlist};
+    push @{ $expat->{Curlist} }, $tag => $ol;
+    $expat->{Curlist} = $ol;
+}
+
+# Copied from intltool-merge.in.in and added comment handler.
+sub readXml
+{
+    my $xmldoc = shift || return;
+    my $ret = eval 'require XML::Parser';
+    if(!$ret) {
+        die "You must have XML::Parser installed to run $0\n\n";
+    }
+    my $xp = new XML::Parser(Style => 'Tree');
+    $xp->setHandlers(Char => \&intltool_tree_char);
+    $xp->setHandlers(Start => \&intltool_tree_start);
+    $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart);
+    $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend);
+
+    ## differences from intltool-merge.in.in
+    $xp->setHandlers(Comment => \&intltool_tree_comment);
+    ## differences end here from intltool-merge.in.in
+
+    my $tree = $xp->parse($xmldoc);
+    #print_var($tree);
+
+# <foo><!-- comment --><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+# would be:
+# [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ",  em, [{}, 0, "there"]], bar, 
+# [{}, 0, "Howdy",  ref, [{}]], 0, "do" ] ]
+
+    return $tree;
+}
+
+sub type_schemas {
+    ### For schemas XML files ###
+         
+    # FIXME: We should handle escaped < (less than)
+    while ($input =~ /
+                      <locale\ name="C">\s*
+                          (<default>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/default>\s*)?
+                          (<short>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/short>\s*)?
+                          (<long>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/long>\s*)?
+                      <\/locale>
+                     /sgx) {
+        my @totranslate = ($3,$6,$9);
+        my @eachcomment = ($2,$5,$8);
+        foreach (@totranslate) {
+            my $currentcomment = shift @eachcomment;
+            next if !$_;
+            s/\s+/ /g;
+            $messages{entity_decode_minimal($_)} = [];
+            $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment));
+        }
+    }
+}
+
+sub type_rfc822deb {
+    ### For rfc822-style Debian configuration files ###
+
+    my $lineno = 1;
+    my $type = '';
+    while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg)
+    {
+        my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5);
+        while ($pre =~ m/\n/g)
+        {
+            $lineno ++;
+        }
+        $lineno += length($newline);
+        my @str_list = rfc822deb_split(length($underscore), $text);
+        for my $str (@str_list)
+        {
+            $strcount++;
+            $messages{$str} = [];
+            $loc{$str} = $lineno;
+            $count{$str} = $strcount;
+            my $usercomment = '';
+            while($pre =~ s/(^|\n)#([^\n]*)$//s)
+            {
+                $usercomment = "\n" . $2 . $usercomment;
+            }
+            $comments{$str} = $tag . $usercomment;
+        }
+        $lineno += ($text =~ s/\n//g);
+    }
+}
+
+sub rfc822deb_split {
+    # Debian defines a special way to deal with rfc822-style files:
+    # when a value contain newlines, it consists of
+    #   1.  a short form (first line)
+    #   2.  a long description, all lines begin with a space,
+    #       and paragraphs are separated by a single dot on a line
+    # This routine returns an array of all paragraphs, and reformat
+    # them.
+    # When first argument is 2, the string is a comma separated list of
+    # values.
+    my $type = shift;
+    my $text = shift;
+    $text =~ s/^[ \t]//mg;
+    return (split(/, */, $text, 0)) if $type ne 1;
+    return ($text) if $text !~ /\n/;
+
+    $text =~ s/([^\n]*)\n//;
+    my @list = ($1);
+    my $str = '';
+    for my $line (split (/\n/, $text))
+    {
+        chomp $line;
+        if ($line =~ /^\.\s*$/)
+        {
+            #  New paragraph
+            $str =~ s/\s*$//;
+            push(@list, $str);
+            $str = '';
+        }
+        elsif ($line =~ /^\s/)
+        {
+            #  Line which must not be reformatted
+            $str .= "\n" if length ($str) && $str !~ /\n$/;
+            $line =~ s/\s+$//;
+            $str .= $line."\n";
+        }
+        else
+        {
+            #  Continuation line, remove newline
+            $str .= " " if length ($str) && $str !~ /\n$/;
+            $str .= $line;
+        }
+    }
+    $str =~ s/\s*$//;
+    push(@list, $str) if length ($str);
+    return @list;
+}
+
+sub type_quoted {
+    while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) {
+        my $message = $1;
+        my $before = $`;
+        $message =~ s/\\\"/\"/g;
+        $before =~ s/[^\n]//g;
+        $messages{$message} = [];
+        $loc{$message} = length ($before) + 2;
+    }
+}
+
+sub type_glade {
+    ### For translatable Glade XML files ###
+
+    my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message";
+
+    while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) {
+       # Glade sometimes uses tags that normally mark translatable things for
+        # little bits of non-translatable content. We work around this by not
+        # translating strings that only includes something like label4 or window1.
+       $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/;
+    }
+    
+    while ($input =~ /<items>(..[^<]*)<\/items>/sg) {
+       for my $item (split (/\n/, $1)) {
+           $messages{entity_decode($item)} = [];
+       }
+    }
+
+    ## handle new glade files
+    while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) {
+       $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/;
+        if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) {
+          $comments{entity_decode($3)} = entity_decode($2) ;
+        }
+    }
+    while ($input =~ /<atkaction\s+action_name="([^>]*)"\s+description="([^>]+)"\/>/sg) {
+        $messages{entity_decode_minimal($2)} = [];
+    }
+}
+
+sub type_scheme {
+    my ($line, $i, $state, $str, $trcomment, $char);
+    for $line (split(/\n/, $input)) {
+        $i = 0;
+        $state = 0; # 0 - nothing, 1 - string, 2 - translatable string
+        while ($i < length($line)) {
+            if (substr($line,$i,1) eq "\"") {
+                if ($state == 2) {
+                    $comments{$str} = $trcomment if ($trcomment);
+                    $messages{$str} = [];
+                    $str = '';
+                    $state = 0; $trcomment = "";
+                } elsif ($state == 1) {
+                    $str = '';
+                    $state = 0; $trcomment = "";
+                } else {
+                    $state = 1;
+                    $str = '';
+                    if ($i>0 && substr($line,$i-1,1) eq '_') {
+                        $state = 2;
+                    }
+                }
+            } elsif (!$state) {
+                if (substr($line,$i,1) eq ";") {
+                    $trcomment = substr($line,$i+1);
+                    $trcomment =~ s/^;*\s*//;
+                    $i = length($line);
+                } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) {
+                    $trcomment = "";
+                }
+            } else {
+                if (substr($line,$i,1) eq "\\") {
+                    $char = substr($line,$i+1,1);
+                    if ($char ne "\"" && $char ne "\\") {
+                       $str = $str . "\\";
+                    }
+                    $i++;
+                }
+                $str = $str . substr($line,$i,1);
+            }
+            $i++;
+        }
+    }
+}
+
+sub msg_write {
+    my @msgids;
+    if (%count)
+    {
+        @msgids = sort { $count{$a} <=> $count{$b} } keys %count;
+    }
+    else
+    {
+        @msgids = sort keys %messages;
+    }
+    for my $message (@msgids)
+    {
+       my $offsetlines = 1;
+       $offsetlines++ if $message =~ /%/;
+       if (defined ($comments{$message}))
+       {
+               while ($comments{$message} =~ m/\n/g)
+               {
+                   $offsetlines++;
+               }
+       }
+       print OUT "# ".($loc{$message} - $offsetlines).  " \"$FILE\"\n"
+               if defined $loc{$message};
+       print OUT "/* ".$comments{$message}." */\n"
+                if defined $comments{$message};
+       print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/;
+        
+       my @lines = split (/\n/, $message, -1);
+       for (my $n = 0; $n < @lines; $n++)
+       {
+            if ($n == 0)
+            {
+               print OUT "char *s = N_(\""; 
+            }
+            else
+            {  
+                print OUT "             \""; 
+            }
+
+            print OUT escape($lines[$n]);
+
+            if ($n < @lines - 1)
+            {
+                print OUT "\\n\"\n"; 
+            }
+            else
+            {
+                print OUT "\");\n";  
+           }
+        }
+    }
+}
+
diff --git a/intltool-merge.in b/intltool-merge.in
new file mode 100644 (file)
index 0000000..e5671d7
--- /dev/null
@@ -0,0 +1,1451 @@
+#!@INTLTOOL_PERL@ -w
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4  -*-
+
+#
+#  The Intltool Message Merger
+#
+#  Copyright (C) 2000, 2003 Free Software Foundation.
+#  Copyright (C) 2000, 2001 Eazel, Inc
+#
+#  Intltool is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License 
+#  version 2 published by the Free Software Foundation.
+#
+#  Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#  As a special exception to the GNU General Public License, if you
+#  distribute this file as part of a program that contains a
+#  configuration script generated by Autoconf, you may include it under
+#  the same distribution terms that you use for the rest of that program.
+#
+#  Authors:  Maciej Stachowiak <mjs@noisehavoc.org>
+#            Kenneth Christiansen <kenneth@gnu.org>
+#            Darin Adler <darin@bentspoon.com>
+#
+#  Proper XML UTF-8'ification written by Cyrille Chepelov <chepelov@calixo.net>
+#
+
+## Release information
+my $PROGRAM = "intltool-merge";
+my $PACKAGE = "intltool";
+my $VERSION = "0.36.2";
+
+## Loaded modules
+use strict; 
+use Getopt::Long;
+use Text::Wrap;
+use File::Basename;
+
+my $must_end_tag      = -1;
+my $last_depth        = -1;
+my $translation_depth = -1;
+my @tag_stack = ();
+my @entered_tag = ();
+my @translation_strings = ();
+my $leading_space = "";
+
+## Scalars used by the option stuff
+my $HELP_ARG = 0;
+my $VERSION_ARG = 0;
+my $BA_STYLE_ARG = 0;
+my $XML_STYLE_ARG = 0;
+my $KEYS_STYLE_ARG = 0;
+my $DESKTOP_STYLE_ARG = 0;
+my $SCHEMAS_STYLE_ARG = 0;
+my $RFC822DEB_STYLE_ARG = 0;
+my $QUOTED_STYLE_ARG = 0;
+my $QUIET_ARG = 0;
+my $PASS_THROUGH_ARG = 0;
+my $UTF8_ARG = 0;
+my $MULTIPLE_OUTPUT = 0;
+my $cache_file;
+
+## Handle options
+GetOptions 
+(
+ "help" => \$HELP_ARG,
+ "version" => \$VERSION_ARG,
+ "quiet|q" => \$QUIET_ARG,
+ "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility
+ "ba-style|b" => \$BA_STYLE_ARG,
+ "xml-style|x" => \$XML_STYLE_ARG,
+ "keys-style|k" => \$KEYS_STYLE_ARG,
+ "desktop-style|d" => \$DESKTOP_STYLE_ARG,
+ "schemas-style|s" => \$SCHEMAS_STYLE_ARG,
+ "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG,
+ "quoted-style" => \$QUOTED_STYLE_ARG,
+ "pass-through|p" => \$PASS_THROUGH_ARG,
+ "utf8|u" => \$UTF8_ARG,
+ "multiple-output|m" => \$MULTIPLE_OUTPUT,
+ "cache|c=s" => \$cache_file
+ ) or &error;
+
+my $PO_DIR;
+my $FILE;
+my $OUTFILE;
+
+my %po_files_by_lang = ();
+my %translations = ();
+my $iconv = $ENV{"ICONV"} || "iconv";
+my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
+
+sub isProgramInPath
+{
+    my ($file) = @_;
+    # If either a file exists, or when run it returns 0 exit status
+    return 1 if ((-x $file) or (system("$file -l >$devnull") == 0));
+    return 0;
+}
+
+if (! isProgramInPath ("$iconv"))
+{
+       print STDERR " *** iconv is not found on this system!\n".
+                    " *** Without it, intltool-merge can not convert encodings.\n";
+       exit;
+}
+
+# Use this instead of \w for XML files to handle more possible characters.
+my $w = "[-A-Za-z0-9._:]";
+
+# XML quoted string contents
+my $q = "[^\\\"]*";
+
+## Check for options. 
+
+if ($VERSION_ARG) 
+{
+       &print_version;
+} 
+elsif ($HELP_ARG) 
+{
+       &print_help;
+} 
+elsif ($BA_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &ba_merge_translations;
+       &finalize;
+} 
+elsif ($XML_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &xml_merge_output;
+       &finalize;
+} 
+elsif ($KEYS_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &keys_merge_translations;
+       &finalize;
+} 
+elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &desktop_merge_translations;
+       &finalize;
+} 
+elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &schemas_merge_translations;
+       &finalize;
+} 
+elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2) 
+{
+       &preparation;
+       &print_message;
+       &rfc822deb_merge_translations;
+       &finalize;
+} 
+elsif ($QUOTED_STYLE_ARG && @ARGV > 2) 
+{
+       &utf8_sanity_check;
+       &preparation;
+       &print_message;
+       &quoted_merge_translations;
+       &finalize;
+} 
+else 
+{
+       &print_help;
+}
+
+exit;
+
+## Sub for printing release information
+sub print_version
+{
+    print <<_EOF_;
+${PROGRAM} (${PACKAGE}) ${VERSION}
+Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen.
+
+Copyright (C) 2000-2003 Free Software Foundation, Inc.
+Copyright (C) 2000-2001 Eazel, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+    exit;
+}
+
+## Sub for printing usage information
+sub print_help
+{
+    print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE
+Generates an output file that includes some localized attributes from an
+untranslated source file.
+
+Mandatory options: (exactly one must be specified)
+  -b, --ba-style         includes translations in the bonobo-activation style
+  -d, --desktop-style    includes translations in the desktop style
+  -k, --keys-style       includes translations in the keys style
+  -s, --schemas-style    includes translations in the schemas style
+  -r, --rfc822deb-style  includes translations in the RFC822 style
+      --quoted-style     includes translations in the quoted string style
+  -x, --xml-style        includes translations in the standard xml style
+
+Other options:
+  -u, --utf8             convert all strings to UTF-8 before merging 
+                         (default for everything except RFC822 style)
+  -p, --pass-through     deprecated, does nothing and issues a warning
+  -m, --multiple-output  output one localized file per locale, instead of 
+                        a single file containing all localized elements
+  -c, --cache=FILE       specify cache file name
+                         (usually \$top_builddir/po/.intltool-merge-cache)
+  -q, --quiet            suppress most messages
+      --help             display this help and exit
+      --version          output version information and exit
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+    exit;
+}
+
+
+## Sub for printing error messages
+sub print_error
+{
+    print STDERR "Try `${PROGRAM} --help' for more information.\n";
+    exit;
+}
+
+
+sub print_message 
+{
+    print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG;
+}
+
+
+sub preparation 
+{
+    $PO_DIR = $ARGV[0];
+    $FILE = $ARGV[1];
+    $OUTFILE = $ARGV[2];
+
+    &gather_po_files;
+    &get_translation_database;
+}
+
+# General-purpose code for looking up translations in .po files
+
+sub po_file2lang
+{
+    my ($tmp) = @_; 
+    $tmp =~ s/^.*\/(.*)\.po$/$1/; 
+    return $tmp; 
+}
+
+sub gather_po_files
+{
+    if (my $linguas = $ENV{"LINGUAS"})
+    {
+        for my $lang (split / /, $linguas) {
+            my $po_file = $PO_DIR . "/" . $lang . ".po";
+            if (-e $po_file) {
+                $po_files_by_lang{$lang} = $po_file;
+            }
+        }
+    }
+    else
+    {
+        if (open LINGUAS_FILE, "$PO_DIR/LINGUAS")
+        {
+            while (<LINGUAS_FILE>)
+            {
+                next if /^#/;
+
+                if (/([-a-zA-Z_@.]+)\n/)
+                {
+                    my $lang = $1;
+
+                    my $po_file = $PO_DIR . "/" . $lang . ".po";
+                    if (-e $po_file) {
+                        $po_files_by_lang{$lang} = $po_file;
+                    }
+                }
+            }
+
+            close LINGUAS_FILE;
+        }
+        else
+        {
+            for my $po_file (glob "$PO_DIR/*.po") {
+                $po_files_by_lang{po_file2lang($po_file)} = $po_file;
+            }
+        }
+    }
+}
+
+sub get_local_charset
+{
+    my ($encoding) = @_;
+    my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "@INTLTOOL_LIBDIR@/charset.alias";
+
+    # seek character encoding aliases in charset.alias (glib)
+
+    if (open CHARSET_ALIAS, $alias_file) 
+    {
+       while (<CHARSET_ALIAS>) 
+        {
+            next if /^\#/;
+            return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i)
+        }
+
+        close CHARSET_ALIAS;
+    }
+
+    # if not found, return input string
+
+    return $encoding;
+}
+
+sub get_po_encoding
+{
+    my ($in_po_file) = @_;
+    my $encoding = "";
+
+    open IN_PO_FILE, $in_po_file or die;
+    while (<IN_PO_FILE>) 
+    {
+        ## example: "Content-Type: text/plain; charset=ISO-8859-1\n"
+        if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) 
+        {
+            $encoding = $1; 
+            last;
+        }
+    }
+    close IN_PO_FILE;
+
+    if (!$encoding) 
+    {
+        print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG;
+        $encoding = "ISO-8859-1";
+    }
+
+    system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull");
+    if ($?) {
+       $encoding = get_local_charset($encoding);
+    }
+
+    return $encoding
+}
+
+sub utf8_sanity_check 
+{
+    print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG;
+    $UTF8_ARG = 1;
+}
+
+sub get_translation_database
+{
+    if ($cache_file) {
+       &get_cached_translation_database;
+    } else {
+        &create_translation_database;
+    }
+}
+
+sub get_newest_po_age
+{
+    my $newest_age;
+
+    foreach my $file (values %po_files_by_lang) 
+    {
+       my $file_age = -M $file;
+       $newest_age = $file_age if !$newest_age || $file_age < $newest_age;
+    }
+
+    $newest_age = 0 if !$newest_age;
+
+    return $newest_age;
+}
+
+sub create_cache
+{
+    print "Generating and caching the translation database\n" unless $QUIET_ARG;
+
+    &create_translation_database;
+
+    open CACHE, ">$cache_file" || die;
+    print CACHE join "\x01", %translations;
+    close CACHE;
+}
+
+sub load_cache 
+{
+    print "Found cached translation database\n" unless $QUIET_ARG;
+
+    my $contents;
+    open CACHE, "<$cache_file" || die;
+    {
+        local $/;
+        $contents = <CACHE>;
+    }
+    close CACHE;
+    %translations = split "\x01", $contents;
+}
+
+sub get_cached_translation_database
+{
+    my $cache_file_age = -M $cache_file;
+    if (defined $cache_file_age) 
+    {
+        if ($cache_file_age <= &get_newest_po_age) 
+        {
+            &load_cache;
+            return;
+        }
+        print "Found too-old cached translation database\n" unless $QUIET_ARG;
+    }
+
+    &create_cache;
+}
+
+sub create_translation_database
+{
+    for my $lang (keys %po_files_by_lang) 
+    {
+       my $po_file = $po_files_by_lang{$lang};
+
+        if ($UTF8_ARG) 
+        {
+            my $encoding = get_po_encoding ($po_file);
+
+            if (lc $encoding eq "utf-8") 
+            {
+                open PO_FILE, "<$po_file";     
+            } 
+            else 
+            {
+               print "NOTICE: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;;
+
+                open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|";        
+            }
+        } 
+        else 
+        {
+            open PO_FILE, "<$po_file"; 
+        }
+
+       my $nextfuzzy = 0;
+       my $inmsgid = 0;
+       my $inmsgstr = 0;
+       my $msgid = "";
+       my $msgstr = "";
+
+        while (<PO_FILE>) 
+        {
+           $nextfuzzy = 1 if /^#, fuzzy/;
+       
+           if (/^msgid "((\\.|[^\\]+)*)"/ ) 
+            {
+               $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr;
+               $msgid = "";
+               $msgstr = "";
+
+               if ($nextfuzzy) {
+                   $inmsgid = 0;
+               } else {
+                   $msgid = unescape_po_string($1);
+                   $inmsgid = 1;
+               }
+               $inmsgstr = 0;
+               $nextfuzzy = 0;
+           }
+
+           if (/^msgstr "((\\.|[^\\]+)*)"/) 
+            {
+               $msgstr = unescape_po_string($1);
+               $inmsgstr = 1;
+               $inmsgid = 0;
+           }
+
+           if (/^"((\\.|[^\\]+)*)"/) 
+            {
+               $msgid .= unescape_po_string($1) if $inmsgid;
+               $msgstr .= unescape_po_string($1) if $inmsgstr;
+           }
+       }
+       $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr;
+    }
+}
+
+sub finalize
+{
+}
+
+sub unescape_one_sequence
+{
+    my ($sequence) = @_;
+
+    return "\\" if $sequence eq "\\\\";
+    return "\"" if $sequence eq "\\\"";
+    return "\n" if $sequence eq "\\n";
+    return "\r" if $sequence eq "\\r";
+    return "\t" if $sequence eq "\\t";
+    return "\b" if $sequence eq "\\b";
+    return "\f" if $sequence eq "\\f";
+    return "\a" if $sequence eq "\\a";
+    return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7)
+
+    return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/);
+    return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/);
+
+    # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489
+
+    return $sequence;
+}
+
+sub unescape_po_string
+{
+    my ($string) = @_;
+
+    $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg;
+
+    return $string;
+}
+
+sub entity_decode
+{
+    local ($_) = @_;
+
+    s/&apos;/'/g; # '
+    s/&quot;/"/g; # "
+    s/&lt;/</g;
+    s/&gt;/>/g;
+    s/&amp;/&/g;
+
+    return $_;
+}
+# entity_encode: (string)
+#
+# Encode the given string to XML format (encode '<' etc).
+
+sub entity_encode
+{
+    my ($pre_encoded) = @_;
+
+    my @list_of_chars = unpack ('C*', $pre_encoded);
+
+    # with UTF-8 we only encode minimalistic
+    return join ('', map (&entity_encode_int_minimalist, @list_of_chars));
+}
+
+sub entity_encode_int_minimalist
+{
+    return "&quot;" if $_ == 34;
+    return "&amp;" if $_ == 38;
+    return "&apos;" if $_ == 39;
+    return "&lt;" if $_ == 60;
+    return chr $_;
+}
+
+sub entity_encoded_translation
+{
+    my ($lang, $string) = @_;
+
+    my $translation = $translations{$lang, $string};
+    return $string if !$translation;
+    return entity_encode ($translation);
+}
+
+## XML (bonobo-activation specific) merge code
+
+sub ba_merge_translations
+{
+    my $source;
+
+    {
+       local $/; # slurp mode
+       open INPUT, "<$FILE" or die "can't open $FILE: $!";
+       $source = <INPUT>;
+       close INPUT;
+    }
+
+    open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!";
+    # Binmode so that selftest works ok if using a native Win32 Perl...
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+
+    while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) 
+    {
+        print OUTPUT $1;
+
+        my $node = $2 . "\n";
+
+        my @strings = ();
+        $_ = $node;
+       while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) {
+             push @strings, entity_decode($3);
+        }
+       print OUTPUT;
+
+       my %langs;
+       for my $string (@strings) 
+        {
+           for my $lang (keys %po_files_by_lang) 
+            {
+                $langs{$lang} = 1 if $translations{$lang, $string};
+           }
+       }
+       
+       for my $lang (sort keys %langs) 
+        {
+           $_ = $node;
+           s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s;
+           s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg;
+           print OUTPUT;
+        }
+    }
+
+    print OUTPUT $source;
+
+    close OUTPUT;
+}
+
+
+## XML (non-bonobo-activation) merge code
+
+
+# Process tag attributes
+#   Only parameter is a HASH containing attributes -> values mapping
+sub getAttributeString
+{
+    my $sub = shift;
+    my $do_translate = shift || 0;
+    my $language = shift || "";
+    my $result = "";
+    my $translate = shift;
+    foreach my $e (reverse(sort(keys %{ $sub }))) {
+       my $key    = $e;
+       my $string = $sub->{$e};
+       my $quote = '"';
+       
+       $string =~ s/^[\s]+//;
+       $string =~ s/[\s]+$//;
+       
+       if ($string =~ /^'.*'$/)
+       {
+           $quote = "'";
+       }
+       $string =~ s/^['"]//g;
+       $string =~ s/['"]$//g;
+
+       if ($do_translate && $key =~ /^_/) {
+           $key =~ s|^_||g;
+           if ($language) {
+               # Handle translation
+               my $decode_string = entity_decode($string);
+               my $translation = $translations{$language, $decode_string};
+               if ($translation) {
+                   $translation = entity_encode($translation);
+                   $string = $translation;
+                }
+                $$translate = 2;
+            } else {
+                 $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate
+            }
+       }
+       
+       $result .= " $key=$quote$string$quote";
+    }
+    return $result;
+}
+
+# Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree
+sub getXMLstring
+{
+    my $ref = shift;
+    my $spacepreserve = shift || 0;
+    my @list = @{ $ref };
+    my $result = "";
+
+    my $count = scalar(@list);
+    my $attrs = $list[0];
+    my $index = 1;
+
+    $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+    $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+
+    while ($index < $count) {
+       my $type = $list[$index];
+       my $content = $list[$index+1];
+        if (! $type ) {
+           # We've got CDATA
+           if ($content) {
+               # lets strip the whitespace here, and *ONLY* here
+                $content =~ s/\s+/ /gs if (!$spacepreserve);
+               $result .= $content;
+           }
+       } elsif ( "$type" ne "1" ) {
+           # We've got another element
+           $result .= "<$type";
+           $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements
+           if ($content) {
+               my $subresult = getXMLstring($content, $spacepreserve);
+               if ($subresult) {
+                   $result .= ">".$subresult . "</$type>";
+               } else {
+                   $result .= "/>";
+               }
+           } else {
+               $result .= "/>";
+           }
+       }
+       $index += 2;
+    }
+    return $result;
+}
+
+# Translate list of nodes if necessary
+sub translate_subnodes
+{
+    my $fh = shift;
+    my $content = shift;
+    my $language = shift || "";
+    my $singlelang = shift || 0;
+    my $spacepreserve = shift || 0;
+
+    my @nodes = @{ $content };
+
+    my $count = scalar(@nodes);
+    my $index = 0;
+    while ($index < $count) {
+        my $type = $nodes[$index];
+        my $rest = $nodes[$index+1];
+        if ($singlelang) {
+            my $oldMO = $MULTIPLE_OUTPUT;
+            $MULTIPLE_OUTPUT = 1;
+            traverse($fh, $type, $rest, $language, $spacepreserve);
+            $MULTIPLE_OUTPUT = $oldMO;
+        } else {
+            traverse($fh, $type, $rest, $language, $spacepreserve);
+        }
+        $index += 2;
+    }
+}
+
+sub isWellFormedXmlFragment
+{
+    my $ret = eval 'require XML::Parser';
+    if(!$ret) {
+        die "You must have XML::Parser installed to run $0\n\n";
+    } 
+
+    my $fragment = shift;
+    return 0 if (!$fragment);
+
+    $fragment = "<root>$fragment</root>";
+    my $xp = new XML::Parser(Style => 'Tree');
+    my $tree = 0;
+    eval { $tree = $xp->parse($fragment); };
+    return $tree;
+}
+
+sub traverse
+{
+    my $fh = shift; 
+    my $nodename = shift;
+    my $content = shift;
+    my $language = shift || "";
+    my $spacepreserve = shift || 0;
+
+    if (!$nodename) {
+       if ($content =~ /^[\s]*$/) {
+           $leading_space .= $content;
+       }
+       print $fh $content;
+    } else {
+       # element
+       my @all = @{ $content };
+       my $attrs = shift @all;
+       my $translate = 0;
+       my $outattr = getAttributeString($attrs, 1, $language, \$translate);
+
+       if ($nodename =~ /^_/) {
+           $translate = 1;
+           $nodename =~ s/^_//;
+       }
+       my $lookup = '';
+
+        $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+        $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+       print $fh "<$nodename", $outattr;
+       if ($translate) {
+           $lookup = getXMLstring($content, $spacepreserve);
+            if (!$spacepreserve) {
+                $lookup =~ s/^\s+//s;
+                $lookup =~ s/\s+$//s;
+            }
+
+           if ($lookup || $translate == 2) {
+                my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup});
+                if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) {
+                    $translation = $lookup if (!$translation);
+                    print $fh " xml:lang=\"", $language, "\"" if $language;
+                    print $fh ">";
+                    if ($translate == 2) {
+                        translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+                    } else {
+                        print $fh $translation;
+                    }
+                    print $fh "</$nodename>";
+
+                    return; # this means there will be no same translation with xml:lang="$language"...
+                            # if we want them both, just remove this "return"
+                } else {
+                    print $fh ">";
+                    if ($translate == 2) {
+                        translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+                    } else {
+                        print $fh $lookup;
+                    }
+                    print $fh "</$nodename>";
+                }
+           } else {
+               print $fh "/>";
+           }
+
+           for my $lang (sort keys %po_files_by_lang) {
+                    if ($MULTIPLE_OUTPUT && $lang ne "$language") {
+                        next;
+                    }
+                   if ($lang) {
+                        # Handle translation
+                        #
+                        my $translate = 0;
+                        my $localattrs = getAttributeString($attrs, 1, $lang, \$translate);
+                        my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup});
+                        if ($translate && !$translation) {
+                            $translation = $lookup;
+                        }
+
+                        if ($translation || $translate) {
+                           print $fh "\n";
+                           $leading_space =~ s/.*\n//g;
+                           print $fh $leading_space;
+                           print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">";
+                            if ($translate == 2) {
+                               translate_subnodes($fh, \@all, $lang, 1, $spacepreserve);
+                            } else {
+                                print $fh $translation;
+                            }
+                            print $fh "</$nodename>";
+                       }
+                    }
+           }
+
+       } else {
+           my $count = scalar(@all);
+           if ($count > 0) {
+               print $fh ">";
+                my $index = 0;
+                while ($index < $count) {
+                    my $type = $all[$index];
+                    my $rest = $all[$index+1];
+                    traverse($fh, $type, $rest, $language, $spacepreserve);
+                    $index += 2;
+                }
+               print $fh "</$nodename>";
+           } else {
+               print $fh "/>";
+           }
+       }
+    }
+}
+
+sub intltool_tree_comment
+{
+    my $expat = shift;
+    my $data  = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    push @$clist, 1 => $data;
+}
+
+sub intltool_tree_cdatastart
+{
+    my $expat    = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    push @$clist, 0 => $expat->original_string();
+}
+
+sub intltool_tree_cdataend
+{
+    my $expat    = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    $clist->[$pos] .= $expat->original_string();
+}
+
+sub intltool_tree_char
+{
+    my $expat = shift;
+    my $text  = shift;
+    my $clist = $expat->{Curlist};
+    my $pos   = $#$clist;
+
+    # Use original_string so that we retain escaped entities
+    # in CDATA sections.
+    #
+    if ($pos > 0 and $clist->[$pos - 1] eq '0') {
+        $clist->[$pos] .= $expat->original_string();
+    } else {
+        push @$clist, 0 => $expat->original_string();
+    }
+}
+
+sub intltool_tree_start
+{
+    my $expat    = shift;
+    my $tag      = shift;
+    my @origlist = ();
+
+    # Use original_string so that we retain escaped entities
+    # in attribute values.  We must convert the string to an
+    # @origlist array to conform to the structure of the Tree
+    # Style.
+    #
+    my @original_array = split /\x/, $expat->original_string();
+    my $source         = $expat->original_string();
+
+    # Remove leading tag.
+    #
+    $source =~ s|^\s*<\s*(\S+)||s;
+
+    # Grab attribute key/value pairs and push onto @origlist array.
+    #
+    while ($source)
+    {
+       if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/)
+       {
+           $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s;
+           push @origlist, $1;
+           push @origlist, '"' . $2 . '"';
+       }
+       elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/)
+       {
+           $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s;
+           push @origlist, $1;
+           push @origlist, "'" . $2 . "'";
+       }
+       else
+       {
+           last;
+       }
+    }
+
+    my $ol = [ { @origlist } ];
+
+    push @{ $expat->{Lists} }, $expat->{Curlist};
+    push @{ $expat->{Curlist} }, $tag => $ol;
+    $expat->{Curlist} = $ol;
+}
+
+sub readXml
+{
+    my $filename = shift || return;
+    if(!-f $filename) {
+        die "ERROR Cannot find filename: $filename\n";
+    }
+
+    my $ret = eval 'require XML::Parser';
+    if(!$ret) {
+        die "You must have XML::Parser installed to run $0\n\n";
+    } 
+    my $xp = new XML::Parser(Style => 'Tree');
+    $xp->setHandlers(Char => \&intltool_tree_char);
+    $xp->setHandlers(Start => \&intltool_tree_start);
+    $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart);
+    $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend);
+    my $tree = $xp->parsefile($filename);
+
+# <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+# would be:
+# [foo, [{}, head, [{id => "a"}, 0, "Hello ",  em, [{}, 0, "there"]], bar, [{},
+# 0, "Howdy",  ref, [{}]], 0, "do" ] ]
+
+    return $tree;
+}
+
+sub print_header
+{
+    my $infile = shift;
+    my $fh = shift;
+    my $source;
+
+    if(!-f $infile) {
+        die "ERROR Cannot find filename: $infile\n";
+    }
+
+    print $fh qq{<?xml version="1.0" encoding="UTF-8"?>\n};
+    {
+        local $/;
+        open DOCINPUT, "<${FILE}" or die;
+        $source = <DOCINPUT>;
+        close DOCINPUT;
+    }
+    if ($source =~ /(<!DOCTYPE.*\[.*\]\s*>)/s)
+    {
+        print $fh "$1\n";
+    }
+    elsif ($source =~ /(<!DOCTYPE[^>]*>)/s)
+    {
+        print $fh "$1\n";
+    }
+}
+
+sub parseTree
+{
+    my $fh        = shift;
+    my $ref       = shift;
+    my $language  = shift || "";
+
+    my $name = shift @{ $ref };
+    my $cont = shift @{ $ref };
+    
+    while (!$name || "$name" eq "1") {
+        $name = shift @{ $ref };
+        $cont = shift @{ $ref };
+    }
+
+    my $spacepreserve = 0;
+    my $attrs = @{$cont}[0];
+    $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+    traverse($fh, $name, $cont, $language, $spacepreserve);
+}
+
+sub xml_merge_output
+{
+    my $source;
+
+    if ($MULTIPLE_OUTPUT) {
+        for my $lang (sort keys %po_files_by_lang) {
+           if ( ! -d $lang ) {
+               mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n";
+            }
+            open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+            binmode (OUTPUT) if $^O eq 'MSWin32';
+            my $tree = readXml($FILE);
+            print_header($FILE, \*OUTPUT);
+            parseTree(\*OUTPUT, $tree, $lang);
+            close OUTPUT;
+            print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG;
+        }
+    } 
+    open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n";
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+    my $tree = readXml($FILE);
+    print_header($FILE, \*OUTPUT);
+    parseTree(\*OUTPUT, $tree);
+    close OUTPUT;
+    print "CREATED $OUTFILE\n" unless $QUIET_ARG;
+}
+
+sub keys_merge_translations
+{
+    open INPUT, "<${FILE}" or die;
+    open OUTPUT, ">${OUTFILE}" or die;
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+
+    while (<INPUT>) 
+    {
+        if (s/^(\s*)_(\w+=(.*))/$1$2/)  
+        {
+           my $string = $3;
+
+            print OUTPUT;
+
+           my $non_translated_line = $_;
+
+            for my $lang (sort keys %po_files_by_lang) 
+            {
+               my $translation = $translations{$lang, $string};
+                next if !$translation;
+
+                $_ = $non_translated_line;
+               s/(\w+)=.*/[$lang]$1=$translation/;
+                print OUTPUT;
+            }
+       } 
+        else 
+        {
+            print OUTPUT;
+        }
+    }
+
+    close OUTPUT;
+    close INPUT;
+}
+
+sub desktop_merge_translations
+{
+    open INPUT, "<${FILE}" or die;
+    open OUTPUT, ">${OUTFILE}" or die;
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+
+    while (<INPUT>) 
+    {
+        if (s/^(\s*)_(\w+=(.*))/$1$2/)  
+        {
+           my $string = $3;
+
+            print OUTPUT;
+
+           my $non_translated_line = $_;
+
+            for my $lang (sort keys %po_files_by_lang) 
+            {
+                my $translation = $translations{$lang, $string};
+                next if !$translation;
+
+                $_ = $non_translated_line;
+                s/(\w+)=.*/${1}[$lang]=$translation/;
+                print OUTPUT;
+            }
+       } 
+        else 
+        {
+            print OUTPUT;
+        }
+    }
+
+    close OUTPUT;
+    close INPUT;
+}
+
+sub schemas_merge_translations
+{
+    my $source;
+
+    {
+       local $/; # slurp mode
+       open INPUT, "<$FILE" or die "can't open $FILE: $!";
+       $source = <INPUT>;
+       close INPUT;
+    }
+
+    open OUTPUT, ">$OUTFILE" or die;
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+
+    # FIXME: support attribute translations
+
+    # Empty nodes never need translation, so unmark all of them.
+    # For example, <_foo/> is just replaced by <foo/>.
+    $source =~ s|<\s*_($w+)\s*/>|<$1/>|g;
+
+    while ($source =~ s/
+                        (.*?)
+                        (\s+)(<locale\ name="C">(\s*)
+                            (<default>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/default>)?(\s*)
+                            (<short>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/short>)?(\s*)
+                            (<long>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/long>)?(\s*)
+                        <\/locale>)
+                       //sx) 
+    {
+        print OUTPUT $1;
+
+       my $locale_start_spaces = $2 ? $2 : '';
+       my $default_spaces = $4 ? $4 : '';
+       my $short_spaces = $7 ? $7 : '';
+       my $long_spaces = $10 ? $10 : '';
+       my $locale_end_spaces = $13 ? $13 : '';
+       my $c_default_block = $3 ? $3 : '';
+       my $default_string = $6 ? $6 : '';
+       my $short_string = $9 ? $9 : '';
+       my $long_string = $12 ? $12 : '';
+
+       print OUTPUT "$locale_start_spaces$c_default_block";
+
+        $default_string =~ s/\s+/ /g;
+        $default_string = entity_decode($default_string);
+       $short_string =~ s/\s+/ /g;
+       $short_string = entity_decode($short_string);
+       $long_string =~ s/\s+/ /g;
+       $long_string = entity_decode($long_string);
+
+       for my $lang (sort keys %po_files_by_lang) 
+        {
+           my $default_translation = $translations{$lang, $default_string};
+           my $short_translation = $translations{$lang, $short_string};
+           my $long_translation  = $translations{$lang, $long_string};
+
+           next if (!$default_translation && !$short_translation && 
+                     !$long_translation);
+
+           print OUTPUT "\n$locale_start_spaces<locale name=\"$lang\">";
+
+        print OUTPUT "$default_spaces";    
+
+        if ($default_translation)
+        {
+            $default_translation = entity_encode($default_translation);
+            print OUTPUT "<default>$default_translation</default>";
+        }
+
+           print OUTPUT "$short_spaces";
+
+           if ($short_translation)
+           {
+                       $short_translation = entity_encode($short_translation);
+                       print OUTPUT "<short>$short_translation</short>";
+           }
+
+           print OUTPUT "$long_spaces";
+
+           if ($long_translation)
+           {
+                       $long_translation = entity_encode($long_translation);
+                       print OUTPUT "<long>$long_translation</long>";
+           }       
+
+           print OUTPUT "$locale_end_spaces</locale>";
+        }
+    }
+
+    print OUTPUT $source;
+
+    close OUTPUT;
+}
+
+sub rfc822deb_merge_translations
+{
+    my %encodings = ();
+    for my $lang (keys %po_files_by_lang) {
+        $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang}));
+    }
+
+    my $source;
+
+    $Text::Wrap::huge = 'overflow';
+    $Text::Wrap::break = qr/\n|\s(?=\S)/;
+
+    {
+       local $/; # slurp mode
+       open INPUT, "<$FILE" or die "can't open $FILE: $!";
+       $source = <INPUT>;
+       close INPUT;
+    }
+
+    open OUTPUT, ">${OUTFILE}" or die;
+    binmode (OUTPUT) if $^O eq 'MSWin32';
+
+    while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg)
+    {
+           my $sep = $1;
+           my $non_translated_line = $3.$4;
+           my $string = $5;
+           my $underscore = length($2);
+           next if $underscore eq 0 && $non_translated_line =~ /^#/;
+           #  Remove [] dummy strings
+           my $stripped = $string;
+           $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2;
+           $stripped =~ s/\[\s[^\[\]]*\]$//;
+           $non_translated_line .= $stripped;
+
+           print OUTPUT $sep.$non_translated_line;
+    
+           if ($underscore) 
+           {
+               my @str_list = rfc822deb_split($underscore, $string);
+
+               for my $lang (sort keys %po_files_by_lang) 
+                {
+                    my $is_translated = 1;
+                    my $str_translated = '';
+                    my $first = 1;
+                
+                    for my $str (@str_list) 
+                    {
+                        my $translation = $translations{$lang, $str};
+                    
+                        if (!$translation) 
+                        {
+                            $is_translated = 0;
+                            last;
+                        }
+
+                       #  $translation may also contain [] dummy
+                        #  strings, mostly to indicate an empty string
+                       $translation =~ s/\[\s[^\[\]]*\]$//;
+                        
+                        if ($first) 
+                        {
+                            if ($underscore eq 2)
+                            {
+                                $str_translated .= $translation;
+                            }
+                            else
+                            {
+                                $str_translated .=
+                                    Text::Tabs::expand($translation) .
+                                    "\n";
+                            }
+                        } 
+                        else 
+                        {
+                            if ($underscore eq 2)
+                            {
+                                $str_translated .= ', ' . $translation;
+                            }
+                            else
+                            {
+                                $str_translated .= Text::Tabs::expand(
+                                    Text::Wrap::wrap(' ', ' ', $translation)) .
+                                    "\n .\n";
+                            }
+                        }
+                        $first = 0;
+
+                        #  To fix some problems with Text::Wrap::wrap
+                        $str_translated =~ s/(\n )+\n/\n .\n/g;
+                    }
+                    next unless $is_translated;
+
+                    $str_translated =~ s/\n \.\n$//;
+                    $str_translated =~ s/\s+$//;
+
+                    $_ = $non_translated_line;
+                    s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s;
+                    print OUTPUT;
+                }
+           }
+    }
+    print OUTPUT "\n";
+
+    close OUTPUT;
+    close INPUT;
+}
+
+sub rfc822deb_split 
+{
+    # Debian defines a special way to deal with rfc822-style files:
+    # when a value contain newlines, it consists of
+    #   1.  a short form (first line)
+    #   2.  a long description, all lines begin with a space,
+    #       and paragraphs are separated by a single dot on a line
+    # This routine returns an array of all paragraphs, and reformat
+    # them.
+    # When first argument is 2, the string is a comma separated list of
+    # values.
+    my $type = shift;
+    my $text = shift;
+    $text =~ s/^[ \t]//mg;
+    return (split(/, */, $text, 0)) if $type ne 1;
+    return ($text) if $text !~ /\n/;
+
+    $text =~ s/([^\n]*)\n//;
+    my @list = ($1);
+    my $str = '';
+
+    for my $line (split (/\n/, $text)) 
+    {
+        chomp $line;
+        if ($line =~ /^\.\s*$/)
+        {
+            #  New paragraph
+            $str =~ s/\s*$//;
+            push(@list, $str);
+            $str = '';
+        } 
+        elsif ($line =~ /^\s/) 
+        {
+            #  Line which must not be reformatted
+            $str .= "\n" if length ($str) && $str !~ /\n$/;
+            $line =~ s/\s+$//;
+            $str .= $line."\n";
+        } 
+        else 
+        {
+            #  Continuation line, remove newline
+            $str .= " " if length ($str) && $str !~ /\n$/;
+            $str .= $line;
+        }
+    }
+
+    $str =~ s/\s*$//;
+    push(@list, $str) if length ($str);
+
+    return @list;
+}
+
+sub quoted_translation
+{
+    my ($lang, $string) = @_;
+
+    $string =~ s/\\\"/\"/g;
+
+    my $translation = $translations{$lang, $string};
+    $translation = $string if !$translation;
+
+    $translation =~ s/\"/\\\"/g;
+    return $translation
+}
+
+sub quoted_merge_translations
+{
+    if (!$MULTIPLE_OUTPUT) {
+        print "Quoted only supports Multiple Output.\n";
+        exit(1);
+    }
+
+    for my $lang (sort keys %po_files_by_lang) {
+        if ( ! -d $lang ) {
+            mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n";
+        }
+        open INPUT, "<${FILE}" or die;
+        open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+        binmode (OUTPUT) if $^O eq 'MSWin32';
+        while (<INPUT>) 
+        {
+            s/\"(([^\"]|\\\")*[^\\\"])\"/"\"" . &quoted_translation($lang, $1) . "\""/ge;
+            print OUTPUT;
+        }
+        close OUTPUT;
+        close INPUT;
+    }
+}
diff --git a/intltool-update.in b/intltool-update.in
new file mode 100644 (file)
index 0000000..bffd10f
--- /dev/null
@@ -0,0 +1,1164 @@
+#!@INTLTOOL_PERL@ -w
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4  -*-
+
+#
+#  The Intltool Message Updater
+#
+#  Copyright (C) 2000-2003 Free Software Foundation.
+#
+#  Intltool is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License 
+#  version 2 published by the Free Software Foundation.
+#
+#  Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#  As a special exception to the GNU General Public License, if you
+#  distribute this file as part of a program that contains a
+#  configuration script generated by Autoconf, you may include it under
+#  the same distribution terms that you use for the rest of that program.
+#
+#  Authors: Kenneth Christiansen <kenneth@gnu.org>
+#           Maciej Stachowiak
+#           Darin Adler <darin@bentspoon.com>
+
+## Release information
+my $PROGRAM = "intltool-update";
+my $VERSION = "0.36.2";
+my $PACKAGE = "intltool";
+
+## Loaded modules
+use strict;
+use Getopt::Long;
+use Cwd;
+use File::Copy;
+use File::Find;
+
+## Scalars used by the option stuff
+my $HELP_ARG      = 0;
+my $VERSION_ARG    = 0;
+my $DIST_ARG      = 0;
+my $POT_ARG       = 0;
+my $HEADERS_ARG    = 0;
+my $MAINTAIN_ARG   = 0;
+my $REPORT_ARG     = 0;
+my $VERBOSE       = 0;
+my $GETTEXT_PACKAGE = "";
+my $OUTPUT_FILE    = "";
+
+my @languages;
+my %varhash = ();
+my %po_files_by_lang = ();
+
+# Regular expressions to categorize file types.
+# FIXME: Please check if the following is correct
+
+my $xml_support =
+"xml(?:\\.in)*|".      # http://www.w3.org/XML/ (Note: .in is not required)
+"ui|".                 # Bonobo specific - User Interface desc. files
+"lang|".               # ?
+"glade2?(?:\\.in)*|".  # Glade specific - User Interface desc. files (Note: .in is not required)
+"scm(?:\\.in)*|".      # ? (Note: .in is not required)
+"oaf(?:\\.in)+|".      # DEPRECATED: Replaces by Bonobo .server files 
+"etspec|".             # ?
+"server(?:\\.in)+|".   # Bonobo specific
+"sheet(?:\\.in)+|".    # ?
+"schemas(?:\\.in)+|".  # GConf specific
+"pong(?:\\.in)+|".     # DEPRECATED: PONG is not used [by GNOME] any longer.
+"kbd(?:\\.in)+|".      # GOK specific. 
+"policy(?:\\.in)+";    # PolicyKit files
+
+my $ini_support =
+"icon(?:\\.in)+|".     # http://www.freedesktop.org/Standards/icon-theme-spec
+"desktop(?:\\.in)+|".  # http://www.freedesktop.org/Standards/menu-spec
+"caves(?:\\.in)+|".    # GNOME Games specific
+"directory(?:\\.in)+|".        # http://www.freedesktop.org/Standards/menu-spec
+"soundlist(?:\\.in)+|".        # GNOME specific
+"keys(?:\\.in)+|".     # GNOME Mime database specific
+"theme(?:\\.in)+|".    # http://www.freedesktop.org/Standards/icon-theme-spec
+"service(?:\\.in)+";    # DBus specific
+
+my $buildin_gettext_support = 
+"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py";
+
+## Always flush buffer when printing
+$| = 1;
+
+## Sometimes the source tree will be rooted somewhere else.
+my $SRCDIR = $ENV{"srcdir"} || ".";
+my $POTFILES_in;
+
+$POTFILES_in = "<$SRCDIR/POTFILES.in";
+
+my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
+
+## Handle options
+GetOptions 
+(
+ "help"               => \$HELP_ARG,
+ "version"            => \$VERSION_ARG,
+ "dist|d"             => \$DIST_ARG,
+ "pot|p"              => \$POT_ARG,
+ "headers|s"          => \$HEADERS_ARG,
+ "maintain|m"         => \$MAINTAIN_ARG,
+ "report|r"           => \$REPORT_ARG,
+ "verbose|x"          => \$VERBOSE,
+ "gettext-package|g=s" => \$GETTEXT_PACKAGE,
+ "output-file|o=s"     => \$OUTPUT_FILE,
+ ) or &Console_WriteError_InvalidOption;
+
+&Console_Write_IntltoolHelp if $HELP_ARG;
+&Console_Write_IntltoolVersion if $VERSION_ARG;
+
+my $arg_count = ($DIST_ARG > 0)
+    + ($POT_ARG > 0)
+    + ($HEADERS_ARG > 0)
+    + ($MAINTAIN_ARG > 0)
+    + ($REPORT_ARG > 0);
+
+&Console_Write_IntltoolHelp if $arg_count > 1;
+
+my $PKGNAME = FindPackageName ();
+
+# --version and --help don't require a module name
+my $MODULE = $GETTEXT_PACKAGE || $PKGNAME || "unknown";
+
+if ($POT_ARG)
+{
+    &GenerateHeaders;
+    &GeneratePOTemplate;
+}
+elsif ($HEADERS_ARG)
+{
+    &GenerateHeaders;
+}
+elsif ($MAINTAIN_ARG)
+{
+    &FindLeftoutFiles;
+}
+elsif ($REPORT_ARG)
+{
+    &GenerateHeaders;
+    &GeneratePOTemplate;
+    &Console_Write_CoverageReport;
+}
+elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/)
+{
+    my $lang = $ARGV[0];
+
+    ## Report error if the language file supplied
+    ## to the command line is non-existent
+    &Console_WriteError_NotExisting("$SRCDIR/$lang.po")
+        if ! -s "$SRCDIR/$lang.po";
+
+    if (!$DIST_ARG)
+    {
+       print "Working, please wait..." if $VERBOSE;
+       &GenerateHeaders;
+       &GeneratePOTemplate;
+    }
+    &POFile_Update ($lang, $OUTPUT_FILE);
+    &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE);
+} 
+else 
+{
+    &Console_Write_IntltoolHelp;
+}
+
+exit;
+
+#########
+
+sub Console_Write_IntltoolVersion
+{
+    print <<_EOF_;
+${PROGRAM} (${PACKAGE}) $VERSION
+Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.
+
+Copyright (C) 2000-2003 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+    exit;
+}
+
+sub Console_Write_IntltoolHelp
+{
+    print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... LANGCODE
+Updates PO template files and merge them with the translations.
+
+Mode of operation (only one is allowed):
+  -p, --pot                   generate the PO template only
+  -s, --headers               generate the header files in POTFILES.in
+  -m, --maintain              search for left out files from POTFILES.in
+  -r, --report                display a status report for the module
+  -d, --dist                  merge LANGCODE.po with existing PO template
+
+Extra options:
+  -g, --gettext-package=NAME  override PO template name, useful with --pot
+  -o, --output-file=FILE      write merged translation to FILE
+  -x, --verbose               display lots of feedback
+      --help                  display this help and exit
+      --version               output version information and exit
+
+Examples of use:
+${PROGRAM} --pot    just create a new PO template
+${PROGRAM} xy       create new PO template and merge xy.po with it
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+    exit;
+}
+
+sub echo_n
+{
+    my $str = shift;
+    my $ret = `echo "$str"`;
+
+    $ret =~ s/\n$//; # do we need the "s" flag?
+
+    return $ret;
+}
+
+sub POFile_DetermineType ($) 
+{
+   my $type = $_;
+   my $gettext_type;
+
+   my $xml_regex     = "(?:" . $xml_support . ")";
+   my $ini_regex     = "(?:" . $ini_support . ")";
+   my $buildin_regex = "(?:" . $buildin_gettext_support . ")";
+
+   if ($type =~ /\[type: gettext\/([^\]].*)]/) 
+   {
+       $gettext_type=$1;
+   }
+   elsif ($type =~ /schemas(\.in)+$/) 
+   {
+       $gettext_type="schemas";
+   }
+   elsif ($type =~ /glade2?(\.in)*$/) 
+   {
+       $gettext_type="glade";
+   }
+   elsif ($type =~ /scm(\.in)*$/) 
+   {
+       $gettext_type="scheme";
+   }
+   elsif ($type =~ /keys(\.in)+$/) 
+   {
+       $gettext_type="keys";
+   }
+
+   # bucket types
+
+   elsif ($type =~ /$xml_regex$/) 
+   {
+       $gettext_type="xml";
+   }
+   elsif ($type =~ /$ini_regex$/) 
+   { 
+       $gettext_type="ini";
+   }
+   elsif ($type =~ /$buildin_regex$/) 
+   {
+       $gettext_type="buildin";
+   }
+   else
+   { 
+       $gettext_type="unknown"; 
+   }
+
+   return "gettext\/$gettext_type";
+}
+
+sub TextFile_DetermineEncoding ($) 
+{
+    my $gettext_code="ASCII"; # All files are ASCII by default
+    my $filetype=`file $_ | cut -d ' ' -f 2`;
+
+    if ($? eq "0")
+    {
+       if ($filetype =~ /^(ISO|UTF)/)
+       {
+           chomp ($gettext_code = $filetype);
+       }
+       elsif ($filetype =~ /^XML/)
+       {
+           $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8
+       }
+    }
+
+    return $gettext_code;
+}
+
+sub isNotValidMissing
+{
+    my ($file) = @_;
+
+    return if $file =~ /^\{arch\}\/.*$/;
+    return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/;
+}
+
+sub FindLeftoutFiles
+{
+    my (@buf_i18n_plain,
+       @buf_i18n_xml,
+       @buf_i18n_xml_unmarked,
+       @buf_i18n_ini,
+       @buf_potfiles,
+       @buf_potfiles_ignore,
+       @buf_allfiles,
+       @buf_allfiles_sorted,
+       @buf_potfiles_sorted,
+        @buf_potfiles_ignore_sorted
+    );
+
+    ## Search and find all translatable files
+    find sub { 
+       push @buf_i18n_plain,        "$File::Find::name" if /\.($buildin_gettext_support)$/;
+       push @buf_i18n_xml,          "$File::Find::name" if /\.($xml_support)$/;
+       push @buf_i18n_ini,          "$File::Find::name" if /\.($ini_support)$/;
+       push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
+       }, "..";
+    find sub { 
+       push @buf_i18n_plain,        "$File::Find::name" if /\.($buildin_gettext_support)$/;
+       push @buf_i18n_xml,          "$File::Find::name" if /\.($xml_support)$/;
+       push @buf_i18n_ini,          "$File::Find::name" if /\.($ini_support)$/;
+       push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
+       }, "$SRCDIR/..";
+
+    open POTFILES, $POTFILES_in or die "$PROGRAM:  there's no POTFILES.in!\n";
+    @buf_potfiles = grep !/^(#|\s*$)/, <POTFILES>;
+    close POTFILES;
+
+    foreach (@buf_potfiles) {
+       s/^\[.*]\s*//;
+    }
+
+    print "Searching for missing translatable files...\n" if $VERBOSE;
+
+    ## Check if we should ignore some found files, when
+    ## comparing with POTFILES.in
+    foreach my $ignore ("POTFILES.skip", "POTFILES.ignore")
+    {
+       (-s "$SRCDIR/$ignore") or next;
+
+       if ("$ignore" eq "POTFILES.ignore")
+       {
+           print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n".
+                 "content of this file to POTFILES.skip.\n";
+       }
+
+       print "Found $ignore: Ignoring files...\n" if $VERBOSE;
+       open FILE, "<$SRCDIR/$ignore" or die "ERROR: Failed to open $SRCDIR/$ignore!\n";
+           
+       while (<FILE>)
+       {
+           push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/;
+       }
+       close FILE;
+
+       @buf_potfiles_ignore_sorted = sort (@buf_potfiles_ignore);
+    }
+
+    foreach my $file (@buf_i18n_plain)
+    {
+       my $in_comment = 0;
+       my $in_macro = 0;
+
+       open FILE, "<$file";
+       while (<FILE>)
+       {
+           # Handle continued multi-line comment.
+           if ($in_comment)
+           {
+               next unless s-.*\*/--;
+               $in_comment = 0;
+           }
+
+           # Handle continued macro.
+           if ($in_macro)
+           {
+               $in_macro = 0 unless /\\$/;
+               next;
+           }
+
+           # Handle start of macro (or any preprocessor directive).
+           if (/^\s*\#/)
+           {
+               $in_macro = 1 if /^([^\\]|\\.)*\\$/;
+               next;
+           }
+
+           # Handle comments and quoted text.
+           while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy
+           {
+               my $match = $1;
+               if ($match eq "/*")
+               {
+                   if (!s-/\*.*?\*/--)
+                   {
+                       s-/\*.*--;
+                       $in_comment = 1;
+                   }
+               }
+               elsif ($match eq "//")
+               {
+                   s-//.*--;
+               }
+               else # ' or "
+               {
+                   if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-)
+                   {
+                       warn "mismatched quotes at line $. in $file\n";
+                       s-$match.*--;
+                   }
+               }
+           }       
+
+           if (/\w\.GetString *\(QUOTEDTEXT/)
+           {
+                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+                    ## Remove the first 3 chars and add newline
+                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+                }
+               last;
+           }
+
+            ## N_ Q_ and _ are the three macros defined in gi8n.h
+           if (/[NQ]?_ *\(QUOTEDTEXT/)
+           {
+                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+                    ## Remove the first 3 chars and add newline
+                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+                }
+               last;
+           }
+       }
+       close FILE;
+    }
+
+    foreach my $file (@buf_i18n_xml) 
+    {
+       open FILE, "<$file";
+       
+       while (<FILE>) 
+       {
+           # FIXME: share the pattern matching code with intltool-extract
+           if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/)
+           {
+                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+                }
+               last;
+           }
+       }
+       close FILE;
+    }
+
+    foreach my $file (@buf_i18n_ini)
+    {
+       open FILE, "<$file";
+       while (<FILE>) 
+       {
+           if (/_(.*)=/)
+           {
+                if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+                    push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+                }
+               last;
+           }
+       }
+       close FILE;
+    }
+
+    foreach my $file (@buf_i18n_xml_unmarked)
+    {
+        if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+            push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+        }
+    }
+
+
+    @buf_allfiles_sorted = sort (@buf_allfiles);
+    @buf_potfiles_sorted = sort (@buf_potfiles);
+
+    my %in2;
+    foreach (@buf_potfiles_sorted) 
+    {
+        s#^$SRCDIR/../##;
+        s#^$SRCDIR/##;
+       $in2{$_} = 1;
+    }
+
+    foreach (@buf_potfiles_ignore_sorted) 
+    {
+        s#^$SRCDIR/../##;
+        s#^$SRCDIR/##;
+       $in2{$_} = 1;
+    }
+
+    my @result;
+
+    foreach (@buf_allfiles_sorted)
+    {
+        my $dummy = $_;
+        my $srcdir = $SRCDIR;
+
+        $srcdir =~ s#^../##;
+        $dummy =~ s#^$srcdir/../##;
+        $dummy =~ s#^$srcdir/##;
+        $dummy =~ s#_build/##;
+       if (!exists($in2{$dummy}))
+       {
+           push @result, $dummy
+       }
+    }
+
+    my @buf_potfiles_notexist;
+
+    foreach (@buf_potfiles_sorted)
+    {
+       chomp (my $dummy = $_);
+       if ("$dummy" ne "" and !(-f "$SRCDIR/../$dummy" or -f "../$dummy"))
+       {
+           push @buf_potfiles_notexist, $_;
+       }
+    }
+
+    ## Save file with information about the files missing
+    ## if any, and give information about this procedure.
+    if (@result + @buf_potfiles_notexist > 0)
+    {
+       if (@result) 
+       {
+           print "\n" if $VERBOSE;
+           unlink "missing";
+           open OUT, ">missing";
+           print OUT @result;
+           close OUT;
+           warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n".
+                "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n";
+           print STDERR @result, "\n";
+           warn "If some of these files are left out on purpose then please add them to\n".
+                "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n".
+                "of left out files has been written in the current directory.\n";
+       }
+       if (@buf_potfiles_notexist)
+       {
+           unlink "notexist";
+           open OUT, ">notexist";
+           print OUT @buf_potfiles_notexist;
+           close OUT;
+           warn "\n" if ($VERBOSE or @result);
+           warn "\e[1mThe following files do not exist anymore:\e[0m\n\n";
+           warn @buf_potfiles_notexist, "\n";
+           warn "Please remove them from POTFILES.in. A file \e[1m'notexist'\e[0m\n".
+                "containing this list of absent files has been written in the current directory.\n";
+       }
+    }
+
+    ## If there is nothing to complain about, notify the user
+    else {
+       print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE;
+    }
+}
+
+sub Console_WriteError_InvalidOption
+{
+    ## Handle invalid arguments
+    print STDERR "Try `${PROGRAM} --help' for more information.\n";
+    exit 1;
+}
+
+sub isProgramInPath
+{
+    my ($file) = @_;
+    # If either a file exists, or when run it returns 0 exit status
+    return 1 if ((-x $file) or (system("$file --version >$devnull") == 0));
+    return 0;
+}
+
+sub isGNUGettextTool
+{
+    my ($file) = @_;
+    # Check that we are using GNU gettext tools
+    if (isProgramInPath ($file))
+    {
+        my $version = `$file --version`;
+        return 1 if ($version =~ m/.*\(GNU .*\).*/);
+    }
+    return 0;
+}
+
+sub GenerateHeaders
+{
+    my $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} || "intltool-extract";
+
+    ## Generate the .h header files, so we can allow glade and
+    ## xml translation support
+    if (! isProgramInPath ("$EXTRACT"))
+    {
+       print STDERR "\n *** The intltool-extract script wasn't found!"
+            ."\n *** Without it, intltool-update can not generate files.\n";
+       exit;
+    }
+    else
+    {
+       open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n";
+       
+       while (<FILE>) 
+       {
+          chomp;
+          next if /^\[\s*encoding/;
+
+          ## Find xml files in POTFILES.in and generate the
+          ## files with help from the extract script
+
+          my $gettext_type= &POFile_DetermineType ($1);
+
+          if (/\.($xml_support|$ini_support)$/ || /^\[/)
+          {
+              s/^\[[^\[].*]\s*//;
+
+              my $filename = "../$_";
+
+              if ($VERBOSE)
+              {
+                  system ($EXTRACT, "--update", "--srcdir=$SRCDIR",
+                          "--type=$gettext_type", $filename);
+              } 
+              else 
+              {
+                  system ($EXTRACT, "--update", "--type=$gettext_type", 
+                          "--srcdir=$SRCDIR", "--quiet", $filename);
+              }
+          }
+       }
+       close FILE;
+   }
+}
+
+#
+# Generate .pot file from POTFILES.in
+#
+sub GeneratePOTemplate
+{
+    my $XGETTEXT = $ENV{"XGETTEXT"} || "xgettext";
+    my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
+    chomp $XGETTEXT;
+
+    if (! isGNUGettextTool ("$XGETTEXT"))
+    {
+       print STDERR " *** GNU xgettext is not found on this system!\n".
+                    " *** Without it, intltool-update can not extract strings.\n";
+       exit;
+    }
+
+    print "Building $MODULE.pot...\n" if $VERBOSE;
+
+    open INFILE, $POTFILES_in;
+    unlink "POTFILES.in.temp";
+    open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing");
+
+    my $gettext_support_nonascii = 0;
+
+    # checks for GNU gettext >= 0.12
+    my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`;
+    if ($? == 0)
+    {
+       $gettext_support_nonascii = 1;
+    }
+    else
+    {
+       # urge everybody to upgrade gettext
+       print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n".
+                    "         strings. That means you should install a version of gettext\n".
+                    "         that supports non-ASCII strings (such as GNU gettext >= 0.12),\n".
+                    "         or have to let non-ASCII strings untranslated. (If there is any)\n";
+    }
+
+    my $encoding = "ASCII";
+    my $forced_gettext_code;
+    my @temp_headers;
+    my $encoding_problem_is_reported = 0;
+
+    while (<INFILE>) 
+    {
+       next if (/^#/ or /^\s*$/);
+
+       chomp;
+
+       my $gettext_code;
+
+       if (/^\[\s*encoding:\s*(.*)\s*\]/)
+       {
+           $forced_gettext_code=$1;
+       }
+       elsif (/\.($xml_support|$ini_support)$/ || /^\[/)
+       {
+           s/^\[.*]\s*//;
+            print OUTFILE "../$_.h\n";
+           push @temp_headers, "../$_.h";
+           $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code);
+       } 
+       else 
+       {
+            print OUTFILE "$SRCDIR/../$_\n";
+           $gettext_code = &TextFile_DetermineEncoding ("$SRCDIR/../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code);
+       }
+
+       next if (! $gettext_support_nonascii);
+
+       if (defined $forced_gettext_code)
+       {
+           $encoding=$forced_gettext_code;
+       }
+       elsif (defined $gettext_code and "$encoding" ne "$gettext_code")
+       {
+           if ($encoding eq "ASCII")
+           {
+               $encoding=$gettext_code;
+           }
+           elsif ($gettext_code ne "ASCII")
+           {
+               # Only report once because the message is quite long
+               if (! $encoding_problem_is_reported)
+               {
+                   print STDERR "WARNING: You should use the same file encoding for all your project files,\n".
+                                "         but $PROGRAM thinks that most of the source files are in\n".
+                                "         $encoding encoding, while \"$_\" is (likely) in\n".
+                                "         $gettext_code encoding. If you are sure that all translatable strings\n".
+                                "         are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n".
+                                "         line to POTFILES.in:\n\n".
+                                "                 [encoding: UTF-8]\n\n".
+                                "         and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n".
+                                "(such warning message will only be reported once.)\n";
+                   $encoding_problem_is_reported = 1;
+               }
+           }
+       }
+    }
+
+    close OUTFILE;
+    close INFILE;
+
+    unlink "$MODULE.pot";
+    my @xgettext_argument=("$XGETTEXT",
+                          "--add-comments",
+                          "--directory\=.",
+                           "--default-domain\=$MODULE",
+                           "--flag\=g_strdup_printf:1:c-format",
+                           "--flag\=g_string_printf:2:c-format",
+                           "--flag\=g_string_append_printf:2:c-format",
+                           "--flag\=g_error_new:3:c-format",
+                           "--flag\=g_set_error:4:c-format",
+                           "--flag\=g_markup_printf_escaped:1:c-format",
+                           "--flag\=g_log:3:c-format",
+                           "--flag\=g_print:1:c-format",
+                           "--flag\=g_printerr:1:c-format",
+                           "--flag\=g_printf:1:c-format",
+                           "--flag\=g_fprintf:2:c-format",
+                           "--flag\=g_sprintf:2:c-format",
+                           "--flag\=g_snprintf:3:c-format",
+                           "--flag\=g_scanner_error:2:c-format",
+                           "--flag\=g_scanner_warn:2:c-format",
+                          "--output\=$MODULE\.pot",
+                          "--files-from\=\.\/POTFILES\.in\.temp");
+    my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
+    push @xgettext_argument, $XGETTEXT_KEYWORDS;
+    my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress;
+    push @xgettext_argument, "--msgid-bugs-address\=$MSGID_BUGS_ADDRESS" if $MSGID_BUGS_ADDRESS;
+    push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii);
+    push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS;
+    my $xgettext_command = join ' ', @xgettext_argument;
+
+    # intercept xgettext error message
+    print "Running $xgettext_command\n" if $VERBOSE;
+    my $xgettext_error_msg = `$xgettext_command 2>\&1`;
+    my $command_failed = $?;
+
+    unlink "POTFILES.in.temp";
+
+    print "Removing generated header (.h) files..." if $VERBOSE;
+    unlink foreach (@temp_headers);
+    print "done.\n" if $VERBOSE;
+
+    if (! $command_failed)
+    {
+       if (! -e "$MODULE.pot")
+       {
+           print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE;
+       }
+       else
+       {
+           print "Wrote $MODULE.pot\n" if $VERBOSE;
+       }
+    }
+    else
+    {
+       if ($xgettext_error_msg =~ /--from-code/)
+       {
+           # replace non-ASCII error message with a more useful one.
+           print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n".
+                        "       string marked for translation. Please make sure that all strings marked\n".
+                        "       for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n".
+                        "       following line to POTFILES.in and rerun $PROGRAM:\n\n".
+                        "           [encoding: UTF-8]\n\n";
+       }
+       else
+       {
+           print STDERR "$xgettext_error_msg";
+           if (-e "$MODULE.pot")
+           {
+               # is this possible?
+               print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n".
+                            "       Please consult error message above if there is any.\n";
+           }
+           else
+           {
+               print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n".
+                            "       error message above if there is any.\n";
+           }
+       }
+       exit (1);
+    }
+}
+
+sub POFile_Update
+{
+    -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n";
+
+    my $MSGMERGE = $ENV{"MSGMERGE"} || "msgmerge";
+    my ($lang, $outfile) = @_;
+
+    if (! isGNUGettextTool ("$MSGMERGE"))
+    {
+       print STDERR " *** GNU msgmerge is not found on this system!\n".
+                    " *** Without it, intltool-update can not extract strings.\n";
+       exit;
+    }
+
+    print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE;
+
+    my $infile = "$SRCDIR/$lang.po";
+    $outfile = "$SRCDIR/$lang.po" if ($outfile eq "");
+
+    # I think msgmerge won't overwrite old file if merge is not successful
+    system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot");
+}
+
+sub Console_WriteError_NotExisting
+{
+    my ($file) = @_;
+
+    ## Report error if supplied language file is non-existing
+    print STDERR "$PROGRAM: $file does not exist!\n";
+    print STDERR "Try '$PROGRAM --help' for more information.\n";
+    exit;
+}
+
+sub GatherPOFiles
+{
+    my @po_files = glob ("./*.po");
+
+    @languages = map (&POFile_GetLanguage, @po_files);
+
+    foreach my $lang (@languages) 
+    {
+       $po_files_by_lang{$lang} = shift (@po_files);
+    }
+}
+
+sub POFile_GetLanguage ($)
+{
+    s/^(.*\/)?(.+)\.po$/$2/;
+    return $_;
+}
+
+sub Console_Write_TranslationStatus
+{
+    my ($lang, $output_file) = @_;
+    my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
+
+    if (! isGNUGettextTool ("$MSGFMT"))
+    {
+       print STDERR " *** GNU msgfmt is not found on this system!\n".
+                    " *** Without it, intltool-update can not extract strings.\n";
+       exit;
+    }
+
+    $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
+
+    system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file);
+}
+
+sub Console_Write_CoverageReport
+{
+    my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
+
+    if (! isGNUGettextTool ("$MSGFMT"))
+    {
+       print STDERR " *** GNU msgfmt is not found on this system!\n".
+                    " *** Without it, intltool-update can not extract strings.\n";
+       exit;
+    }
+
+    &GatherPOFiles;
+
+    foreach my $lang (@languages) 
+    {
+       print STDERR "$lang: ";
+       &POFile_Update ($lang, "");
+    }
+
+    print STDERR "\n\n * Current translation support in $MODULE \n\n";
+
+    foreach my $lang (@languages)
+    {
+       print STDERR "$lang: ";
+       system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po");
+    }
+}
+
+sub SubstituteVariable
+{
+    my ($str) = @_;
+    
+    # always need to rewind file whenever it has been accessed
+    seek (CONF, 0, 0);
+
+    # cache each variable. varhash is global to we can add
+    # variables elsewhere.
+    while (<CONF>)
+    {
+       if (/^(\w+)=(.*)$/)
+       {
+           ($varhash{$1} = $2) =~  s/^["'](.*)["']$/$1/;
+       }
+    }
+    
+    if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/)
+    {
+       my $rest = $3;
+       my $untouched = $1;
+       my $sub = "";
+        # Ignore recursive definitions of variables
+        $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
+
+       return SubstituteVariable ("$untouched$sub$rest");
+    }
+    
+    # We're using Perl backticks ` and "echo -n" here in order to 
+    # expand any shell escapes (such as backticks themselves) in every variable
+    return echo_n ($str);
+}
+
+sub CONF_Handle_Open
+{
+    my $base_dirname = getcwd();
+    $base_dirname =~ s@.*/@@;
+
+    my ($conf_in, $src_dir);
+
+    if ($base_dirname =~ /^po(-.+)?$/) 
+    {
+       if (-f "Makevars") 
+       {
+           my $makefile_source;
+
+           local (*IN);
+           open (IN, "<Makevars") || die "can't open Makevars: $!";
+
+           while (<IN>) 
+           {
+               if (/^top_builddir[ \t]*=/) 
+               {
+                   $src_dir = $_;
+                   $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
+
+                   chomp $src_dir;
+                    if (-f "$src_dir" . "/configure.ac") {
+                        $conf_in = "$src_dir" . "/configure.ac" . "\n";
+                    } else {
+                        $conf_in = "$src_dir" . "/configure.in" . "\n";
+                    }
+                   last;
+               }
+           }
+           close IN;
+
+           $conf_in || die "Cannot find top_builddir in Makevars.";
+       }
+       elsif (-f "$SRCDIR/../configure.ac") 
+       {
+           $conf_in = "$SRCDIR/../configure.ac";
+       } 
+       elsif (-f "$SRCDIR/../configure.in") 
+       {
+           $conf_in = "$SRCDIR/../configure.in";
+       } 
+       else 
+       {
+           my $makefile_source;
+
+           local (*IN);
+           open (IN, "<Makefile") || return;
+
+           while (<IN>) 
+           {
+               if (/^top_srcdir[ \t]*=/) 
+               {
+                   $src_dir = $_;                  
+                   $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
+
+                   chomp $src_dir;
+                   $conf_in = "$src_dir" . "/configure.in" . "\n";
+
+                   last;
+               }
+           }
+           close IN;
+
+           $conf_in || die "Cannot find top_srcdir in Makefile.";
+       }
+
+       open (CONF, "<$conf_in");
+    }
+    else
+    {
+       print STDERR "$PROGRAM: Unable to proceed.\n" .
+                    "Make sure to run this script inside the po directory.\n";
+       exit;
+    }
+}
+
+sub FindPackageName
+{
+    my $version;
+    my $domain = &FindMakevarsDomain;
+    my $name = $domain || "untitled";
+
+    &CONF_Handle_Open;
+
+    my $conf_source; {
+       local (*IN);
+       open (IN, "<&CONF") || return $name;
+       seek (IN, 0, 0);
+       local $/; # slurp mode
+       $conf_source = <IN>;
+       close IN;
+    }
+
+    # priority for getting package name:
+    # 1. GETTEXT_PACKAGE
+    # 2. first argument of AC_INIT (with >= 2 arguments)
+    # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument)
+
+    # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m 
+    # the \s makes this not work, why?
+    if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m)
+    {
+       ($name, $version) = ($1, $2);
+       $name    =~ s/[\[\]\s]//g;
+       $version =~ s/[\[\]\s]//g;
+       $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+       $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+       $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+       $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
+    }
+    
+    if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) 
+    {
+       ($name, $version) = ($1, $2);
+       $name    =~ s/[\[\]\s]//g;
+       $version =~ s/[\[\]\s]//g;
+       $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+       $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+       $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+       $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
+    }
+
+    # \s makes this not work, why?
+    $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
+    
+    # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value
+    # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables.
+    $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g;
+
+    $name = $domain if $domain;
+
+    $name = SubstituteVariable ($name);
+    $name =~ s/^["'](.*)["']$/$1/;
+
+    return $name if $name;
+}
+
+
+sub FindPOTKeywords
+{
+
+    my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_";
+    my $varname = "XGETTEXT_OPTIONS";
+    my $make_source; {
+       local (*IN);
+       open (IN, "<Makevars") || (open(IN, "<Makefile.in.in") && ($varname = "XGETTEXT_KEYWORDS")) || return $keywords;
+       seek (IN, 0, 0);
+       local $/; # slurp mode
+       $make_source = <IN>;
+       close IN;
+    }
+
+    $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m;
+    
+    return $keywords;
+}
+
+sub FindMakevarsDomain
+{
+
+    my $domain = "";
+    my $makevars_source; { 
+       local (*IN);
+       open (IN, "<Makevars") || return $domain;
+       seek (IN, 0, 0);
+       local $/; # slurp mode
+       $makevars_source = <IN>;
+       close IN;
+    }
+
+    $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m;
+    $domain =~ s/^\s+//;
+    $domain =~ s/\s+$//;
+    
+    return $domain;
+}
+
+sub FindMakevarsBugAddress
+{
+
+    my $address = "";
+    my $makevars_source; { 
+       local (*IN);
+       open (IN, "<Makevars") || return undef;
+       seek (IN, 0, 0);
+       local $/; # slurp mode
+       $makevars_source = <IN>;
+       close IN;
+    }
+
+    $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m;
+    $address =~ s/^\s+//;
+    $address =~ s/\s+$//;
+    
+    return $address;
+}
diff --git a/lxtask.desktop.in b/lxtask.desktop.in
new file mode 100644 (file)
index 0000000..d5d678b
--- /dev/null
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Task Manager
+Comment=Control your processes
+GenericName=Process manager
+Exec=xfce4-taskmanager
+Icon=utilities-system-monitor
+Terminal=false
+StartupNotify=true
+Type=Application
+Categories=Application;System;Utility;
\ No newline at end of file
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644 (file)
index 0000000..14a5a7d
--- /dev/null
@@ -0,0 +1,200 @@
+2008-04-24     Stavros Giannouris <stavrosg@hellug.gr>
+
+       * el.po, LINGUAS: Added Greek translation by Evaggelos Balaskas
+         <ebalaskas@ebalaskas.gr>
+
+2008-03-18     Mike Massonnet <mmassonnet@xfce.org>
+
+       * pt_PT.po: Update Portuguese translation by Nuno Miguel
+
+2007-12-19     Maximilian Schleiss <maximilian@xfce.org>
+
+       * de.po: German translation update
+       by Fabian Nowak <timystery@arcor.de>
+
+2007-11-18     Maximilian Schleiss <maximilian@xfce.org>
+
+       * lv.po: Latvian translation added
+       by Rihards Priedītis <rprieditis@inbox.lv>
+
+2007-11-15     Mike Massonnet <mmassonnet@xfce.org>
+
+       * ur.po: Update translation by Muhammad Ali Makki <makki.ma@gmail.com>
+       * pk.po, ur.po: Rename pk.po to ur.po.
+
+2007-11-03  Maximilian Schleiss <maximilian@xfce.org>
+
+       * it.po:  Italian translation update
+       by Fabio Riga <usul@aruba.it>
+
+2007-10-28     Mike Massonnet <mmassonnet@xfce.org>
+
+       * pk.po: Add new translation by محمد علي المكي <makki.ma@gmail.com>
+
+2007-09-03  Og Maciel <ogmaciel@gnome.org>
+
+       * pt_BR.po: Brazilian Portuguese translation updated
+       by Pablo Galletti Vieira <pbgozer@gmail.com>
+
+2007-07-08  Maximilian Schleiss <maximilian@xfce.org>
+
+       * nb_NO.po: Norwegian Bokmal translation added
+       by Terje Uriansrud <ter@operamail.com>
+
+2007-06-20  Maximilian Schleiss <maximilian@xfce.org>
+
+       * pt_PT: European Portuguese translation Added
+       by Nuno Miguel <nunis@netcabo.pt>
+
+2007-04-03  Maximilian Schleiss <maximilian@xfce.org>
+
+       * pl.po: Small fixes to the Polish translation
+       by Piotr Maliński <riklaunim@gmail.com>
+
+2007-03-31  Pau Rul-lan Ferragut <paurullan@bulma.net>
+
+  * gb.po: British translation by Jeff Bailes <thepizzaking@gmail.com>
+
+2007-02-02  Maximilian Schleiss <maximilian@xfce.org>
+
+       * fr.po: Added the Albanian translation by
+       Besnik Bleta <besnik@programeshqip.org>
+
+2007-01-20  Jari Rahkonen <jari.rahkonen@pp1.inet.fi>
+
+       * fi.po: Updated Finnish translation
+
+2007-01-18  Maximilian Schleiss <maximilian@xfce.org>
+
+       * de.po: Updated the German translation by
+       Fabian Nowak <timystery@arcor.de>
+       * pl.po: Updated the Polish translation by
+       Szymon Kałasz <szymon_maestro@gazeta.pl>
+
+2007-01-14  Piarres Beobide <pi@beobide.net>
+
+        * eu.po: Updated basque transaltion
+
+2007-01-14  Maximilian Schleiss <maximilian@xfce.org>
+
+       * fr.po: Updated the French translation.
+
+2007-01-13  Nick Schermer <nick@xfce.org>
+
+       * LINGUAS: Added LINGUAS support.
+       * *.po: Regenerated po files.
+
+2006-11-11  Maximilian Schleiss <maximilian@xfce.org>
+
+       * de.po: Updated the German translation
+       by Enrico Tröger <enrico.troeger@uvena.de>.
+
+2006-10-22  Adriano Winter Bess  <adriano@xfce.org>
+
+       * pt_BR.po: Updated brazilian portuguese translations.
+
+2006-09-18  Pau Rul-lan Ferragut <paurullan@bulma.net>
+
+       * ca.po: Add Catalan translation
+
+2006-09-17  Jean-François Wauthy <pollux@xfce.org>
+
+       * cs.po: Updated Czech translations
+       * fr.po: Updated French translations
+       * pl.po: Updated Polish translations
+
+2006-09-13  Jari Rahkonen <jari.rahkonen@pp1.inet.fi>
+
+       * fi.po: Updated Finnish translation.
+
+2006-09-13  Piarres Beobide <pi@beobide.net>
+
+       * eu.po: Updated basque transaltion
+
+2006-09-06  sas <sas@321>
+
+       * hu.po: Updated Hungarian translations.
+
+2006-09-06  Hydonsingore Cia <hydonsingore@educities.edu.tw>
+
+       * zh_TW.po: Updated traditional Chinese translations.
+
+2006-08-27  Jean-François Wauthy <pollux@xfce.org>
+
+       * cs.po: Add Czech translations
+
+2006-08-20  Jean-François Wauthy <pollux@xfce.org>
+
+       * gl.po: Add Galician translations
+
+2006-07-28  Hydonsingore Cia <hydonsingore@educities.edu.tw>
+
+       * zh_TW.po: Added traditional Chinese transaltions by
+         Cosmo Chene <cosmolas@gmail.com>
+
+2006-04-09  Daichi Kawahata <daichi@xfce.org>
+
+       * ru.po: Added Russian translations by Andrey Fedoseev
+         <andrey.fedoseev@gmail.com>.
+
+2006-04-08  Daichi Kawahata <daichi@xfce.org>
+
+       * pl.po: Added Polish translations by Piotr Malinski
+         <admin@rk.edu.pl>.
+
+2006-04-01  Daichi Kawahata <daichi@xfce.org>
+
+       * xfce4-taskmanager.pot, *.po: Updated.
+       * ja.po: Added Japanese translations.
+
+2006-03-28  Johannes Zellner <webmaster@nebulon.de>
+
+       * Makefile.in: Hey I'm active! :-)
+         This is the initial commit for the 0.4.0 xfce4-taskmanager.
+
+2006-02-23  Daichi Kawahata <daichi@xfce.org>
+
+       * vi.po: Added Vietnamese translations by Phan Vinh Thinh
+         <teppi@vnlinux.org>.
+
+2006-02-22  Daichi Kawahata <daichi@xfce.org>
+
+       * hu.po: Updated.
+
+2006-02-15  Daichi Kawahata <daichi@xfce.org>
+
+       * eu.po: Added Basque translations by Piarres Beobide
+         <pi@beobide.net>.
+
+2006-02-11  Szervac Attila <sas@321.hu>
+
+       * hu.po: Add Hungarian Translations.
+
+2006-01-04  Daichi Kawahata <daichi@xfce.org>
+
+       * de.po, fi.po, fr.po, pt_BR.po: Updated and fixed i18n stuffs.
+
+2005-11-09  Johannes Zellner <webmaster@nebulon.de>
+
+       * pt_BR.po: Added Brazilian Portuguese translation.
+       * Makefile.in, fr.po, pt_BR.po: Updated.
+
+2005-10-09  Johannes Zellner <webmaster@nebulon.de>
+
+       * fr.po: Added French translation.
+       * xfce4-taskmanager-fr.po: Removed.
+
+2005-10-09  Johannes Zellner <webmaster@nebulon.de>
+
+       * Makefile, Makefile.in, Makefile.in.in: Replaced some old files.
+
+2005-10-09  Johannes Zellner <webmaster@nebulon.de>
+
+       * Makefile.in, Makefile.in.in: Replaced some old files.
+
+2005-09-07  Johannes Zellner <webmaster@nebulon.de>
+
+       * ChangeLog, Makefile, Makefile.in, Makefile.in.in, POTFILES,
+         POTFILES.in, de.gmo, de.po, fi.po, xfce4-taskmanager-fr.po,
+         xfce4-taskmanager.pot: Initial import.
+
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..b630d54
--- /dev/null
@@ -0,0 +1,218 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+#
+# - Modified by Rodney Dawes <dobey@novell.com> for use with intltool
+#
+# We have the following line for use by intltoolize:
+# INTLTOOL_MAKEFILE
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+datarootdir = @datarootdir@
+libdir = @libdir@
+DATADIRNAME = @DATADIRNAME@
+itlocaledir = $(prefix)/$(DATADIRNAME)/locale
+subdir = po
+install_sh = @install_sh@
+# Automake >= 1.8 provides @mkdir_p@.
+# Until it can be supposed, use the safe fallback:
+mkdir_p = $(install_sh) -d
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT   = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+ALL_LINGUAS = @ALL_LINGUAS@
+
+PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; fi)
+
+USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep ^$$lang$$ $(srcdir)/LINGUAS`" -o -n "`echo $$ALINGUAS|grep ' ?$$lang ?'`"; then printf "$$lang "; fi; done; fi)
+
+USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
+
+POFILES=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
+
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(POFILES)
+EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS
+
+POTFILES = \
+# This comment gets stripped out
+
+CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
+
+.SUFFIXES:
+.SUFFIXES: .po .pox .gmo .mo .msg .cat
+
+.po.pox:
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+       sed -f ../intl/po2msg.sed < $< > $*.msg \
+         && rm -f $@ && gencat $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+       $(GENPOT)
+
+install: install-data
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       $(mkdir_p) $(DESTDIR)$(itlocaledir)
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $$dir; \
+         if test -r $$lang.gmo; then \
+           $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+           echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+           echo "installing $(srcdir)/$$lang.gmo as" \
+                "$$dir/$(GETTEXT_PACKAGE).mo"; \
+         fi; \
+         if test -r $$lang.gmo.m; then \
+           $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
+           echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
+         else \
+           if test -r $(srcdir)/$$lang.gmo.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
+               $$dir/$(GETTEXT_PACKAGE).mo.m; \
+             echo "installing $(srcdir)/$$lang.gmo.m as" \
+                  "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+
+# Empty stubs to satisfy archaic automake needs
+dvi info tags TAGS ID:
+
+# Define this as empty until I found a useful application.
+install-exec installcheck:
+
+uninstall:
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
+         rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
+       done
+
+check: all $(GETTEXT_PACKAGE).pot
+       rm -f missing notexist
+       srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
+       if [ -r missing -o -r notexist ]; then \
+         exit 1; \
+       fi
+
+mostlyclean:
+       rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+       rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES stamp-it
+       rm -f *.mo *.msg *.cat *.cat.m *.gmo
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f Makefile.in.in
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       extra_dists="$(EXTRA_DISTFILES)"; \
+       for file in $$extra_dists; do \
+         test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
+       done; \
+       for file in $$dists; do \
+         test -f $$file || file="$(srcdir)/$$file"; \
+         ln $$file $(distdir) 2> /dev/null \
+           || cp -p $$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       tmpdir=`pwd`; \
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         echo "$$lang:"; \
+         result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+         if $$result; then \
+           if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+             rm -f $$tmpdir/$$lang.new.po; \
+            else \
+             if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+               :; \
+             else \
+               echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+               rm -f $$tmpdir/$$lang.new.po; \
+               exit 1; \
+             fi; \
+           fi; \
+         else \
+           echo "msgmerge for $$lang.gmo failed!"; \
+           rm -f $$tmpdir/$$lang.new.po; \
+         fi; \
+       done
+
+Makefile POTFILES: stamp-it
+       @if test ! -f $@; then \
+         rm -f stamp-it; \
+         $(MAKE) stamp-it; \
+       fi
+
+stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..0a99dde
--- /dev/null
@@ -0,0 +1,5 @@
+src/callbacks.c
+src/functions.c
+src/interface.c
+src/main.c
+src/utils.c
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..c0c9cd8
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,94 @@
+# Catalan translation of xfce4-taskmanager.
+# Copyright (C) 2005, 2006 Johannes Zellner
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Pau Ruŀlan Ferragut <paurullan@bulma.net>, 2006.
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-10 21:29+0200\n"
+"PO-Revision-Date: 2006-09-18 16:28+0200\n"
+"Last-Translator: Pau Ruŀlan Ferragut <paurullan@bulma.net>\n"
+"Language-Team: Catalan\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: ../src/interface.c:43 ../src/interface.c:257
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:56
+msgid "cpu usage"
+msgstr "ús de cpu"
+
+#: ../src/interface.c:61
+msgid "memory usage"
+msgstr "ús de memòria"
+
+#: ../src/interface.c:91
+msgid "more details"
+msgstr "més detalls"
+
+#: ../src/interface.c:117
+msgid "Command"
+msgstr "Ordre"
+
+#: ../src/interface.c:123
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:129
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:135
+msgid "State"
+msgstr "Estat"
+
+#: ../src/interface.c:141
+msgid "VM-Size"
+msgstr "Tamany de memòria virtual"
+
+#: ../src/interface.c:147
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:153
+msgid "User"
+msgstr "Usuari"
+
+#: ../src/interface.c:159
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:175
+msgid "Stop"
+msgstr "Atura"
+
+#: ../src/interface.c:180
+msgid "Continue"
+msgstr "Continuar"
+
+#: ../src/interface.c:185
+msgid "Term"
+msgstr "Terme"
+
+#: ../src/interface.c:190
+msgid "Kill"
+msgstr "Mata"
+
+#: ../src/interface.c:221
+msgid "Show user tasks"
+msgstr "Mostra tasques d’usuari"
+
+#: ../src/interface.c:226
+msgid "Show root tasks"
+msgstr "Mostra tasques de superusuari"
+
+#: ../src/interface.c:231
+msgid "Show other tasks"
+msgstr "Mostra altres tasques"
+
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..4a44181
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,117 @@
+# Czech translations for xfce4-taskmanager package.
+# Copyright (C) 2006 THE xfce4-taskmanager'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Michal Várady <miko.vaji@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-14 19:42+0100\n"
+"Last-Translator: Michal Várady <miko.vaji@gmail.com>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Chcete opravdu ukončit tuto úlohu signálem kill?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Chcete opravdu ukončit tuto úlohu?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB z %d kB použito"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "využití procesoru"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "využití paměti"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "více podrobností"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Příkaz"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Stav"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Velikost virtuální paměti"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Uživatel"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Zastavit"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Pokračovat"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Ukončit signálem TERM"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Ukončit signálem KILL"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Zobrazit úlohy uživatele"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Zobrazit úlohy uživatele root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Zobrazit jiné úlohy"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Zobrazovat paměť použitou pro cache jako volnou"
+
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..5f3957e
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,117 @@
+# German translations for xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the
+#   xfce4-taskmanager package.
+# Johannes Zellner <xfce4-taskmanager@nebulon.de>, 2005.
+# Enrico Tröger <enrico.troeger@uvena.de>, 2006.
+# Fabian Nowak <timystery@arcor.de>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-12-19 00:10+0000\n"
+"Last-Translator: Fabian Nowak <timystery@arcor.de>\n"
+"Language-Team: German <xfce4-dev@xfce.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Prozess wirklich töten?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Prozess wirklich beenden?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB of %d kB benutzt"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "CPU-Auslastung"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "Speicherverbrauch"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "Mehr Info"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Befehl"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Status"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Speicher"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Benutzer"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Stop"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Fortsetzen"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Beenden"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Kill"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Zeige eigene Prozesse"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Zeige Systemprozesse"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Zeige andere Prozesse"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Zeige vom Cache verwendeten Speicher als freien Speicher an"
diff --git a/po/el.po b/po/el.po
new file mode 100644 (file)
index 0000000..f907727
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,116 @@
+# translation of el.po to Greek
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Evaggelos Balaskas <ebalaskas@ebalaskas.gr>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: el\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2008-04-24 19:25+0300\n"
+"Last-Translator: Evaggelos Balaskas <ebalaskas@ebalaskas.gr>\n"
+"Language-Team: Greek <nls@tux.hellug.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Επιμένετε να τερματιστεί βίαια η εργασία; "
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Επιμένετε να τερματιστεί η εργασία;"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB από %d kB χρησιμοποιούνται"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "Διαχειριστής εργασιών xfce4"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "χρήση cpu"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "χρήση μνήμης"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "περισσότερες λεπτομέρειες"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Εργασία"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Κατάσταση"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Μέγεθος-VM"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Χρήστης"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Σταμάτημα"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Συνέχεια"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Τερματισμός"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Βίαιος τερματισμός"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Εμφάνιση εργασιών χρήστη"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Εμφάνιση εργασιών διαχειριστή"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Εμφάνιση άλλων εργασιών"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Εμφάνιση χρησιμοποιημένης μνήνης από την προσωρινή μνήμη ως ελεύθερη"
+
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644 (file)
index 0000000..bcc61eb
--- /dev/null
@@ -0,0 +1,117 @@
+# English/GB translation of xfce4-taskmanager.
+# Copyright (C) 2007 THE xfce4-taskmanager'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Jeff Bailes <thepizzaking@gmail.com>, 2007.
+# , fuzzy
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-03-31 10:28+1000\n"
+"Last-Translator: Jeff Bailes <thepizzaking@gmail.com>\n"
+"Language-Team: English/GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Really kill the task?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Really terminate the task?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB of %d kB used"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu usage"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "memory usage"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "more details"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Command"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "State"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-Size"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "User"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Stop"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Continue"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Term"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Kill"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Show user tasks"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Show root tasks"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Show other tasks"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Show memory used by cache as free"
+
diff --git a/po/eu.po b/po/eu.po
new file mode 100644 (file)
index 0000000..a43ba96
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,118 @@
+# translation of eu.po to librezale
+# Basque translations for PACKAGE package.
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Piarres Beobide <pi@beobide.net>, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-16 12:48+0100\n"
+"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"Language-Team: librezale <librezale@librezale.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Benetan ataza hil nahi duzu?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Benetan ataza amaitu nahi duzu?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB %d kB-tik erabiliak"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%% %0.0f "
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-zereginkudeatzailea"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu erabilera"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "memoria erabilera"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "xehetasun gehiago"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Komandoa"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID-a"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID-a"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Egoera"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-Tamaina"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS-a"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Erabiltzailea"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Gelditu"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Jarraitu"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Terminala"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Hil"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Erabiltzaile atazak bistarazi"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Root atazak bistarazi"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Beste atazak bistarazi"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Bistarazo katxeak erabilitako memoria libre bezala"
+
diff --git a/po/fi.po b/po/fi.po
new file mode 100644 (file)
index 0000000..60da648
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,116 @@
+# Finnish translations for xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the
+#   xfce4-taskmanager package.
+# Pasi Sulasalmi <psulasasal@paju.oulu.fi>, 2005.
+# Jari Rahkonen <jari.rahkonen@pp1.inet.fi>, 2006-2007
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-19 17:46+0200\n"
+"PO-Revision-Date: 2007-01-19 18:00+0200\n"
+"Last-Translator: Jari Rahkonen <jari.rahkonen@pp1.inet.fi>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Tapetaanko tehtävä?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Haluatko katkaista tehtävän suorittamisen?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kt:sta käytössä %d kt"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-prosessienhallinta"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "prosessorin käyttö"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "muistin käyttö"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "Lisätiedot"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Komento"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Tila"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-koko"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Käyttäjä"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Pysäytä"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Jatka"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Lopeta"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Tapa"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Näytä käyttäjän prosessit"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Näytä pääkäyttäjän prosessit"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Näytä muut prosessit"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Näytä välimuistikäytössä oleva muisti vapaana"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..9a6e04a
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,117 @@
+# French translation of the xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Peggy Kutyla <peggy.kutyla@laposte.net>, 2005.
+# Maximilian Schleiss <maximilian@xfce.org>, 2006-2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-13 23:54+0100\n"
+"Last-Translator: Maximilian Schleiss <maximilian@xfce.org>\n"
+"Language-Team: French <xfce-i18n@xfce.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Vraiment tuer la tâche?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Vraiment terminer la tâche?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d Ko de %d Ko utilisés"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "Gestionnaire de tâches Xfce4"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "Utilisation du processeur"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "Mémoire utilisée"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "Plus de détails"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Processus"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "État"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Mémoire"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Utilisateur"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Stop"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Continue"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Terminer"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Tuer"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Processus utilisateur"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Processus système"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Autres processus"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Afficher la mémoire utilisée par le cache comme étant libre"
+
diff --git a/po/gl.po b/po/gl.po
new file mode 100644 (file)
index 0000000..d20f5ec
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,115 @@
+# Galician translation for xfce4-taskmanager
+# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2006.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-08-17 19:43+0000\n"
+"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
+"Language-Team: Galician <gl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr ""
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr ""
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr ""
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr ""
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr ""
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Estado"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr ""
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr ""
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Usuario"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr ""
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr ""
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr ""
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr ""
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr ""
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Amosar as tarefas do usuario"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Amosar as tarefas de root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Amosar outras tarefas"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/po/hu.po b/po/hu.po
new file mode 100644 (file)
index 0000000..588f923
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,119 @@
+# Hungarian translation for xfce4-taskmanager
+# Copyright (c) Johannes Zellner <webmaster@nebulon.de>
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# SZERVÁC Attila <sas@321>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-19 20:09+0100\n"
+"Last-Translator: SZERVÁC Attila <sas@321.hu>\n"
+"Language-Team: Hungarian <hu@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Tényleg megölöd a feladatot?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Tényleg lezárod a feladatot?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB/%d kB használt"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-folyamatkezelő"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu használat"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "memória használat"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "részletek"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Parancs"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Állapot"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-méret"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Felhasználó"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Megállítás"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Folytatás"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Leállítás"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Kilövés"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Felhasználói folyamatok megjelenítése"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Root folyamatok megjelenítése"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Más folyamatok megjelenítése"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "A gyorstár által használt memória mutatása szabadként"
+
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..5c19dbe
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,115 @@
+# Italian translations for xfce package.
+# Copyright (C) 2007 THE xfce'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce package.
+# Fabio Riga <usul@aruba.it>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce 4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-06-25 15:50+0200\n"
+"Last-Translator: Fabio Riga <usul@aruba.it>\n"
+"Language-Team: Italian <xfce-i18n@xfce.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Uccidere il processo?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Terminare il processo?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB su %d kB usati"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "uso cpu"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "uso memoria"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "Maggiori dettagli"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Comando"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Stato"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Memoria"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Utente"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "% CPU"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Ferma"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Continua"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Termina"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Uccidi"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Mostra processi dell'utente"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Mostra processi di root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Mostra altri processi"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Mostra la memoria usata per la scorta come libera"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..d3210eb
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,117 @@
+# $Id: ja.po 2350 2007-01-13 10:12:31Z nick $
+#
+# Japanese translations for xfce4-taskmanager package.
+# Copyright (C) 2005-2006 Johannes Zellner.
+# This file is distributed under the same license as
+#   the xfce4-taskmanager package.
+# Daichi Kawahata <daichi@xfce.org>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-04-01 17:57+0900\n"
+"Last-Translator: Daichi Kawahata <daichi@xfce.org>\n"
+"Language-Team: Japanese <xfce-users-jp@ml.fdiary.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr ""
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr ""
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "さらに詳しく"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "コマンド"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "状態"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VMサイズ"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "ユーザー"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr ""
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "中止"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "続行"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "中断"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Kill"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "ユーザータスクを表示"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "ルートタスクを表示"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "その他のタスクを表示"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/po/lv.po b/po/lv.po
new file mode 100644 (file)
index 0000000..2db164f
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,116 @@
+# Latvian translations for xfce4-taskmanager package.
+# Copyright (C) 2006 THE xfce4-taskmanager'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce4-taskmanager package..
+# Rihards Prieditis <Rprieditis@inbox.lv>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-11-17 01:46+0300\n"
+"Last-Translator: Rihards Priedītis <rprieditis@inbox.lv>\n"
+"Language-Team: Lstvian <rprieditis@inbox.lv>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Patiešām nobeidzēt uzdevumu?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Patiesi terminēt uzdevumu?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB no %d kB izmantoti"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu noslodze"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "atmiņas noslodze"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "detalizētāk"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Komanda"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Stāvoklis"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-Izmērs"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Lietotājs"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Apturēt"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Turpināt"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Terminēt"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Nokaut"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Rādīt lietotāja uzdevumus"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Rādīt root uzdevumus"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Rādīt citus uzdevumus"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Rādīt atmiņu, kuru izmanto kešs, kā brīvu"
+
diff --git a/po/nb_NO.po b/po/nb_NO.po
new file mode 100644 (file)
index 0000000..b87a2bb
--- /dev/null
@@ -0,0 +1,115 @@
+# Norwegian Bokmal translations for xfce4-taskmanager package.
+# Copyright (C) 2007 THE xfce4-taskmanager'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Terje Uriansrud <ter@operamail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.3.2svn-r02842\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-07-02 00:37+0200\n"
+"Last-Translator: Terje Uriansrud <ter@operamail.com>\n"
+"Language-Team: Norwegian Bokmal\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Virkelig avslutte oppgaven?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Virkelig terminere oppgaven?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB av %d kB brukt"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-oppgavebehandler"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "Prosessorbruk"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "Minnebruk"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "flere detaljer"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Kommando"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Status"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-størrelse"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Bruker"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Stopp"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Fortsett"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Term"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Avsl"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Vis brukeroppgaver"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Vis superbrukeroppgaver"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Vis andre oppgaver"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Vis minne benyttet av hurtiglager som ledig"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..ac7f23e
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,115 @@
+# Dutch translations for xfce package.
+# Copyright (C) 2007 THE xfce'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the xfce package.
+# Stephan Arts <stephan@xfce.org>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce 4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-08 13:13+0100\n"
+"Last-Translator: Stephan Arts <stephan@xfce.org>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taakbeheer"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu gebruik"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "geheugen gebruik"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "meer details"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Commando"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Status"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-Grootte"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Gebruiker"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Stop"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Verder"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Term"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Kill"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Toon gebruikers taken"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Toon root taken"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Toon andere taken"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..971d58c
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,115 @@
+# Polish translations for xfce4-taskmanager package.
+# Copyright (C) 2005-2006 Johannes Zellner.
+# This file is distributed under the same license as
+#   the xfce4-taskmanager package.
+# Piotr Maliński <admin@rk.edu.pl>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-04-08 13:19+0900\n"
+"Last-Translator: Piotr Maliński <admin@rk.edu.pl>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Na pewno zabić zadanie (przez SIGKILL)?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Na pewno zakończyć zadanie (przez SIGTERM)?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "używane %d kB z %d kB"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "wykorzystanie procesora"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "wykorzystanie pamięci"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "więcej szczegółów"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Polecenie"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Stan"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-Rozmiar"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Użytkownik"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Zatrzymaj"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Kontynuuj"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Zakończ"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Zabij"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Pokaż procesy użytkownika"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Pokaż procesy roota"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Pokaż inne procesy"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Pokaż pamięć użytą przez cache jako wolną"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..fb8244c
--- /dev/null
@@ -0,0 +1,118 @@
+# Brazilian Portuguese translations for xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the
+#   xfce4-taskmanager package.
+# Johannes Zellner <xfce4-taskmanager@nebulon.de>, 2005.
+# Adriano Winter Bess <adriano@xfce.org>, 2006.
+# Pablo Galletti Vieira <pbgozer@gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-08-30 17:00-0300\n"
+"Last-Translator: Pablo Galletti Vieira <pbgozer@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar2.conectiva.com.br>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Realmente matar a tarefa?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Realmente terminar a tarefa?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB de %d kB usado"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "uso de cpu"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "uso de memória"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "mais detalhes"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Comando"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Estado"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Tamanho da Memória Virtual"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Usuário"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Parar"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Continuar"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Terminar"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Matar"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Mostrar tarefas do usuário"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Mostrar tarefas do root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Mostrar outras tarefas"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Mostrar a memória usada pelo cache como livre"
+
diff --git a/po/pt_PT.po b/po/pt_PT.po
new file mode 100644 (file)
index 0000000..0cc9ee6
--- /dev/null
@@ -0,0 +1,116 @@
+# european Portuguese translations for xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Nuno Miguel <nunis@netcabo.pt>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-11-13 10:35+0100\n"
+"Last-Translator: Nuno Miguel <nunis@netcabo.pt>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Matar a tarefa?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Terminar a tarefa?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB de %d kB usados"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "uso de cpu"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "uso de memória"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "mais detalhes"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Comando"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Estado"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Tamanho VM"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Utilizador"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Parar"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Continuar"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Terminar"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Matar"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Exibir processos do utilizador"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Exibir processos do root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Exibir outros processos"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Mostrar memória de cache como livre"
+
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..c14b654
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,115 @@
+# Russian translation of xfce4-taskmanager.
+# Copyright (C) 2005-2006 Johannes Zellner.
+# This file is distributed under the same license as
+#   the xfce4-taskmanager package.
+# Andrey Fedoseev <andrey.fedoseev@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-03-24 21:52+0500\n"
+"Last-Translator: Andrey Fedoseev <andrey.fedoseev@gmail.com>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "Диспетчер задач Xfce 4"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr ""
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr ""
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "подробнее"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Команда"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Состояние"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Память"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Пользователь"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr ""
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Остановить"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Продолжить"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Завершить"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Убить"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Показать задачи пользователя"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Показать задачи суперпользователя"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Показать другие задачи"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/po/sq.po b/po/sq.po
new file mode 100644 (file)
index 0000000..133bc5a
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,116 @@
+# Albanian translation of the xfce4-taskmanager package.
+# Copyright (C) 2005 Johannes Zellner.
+# This file is distributed under the same license as the xfce4-taskmanager package.
+# Besnik Bleta <besnik@programeshqip.org>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-01-29 17:31+0200\n"
+"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
+"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "Ta asgjësoj vërtet këtë akt?"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "Ta përfundoj vërtet këtë akt?"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "përdorur %d kB nga %d kB"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "përdorim cpu-je"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "përdorim kujtese"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "më tepër hollësi"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Urdhër"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Gjendje"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Madhësi VM"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Përdorues"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Ndal"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Vazhdo"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Përfundo"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Asgjëso"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Shfaq veprime përdoruesi"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Shfaq veprime rrënje"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Shfaq veprime të tjera"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "Kujtesën e përdorur nga fshehtina shfaqe si të lirë"
+
diff --git a/po/ur.po b/po/ur.po
new file mode 100644 (file)
index 0000000..9e04bf9
--- /dev/null
+++ b/po/ur.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2007-10-27 17:04+0500\n"
+"Last-Translator: Muhammad Ali Makki <makk.ma@gmail.com>\n"
+"Language-Team: Urdu <makki.ma@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Urdu\n"
+"X-Poedit-Country: PAKISTAN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr "کیا واقعی اس ٹاسک کو قتل کردیا جائے؟"
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr "کیا واقعی اس ٹاسک کو بند کردیا جائے؟"
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr "%d kB برائے %d kB استعمال شدہ"
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr "%0.0f %%"
+
+#: ../src/interface.c:45
+#: ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "ایکسفس4-ٹاسک منیجر"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr "cpu استعمال"
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr "یاداشت کا استعمال"
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "مزید تفصیلات"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "کمانڈ"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "حالت"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "VM-حجم"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "صارف"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "روکیں"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "جاری"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "بند کریں"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "قتل کریں"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "صارف کی ٹاسک ظاہر کریں"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "روٹ کی ٹاسک ظاہر کریں"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "دیگر ٹاسک ظاہر کریں"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr "کیشے کی استعمال شدہ یاداشت بطور خالی دکھائیں"
+
diff --git a/po/vi.po b/po/vi.po
new file mode 100644 (file)
index 0000000..856e9f0
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,114 @@
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Phan Vĩnh Thịnh <teppi@vnlinux.org>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-02-19 22:52+0300\n"
+"Last-Translator: Phan Vĩnh Thịnh <teppi@vnlinux.org>\n"
+"Language-Team: Vietnamese <none@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-taskmanager"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr ""
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr ""
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "chi tiết hơn"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "Câu lệnh"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "Trạng thái"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "Kích cỡ-VM"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "Người dùng"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr ""
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "Dừng"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "Tiếp tục"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Thoát"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "Diệt"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "Hiển thị công việc người dùng"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "Hiển thị công việc của root"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "Hiển thị những công việc khác"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644 (file)
index 0000000..8eab0c6
--- /dev/null
@@ -0,0 +1,115 @@
+# Japanese translations for xfce4-taskmanager package.
+# Copyright (C) 2005-2006 Johannes Zellner.
+# This file is distributed under the same license as
+#   the xfce4-taskmanager package.
+# Cosmo Chene <cosmolax@ubuntu.org.tw>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xfce4-taskmanager 0.4.0-rc1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-13 11:01+0100\n"
+"PO-Revision-Date: 2006-07-29 00:09+0800\n"
+"Last-Translator: Cosmo Chene <cosmolax@ubuntu.org.tw>\n"
+"Language-Team: Tradictional Chinese <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/callbacks.c:60
+msgid "Really kill the task?"
+msgstr ""
+
+#: ../src/callbacks.c:61
+msgid "Really terminate the task?"
+msgstr ""
+
+#: ../src/functions.c:124
+#, c-format
+msgid "%d kB of %d kB used"
+msgstr ""
+
+#: ../src/functions.c:129
+#, c-format
+msgid "%0.0f %%"
+msgstr ""
+
+#: ../src/interface.c:45 ../src/interface.c:272
+msgid "xfce4-taskmanager"
+msgstr "xfce4-工作管理員"
+
+#: ../src/interface.c:59
+msgid "cpu usage"
+msgstr ""
+
+#: ../src/interface.c:67
+msgid "memory usage"
+msgstr ""
+
+#: ../src/interface.c:99
+msgid "more details"
+msgstr "更多細節"
+
+#: ../src/interface.c:125
+msgid "Command"
+msgstr "命令"
+
+#: ../src/interface.c:131
+msgid "PID"
+msgstr "PID"
+
+#: ../src/interface.c:137
+msgid "PPID"
+msgstr "PPID"
+
+#: ../src/interface.c:143
+msgid "State"
+msgstr "狀態"
+
+#: ../src/interface.c:149
+msgid "VM-Size"
+msgstr "虛擬記憶體容量"
+
+#: ../src/interface.c:155
+msgid "RSS"
+msgstr "RSS"
+
+#: ../src/interface.c:161
+msgid "User"
+msgstr "使用者"
+
+#: ../src/interface.c:167
+msgid "CPU%"
+msgstr "CPU%"
+
+#: ../src/interface.c:183
+msgid "Stop"
+msgstr "停止"
+
+#: ../src/interface.c:188
+msgid "Continue"
+msgstr "繼續"
+
+#: ../src/interface.c:193
+msgid "Term"
+msgstr "Term"
+
+#: ../src/interface.c:198
+msgid "Kill"
+msgstr "強行中止"
+
+#: ../src/interface.c:230
+msgid "Show user tasks"
+msgstr "顯示使用者工作"
+
+#: ../src/interface.c:235
+msgid "Show root tasks"
+msgstr "顯示 root 工作"
+
+#: ../src/interface.c:240
+msgid "Show other tasks"
+msgstr "顯示其他工作"
+
+#: ../src/interface.c:245
+msgid "Show memory used by cache as free"
+msgstr ""
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..1d9fbb8
--- /dev/null
@@ -0,0 +1,24 @@
+INCLUDES = \
+       -I$(top_srcdir)/include \
+       -DG_LOG_DOMAIN=\"xfce4-taskmanager\" \
+       -DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+
+bin_PROGRAMS = lxtask
+
+lxtask_SOURCES = \
+       main.c \
+       callbacks.c \
+       callbacks.h \
+       functions.c \
+       functions.h \
+       interface.c \
+       interface.h \
+       xfce-taskmanager-linux.c \
+       xfce-taskmanager-linux.h \
+       types.h \
+       utils.c \
+       utils.h
+
+lxtask_CFLAGS =        $(GTK_CFLAGS)
+
+lxtask_LDADD = $(GTK_LIBS)
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..f6d4a1b
--- /dev/null
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = lxtask$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_lxtask_OBJECTS = lxtask-main.$(OBJEXT) lxtask-callbacks.$(OBJEXT) \
+       lxtask-functions.$(OBJEXT) lxtask-interface.$(OBJEXT) \
+       lxtask-xfce-taskmanager-linux.$(OBJEXT) lxtask-utils.$(OBJEXT)
+lxtask_OBJECTS = $(am_lxtask_OBJECTS)
+am__DEPENDENCIES_1 =
+lxtask_DEPENDENCIES = $(am__DEPENDENCIES_1)
+lxtask_LINK = $(CCLD) $(lxtask_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(lxtask_SOURCES)
+DIST_SOURCES = $(lxtask_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@
+INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@
+INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_POLICY_RULE = @INTLTOOL_POLICY_RULE@
+INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@
+INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@
+INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@
+INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@
+INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@
+INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@
+INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@
+INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@
+INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include \
+       -DG_LOG_DOMAIN=\"xfce4-taskmanager\" \
+       -DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+
+lxtask_SOURCES = \
+       main.c \
+       callbacks.c \
+       callbacks.h \
+       functions.c \
+       functions.h \
+       interface.c \
+       interface.h \
+       xfce-taskmanager-linux.c \
+       xfce-taskmanager-linux.h \
+       types.h \
+       utils.c \
+       utils.h
+
+lxtask_CFLAGS = $(GTK_CFLAGS)
+lxtask_LDADD = $(GTK_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+lxtask$(EXEEXT): $(lxtask_OBJECTS) $(lxtask_DEPENDENCIES) 
+       @rm -f lxtask$(EXEEXT)
+       $(lxtask_LINK) $(lxtask_OBJECTS) $(lxtask_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-callbacks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-functions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-interface.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxtask-xfce-taskmanager-linux.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+lxtask-main.o: main.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-main.o -MD -MP -MF $(DEPDIR)/lxtask-main.Tpo -c -o lxtask-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-main.Tpo $(DEPDIR)/lxtask-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='main.c' object='lxtask-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+lxtask-main.obj: main.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-main.obj -MD -MP -MF $(DEPDIR)/lxtask-main.Tpo -c -o lxtask-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-main.Tpo $(DEPDIR)/lxtask-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='main.c' object='lxtask-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+lxtask-callbacks.o: callbacks.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-callbacks.o -MD -MP -MF $(DEPDIR)/lxtask-callbacks.Tpo -c -o lxtask-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-callbacks.Tpo $(DEPDIR)/lxtask-callbacks.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='callbacks.c' object='lxtask-callbacks.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c
+
+lxtask-callbacks.obj: callbacks.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-callbacks.obj -MD -MP -MF $(DEPDIR)/lxtask-callbacks.Tpo -c -o lxtask-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-callbacks.Tpo $(DEPDIR)/lxtask-callbacks.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='callbacks.c' object='lxtask-callbacks.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi`
+
+lxtask-functions.o: functions.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-functions.o -MD -MP -MF $(DEPDIR)/lxtask-functions.Tpo -c -o lxtask-functions.o `test -f 'functions.c' || echo '$(srcdir)/'`functions.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-functions.Tpo $(DEPDIR)/lxtask-functions.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='functions.c' object='lxtask-functions.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-functions.o `test -f 'functions.c' || echo '$(srcdir)/'`functions.c
+
+lxtask-functions.obj: functions.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-functions.obj -MD -MP -MF $(DEPDIR)/lxtask-functions.Tpo -c -o lxtask-functions.obj `if test -f 'functions.c'; then $(CYGPATH_W) 'functions.c'; else $(CYGPATH_W) '$(srcdir)/functions.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-functions.Tpo $(DEPDIR)/lxtask-functions.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='functions.c' object='lxtask-functions.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-functions.obj `if test -f 'functions.c'; then $(CYGPATH_W) 'functions.c'; else $(CYGPATH_W) '$(srcdir)/functions.c'; fi`
+
+lxtask-interface.o: interface.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-interface.o -MD -MP -MF $(DEPDIR)/lxtask-interface.Tpo -c -o lxtask-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-interface.Tpo $(DEPDIR)/lxtask-interface.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='interface.c' object='lxtask-interface.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c
+
+lxtask-interface.obj: interface.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-interface.obj -MD -MP -MF $(DEPDIR)/lxtask-interface.Tpo -c -o lxtask-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-interface.Tpo $(DEPDIR)/lxtask-interface.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='interface.c' object='lxtask-interface.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi`
+
+lxtask-xfce-taskmanager-linux.o: xfce-taskmanager-linux.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-xfce-taskmanager-linux.o -MD -MP -MF $(DEPDIR)/lxtask-xfce-taskmanager-linux.Tpo -c -o lxtask-xfce-taskmanager-linux.o `test -f 'xfce-taskmanager-linux.c' || echo '$(srcdir)/'`xfce-taskmanager-linux.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-xfce-taskmanager-linux.Tpo $(DEPDIR)/lxtask-xfce-taskmanager-linux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xfce-taskmanager-linux.c' object='lxtask-xfce-taskmanager-linux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-xfce-taskmanager-linux.o `test -f 'xfce-taskmanager-linux.c' || echo '$(srcdir)/'`xfce-taskmanager-linux.c
+
+lxtask-xfce-taskmanager-linux.obj: xfce-taskmanager-linux.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-xfce-taskmanager-linux.obj -MD -MP -MF $(DEPDIR)/lxtask-xfce-taskmanager-linux.Tpo -c -o lxtask-xfce-taskmanager-linux.obj `if test -f 'xfce-taskmanager-linux.c'; then $(CYGPATH_W) 'xfce-taskmanager-linux.c'; else $(CYGPATH_W) '$(srcdir)/xfce-taskmanager-linux.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-xfce-taskmanager-linux.Tpo $(DEPDIR)/lxtask-xfce-taskmanager-linux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xfce-taskmanager-linux.c' object='lxtask-xfce-taskmanager-linux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-xfce-taskmanager-linux.obj `if test -f 'xfce-taskmanager-linux.c'; then $(CYGPATH_W) 'xfce-taskmanager-linux.c'; else $(CYGPATH_W) '$(srcdir)/xfce-taskmanager-linux.c'; fi`
+
+lxtask-utils.o: utils.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-utils.o -MD -MP -MF $(DEPDIR)/lxtask-utils.Tpo -c -o lxtask-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-utils.Tpo $(DEPDIR)/lxtask-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='utils.c' object='lxtask-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
+
+lxtask-utils.obj: utils.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -MT lxtask-utils.obj -MD -MP -MF $(DEPDIR)/lxtask-utils.Tpo -c -o lxtask-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/lxtask-utils.Tpo $(DEPDIR)/lxtask-utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='utils.c' object='lxtask-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lxtask_CFLAGS) $(CFLAGS) -c -o lxtask-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-binPROGRAMS
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/callbacks.c b/src/callbacks.c
new file mode 100644 (file)
index 0000000..988b923
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ *  xfce4-taskmanager - very simple taskmanger
+ *
+ *  Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ *  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 Library  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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include "callbacks.h"
+
+void on_button1_button_press_event(GtkButton *button, GdkEventButton *event)
+{
+    GdkEventButton *mouseevent = (GdkEventButton *)event;
+    if(mainmenu == NULL)
+        mainmenu = create_mainmenu ();
+    gtk_menu_popup(GTK_MENU(mainmenu), NULL, NULL, NULL, NULL, mouseevent->button, mouseevent->time);
+}
+
+void on_button3_toggled_event(GtkButton *button, GdkEventButton *event)
+{
+    full_view = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+    change_list_store_view();
+}
+
+gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *event)
+{
+    if(event->button == 3)
+    {
+        GdkEventButton *mouseevent = (GdkEventButton *)event;
+        if(taskpopup == NULL)
+            taskpopup = create_taskpopup ();
+        gtk_menu_popup(GTK_MENU(taskpopup), NULL, NULL, NULL, NULL, mouseevent->button, mouseevent->time);
+    }
+    return FALSE;
+}
+
+
+void on_info1_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+    show_about_dialog();
+}
+
+void handle_task_menu(GtkWidget *widget, gchar *signal)
+{
+    if(signal != NULL)
+    {
+        gint task_action = SIGNAL_NO;
+
+        switch(signal[0])
+        {
+            case 'K':
+                if(confirm(_("Really kill the task?")))
+                    task_action = SIGNAL_KILL;
+                break;
+            case 'T':
+                if(confirm(_("Really terminate the task?")))
+                    task_action = SIGNAL_TERM;
+                break;
+            case 'S':
+                task_action = SIGNAL_STOP;
+                break;
+            case 'C':
+                task_action = SIGNAL_CONT;
+                break;
+            default:
+                return;
+        }
+
+        if(task_action != SIGNAL_NO)
+        {
+            gchar *task_id = "";
+            GtkTreeModel *model;
+            GtkTreeIter iter;
+
+            if(gtk_tree_selection_get_selected(selection, &model, &iter))
+            {
+                gtk_tree_model_get(model, &iter, 1, &task_id, -1);
+                send_signal_to_task(atoi(task_id), task_action);
+                refresh_task_list();
+            }
+        }
+//      if (strcmp(signal, "KILL") == 0) s = _("Really kill the task?");
+//      else s = _("Really terminate the task?");
+//
+//      if(strcmp(signal, "STOP") == 0 || strcmp(signal, "CONT") == 0 || confirm(s))
+//      {
+//          gchar *task_id = "";
+//          GtkTreeModel *model;
+//          GtkTreeIter iter;
+//
+//          if(gtk_tree_selection_get_selected(selection, &model, &iter))
+//          {
+//              gtk_tree_model_get(model, &iter, 1, &task_id, -1);
+//              send_signal_to_task(atoi(task_id), signal);
+//              refresh_task_list();
+//          }
+//      }
+    }
+}
+
+void handle_prio_menu(GtkWidget *widget, gchar *prio)
+{
+    gchar *task_id = "";
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+
+    if(gtk_tree_selection_get_selected(selection, &model, &iter))
+    {
+        gtk_tree_model_get(model, &iter, 1, &task_id, -1);
+
+        set_priority_to_task(atoi(task_id), atoi(prio));
+        refresh_task_list();
+    }
+}
+
+void on_show_tasks_toggled (GtkMenuItem *menuitem, gint uid)
+{
+    if(uid == own_uid)
+        show_user_tasks = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem));
+    else if(uid == 0)
+        show_root_tasks = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem));
+    else
+        show_other_tasks = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem));
+
+    change_task_view();
+}
+
+void on_show_cached_as_free_toggled (GtkMenuItem *menuitem, gint uid)
+{
+    show_cached_as_free = !show_cached_as_free;
+    change_task_view();
+}
+
+void on_quit(void)
+{
+    save_config();
+    free(config_file);
+
+    gtk_main_quit();
+}
diff --git a/src/callbacks.h b/src/callbacks.h
new file mode 100644 (file)
index 0000000..b9afe45
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ *  xfce4-taskmanager - very simple taskmanger
+ *
+ *  Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ *  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 Library 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.
+ */
+
+#ifndef __CALLBACKS_H_
+#define __CALLBACKS_H_
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include "functions.h"
+#include "interface.h"
+
+
+#include "xfce-taskmanager-linux.h"
+
+void on_button1_button_press_event(GtkButton *button, GdkEventButton *event);
+void on_button3_toggled_event(GtkButton *button, GdkEventButton *event);
+gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *event);
+void on_info1_activate (GtkMenuItem *menuitem,  gpointer user_data);
+void handle_task_menu(GtkWidget *widget, gchar *signal);
+void handle_prio_menu(GtkWidget *widget, gchar *prio);
+void on_show_tasks_toggled (GtkMenuItem *menuitem, gint uid);
+void on_show_cached_as_free_toggled (GtkMenuItem *menuitem, gint uid);
+
+void on_quit(void);
+
+#endif
diff --git a/src/functions.c b/src/functions.c
new file mode 100644 (file)
index 0000000..f1faee3
--- /dev/null
@@ -0,0 +1,254 @@
+/* $Id: functions.c 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+/* modified by Hong Jen Yee <pcman.tw@gmail.com> and the LXDE team
+ * on 2008-04-26 to be used in LXDE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
+
+#include "functions.h"
+
+static system_status *sys_stat =NULL;
+
+gboolean refresh_task_list(void)
+{
+    gint i, j;
+    GArray *new_task_list;
+    gchar *cpu_tooltip, *mem_tooltip;
+    gdouble cpu_usage;
+    guint num_cpus;
+    guint memory_used;
+
+    if (sys_stat!=NULL)
+        num_cpus = sys_stat->cpu_count;
+    else
+        num_cpus = 1;
+
+    /* gets the new task list */
+    new_task_list = (GArray*) get_task_list();
+
+    /* check if task is new and marks the task that its checked*/
+    for(i = 0; i < task_array->len; i++)
+    {
+        struct task *tmp = &g_array_index(task_array, struct task, i);
+        tmp->checked = FALSE;
+
+        for(j = 0; j < new_task_list->len; j++)
+        {
+            struct task *new_tmp = &g_array_index(new_task_list, struct task, j);
+
+            if(new_tmp->pid == tmp->pid)
+            {
+                tmp->old_time = tmp->time;
+
+                tmp->time = new_tmp->time;
+
+                tmp->time_percentage = (gdouble)(tmp->time - tmp->old_time) * (gdouble)(1000.0 / (REFRESH_INTERVAL*num_cpus));
+                if(
+                    (gint)tmp->ppid != (gint)new_tmp->ppid ||
+                    strcmp(tmp->state,new_tmp->state) ||
+                    (unsigned int)tmp->size != (unsigned int)new_tmp->size ||
+                    (unsigned int)tmp->rss != (unsigned int)new_tmp->rss ||
+                    (unsigned int)tmp->time != (unsigned int)tmp->old_time ||
+                    tmp->prio != new_tmp->prio
+                 )
+                {
+                    tmp->ppid = new_tmp->ppid;
+                    strcpy(tmp->state, new_tmp->state);
+                    tmp->size = new_tmp->size;
+                    tmp->rss = new_tmp->rss;
+                    tmp->prio = new_tmp->prio;
+
+                    refresh_list_item(i);
+                }
+                tmp->checked = TRUE;
+                new_tmp->checked = TRUE;
+                break;
+            }
+            else
+                tmp->checked = FALSE;
+        }
+    }
+
+    /* check for unchecked old-tasks for deleting */
+    i = 0;
+    while( i < task_array->len)
+    {
+
+        struct task *tmp = &g_array_index(task_array, struct task, i);
+
+        if(!tmp->checked)
+        {
+            remove_list_item((gint)tmp->pid);
+            g_array_remove_index(task_array, i);
+            tasks--;
+        }
+        else
+            i++;
+
+    }
+
+
+    /* check for unchecked new tasks for inserting */
+    for(i = 0; i < new_task_list->len; i++)
+    {
+        struct task *new_tmp = &g_array_index(new_task_list, struct task, i);
+
+        if(!new_tmp->checked)
+        {
+            struct task *new_task = new_tmp;
+
+            g_array_append_val(task_array, *new_task);
+            if((show_user_tasks && new_task->uid == own_uid) || (show_root_tasks && new_task->uid == 0) ||  (show_other_tasks && new_task->uid != own_uid && new_task->uid != 0))
+                add_new_list_item(tasks);
+            tasks++;
+        }
+    }
+
+    g_array_free(new_task_list, TRUE);
+
+    /* update the CPU and memory progress bars */
+    if (sys_stat == NULL)
+        sys_stat = g_new (system_status, 1);
+    get_system_status (sys_stat);
+
+    memory_used = sys_stat->mem_total - sys_stat->mem_free;
+    if ( show_cached_as_free )
+    {
+        memory_used-=sys_stat->mem_cached;
+    }
+    mem_tooltip = g_strdup_printf (_("%d kB of %d kB used"), memory_used / 1024, sys_stat->mem_total / 1024);
+    gtk_tooltips_set_tip (tooltips, mem_usage_progress_bar_box, mem_tooltip, NULL);
+    gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (mem_usage_progress_bar),  (gdouble)memory_used / sys_stat->mem_total);
+
+    cpu_usage = get_cpu_usage (sys_stat);
+    cpu_tooltip = g_strdup_printf (_("%0.0f %%"), cpu_usage * 100.0);
+    gtk_tooltips_set_tip (tooltips, cpu_usage_progress_bar_box, cpu_tooltip, NULL);
+    gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (cpu_usage_progress_bar), cpu_usage);
+
+    g_free (mem_tooltip);
+    g_free (cpu_tooltip);
+
+    return TRUE;
+}
+
+gdouble get_cpu_usage(system_status *sys_stat)
+{
+    gdouble cpu_usage = 0.0;
+    guint current_jiffies;
+    guint current_used;
+    guint delta_jiffies;
+
+    if ( get_cpu_usage_from_proc( sys_stat ) == FALSE )
+    {
+        gint i = 0;
+
+        for(i = 0; i < task_array->len; i++)
+        {
+            struct task *tmp = &g_array_index(task_array, struct task, i);
+            cpu_usage += tmp->time_percentage;
+        }
+
+        cpu_usage = cpu_usage / (sys_stat->cpu_count * 100.0);
+    } else {
+
+        if ( sys_stat->cpu_old_jiffies > 0 ) {
+            current_used =
+                sys_stat->cpu_user +
+                sys_stat->cpu_nice +
+                sys_stat->cpu_system;
+            current_jiffies =
+                current_used +
+                sys_stat->cpu_idle;
+            delta_jiffies =
+                current_jiffies - (gdouble)sys_stat->cpu_old_jiffies;
+
+            cpu_usage = (gdouble)( current_used - sys_stat->cpu_old_used ) /
+                     (gdouble)delta_jiffies ;
+        }
+    }
+    return cpu_usage;
+}
+
+static gboolean key_file_get_int( GKeyFile* kf, const char* group, const char* name, gboolean def )
+{
+    int ret;
+    GError* err = NULL;
+    ret = g_key_file_get_integer( kf, group, name, &err );
+    if( err )
+    {
+        ret = def;
+        g_error_free( err );
+    }
+    return ret;
+}
+
+static gboolean key_file_get_bool( GKeyFile* kf, const char* group, const char* name, gboolean def )
+{
+    return !!key_file_get_int(kf, group, name, def);
+}
+
+/*
+ * configurationfile support
+ */
+void load_config(void)
+{
+    static const char group[]="General";
+    GKeyFile *rc_file = g_key_file_new();
+    g_key_file_load_from_file(rc_file, config_file, 0, NULL);
+
+    show_user_tasks = key_file_get_bool(rc_file, group, "show_user_tasks", TRUE);
+    show_root_tasks = key_file_get_bool(rc_file, group, "show_root_tasks", FALSE);
+    show_other_tasks = key_file_get_bool(rc_file, group, "show_other_tasks", FALSE);
+    show_cached_as_free = key_file_get_bool(rc_file, group, "show_cached_as_free", TRUE);
+
+    full_view = key_file_get_bool(rc_file, group, "full_view", TRUE);
+
+    win_width = key_file_get_int(rc_file, group, "win_width", 500 );
+    win_height = key_file_get_int(rc_file, group, "win_height", 400 );
+
+    g_key_file_free(rc_file);
+}
+
+void save_config(void)
+{
+    FILE* rc_file = fopen( config_file, "w" );
+
+    fputs( "[General]\n", rc_file );
+    fprintf( rc_file, "show_user_tasks=%d\n", show_user_tasks);
+    fprintf( rc_file, "show_root_tasks=%d\n", show_root_tasks);
+    fprintf( rc_file, "show_other_tasks=%d\n", show_other_tasks);
+    fprintf( rc_file, "show_cached_as_free=%d\n", show_cached_as_free);
+
+    fprintf( rc_file, "full_view=%d\n", full_view);
+
+    gtk_window_get_size(GTK_WINDOW (main_window), (gint *) &win_width, (gint *) &win_height);
+
+    fprintf( rc_file, "win_width=%d\n", win_width);
+    fprintf( rc_file, "win_height=%d\n", win_height);
+
+    fclose(rc_file);
+}
diff --git a/src/functions.h b/src/functions.h
new file mode 100644 (file)
index 0000000..5829b43
--- /dev/null
@@ -0,0 +1,54 @@
+/* $Id: functions.h 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifndef FUNCTIONS_H
+#define FUNCTIONS_H
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <dirent.h>
+#include <pwd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "types.h"
+#include "interface.h"
+
+#ifdef __LINUX__
+#include "xfce-taskmanager-linux.h"
+#endif
+
+#define PROC_DIR_1 "/compat/linux/proc"
+#define PROC_DIR_2 "/emul/linux/proc"
+#define PROC_DIR_3 "/proc"
+
+gboolean refresh_task_list(void);
+gdouble get_cpu_usage(system_status *sys_stat);
+
+/* Configurationfile support */
+void load_config(void);
+void save_config(void);
+
+#endif
+
+
diff --git a/src/interface.c b/src/interface.c
new file mode 100644 (file)
index 0000000..e69ff7c
--- /dev/null
@@ -0,0 +1,500 @@
+/* $Id: interface.c 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+#include "interface.h"
+
+#define GLADE_HOOKUP_OBJECT(component,widget,name) \
+  g_object_set_data_full (G_OBJECT (component), name, \
+    gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
+
+#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
+  g_object_set_data (G_OBJECT (component), name, widget)
+
+GtkWidget* create_main_window (void)
+{
+    GtkWidget *window;
+    GtkWidget *vbox1;
+    GtkWidget *bbox1;
+    GtkWidget *scrolledwindow1;
+    GtkWidget *button1;
+    GtkWidget *button2;
+    GtkWidget *button3;
+
+    GtkWidget *system_info_box;
+
+    tooltips = gtk_tooltips_new();
+    gtk_tooltips_enable(tooltips);
+
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (window), _("Task Manager"));
+    gtk_window_set_default_size (GTK_WINDOW (window), win_width, win_height);
+
+    vbox1 = gtk_vbox_new (FALSE, 10);
+    gtk_widget_show (vbox1);
+    gtk_container_add (GTK_CONTAINER (window), vbox1);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox1), 10);
+
+    system_info_box = gtk_hbox_new (FALSE, 10);
+    gtk_widget_show (system_info_box);
+    gtk_box_pack_start (GTK_BOX (vbox1), system_info_box, FALSE, TRUE, 0);
+
+    cpu_usage_progress_bar_box = gtk_event_box_new ();
+    cpu_usage_progress_bar = gtk_progress_bar_new ();
+    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (cpu_usage_progress_bar), _("cpu usage"));
+    gtk_widget_show (cpu_usage_progress_bar);
+    gtk_widget_show (cpu_usage_progress_bar_box);
+    gtk_container_add (GTK_CONTAINER (cpu_usage_progress_bar_box), cpu_usage_progress_bar);
+    gtk_box_pack_start (GTK_BOX (system_info_box), cpu_usage_progress_bar_box, TRUE, TRUE, 0);
+
+    mem_usage_progress_bar_box = gtk_event_box_new ();
+    mem_usage_progress_bar = gtk_progress_bar_new ();
+    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (mem_usage_progress_bar), _("memory usage"));
+    gtk_widget_show (mem_usage_progress_bar);
+    gtk_widget_show (mem_usage_progress_bar_box);
+    gtk_container_add (GTK_CONTAINER (mem_usage_progress_bar_box), mem_usage_progress_bar);
+    gtk_box_pack_start (GTK_BOX (system_info_box), mem_usage_progress_bar_box, TRUE, TRUE, 0);
+
+    scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
+    gtk_widget_show (scrolledwindow1);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN);
+
+    treeview = gtk_tree_view_new ();
+    gtk_widget_show (treeview);
+    gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview);
+
+    create_list_store();
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+
+    gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(list_store));
+
+    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(list_store), 1, GTK_SORT_ASCENDING);
+
+    bbox1 = gtk_hbutton_box_new();
+    gtk_box_pack_start(GTK_BOX(vbox1), bbox1, FALSE, TRUE, 0);
+    gtk_widget_show (bbox1);
+
+    button2 = gtk_button_new_from_stock ("gtk-preferences");
+    gtk_widget_show (button2);
+    gtk_box_pack_start (GTK_BOX (bbox1), button2, FALSE, FALSE, 0);
+
+    button3 = gtk_toggle_button_new_with_label (_("more details"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button3), full_view);
+    gtk_widget_show (button3);
+    gtk_box_pack_start (GTK_BOX (bbox1), button3, FALSE, FALSE, 0);
+
+    button1 = gtk_button_new_from_stock ("gtk-quit");
+    gtk_widget_show (button1);
+    gtk_box_pack_start (GTK_BOX (bbox1), button1, FALSE, FALSE, 0);
+
+    g_signal_connect ((gpointer) window, "destroy", G_CALLBACK (on_quit), NULL);
+    g_signal_connect_swapped ((gpointer) treeview, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL);
+    g_signal_connect ((gpointer) button1, "clicked",  G_CALLBACK (on_quit),  NULL);
+    g_signal_connect ((gpointer) button2, "button_release_event",  G_CALLBACK (on_button1_button_press_event),  NULL);
+    g_signal_connect ((gpointer) button3, "toggled",  G_CALLBACK (on_button3_toggled_event),  NULL);
+
+    return window;
+}
+
+void create_list_store(void)
+{
+    GtkCellRenderer *cell_renderer;
+
+    /* my change 8->9 */
+    list_store = gtk_tree_store_new(9, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
+
+    cell_renderer = gtk_cell_renderer_text_new();
+
+    column = gtk_tree_view_column_new_with_attributes(_("Command"), cell_renderer, "text", 0, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 0);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 0, compare_string_list_item, (void *)0, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("PID"), cell_renderer, "text", 1, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 1);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 1, compare_int_list_item, (void *)1, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("PPID"), cell_renderer, "text", 2, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 2);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 2, compare_string_list_item, (void *)2, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("State"), cell_renderer, "text", 3, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 3);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 3, compare_int_list_item, (void *)3, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("VM-Size"), cell_renderer, "text", 4, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 4);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 4, compare_int_list_item, (void *)4, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("RSS"), cell_renderer, "text", 5, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 5);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 5, compare_int_list_item, (void *)5, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("User"), cell_renderer, "text", 6, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 6);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 6, compare_string_list_item, (void *)6, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    column = gtk_tree_view_column_new_with_attributes(_("CPU%"), cell_renderer, "text", 7, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 7);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 7, compare_int_list_item, (void *)7, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+    /* my change */
+    column = gtk_tree_view_column_new_with_attributes(_("Prio"), cell_renderer, "text", 8, NULL);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sort_column_id(column, 8);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 8, compare_int_list_item, (void *)8, NULL);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+    /* /my change */
+
+    change_list_store_view();
+}
+
+GtkWidget* create_taskpopup (void)
+{
+    GtkWidget *taskpopup;
+    GtkWidget *menu_item;
+
+    taskpopup = gtk_menu_new ();
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("Stop"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "STOP");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("Continue"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "CONT");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("Term"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "TERM");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("Kill"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "KILL");
+
+    menu_item = gtk_menu_item_new_with_mnemonic ( _("Priority") );
+    gtk_menu_item_set_submenu((gpointer) menu_item, create_prio_submenu());
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
+
+    return taskpopup;
+}
+
+GtkWidget *create_prio_submenu(void)
+{
+    GtkWidget *prio_submenu = gtk_menu_new ();
+    GtkWidget *menu_item;
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("  -10"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-10");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("  -5"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-5");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("    0"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "0");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("   5"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "5");
+
+    menu_item = gtk_menu_item_new_with_mnemonic (_("   10"));
+    gtk_widget_show (menu_item);
+    gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item);
+    g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "10");
+
+    return prio_submenu;
+}
+
+GtkWidget* create_mainmenu (void)
+{
+    GtkWidget *mainmenu;
+    GtkWidget *info1;
+    GtkWidget *trennlinie1;
+    GtkWidget *show_user_tasks1;
+    GtkWidget *show_root_tasks1;
+    GtkWidget *show_other_tasks1;
+    GtkWidget *show_cached_as_free1;
+    GtkAccelGroup *accel_group;
+
+    accel_group = gtk_accel_group_new ();
+
+    mainmenu = gtk_menu_new ();
+
+    info1 = gtk_image_menu_item_new_from_stock ("gtk-about", accel_group);
+    gtk_widget_show (info1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), info1);
+
+    trennlinie1 = gtk_separator_menu_item_new ();
+    gtk_widget_show (trennlinie1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), trennlinie1);
+    gtk_widget_set_sensitive (trennlinie1, FALSE);
+
+    show_user_tasks1 = gtk_check_menu_item_new_with_mnemonic (_("Show user tasks"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(show_user_tasks1), show_user_tasks);
+    gtk_widget_show (show_user_tasks1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), show_user_tasks1);
+
+    show_root_tasks1 = gtk_check_menu_item_new_with_mnemonic (_("Show root tasks"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(show_root_tasks1), show_root_tasks);
+    gtk_widget_show (show_root_tasks1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), show_root_tasks1);
+
+    show_other_tasks1 = gtk_check_menu_item_new_with_mnemonic (_("Show other tasks"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(show_other_tasks1), show_other_tasks);
+    gtk_widget_show (show_other_tasks1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), show_other_tasks1);
+
+    show_cached_as_free1 = gtk_check_menu_item_new_with_mnemonic (_("Show memory used by cache as free"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(show_cached_as_free1), show_cached_as_free);
+    gtk_widget_show (show_cached_as_free1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), show_cached_as_free1);
+
+    g_signal_connect ((gpointer) info1, "activate", G_CALLBACK (on_info1_activate), NULL);
+    g_signal_connect ((gpointer) show_user_tasks1, "toggled", G_CALLBACK (on_show_tasks_toggled), (void *)own_uid);
+    g_signal_connect ((gpointer) show_root_tasks1, "toggled", G_CALLBACK (on_show_tasks_toggled), (void *)0);
+    g_signal_connect ((gpointer) show_other_tasks1, "toggled", G_CALLBACK (on_show_tasks_toggled), (void *)-1);
+    g_signal_connect ((gpointer) show_other_tasks1, "toggled", G_CALLBACK (on_show_cached_as_free_toggled), (void *)0);
+
+    gtk_menu_set_accel_group (GTK_MENU (mainmenu), accel_group);
+
+    return mainmenu;
+}
+
+void show_about_dialog(void)
+{
+#if 0
+    GtkWidget *about_dialog;
+    XfceAboutInfo *about_info;
+
+    about_info = xfce_about_info_new("Task Manager", VERSION, "Xfce4-Taskmanager is a easy to use Taskmanager.",XFCE_COPYRIGHT_TEXT("2005", "Johannes Zellner"), XFCE_LICENSE_GPL);
+    xfce_about_info_set_homepage(about_info, "http://goodies.xfce.org");
+    xfce_about_info_add_credit(about_info, "Johannes Zellner", "webmaster@nebulon.de", "Original Author");
+
+    about_dialog = xfce_about_dialog_new_with_values(GTK_WINDOW(main_window), about_info, NULL);
+    g_signal_connect(G_OBJECT(about_dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
+    gtk_window_set_title (GTK_WINDOW (about_dialog), _("xfce4-taskmanager"));
+    gtk_widget_show(about_dialog);
+
+    xfce_about_info_free(about_info);
+#endif
+}
+
+void change_list_store_view(void)
+{
+    gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PPID), full_view);
+    gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_MEM), full_view);
+    gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_RSS), full_view);
+}
+
+void fill_list_item(gint i, GtkTreeIter *iter)
+{
+    if(iter != NULL)
+    {
+        struct task *task = &g_array_index(task_array, struct task, i);
+
+        gchar *pid = g_strdup_printf("%i", task->pid);
+        gchar *ppid = g_strdup_printf("%i", task->ppid);
+        gchar *state = g_strdup_printf("%s", task->state);
+        gchar *size = g_strdup_printf("%i kB", task->size/1024);
+        gchar *rss = g_strdup_printf("%i kB", task->rss/1024);
+        gchar *name = g_strdup_printf("%s", task->name);
+        gchar *uname = g_strdup_printf("%s", task->uname);
+        gchar *time = g_strdup_printf("%0d%%", (guint)task->time_percentage);
+        gchar *prio = g_strdup_printf("%i", task->prio);    /* my change */
+
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_NAME, name, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_PID, pid, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_PPID, ppid, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_STATE, state, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_MEM, size, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_RSS, rss, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_UNAME, uname, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_TIME, time, -1);
+        gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_PRIO, prio, -1);    /* my change */
+
+        g_free(pid);
+        g_free(ppid);
+        g_free(state);
+        g_free(size);
+        g_free(rss);
+        g_free(name);
+        g_free(uname);
+        g_free(time);
+        g_free(prio);   /* my change */
+    }
+}
+
+void add_new_list_item(gint i)
+{
+        GtkTreeIter iter;
+
+        gtk_tree_store_append(GTK_TREE_STORE(list_store), &iter, NULL);
+
+        fill_list_item(i, &iter);
+}
+
+void refresh_list_item(gint i)
+{
+    GtkTreeIter iter;
+    gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
+    struct task task = g_array_index(task_array, struct task, i);
+
+    while(valid)
+    {
+        gchar *str_data = "";
+        gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
+
+        if(task.pid == atoi(str_data))
+        {
+            g_free(str_data);
+            fill_list_item(i, &iter);
+            break;
+        }
+
+        g_free(str_data);
+        valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
+    }
+}
+
+void remove_list_item(gint pid)
+{
+    GtkTreeIter iter;
+    gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
+
+    while(valid)
+    {
+        gchar *str_data = "";
+        gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
+
+        if(pid == atoi(str_data))
+        {
+            g_free(str_data);
+            gtk_tree_store_remove(GTK_TREE_STORE(list_store), &iter);
+            break;
+        }
+
+        g_free(str_data);
+        valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
+    }
+}
+
+gint compare_int_list_item(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer column)
+{
+    gchar *s1 = "";
+    gchar *s2 = "";
+
+    gint ret = 0;
+
+    gtk_tree_model_get(model, iter1, column, &s1, -1);
+    gtk_tree_model_get(model, iter2, column, &s2, -1);
+
+    gint i1 = 0;
+    gint i2 = 0;
+
+    if(s1 != NULL)
+        i1 = atoi(s1);
+
+    if(s2 != NULL)
+        i2 = atoi(s2);
+
+    ret = i2 - i1;
+
+    if(s1 != NULL)
+        g_free(s1);
+    if(s2 != NULL)
+        g_free(s2);
+
+    return ret;
+}
+
+gint compare_string_list_item(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer column)
+{
+    gchar *s1 = "";
+    gchar *s2 = "";
+
+    gint ret = 0;
+
+    gtk_tree_model_get(model, iter1, GPOINTER_TO_INT(column), &s1, -1);
+    gtk_tree_model_get(model, iter2, GPOINTER_TO_INT(column), &s2, -1);
+
+    if(s1 != NULL && s2 != NULL)
+        ret = strcmp(s2, s1);
+    else
+        ret = 0;
+
+    if(s1 != NULL)
+        g_free(s1);
+    if(s2 != NULL)
+        g_free(s2);
+
+    return ret;
+}
+
+/* change the task view (user, root, other) */
+void change_task_view(void)
+{
+    gtk_tree_store_clear(GTK_TREE_STORE(list_store));
+    gint i = 0;
+
+    for(i = 0; i < tasks; i++)
+    {
+        struct task task = g_array_index(task_array, struct task, i);
+
+        if((task.uid == own_uid && show_user_tasks) || (task.uid == 0 && show_root_tasks) || (task.uid != own_uid && task.uid != 0 && show_other_tasks))
+            add_new_list_item(i);
+    }
+
+    refresh_task_list();
+}
+
+
diff --git a/src/interface.h b/src/interface.h
new file mode 100644 (file)
index 0000000..6702cc9
--- /dev/null
@@ -0,0 +1,85 @@
+/* $Id: interface.h 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifndef INTERFACE_H
+#define INTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "functions.h"
+#include "callbacks.h"
+#include "types.h"
+
+GtkTreeStore *list_store;
+GtkTreeSelection *selection;
+GtkWidget *treeview;
+GtkWidget *mainmenu;
+GtkTooltips *tooltips;
+GtkWidget *taskpopup;
+GtkWidget *priopopup;
+GtkWidget *cpu_usage_progress_bar;
+GtkWidget *mem_usage_progress_bar;
+GtkWidget *cpu_usage_progress_bar_box;
+GtkWidget *mem_usage_progress_bar_box;
+
+#define COLUMN_NAME 0
+#define COLUMN_PID  1
+#define COLUMN_PPID 2
+#define COLUMN_STATE    3
+#define COLUMN_MEM  4
+#define COLUMN_RSS  5
+#define COLUMN_UNAME    6
+#define COLUMN_TIME 7
+#define COLUMN_PRIO     8
+
+GtkTreeViewColumn *column;
+
+void change_list_store_view(void);
+void create_list_store(void);
+
+GtkWidget* create_main_window (void);
+GtkWidget* create_taskpopup (void);
+GtkWidget* create_mainmenu (void);
+GtkWidget *create_prio_submenu(void);
+
+void show_about_dialog(void);
+
+void fill_list_item(gint i, GtkTreeIter *iter);
+void add_new_list_item(gint i);
+gint compare_list_item(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
+gint compare_int_list_item(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
+gint compare_string_list_item(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
+void remove_list_item(gint i);
+void refresh_list_item(gint i);
+
+void change_task_view(void);
+
+#endif
diff --git a/src/main.c b/src/main.c
new file mode 100644 (file)
index 0000000..a2c4df2
--- /dev/null
@@ -0,0 +1,64 @@
+/* $Id: main.c 2350 2007-01-13 10:12:31Z nick $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <signal.h>
+
+#include "types.h"
+#include "interface.h"
+#include "functions.h"
+
+int main (int argc, char *argv[])
+{
+
+#ifdef ENABLE_NLS
+    bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
+    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+    textdomain (GETTEXT_PACKAGE);
+#endif
+
+    gtk_set_locale ();
+    gtk_init (&argc, &argv);
+
+    own_uid = getuid();
+
+    config_file = g_build_filename(g_get_user_config_dir(), "lxtask.conf", FALSE);
+    load_config();
+
+    task_array = g_array_new (FALSE, FALSE, sizeof (struct task));
+    tasks = 0;
+
+    main_window = create_main_window ();
+    gtk_widget_show (main_window);
+
+    if(!refresh_task_list())
+        return 0;
+
+    g_timeout_add(REFRESH_INTERVAL, (gpointer) refresh_task_list, NULL);
+
+    gtk_main ();
+
+    return 0;
+}
+
diff --git a/src/types.h b/src/types.h
new file mode 100644 (file)
index 0000000..f4b9c31
--- /dev/null
@@ -0,0 +1,81 @@
+/* $Id: types.h 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifndef TYPES_H
+#define TYPES_H
+
+#include <gtk/gtk.h>
+
+#define REFRESH_INTERVAL 1000
+
+struct task
+{
+       gint pid;
+       gint ppid;
+       gint uid;
+       gchar uname[64];
+       gchar name[64];
+       gchar state[16];
+       gint size;
+       gint rss;
+       gboolean checked;
+       gint time;
+       gint old_time;
+       gdouble time_percentage;
+       gint prio;      /* my change */
+};
+
+typedef struct
+{
+       guint mem_total;
+       guint mem_free;
+       guint mem_cached;
+       guint cpu_count;
+       guint cpu_idle;
+       guint cpu_user;
+       guint cpu_nice;
+       guint cpu_system;
+       guint cpu_old_jiffies;
+       guint cpu_old_used;
+       gboolean valid_proc_reading;
+} system_status;
+
+GtkWidget *main_window;
+
+GArray *task_array;
+gint tasks;
+gint own_uid;
+
+gchar *config_file;
+
+gboolean show_user_tasks;
+gboolean show_root_tasks;
+gboolean show_other_tasks;
+
+gboolean show_cached_as_free; /* Show memory used Cache as free memory */
+
+gboolean full_view;
+
+guint win_width;
+guint win_height;
+
+const gchar *custom_signal_0;
+const gchar *custom_signal_1;
+
+#endif
diff --git a/src/utils.c b/src/utils.c
new file mode 100644 (file)
index 0000000..f35c0db
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ *      utils.c
+ *
+ *      Copyright 2008 PCMan <pcman.tw@gmail.com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ *      MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+#include "utils.h"
+
+void show_error( const char* format, ... )
+{
+    GtkWidget* dlg;
+    char* msg;
+    va_list ap;
+    va_start(ap, msg);
+    msg = g_strdup_vprintf( format, ap );
+    va_end(ap);
+
+    dlg = gtk_message_dialog_new_with_markup( NULL, GTK_DIALOG_MODAL,
+                                                                            GTK_MESSAGE_ERROR,
+                                                                            GTK_BUTTONS_OK,
+                                                                            msg );
+    g_free( msg );
+    gtk_window_set_title( (GtkWindow*)dlg, _("Error") );
+    gtk_dialog_run( (GtkDialog*)dlg );
+    gtk_widget_destroy( dlg );
+}
+
+gboolean confirm( const char* question )
+{
+    GtkWidget* dlg;
+    int ret;
+    dlg = gtk_message_dialog_new_with_markup( NULL, GTK_DIALOG_MODAL,
+                                                                            GTK_MESSAGE_QUESTION,
+                                                                            GTK_BUTTONS_YES_NO,
+                                                                            question );
+    gtk_window_set_title( (GtkWindow*)dlg, _("Confirm") );
+    ret = gtk_dialog_run( (GtkDialog*)dlg );
+    gtk_widget_destroy( dlg );
+
+    return ret == GTK_RESPONSE_YES;
+}
+
diff --git a/src/utils.h b/src/utils.h
new file mode 100644 (file)
index 0000000..22c3f22
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *      utils.h
+ *
+ *      Copyright 2008 PCMan <pcman.tw@gmail.com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ *      MA 02110-1301, USA.
+ */
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#include <gtk/gtk.h>
+#include <stdarg.h>
+
+G_BEGIN_DECLS
+
+void show_error( const char* format, ... );
+gboolean confirm( const char* question );
+
+G_END_DECLS
+
+#endif
diff --git a/src/xfce-taskmanager-linux.c b/src/xfce-taskmanager-linux.c
new file mode 100644 (file)
index 0000000..b447a36
--- /dev/null
@@ -0,0 +1,317 @@
+/* $Id: xfce-taskmanager-linux.c 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib/gi18n.h>
+#include "xfce-taskmanager-linux.h"
+
+struct task get_task_details(gint pid)
+{
+    FILE *task_file;
+    FILE *cmdline_file;
+    gchar dummy[255];
+    gint idummy;
+    gchar buffer_status[255];
+    struct task task;
+    struct passwd *passwdp;
+    struct stat status;
+    gchar filename[255];
+    gchar cmdline_filename[255];
+
+    sprintf(filename, "/proc/%i/stat", pid);
+    sprintf(cmdline_filename, "/proc/%i/cmdline", pid);
+
+    stat(filename, &status);
+
+    task.pid = -1;
+    task.checked = FALSE;
+
+    if((task_file = fopen(filename,"r")) != NULL)
+    {
+        while(fgets(buffer_status, sizeof(buffer_status), task_file) != NULL)
+        {
+            gint utime = 0;
+            gint stime = 0;
+
+            sscanf(buffer_status, "%i (%255s %1s %i %i %i %i %i %255s %255s %255s %255s %255s %i %i %i %i %i %i %i %i %i %i %i %255s %255s %255s %i %255s %255s %255s %255s %255s %255s %255s %255s %255s %255s %i %255s %255s",
+                        &task.pid,  // processid
+                        task.name,  // processname
+                        task.state, // processstate
+                        &task.ppid, // parentid
+                        &idummy,    // processs groupid
+
+                        &idummy,    // session id
+                        &idummy,    // tty id
+                        &idummy,    // tpgid: The process group ID of the process running on tty of the process
+                        dummy,      // flags
+                        dummy,      // minflt minor faults the process has maid
+
+                        dummy,      // cminflt
+                        dummy,      // majflt
+                        dummy,      // cmajflt
+                        &utime,     // utime the number of jiffies that this process has scheduled in user mode
+                        &stime,     // stime " kernel mode
+
+                        &idummy,    // cutime " waited for children in user
+                        &idummy,    // cstime " kernel mode
+                        &idummy,    // priority (nice value + fifteen)
+                        &task.prio, // nice range from 19 to -19    /* my change */
+                        &idummy,    // hardcoded 0
+
+                        &idummy,    // itrealvalue time in jiffies to next SIGALRM send to this process
+                        &idummy,    // starttime jiffies the process startet after system boot
+                        &task.size, // vsize in bytes
+                        &task.rss,  // rss
+                        dummy,      // rlim limit in bytes for rss
+
+                        dummy,      // startcode
+                        dummy,      // endcode
+                        &idummy,        // startstack
+                        dummy,      // kstkesp value of esp (stack pointer)
+                        dummy,      // kstkeip value of EIP (instruction pointer)
+
+                        dummy,      // signal. bitmap of pending signals
+                        dummy,      // blocked: bitmap of blocked signals
+                        dummy,      // sigignore: bitmap of ignored signals
+                        dummy,      // sigcatch: bitmap of catched signals
+                        dummy,      // wchan
+
+                        dummy,      // nswap
+                        dummy,      // cnswap
+                        dummy,      // exit_signal
+                        &idummy,    // CPU number last executed on
+                        dummy,
+
+                        dummy
+                    );
+            task.time = stime + utime;
+            task.old_time = task.time;
+            task.time_percentage = 0;
+            task.size = task.size / 1024;
+        }
+        task.uid = status.st_uid;
+        passwdp = getpwuid(task.uid);
+        if(passwdp != NULL && passwdp->pw_name != NULL)
+            g_strlcpy(task.uname, passwdp->pw_name, sizeof task.uname);
+    }
+
+
+    if(task_file != NULL)
+        fclose(task_file);
+
+    if((cmdline_file = fopen(cmdline_filename,"r")) != NULL)
+    {
+        gchar dummy[255];
+        strcpy(dummy, "");
+        fscanf(cmdline_file, "%255s", dummy);
+        if(strcmp(dummy, "") != 0)
+        {
+            if(g_strrstr(dummy,"/") != NULL)
+                g_strlcpy(task.name, g_strrstr(dummy,"/")+1, 255);
+            else
+                g_strlcpy(task.name, dummy, 255);
+
+            // workaround for cmd-line entries with leading "-"
+            if(g_str_has_prefix(task.name, "-"))
+                sscanf(task.name, "-%255s", task.name);
+        }
+    }
+
+    if(cmdline_file != NULL)
+        fclose(cmdline_file);
+
+    if(g_str_has_suffix(task.name, ")"))
+        *g_strrstr(task.name, ")") = '\0';
+
+    return task;
+}
+
+GArray *get_task_list(void)
+{
+    DIR *dir;
+    struct dirent *dir_entry;
+    GArray *task_list;
+
+    task_list = g_array_new (FALSE, FALSE, sizeof (struct task));
+
+    if((dir = opendir("/proc/")) == NULL)
+    {
+        fprintf(stderr, "Error: couldn't load the /proc directory\n");
+        return NULL;
+    }
+
+    gint count = 0;
+
+    while((dir_entry = readdir(dir)) != NULL)
+    {
+        if(atoi(dir_entry->d_name) != 0)
+        {
+            struct task task = get_task_details(atoi(dir_entry->d_name));
+            if(task.pid != -1)
+                g_array_append_val(task_list, task);
+        }
+        count++;
+    }
+
+    closedir(dir);
+
+    return task_list;
+}
+
+gboolean get_cpu_usage_from_proc(system_status *sys_stat)
+{
+    const gchar *file_name = "/proc/stat";
+    gchar buffer[100];
+    gboolean retval = FALSE;
+    FILE *file;
+
+    if ( sys_stat->valid_proc_reading == TRUE ) {
+        sys_stat->cpu_old_jiffies =
+            sys_stat->cpu_user +
+            sys_stat->cpu_nice +
+            sys_stat->cpu_system+
+            sys_stat->cpu_idle;
+        sys_stat->cpu_old_used =
+            sys_stat->cpu_user +
+            sys_stat->cpu_nice +
+            sys_stat->cpu_system;
+    } else {
+        sys_stat->cpu_old_jiffies = 0;
+    }
+
+    sys_stat->valid_proc_reading = FALSE;
+
+    if (!g_file_test (file_name, G_FILE_TEST_EXISTS))
+    {
+        return FALSE;
+    }
+
+
+    file = fopen (file_name, "r");
+
+    if (file)
+    {
+        if ( fgets (buffer, 100, file) != NULL )
+        {
+            if ( sscanf (buffer, "cpu\t%u %u %u %u",
+                     &sys_stat->cpu_user,
+                     &sys_stat->cpu_nice,
+                     &sys_stat->cpu_system,
+                     &sys_stat->cpu_idle
+                    ) == 4 )
+            {
+                sys_stat->valid_proc_reading = TRUE;
+                retval = TRUE;
+            }
+        }
+        fclose( file );
+    }
+        return retval;
+}
+
+gboolean get_system_status (system_status *sys_stat)
+{
+    FILE *file;
+    gchar *file_name;
+    gchar *buffer;
+
+    buffer = g_new (gchar, 100);
+
+    file_name = g_strdup ("/proc/meminfo");
+
+    if (!g_file_test (file_name, G_FILE_TEST_EXISTS))
+    {
+        g_free(file_name);
+        return FALSE;
+    }
+
+    file = fopen (file_name, "r");
+
+    if (file)
+    {
+        while (fgets (buffer, 100, file) != NULL)
+        {
+            sscanf (buffer, "MemTotal:\t%u kB", &sys_stat->mem_total);
+            sscanf (buffer, "MemFree:\t%u kB", &sys_stat->mem_free);
+            sscanf (buffer, "Cached:\t%u kB", &sys_stat->mem_cached);
+        }
+        fclose (file);
+    }
+    g_free (buffer);
+    g_free (file_name);
+
+    buffer = g_new (gchar, 100);
+
+    file_name = g_strdup ("/proc/cpuinfo");
+
+    if (!g_file_test (file_name, G_FILE_TEST_EXISTS))
+    {
+        g_free(file_name);
+        return FALSE;
+    }
+
+    file = fopen (file_name, "r");
+
+    sys_stat->cpu_count = -1;
+
+    if (file)
+    {
+
+        while (fgets (buffer, 100, file) != NULL)
+        {
+            sscanf (buffer, "processor : %i", &sys_stat->cpu_count);
+        }
+        fclose (file);
+        sys_stat->cpu_count++;
+    }
+    g_free (buffer);
+    g_free (file_name);
+
+    return TRUE;
+}
+
+void send_signal_to_task(gint task_id, gint signal)
+{
+    if(task_id > 0 && signal != 0)
+    {
+        gint ret = 0;
+
+        ret = kill(task_id, signal);
+
+        if(ret != 0)
+            show_error(_("Couldn't send signal to the task with ID %d"), signal, task_id);
+    }
+}
+
+
+void set_priority_to_task(gint task_id, gint prio)
+{
+    if(task_id > 0)
+    {
+        gchar command[128] = "";
+        g_sprintf(command, "renice %d %d > /dev/null", prio, task_id);
+
+        if(system(command) != 0)
+            show_error(_("Couldn't set priority %d to the task with ID %d"), prio, task_id);
+    }
+}
+
diff --git a/src/xfce-taskmanager-linux.h b/src/xfce-taskmanager-linux.h
new file mode 100644 (file)
index 0000000..b7917a0
--- /dev/null
@@ -0,0 +1,48 @@
+/* $Id: xfce-taskmanager-linux.h 3940 2008-02-10 22:48:45Z nebulon $
+ *
+ * Copyright (c) 2006 Johannes Zellner, <webmaster@nebulon.de>
+ *
+ * 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 Library 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.
+ */
+
+#ifndef XFCE4_TASKMANAGER_LINUX_H
+#define XFCE4_TASKMANAGER_LINUX_H
+
+#include <glib.h>
+#include <dirent.h>
+#include <pwd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include "types.h"
+#include "utils.h"
+
+#define SIGNAL_NO   0
+#define SIGNAL_KILL SIGKILL
+#define SIGNAL_TERM SIGINT
+#define SIGNAL_CONT SIGCONT
+#define SIGNAL_STOP SIGSTOP
+
+struct task get_task_details(gint pid);
+GArray *get_task_list(void);
+gboolean get_system_status(system_status *sys_stat);
+gboolean get_cpu_usage_from_proc(system_status *sys_stat);
+void send_signal_to_task(gint task_id, gint signal);
+void set_priority_to_task(gint task_id, gint prio);
+
+#endif