[Pkg-xfce-commits] r306 - in desktop/trunk: . thunar thunar/branches thunar/branches/upstream thunar/branches/upstream/current thunar/branches/upstream/current/docs thunar/branches/upstream/current/docs/design thunar/branches/upstream/current/docs/papers thunar/branches/upstream/current/docs/reference thunar/branches/upstream/current/docs/reference/thunar-vfs thunar/branches/upstream/current/docs/reference/thunar-vfs/html thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl thunar/branches/upstream/current/docs/reference/thunar-vfs/xml thunar/branches/upstream/current/docs/reference/thunarx thunar/branches/upstream/current/docs/reference/thunarx/html thunar/branches/upstream/current/docs/reference/thunarx/images thunar/branches/upstream/current/docs/reference/thunarx/tmpl thunar/branches/upstream/current/docs/reference/thunarx/xml thunar/branches/upstream/current/examples thunar/branches/upstream/current/examples/open-terminal-here thunar/branches/upstream/current/icons thunar/branches/upstream/current/icons/24x24 thunar/branches/upstream/current/icons/48x48 thunar/branches/upstream/current/pixmaps thunar/branches/upstream/current/po thunar/branches/upstream/current/tdb thunar/branches/upstream/current/tests thunar/branches/upstream/current/tests/data thunar/branches/upstream/current/thunar thunar/branches/upstream/current/thunar-vfs thunar/branches/upstream/current/thunarx

Yves-Alexis Perez corsac-guest at costa.debian.org
Thu Nov 17 13:48:37 UTC 2005


Author: corsac-guest
Date: 2005-11-17 13:47:07 +0000 (Thu, 17 Nov 2005)
New Revision: 306

Added:
   desktop/trunk/thunar/
   desktop/trunk/thunar/branches/
   desktop/trunk/thunar/branches/upstream/
   desktop/trunk/thunar/branches/upstream/current/
   desktop/trunk/thunar/branches/upstream/current/AUTHORS
   desktop/trunk/thunar/branches/upstream/current/COPYING
   desktop/trunk/thunar/branches/upstream/current/COPYING.LIB
   desktop/trunk/thunar/branches/upstream/current/ChangeLog
   desktop/trunk/thunar/branches/upstream/current/FAQ
   desktop/trunk/thunar/branches/upstream/current/HACKING
   desktop/trunk/thunar/branches/upstream/current/INSTALL
   desktop/trunk/thunar/branches/upstream/current/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/NEWS
   desktop/trunk/thunar/branches/upstream/current/README
   desktop/trunk/thunar/branches/upstream/current/THANKS
   desktop/trunk/thunar/branches/upstream/current/TODO
   desktop/trunk/thunar/branches/upstream/current/Thunar.desktop.in
   desktop/trunk/thunar/branches/upstream/current/aclocal.m4
   desktop/trunk/thunar/branches/upstream/current/compile
   desktop/trunk/thunar/branches/upstream/current/config.guess
   desktop/trunk/thunar/branches/upstream/current/config.h.in
   desktop/trunk/thunar/branches/upstream/current/config.sub
   desktop/trunk/thunar/branches/upstream/current/configure
   desktop/trunk/thunar/branches/upstream/current/configure.in
   desktop/trunk/thunar/branches/upstream/current/depcomp
   desktop/trunk/thunar/branches/upstream/current/docs/
   desktop/trunk/thunar/branches/upstream/current/docs/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/design/
   desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/design/mime.xmi
   desktop/trunk/thunar/branches/upstream/current/docs/design/overview.xmi
   desktop/trunk/thunar/branches/upstream/current/docs/papers/
   desktop/trunk/thunar/branches/upstream/current/docs/papers/HackingOnThunar.odt
   desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsGroup.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMimeDatabase.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMonitor.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUser.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUserManager.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolume.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolumeManager.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/filesystem-monitoring.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/fundamentals.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/home.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/introduction.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ix01.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/left.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/mime-types.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/right.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/style.css
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Basic-Types.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Initialization-and-Shutdown.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsInfo.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeApplication.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeInfo.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsPath.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Utility-Functions.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs.devhelp
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/up.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/users-and-groups-handling.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/volume-handling.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-docs.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-overrides.txt
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-sections.txt
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs.types
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-group.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-info.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-init-shutdown.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-interactive-job.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-job.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-application.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-database.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-info.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-monitor.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-operations.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-path.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb-factory.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-info.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-manager.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-types.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-unused.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-uri.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user-manager.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-util.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume-manager.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-group.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-info.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-init-shutdown.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-interactive-job.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-job.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-application.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-database.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-info.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-monitor.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-operations.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-path.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb-factory.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-info.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-manager.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-types.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-uri.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user-manager.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-util.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume-manager.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxFileInfo.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxMenuProvider.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPage.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPageProvider.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/abstraction.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/home.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ix01.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/left.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/menu-provider.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/right.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/say-hello.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/style.css
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-Variables-and-functions-to-check-the-library-version.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-abstraction-layer.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-fundamentals.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-overview.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-providers.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-advanced-topics.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-getting-started.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions.html
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx.devhelp
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/up.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/abstraction.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/menu-provider.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/say-hello.png
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-docs.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-overrides.txt
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-sections.txt
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx.types
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-file-info.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-menu-provider.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page-provider.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-unused.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-version-information.sgml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml.in
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-file-info.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-menu-provider.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page-provider.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page.xml
   desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-version-information.xml
   desktop/trunk/thunar/branches/upstream/current/examples/
   desktop/trunk/thunar/branches/upstream/current/examples/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/examples/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/
   desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/README
   desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/open-terminal-here.c
   desktop/trunk/thunar/branches/upstream/current/gtk-doc.make
   desktop/trunk/thunar/branches/upstream/current/icons/
   desktop/trunk/thunar/branches/upstream/current/icons/24x24/
   desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/icons/24x24/Thunar.png
   desktop/trunk/thunar/branches/upstream/current/icons/48x48/
   desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/icons/48x48/Thunar.png
   desktop/trunk/thunar/branches/upstream/current/icons/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/icons/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/install-sh
   desktop/trunk/thunar/branches/upstream/current/intltool-extract.in
   desktop/trunk/thunar/branches/upstream/current/intltool-merge.in
   desktop/trunk/thunar/branches/upstream/current/intltool-update.in
   desktop/trunk/thunar/branches/upstream/current/ltmain.sh
   desktop/trunk/thunar/branches/upstream/current/missing
   desktop/trunk/thunar/branches/upstream/current/mkinstalldirs
   desktop/trunk/thunar/branches/upstream/current/pixmaps/
   desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/pixmaps/Thunar-about-logo.png
   desktop/trunk/thunar/branches/upstream/current/po/
   desktop/trunk/thunar/branches/upstream/current/po/ChangeLog
   desktop/trunk/thunar/branches/upstream/current/po/Makefile.in.in
   desktop/trunk/thunar/branches/upstream/current/po/POTFILES.in
   desktop/trunk/thunar/branches/upstream/current/po/de.gmo
   desktop/trunk/thunar/branches/upstream/current/po/de.po
   desktop/trunk/thunar/branches/upstream/current/po/el.gmo
   desktop/trunk/thunar/branches/upstream/current/po/el.po
   desktop/trunk/thunar/branches/upstream/current/po/es.gmo
   desktop/trunk/thunar/branches/upstream/current/po/es.po
   desktop/trunk/thunar/branches/upstream/current/po/hu.gmo
   desktop/trunk/thunar/branches/upstream/current/po/hu.po
   desktop/trunk/thunar/branches/upstream/current/po/ja.gmo
   desktop/trunk/thunar/branches/upstream/current/po/ja.po
   desktop/trunk/thunar/branches/upstream/current/tdb/
   desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/tdb/README
   desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.c
   desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.h
   desktop/trunk/thunar/branches/upstream/current/tdb/tdb.c
   desktop/trunk/thunar/branches/upstream/current/tdb/tdb.h
   desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h
   desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h.in
   desktop/trunk/thunar/branches/upstream/current/tdb/tdbspeed.c
   desktop/trunk/thunar/branches/upstream/current/tdb/tdbtool.c
   desktop/trunk/thunar/branches/upstream/current/tdb/tdbtorture.c
   desktop/trunk/thunar/branches/upstream/current/tests/
   desktop/trunk/thunar/branches/upstream/current/tests/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/tests/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/tests/data/
   desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/tests/data/test-thunar-vfs-volume-bsd.fstab
   desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-path.c
   desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-volume-bsd.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/abicheck.sh
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/make-thunar-vfs-alias.pl
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-1.pc.in
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-alias.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-aliasdef.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h.in
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.list
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-types.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.c
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.h
   desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.symbols
   desktop/trunk/thunar/branches/upstream/current/thunar/
   desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/thunar/main.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.png
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.xml
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.list
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.xml
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.png
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.h
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.xml
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.c
   desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/
   desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.am
   desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.in
   desktop/trunk/thunar/branches/upstream/current/thunarx/abicheck.sh
   desktop/trunk/thunar/branches/upstream/current/thunarx/make-thunarx-alias.pl
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-1.pc.in
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-alias.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-aliasdef.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h.in
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.c
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.h
   desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.symbols
   desktop/trunk/thunar/tags/
Log:
[svn-inject] Installing original source of thunar

Added: desktop/trunk/thunar/branches/upstream/current/AUTHORS
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/AUTHORS	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/AUTHORS	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,9 @@
+Benedikt Meurer <benny at xfce.org>
+Jeffs Franks <jcfranks at xfce.org>
+
+The tdb library, which is included with the Thunar distribution, was originally
+written as part of the Samba suite. My understanding is that the majority of
+the code was written by Andrew Trigell <tridge at linuxcare.com> with the help of
+Paul "Rusty" Russell <rusty at linuxcare.com>. Luke Kenneth Casson Leighton
+<luke at samba.org> also contributed a few patches. Sorted freelist merge code
+added by Jeremy Allison <jeremy at valinux.com>.

Added: desktop/trunk/thunar/branches/upstream/current/COPYING
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/COPYING	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/COPYING	2005-11-17 13:47:07 UTC (rev 306)
@@ -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.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Added: desktop/trunk/thunar/branches/upstream/current/COPYING.LIB
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/COPYING.LIB	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/COPYING.LIB	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,437 @@
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 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.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, 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 library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, 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 companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, 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 library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete 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 distribute a copy of this License along with the
+Library.
+
+  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 Library or any portion
+of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you 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.
+
+  If distribution of 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 satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  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.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library 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.
+
+  9. 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 Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+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.
+
+  11. 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 Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library 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 Library.
+
+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.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library 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.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library 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 Library
+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 Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+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
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. 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 LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS

Added: desktop/trunk/thunar/branches/upstream/current/ChangeLog
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/ChangeLog	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/ChangeLog	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,2917 @@
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-xfer.c: Return G_FILE_ERROR_INTR when the copy
+	  operation is explicitly cancelled by the user.
+	* thunar-vfs/thunar-vfs-transfer-job.c
+	  (thunar_vfs_transfer_job_copy_pair): Don't delete the source file when
+	  moving unless the target file was written successfully and the job
+	  wasn't cancelled. This fixes a bug reported by Jari Rahkonen.
+
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.{c,h}: Register "Delete" as key binding
+	  for the ThunarStandardView class, rather than registering it as
+	  accelerator for the "delete" action. This fixes bug #1226.
+	* thunar/thunar-marshal.list: Add BOOLEAN:VOID marshaller.
+
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-exec.c(thunar_vfs_exec_on_screen): Fix invalid
+	  calculation of the number of environment variables.
+
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Bump version to 0.1.4svn and depend on
+	  libexo 0.3.1.1.
+
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* po/*.po: Update translations.
+	* po/ChangeLog: Didn't mean to revert this file.
+	* README: Mention gconf, libjpeg and libstartup-notification as optional
+	  dependencies.
+
+2005-11-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Don't need to remember the "changed"
+	  signal handler id per row, as g_signal_handlers_disconnect_matched()
+	  using G_SIGNAL_MATCH_ID and G_SIGNAL_MATCH_CLOSURE is nearly as fast
+	  as g_signal_handler_disconnect().
+	* thunar/thunar-folder.c(thunar_folder_finalize): Specify both
+	  G_SIGNAL_MATCH_ID and G_SIGNAL_MATCH_CLOSURE when disconnecting
+	  "destroy" signals from files.
+	* thunar/thunar-preferences.c, thunar/thunar-window.c: Remember the last
+	  active view as default for now.
+	* thunar/thunar-create-dialog.c(thunar_create_dialog_text_changed): Use
+	  G_IS_DIR_SEPARATOR() rather than hardcoding the slash character.
+
+2005-11-13	Benedikt Meurer <benny at xfce.org>
+
+	* FAQ, thunar/thunar-icon-view.c: Add initial support for mouse gestures
+	  to the icon view component.
+
+2005-11-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window.c, thunar/thunar-preferences.c: Rename
+	  "window-location-bar" to "last-location-bar" and "window-side-pane"
+	  to "last-side-pane" to make clear that it's the last selected
+	  setting.
+	* thunar/thunar-metafile.h: Drop THUNAR_METAFILE_KEY_SHOWHIDDEN.
+	* thunar/Makefile.am, thunar/thunar-gobject-extensions.{c,h}: Add
+	  additional GValue transformation functions.
+	* thunar/thunar-preferences.c: Register additional transformation
+	  functions provided by the GObject extensions in the class_init()
+	  function. Add new preference "default-show-hidden", which tells
+	  whether hidden files are shown by default in new windows.
+	* thunar/thunar-view.{c,h}: Add the "show-hidden" property to the
+	  ThunarView interface.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c:
+	  Implement the "show-hidden" property from the ThunarView interface,
+	  rather than adding an action to the UI manager.
+	* thunar/thunar-preferences.c: Add "default-show-hidden" property, which
+	  tells whether hidden files should be shown in newly opened windows.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add the
+	  "show-hidden" action here, which starts with the default value queried
+	  from the preferences, and uses the new ThunarView API to sync the
+	  selected setting.
+
+2005-11-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-preferences.c(thunar_preferences_set_property): No need
+	  to call g_object_notify() here, as object_set_property() does that
+	  implictly once the set_property() call returns.
+
+2005-11-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.{c,h}, thunar/thunar-metafile.{c,h}: Remove the
+	  default value handling from the ThunarMetafile class and leave it up
+	  to the caller to specify the default value when fetching/storing
+	  metadata.
+	* thunar/thunar-folder.{c,h}, thunar/thunar-standard-view.c: Remove
+	  the error parameter from the thunar_folder_get_for_file() method, as
+	  this call cannot fail. If a loading error occurs, it will be reported
+	  asynchronously by the listdir job.
+	* thunar/thunar-preferences.c(thunar_preferences_set_property): Issue
+	  a warning if a required transformation function is not available to
+	  the GLib Type System, as this is effectively a bug in our application.
+
+2005-11-12	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-folder.c, thunar/thunar-list-model.c,
+	  thunar/thunar-standard-view.c: Forward ThunarVfsListdirJob loading
+	  errors to the ThunarStandardView and display an error dialog to the
+	  user.
+	* thunar/thunar-preferences.c, FAQ: Use a tdb database to store the
+	  preferences, while not saving defaults to the database file.
+	* thunar/thunar-preferences.c: Add initial preferences
+	  "window-location-bar" and "window-side-pane".
+	* thunar/thunar-window.c: Always remember the last selected location
+	  bar and side pane setting in the preferences.
+
+2005-11-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c(thunar_list_model_get_statusbar_text):
+	  Display symbolic links properly just like the MIME type field in
+	  the properties dialog.
+
+2005-11-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c(thunar_standard_view_action_duplicate):
+	  Use thunar_standard_view_get_selected_paths() instead of
+	  thunar_standard_view_get_selected_files().
+	* po/POTFILES.in: Add new source files.
+	* po/*.po: Merge new strings.
+	* thunar/thunar-dialogs.{c,h}, thunar/Makefile.am: Add new function
+	  thunar_dialogs_show_error(), which takes care of displaying an error
+	  message dialog to the user.
+	* thunar/thunar-application.c, thunar/thunar-chooser-dialog.c,
+	  thunar/thunar-clipboard-manager.c, thunar/thunar-dnd.c,
+	  thunar/thunar-favourites-view.c, thunar/thunar-launcher.c,
+	  thunar/thunar-properties-dialog.c, thunar/thunar-standard-view.c,
+	  thunar/thunar-window.c: Use thunar_dialogs_show_error() whenever
+	  possible to reduce code duplication.
+	* thunar-vfs/thunar-vfs-info.h, docs/reference/thunar-vfs/: Update the
+	  Thunar-VFS documentation.
+
+2005-11-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c(thunar_standard_view_new_files): Grab
+	  focus for the view widget after selecting newly created files.
+	* thunar-vfs/thunar-vfs-mkdir-job.{c,h}, thunar-vfs/Makefile.am: Import
+	  new class ThunarVfsMkdirJob, which is used to asynchronously create
+	  a bunch of directories.
+	* thunar-vfs/thunar-vfs.{c,h}, thunar-vfs/thunar-vfs.symbols: Add new
+	  methods thunar_vfs_make_directory() and thunar_vfs_make_directories()
+	  as public interface to the newly imported ThunarVfsMkdirJob.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_info_for_data_locked),
+	  (thunar_vfs_mime_database_get_info_for_file): Consider empty
+	  files to be text/plain, so users can easily open newly created (empty)
+	  files in their favourite text editor.
+	* thunar-vfs/thunar-vfs-mime-sniffer.{c,h}, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs-mime-database.c, configure.in.in: Add function
+	  thunar_vfs_mime_sniffer_looks_like_text(), which performs some smart
+	  checks to determine if a given data block looks like plain text. Plain
+	  text means either UTF-8 - and thereby also ASCII - or valid multi-byte
+	  if the platform supports multi-byte strings. In both cases, even
+	  truncated data blocks will be recognized.
+	* thunar/thunar-application.{c,h}: Add thunar_application_mkdir() as
+	  frontend to the thunar_vfs_make_directories() function.
+	* thunar/thunar-create-dialog.{c,h}, thunar-vfs/Makefile.am: Add class
+	  ThunarCreateDialog, which is used to query the user for the filename
+	  that should be used for a new file/folder.
+	* TODO: Add todo item.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c,
+	  thunar/thunar-window-ui.xml: Add "Create Folder" action, which uses
+	  thunar_application_mkdir() to create a new subfolder in the current
+	  folder.
+	* thunar/thunar-window.c: Rename thunar_window_action_location() to
+	  thunar_window_action_open_location() to get consistent naming.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add "Home" action
+	  whose primary purpose is to be able to open the home folder using a
+	  keyboard shortcut.
+
+2005-11-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-monitor.c, thunar-vfs/thunar-vfs-thumb.c: Apply
+	  patch from Erik Harrison <erikharrison at gmail.com> to fix unused
+	  variables when FAM/Gamin and/or GConf aren't available.
+
+2005-11-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c(thunar_standard_view_init): Be sure to
+	  update the actions whenever the current folder is changed.
+
+2005-11-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window.c(thunar_window_notify_loading): Don't force a
+	  round-trip to the Xserver when setting/unsetting the watch cursor.
+	  Set/unset the cursor only if the window is already realized.
+	* thunar/thunar-list-model.c(thunar_list_model_get_value): Don't need to
+	  check the result of thunar_file_get_date_string() and
+	  thunar_file_get_size_string() as they are garantied to be non-NULL.
+	* thunar/thunar-list-model.c(thunar_list_model_file_changed): Use
+	  gtk_tree_path_new_from_indices() instead of gtk_tree_path_new() and
+	  gtk_tree_path_append_index().
+	* thunar/thunar-list-model.c(thunar_list_model_set_folder): Use
+	  g_object_freeze_notify()/g_object_thaw_notify() for multiple property
+	  change notification.
+	* thunar/thunar-list-model.c(thunar_list_model_get_statusbar_text):
+	  Don't need to verify the result of thunar_file_get_size_string(), as
+	  it's garantied to be non-NULL.
+
+2005-11-09	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-location-buttons.c
+	  (thunar_location_buttons_set_current_directory): Be a bit smarter here
+	  and try to reuse existing buttons whenever possible.
+
+2005-11-09	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Depend on GLib 2.6.4 or above.
+	* tdb/Makefile.am: Add _XOPEN_SOURCE=500 workaround for glibc to make
+	  pread()/pwrite() visible to the compiler.
+
+2005-11-09	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-history.{c,h}, thunar/Makefile.am: Import new class
+	  ThunarHistory, which handles back/forward history for a ThunarWindow.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Use the newly
+	  imported class ThunarHistory to manage the navigational history for
+	  the ThunarWindow.
+
+2005-11-09	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window.c: Display the tooltip of the currently selected
+	  menu item in the statusbar.
+	* thunar/thunar-icon-render.c(thunar_icon_renderer_render): Render up
+	  to 4 emblems for icon sizes from 48px on and up to 2 emblems for icon
+	  sizes lower than 48px.
+	* thunar/thunar-icon-render.c(thunar_icon_renderer_render): Use the
+	  proper icon factory for the target drawable, rather than the default
+	  icon factory.
+
+2005-11-09	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-xfer.{c,h}: Add function thunar_vfs_xfer_link(),
+	  which creates a symbolic link to a file.
+	* thunar-vfs/thunar-vfs-link-job.{c,h}, thunar-vfs/Makefile.am: Import
+	  new class ThunarVfsLinkJob, which can be used to symlink a bunch of
+	  files.
+	* thunar-vfs/thunar-vfs.{c,h}, thunar-vfs/thunar-vfs.symbols: Add
+	  thunar_vfs_link_file() and thunar_vfs_link_files() as public interface
+	  to the ThunarVfsLinkJob class.
+	* po/POTFILES.in: Add thunar-vfs-link-job.c here.
+	* thunar/thunar-application.{c,h}: Add thunar_application_link_into() as
+	  interface to the thunar_vfs_link_files() method. Restructure the code
+	  to further reduce the code duplication.
+	* thunar/thunar-dnd.c: Use thunar_application_link_into() to implement
+	  the "Link here" Drag&Drop action.
+	* thunar-vfs/thunar-vfs-transfer-job.c
+	  (thunar_vfs_transfer_job_copy_pair): Don't access pairs outside the
+	  current pair list.
+	* thunar-vfs/thunar-vfs-xfer.c(thunar_vfs_xfer_next_path): Also detect
+	  the "%uth copy of %s" pattern when duplicating a file.
+	* thunar/thunar-standard-view.c: Use upper case for substantives in
+	  action titles where appropriate.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c:
+	  Add "duplicate" and "make-link" actions, for duplicating/linking
+	  files easily.
+	* po/*.po: Merge new strings.
+
+2005-11-08	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-transfer-job.c(thunar_vfs_transfer_job_new):
+	  Verify that we don't ever try to transfer the root directory.
+	* thunar/thunar-file.{c,h}: Make thunar_file_cache_lookup() a public
+	  function.
+	* thunar-vfs/thunar-vfs-interactive-job.{c,h}: Add a new signal
+	  "new-files", which can be invoked by derived jobs for their new files.
+	  The application can use this signal to get notified when a job added
+	  new files to a folder (e.g. select them in a folder view, etc.).
+	* thunar-vfs/thunar-vfs-transfer-job.c: Collect the newly created paths
+	  and emit the "new-files" signal when the execution finishes.
+	* thunar-vfs/thunar-vfs-monitor.{c,h}, thunar-vfs/thunar-vfs.symbols:
+	  Add new method thunar_vfs_monitor_wait(), which can be used by helper
+	  threads to wait until the ThunarVfsMonitor has processed all pending
+	  notifications.
+	* thunar-vfs/thunar-vfs-interactive-job.c
+	  (thunar_vfs_interactive_job_new_files): Use thunar_vfs_monitor_wait()
+	  to delay the "new-files" emission until the application has processed
+	  all pending notifications.
+	* thunar-vfs/thunar-vfs-monitor.c: Lower the notification interval to
+	  250 milliseconds.
+	* thunar-vfs/thunar-vfs-transfer-job.c(thunar_vfs_transfer_job_execute):
+	  Don't use g_rename() for now, as it causes too much trouble right now.
+	* thunar/thunar-application.{c,h}, thunar/thunar-dnd.{c,h},
+	  thunar/thunar-clipboard-manager.{c,h}: Allow the consumers to pass
+	  a "new-files" closure when starting a transfer job.
+	* thunar/thunar-list-model.{c,h}: Add new method
+	  thunar_list_model_get_paths_for_files(), which returns the list of
+	  tree paths for a given list of ThunarFiles.
+	* thunar/thunar-standard-view.c: Supply a "new-files" closure when
+	  starting transfer jobs, and select the files that are passed to the
+	  "new-files" callback when the job finishes.
+	* docs/reference/thunar-vfs/: Update the documentation bits affected
+	  by the latest changes.
+
+2005-11-08	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.h: Add method thunar_file_is_symlink() to check
+	  whether a given ThunarFile is a symbolic link.
+	* thunar/thunar-list-model.c, thunar/thunar-properties-dialog.c: Display
+	  symbolic links properly for the MIME Type fields.
+	* thunar-vfs/thunar-vfs-transfer-job.{c,h}, thunar-vfs/thunar-vfs.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Adjust the asynchronous operations API
+	  again to make it more constistent with the requirements of the file
+	  manager.
+	* po/*.po: Merge new strings.
+	* thunar-vfs/thunar-vfs-monitor.c: Add tags to notifications to make
+	  sure (slow) FAM events don't override properly feeded events, as
+	  afterall we know best what we did.
+	* thunar-vfs/thunar-vfs-transfer-job.c
+	  (thunar_vfs_transfer_job_copy_pair): Fix a typo, where the result
+	  of thunar_vfs_transfer_job_overwrite() was not negated properly.
+	* thunar-vfs/thunar-vfs-xfer.c, thunar-vfs/thunar-vfs-transfer-job.c,
+	  TODO: Automatically duplicate files when copying and the source and
+	  target paths refer to the same file.
+	* thunar/thunar-application.{c,h}, thunar/thunar-standard-view.c,
+	  thunar/thunar-clipboard-manager.{c,h}, thunar/thunar-dnd.c: Rework
+	  the ThunarApplication API and internals to reduce the amount of
+	  duplicated code, and make the API more consistent.
+	* thunar-vfs/thunar-vfs-xfer.{c,h}, thunar-vfs/thunar-vfs.c: Feed events
+	  into the VFS monitor from the xfer module.
+	* thunar-vfs/thunar-vfs-transfer-job.c
+	  (thunar_vfs_transfer_job_copy_pair): No need to feed a "created" event
+	  into the VFS monitor, as that's done by the xfer module directly (with
+	  the correct target path).
+	* docs/reference/thunar-vfs/thunar-vfs-sections.txt,
+	  docs/reference/thunar-vfs/tmpl/thunar-vfs-operations.sgml: Update
+	  documentation bits affected by the latest changes to the public API.
+
+2005-11-07	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Use an alloc-only memory chunk to reduce
+	  the overhead.
+	* thunar/thunar-icon-factory.c(thunar_icon_factory_load_from_file): Add
+	  the thumbnail frame after scaling down the thumbnail to the desired
+	  size.
+	* thunar/thunar-icon-factory.c(thumbnail_needs_frame): Inline this
+	  function if possible.
+
+2005-11-07	Benedikt Meurer <benny at xfce.org>
+
+	* tdb/tdbtool.c: Make gcc4 happy.
+	* thunar/thunar-dnd.c(thunar_dnd_ask): Add icons to the "move" and
+	  "copy" actions.
+	* thunar/thunar-folder.c(thunar_folder_monitor): Be sure to process
+	  monitor events properly in either case.
+	* thunar-vfs/thunar-vfs-monitor.c
+	  (thunar_vfs_monitor_queue_notification): Schedule only one
+	  notification per handle, where "deleted" events have the highest
+	  priority.
+	* docs/reference/thunar-vfs/: Update documentation.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-xfer.{c,h}: Add module
+	  to copy various kinds of file system entities (basicly everything that
+	  a normal user is permitted to create, e.g. no device nodes).
+	* thunar-vfs/thunar-vfs-transfer-job.{c,h}: Add new ThunarVfsTransferJob
+	  class based on the thunar-vfs-xfer module.
+	* thunar-vfs/thunar-vfs.c: Use new ThunarVfsTransferJob class.
+	* thunar/thunar-progress-dialog.c: Improve the progress dialog.
+	* po/POTFILES.in, po/*.po: Update the file list and the translations.
+
+2005-11-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-transfer-job.{c,h}, thunar-vfs/thunar-vfs.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Update the Thunar-VFS transfer API.
+	* thunar/thunar-application.c: Use the new Thunar-VFS transfer API.
+
+2005-11-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.{c,h}: Add "renamed" signal and emit it whenever
+	  the file is renamed by the user.
+	* thunar/thunar-folder.c: Use the "ThunarFile::renamed" to re-register
+	  with the file alteration monitor under the new path.
+	* thunar/thunar-window.c: Update the window icon and title whenever the
+	  current-directory is changed (e.g. the user renamed the directory
+	  file).
+	* thunar-vfs/thunar-vfs-monitor.c: Place the timeout into a preprocessor
+	  define.
+	* tdb/, AUTHORS, FAQ, configure.in.in, Makefile.am: Import the tdb - the
+	  Trivial Database - engine from the Samba suite, which will be used to
+	  store file metadata in a lightweight and efficient way.
+	* thunar/thunar-metafile.{c,h}, thunar/Makefile.am: Add ThunarMetafile
+	  class, which handles metadata for files based on a tdb database.
+	* thunar/thunar-file.{c,h}: Add methods to access metadata for a given
+	  ThunarFile.
+	* thunar/thunar-file.c: Query additional emblems from the file's
+	  metadata (in addition to the special emblems that are set
+	  automcatically).
+	* thunar/thunar-emblem-chooser.{c,h}, thunar/Makefile.am: Add
+	  ThunarEmblemChooser widget class, to edit the list of additional
+	  emblems for a ThunarFile.
+	* thunar/thunar-standard-view.c: Synchronize the show-hidden property.
+	* thunar/thunar-properties-dialog.c: Add a notebook tab for the Emblems.
+
+2005-11-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.c: Use THUNAR_FILE_IN_DESTRUCTION as destruction
+	  flag rather than GTK_IN_DESTRUCTION.
+
+2005-11-01	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-unlink-job.c(thunar_vfs_unlink_job_remove):
+	  Also remove thumbnails when successfully deleting a regular file.
+	* thunar-vfs/thunar-vfs-thumb-jpeg.{c,h}, thunar-vfs/Makefile.am,
+	  configure.in.in: Add fast JPEG loader, which is able to scale down
+	  the data while loading it.
+	* thunar-vfs/thunar-vfs-thumb.c: Use the fast JPEG loader to generate
+	  thumbnails for JPEG files (if supported).
+
+2005-11-01	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.{c,h}, thunar-vfs/thunar-vfs.symbols: Add
+	  attribute custom_icon to the ThunarVfsInfo struct instead of the hints
+	  framework and a new method thunar_vfs_info_get_custom_icon() to query
+	  the custom icon from a ThunarVfsInfo.
+	* thunar-vfs/thunar-vfs-thumb.c
+	  (thunar_vfs_thumb_factory_store_thumbnail): Fix invalid check for
+	  valid pixbuf.
+	* thunar-vfs/thunar-vfs-info.c(_thunar_vfs_info_new_internal): Be sure
+	  to remove any file extension (e.g. '.png') from themed icon names, so
+	  GtkIconTheme is able to locate the icon.
+	* thunar-vfs/thunar-vfs-info.c: Don't treat .directory files like other
+	  .desktop files, as that's confusing for the casual user.
+	* thunar/thunar-file.{c,h}: Add method thunar_file_get_custom_icon()
+	  to return the custom icon set for the associated ThunarVfsInfo.
+	* thunar/thunar-file.c(thunar_file_get_icon_name): Don't return the
+	  custom icon here.
+	* thunar/thunar-icon-factory.c(thunar_icon_factory_load_file_icon):Check
+	  first if the ThunarFile specifies a custom icon and try to load it,
+	  falling back to thumbnails and regular (mime) icons.
+
+2005-10-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.h: Add thunar_file_is_regular() to check whether a
+	  ThunarFile is a regular file.
+	* thunar/thunar-file.h: Add thunar_file_get_info() to query the
+	  ThunarVfsInfo for a given ThunarFile.
+	* thunar-vfs/thunar-vfs-info.{c,h}, thunar-vfs/thunar-vfs.symbols: Add
+	  new method thunar_vfs_info_copy(), which takes a deep copy of a
+	  ThunarVfsInfo.
+	* thunar-vfs/thunar-vfs-job.{c,h}, thunar-vfs/thunar-vfs.symbols: Turn
+	  thunar_vfs_job_cancelled() into an inline function.
+	* thunar-vfs/thunar-vfs-thumb.{c,h}, thunar-vfs/thunar-vfs.symbols,
+	  thunar-vfs/Makefile.am: Readd the ThunarVfsThumbFactory class and
+	  adjust it to use ThunarVfsInfo's instead of ThunarVfsURI's.
+	* configure.in.in, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs-thumb.{c,h}: Add optional support for GNOME
+	  thumbnailers, which requires GConf.
+	* thunar/thunar-thumbnail-generator.{c,h}, thunar/Makefile.am: Add new
+	  class ThunarThumbnailGenerator, which is used to asynchronously
+	  generate and store thumbnails for files.
+	* thunar/thunar-icon-factory.{c,h}: Add support for loading thumbnails.
+	  Add support for generating thumbnails using the new
+	  ThunarThumbnailGenerator class.
+	* configure.in.in: Bump version to 0.1.3.
+
+2005-10-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-listdir-job.c(thunar_vfs_listdir_job_execute):
+	  Don't immediately terminate the second collector task.
+
+2005-10-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-scandir.c: Don't report EMLINK at all.
+
+2005-10-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-scandir.c(thunar_vfs_scandir): Treat EMLINK
+	  like ENOTDIR, since there's no GFileError to represent EMLINK.
+
+2005-10-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-cache.c(cache_node_lookup_suffix): Always
+	  check the return value to avoid guessing invalid mime types just
+	  because of misleading stopchars.
+	* thunar/thunar-file.c(thunar_file_get_icon_name): Try to be smart when
+	  looking up the icon name for binaries.
+
+2005-10-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.{c,h}: Use ThunarFile to copy/cut to
+	  the clipboard and monitor the files for deletion.
+	* thunar/thunar-clipbard-manager.{c,h}: Add new method
+	  thunar_clipboard_manager_has_cutted_file() to check whether a certain
+	  file was cutted to the clipboard.
+	* thunar/thunar-gdk-pixbuf-extensions.{c,h}: Add new function
+	  thunar_gdk_pixbuf_lucent() when generates a translucent pixbuf.
+	* thunar/thunar-standard-view.c: Use the new clipboard manager
+	  interface.
+	* thunar/thunar-icon-renderer.c(thunar_icon_renderer_render): Render
+	  translucent icons for files previously cutted to the clipboard.
+	* thunar/thunar-window.c: Queue a draw on the window whenever the
+	  clipboard contents change to be sure to always display correct
+	  state.
+
+2005-10-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-monitor.c(thunar_vfs_monitor_feed): Be sure to
+	  schedule directory events only for handles that were registered as
+	  directory.
+	* thunar-vfs/thunar-vfs-unlink-job.c(thunar_vfs_unlink_job_execute):
+	  Ignore ENOTDIR errors when collecting the files to delete.
+	* thunar-vfs/thunar-vfs-exec.c(tvsn_startup_timeout),
+	  (thunar_vfs_exec_on_screen): Don't use libsn functions outside the
+	  GDK lock.
+	* thunar/thunar-file.{c,h}: Inline the most trivial methods.
+	* thunar-vfs/thunar-vfs-user.{c,h}: Implement ThunarVfsUser and 
+	  ThunarVfsGroup directly for local user/group management.
+
+2005-10-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.c
+	  (thunar_clipboard_manager_paste_path_list): Fix possible segmentation
+	  fault.
+
+2005-10-27	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-interactive-job.{c,h}: Add a VFS monitor pointer
+	  to the interactive job, which will be used by the derived classes to
+	  communicate fs changes to the application.
+	* thunar-vfs/thunar-vfs-unlink-job.c(thunar_vfs_unlink_job_remove): Feed
+	  deleted events into the VFS monitor whenever a file was successfully
+	  unlinked from the file system, so the application can be updated even
+	  if no file system monitoring mechanism like FAM or Gamin is available.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c: Add
+	  the "Delete file(s)" operation to the user interface.
+
+2005-10-27	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add optional check for libstartup-notification-1.0.
+	* thunar-vfs/thunar-vfs-exec.{c,h}, thunar-vfs/Makefile.am: Add optional
+	  support for startup notification.
+	* thunar-vfs/thunar-vfs-info.c,
+	  thunar-vfs/thunar-vfs-mime-application.c: Use the thunar-vfs-exec
+	  module.
+	* thunar-vfs/thunar-vfs-transfer-job.c: Don't include
+	  thunar-vfs-sysdep.h anymore.
+	* po/POTFILES.in: Remove thunar-vfs-sysdep and add thunar-vfs-exec.
+
+2005-10-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunarx/thunarx-config.c: Fix typo.
+	* thunar-vfs/thunar-vfs-config.{c,h.in}, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs.symbols, thunar-vfs/abicheck.sh,
+	  thunar-vfs/thunar-vfs.h, configure.in.in: Add support for version
+	  checking to the Thunar-VFS library.
+	* thunar-vfs/*.[ch], thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs.symbols: Replace ThunarVfsURI with ThunarVfsPath
+	  for the first version and thereby limit the functionality to local
+	  files, which in turn means there's no trash and no computer folder.
+	  This will increase the chance that Thunar will be ready for the Xfce
+	  4.4.0 release.
+	* thunar/*.[ch], thunar/Makefile.am: Use ThunarVfsPath instead of
+	  ThunarVfsURI.
+	* tests/test-thunar-vfs-path.c, tests/test-thunar-vfs-uri.c,
+	  tests/Makefile.am: Replace the ThunarVfsURI test case with a new
+	  ThunarVfsPath test case.
+	* tests/test-thunar-vfs-volume-bsd.c: Properly initialize and shutdown
+	  the Thunar-VFS library.
+	* po/POTFILES.in: Update the file list.
+	* docs/: Sync the documentation with the changes.
+	* configure.in.in: Don't use -fvisibility=hidden as that causes trouble
+	  with inline functions that are also implemented and exported by the
+	  library. Instead we explicitly mark internal functions with
+	  G_GNUC_INTERNAL.
+
+2005-10-03	Benedikt Meurer <benny at xfce.org>
+
+	* THANKS, configure.in.in, po/es.po: Add spanish translations, thanks
+	  to Pablo Hernández-M. Saiz <homeless3d at gmail.com>.
+
+2005-10-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-monitor.c: Fire notifications asynchronously, so
+	  events can be injected from threads other than the main thread. This
+	  also fixes problems with Gamins kqueue/inotify backends.
+
+2005-10-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-properties-dialog.c(thunar_properties_dialog_update):
+	  Don't update the name label/window title unless the file name has
+	  changed.
+
+2005-09-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-launcher.c(thunar_launcher_update): Use mnemonics for
+	  the "Open"/"Execute" action.
+	* po/de.po: Add initial, incomplete translations.
+
+2005-09-27	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Substitute platform flags properly.
+	* thunar/Makefile.am: Don't delete thunar-thumbnail-frame.h.
+	* thunar/thunar-standard-view.c(thunar_standard_view_selection_changed):
+	  Use ngettext() for the Cut/Copy File(s) actions.
+	* thunar/thunar-file.{c,h}: Add new virtual method get_actions(), which
+	  is used to support custom actions for certain files (e.g. the Empty
+	  Trash Bin action for the trash file).
+	* thunar/thunar-application.{c,h}: Add thunar_application_delete_uris()
+	  to be able to easily delete arbitrary files.
+	* thunar/thunar-trash-file.c(thunar_trash_file_new): Use
+	  thunar_file_destroy() instead of gtk_object_destroy().
+	* thunar/thunar-trash-folder.c: Implement the get_actions() method with
+	  the "Empty Trash Bin" action.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c:
+	  Extend the extension menu merge mechanism to also load custom actions
+	  provided by ThunarFile implementations.
+	* thunar/thunar-file.c(thunar_file_accepts_uri_drop): Fix typo.
+	* thunar/thunar-trash-folder.c: Watch files for changes.
+	* thunar/thunar-favourites-view.c
+	  (thunar_favourites_view_button_press_event): Add custom actions to the
+	  favourite context menu.
+	* TODO: Drop completed item.
+	* configure.in.in: Disable strict aliasing if debugging is enabled and
+	  the compiler supports the -fno-strict-aliasing switch.
+	* po/*.po: Update translations.
+	* main.c(main): Initialize file properly.
+	* thunar/thunar-file.c(thunar_local_file_is_renameable): Don't permit
+	  users to rename root nodes.
+	* thunar/thunar-open-with-action.c(thunar_open_with_action_menu_mapped):
+	  Use "Other Application..." instead of just "Other...".
+
+2005-09-23	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view.c(thunar_details_view_button_press_event),
+	  thunar/thunar-icon-view.c(thunar_icon_view_button_press_event): Open
+	  folders in new windows on double middle-click events.
+
+2005-09-22	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Fix typo.
+
+2005-09-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-*.c: Documentation tweaks.
+	* configure.in.in, docs/reference/Makefile.am,
+	  docs/reference/thunar-vfs/: Prepare Thunar-VFS reference manual.
+	* thunar/thunar-list-model.c(thunar_list_model_get_statusbar_text):
+	  Use ngettext() for the statusbar text.
+	* thunar/thunar-launcher.c(thunar_launcher_update): Use ngettext() for
+	  the "Open in n New Windows" menu label.
+	* thunar/thunar-launcher.c(thunar_launcher_open_new_windows): Use
+	  ngettext() for the question whether to open n separate windows.
+	* thunar/thunar-launcher.c(thunar_launcher_open_uris): Use ngettext()
+	  to format the error message when opening multiple URIs at once
+	  failes.
+	* po/*.po: Update po files.
+	* configure.in.in, examples/open-terminal-here/Makefile.am,
+	  thunar-vfs/Makefile.am, thunar/Makefile.am, thunarx/Makefile.am:
+	  Don't add debugging and visibility flags to CFLAGS, CPPFLAGS and
+	  LDFLAGS, but use PLATFORM_CFLAGS, PLATFORM_CPPFLAGS and
+	  PLATFORM_LDFLAGS instead to avoid trouble with certain conftests
+	  when checking the distribution.
+
+2005-09-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-trash.h: Fix typo.
+	* thunar/thunar-chooser-dialog.c(thunar_chooser_dialog_response): Handle
+	  absolute paths properly for custom commands.
+
+2005-09-20	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-application.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Load the supported mime types for the
+	  applications.
+	* thunar-vfs/thunar-vfs-mime-application.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Add a new constructor
+	  thunar_vfs_mime_application_new_from_file() for the special case
+	  where a particular file should be loaded by path.
+	* thunar-vfs/thunar-vfs-mime-application.c
+	  (thunar_vfs_mime_application_equal): Properly initialize the
+	  application variables.
+	* thunar-vfs/thunar-vfs-mime-application.c
+	  (thunar_vfs_mime_application_lookup_icon_name): Permit applications
+	  to specify absolute paths for the icon name.
+	* thunar-vfs/thunar-vfs-mime-database.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Extend the mime database by a new
+	  method thunar_vfs_mime_database_set_default_application(), which is
+	  used to set the default application for a given mime type.
+	* thunar-vfs/thunar-vfs-sysdep.c(_thunar_vfs_sysdep_parse_exec): Fix
+	  typo to properly execute applications that require a terminal.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_applications): Always prepend the
+	  default applications for the given mime info to the list returned
+	  from this method.
+	* thunar/thunar-favourites-model.c(thunar_favourites_model_save): Use
+	  g_mkstemp() to create the temporary file.
+	* thunar-vfs/thunar-vfs-mime-application.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Add public flags to the mime
+	  applications.
+	* thunar-vfs/thunar-vfs-mime-application.c
+	  (thunar_vfs_mime_application_new_from_file): Strip off known suffixes
+	  for image files if a themed icon is specified. This way we can
+	  work-around quite a few broken .desktop files.
+	* thunar-vfs/thunar-vfs-mime-database.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Support the addition of custom
+	  applications using thunar_vfs_mime_database_add_application() in
+	  a way compatible to what Nautilus does (which is actually quite a
+	  mess).
+	* thunar/thunar-chooser-dialog.{c,h}, thunar/thunar-chooser-model.{c,h},
+	  thunar/Makefile.am: Import the "Open With" dialog based on the two
+	  classes ThunarChooserDialog and ThunarChooserModel, which in turn are
+	  based on the new functionality provided by Thunar-VFS, and thereby
+	  permit the user to associate applications with files (actually mime
+	  types) and add new applications.
+	* thunar/thunar-launcher.c: Connect the "Open With Other" action to
+	  the new ThunarChooserDialog.
+	* thunar/thunar-favourites-model.c: Document the drag source functions.
+	* README: Add a list of dependencies for Thunar.
+	* TODO: Drop completed items.
+
+2005-09-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-database.c: Include exo/exo.h.
+
+2005-09-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-volume-bsd.c,
+	  thunar-vfs/thunar-vfs-volume-sysv.c: Include thunar-vfs-alias.h.
+
+2005-09-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-progress-dialog.c: Use GObject for the job instead of
+	  ExoObject.
+
+2005-09-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-interactive-job.{c,h},
+	  thunar-vfs/thunar-vfs-job.{c,h},
+	  thunar-vfs/thunar-vfs-listdir-job.{c,h},
+	  thunar-vfs/thunar-vfs-transfer-job.{c,h},
+	  thunar-vfs/thunar-vfs-unlink-job.{c,h}: Allocate a new main loop for
+	  every running job so we can terminate them properly and be sure to
+	  run the finalize method in the main thread. This enables us to use
+	  arbitrary GObjects within a job without having to worry about the
+	  reference counting problem in GLib 2.6. The jobs are GObjects as well
+	  now to easily support language bindings and allow us to drop the
+	  problematic ExoObject class.
+
+2005-09-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-launcher.c(thunar_launcher_open_files): Use
+	  g_object_unref() instead of exo_object_unref().
+
+2005-09-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-application.{c,h},
+	  thunar-vfs/thunar-vfs-mime-database.c, thunar-vfs/thunar-vfs.symbols,
+	  thunar/thunar-launcher.c, thunar/thunar-marshal.list,
+	  thunar/thunar-open-with-action.c: Turn ThunarVfsMimeApplication into
+	  a boxed type.
+	* thunar/thunar-window.c: Apply Daichis patch to make the dynamic
+	  actions titles translatable (#1153).
+
+2005-09-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.c, thunar-vfs/thunar-vfs-mime-database.c,
+	  thunar-vfs/thunar-vfs-mime-info.{c,h}, thunar-vfs/thunar-vfs-thumb.c,
+	  thunar-vfs/thunar-vfs.symbols: Turn ThunarVfsMimeInfo into a boxed
+	  type.
+	* thunar-vfs/thunar-vfs-mime-provider.c: No need to provide fallback
+	  implementations for the virtual methods, as both providers implement
+	  all virtual methods.
+	* thunar-vfs/thunar-vfs-mime-provider.{c,h},
+	  thunar-vfs/thunar-vfs-mime-cache.c,
+	  thunar-vfs/thunar-vfs-mime-legacy.c,
+	  thunar-vfs/thunar-vfs-mime-database.c: Derive the MIME providers from
+	  GObject instead of ExoObject.
+	* thunar-vfs/thunar-vfs-mime-database.c, thunar-vfs/thunar-vfs-info.c,
+	  thunar-vfs/thunar-vfs-thumb.c, thunar-vfs/thunar-vfs.c,
+	  thunar/thunar-computer-folder.c, thunar/thunar-file.c,
+	  thunar/thunar-open-with-action.c, thunar/thunar-trash-folder.c:
+	  Derive ThunarVfsMimeDatabase from GObject instead of ExoObject.
+
+2005-09-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-sysdep.h: Add inline atomic operations.
+	* thunar-vfs/thunar-vfs-info.c, thunar-vfs/thunar-vfs-listdir-job.c,
+	  thunar-vfs/thunar-vfs-mime-application.c,
+	  thunar-vfs/thunar-vfs-mime-database.c,
+	  thunar-vfs/thunar-vfs-monitor.c,
+	  thunar-vfs/thunar-vfs-sysdep.c, thunar-vfs/thunar-vfs-thumb.c,
+	  thunar-vfs/thunar-vfs-transfer-job.c, thunar-vfs/thunar-vfs-trash.c,
+	  thunar-vfs/thunar-vfs-uri.{c,h}, thunar-vfs/thunar-vfs.c,
+	  thunar-vfs/thunar-vfs.symbols, thunar/thunar-clipboard-manager.c,
+	  thunar/thunar-computer-folder.c, thunar/thunar-favourites-model.c,
+	  thunar/thunar-favourites-view.c, thunar/thunar-file.c,
+	  thunar/thunar-icon-factory.c, thunar/thunar-local-file.c,
+	  thunar/thunar-local-folder.c, thunar/thunar-location-buttons.c,
+	  thunar/thunar-path-entry.c, thunar/thunar-standard-view.c,
+	  thunar/thunar-statusbar.c, thunar/thunar-trash-file.c, 
+	  thunar/thunar-trash-folder.c: Turn ThunarVfsURI into a boxed type
+	  to make language bindings easier and reduce the overhead. Drop the
+	  foreign host support code, as we can't use it anyways, since nearly
+	  every other existing application that handles file URIs is broken
+	  when it comes to file URIs with authorities. Simplify the
+	  thunar_vfs_uri_to_string() method again and return only escaped
+	  versions of the URI.
+	* thunar/thunar-path-entry.c(thunar_path_entry_set_current_file):
+	  Display file URIs for non-UTF8 paths.
+	* tests/test-thunar-vfs-uri.c, tests/test-thunar-vfs-volume-bsd.c:
+	  Update the tests.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-info.h,
+	  thunar-vfs/thunar-vfs-types.h: Move the system-dependent types to
+	  thunar-vfs-types.h.
+	* thunar-vfs/thunar-vfs-info.{c,h}, thunar-vfs/thunar-vfs.symbols:
+	  Turn ThunarVfsInfo into a boxed type.
+
+2005-09-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c: Sort the extension actions by their
+	  names instead of their labels.
+	* thunar/thunar-extension-manager.c(thunar_extension_class_init):
+	  Properly initialize the parent class reference.
+	* examples/open-terminal-here/Makefile.am: Don't specify CLEANFILES
+	  explicitly.
+	* thunar/thunar-file.c(thunar_file_get_mime_info): Documentation fix.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_info_for_file): When generating an
+	  application/x-extension-<EXT> mime type and no valid extension is
+	  found for the file name, fallback to the whole filename as suggested
+	  by jrb. This way we can make sure that we will never return
+	  application/octet-stream from this method and thereby allow the
+	  program chooser to set default applications for every mime type
+	  used in the file manager.
+	* thunar/Makefile.am: Add $(top_builddir) to INCLUDES.
+
+2005-09-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c: Sort the extension actions by their
+	  labels prior to adding them to the UI manager.
+
+2005-09-11	Benedikt Meurer <benny at xfce.org>
+
+	* examples/open-terminal-here/open-terminal-here.c
+	  (open_terminal_here_activate): Remove unused debug statement.
+
+2005-09-09	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Substitute version information.
+	* thunar/thunar-window.c(thunar_window_action_about): Escape the
+	  copyright sign.
+	* thunar/thunar-gdk-pixbuf-extensions.{c,h},
+	  thunar/thunar-gtk-extensions.{c,h}, thunar/thunar-desktop-view.c,
+	  thunar/thunar-icon-factory.c, thunar/thunar-icon-renderer.c,
+	  thunar/thunar-standard-view.c, thunar/thunar-window.c,
+	  thunar/Makefile.am: Merge the GdkPixbuf and GTK+ extensions into
+	  the thunar namespace.
+	* configure.in.in, thunarx/: Import the initial extensions library.
+	* configure.in.in, docs/Makefile.am, Makefile.am, docs/reference/:
+	  Import the reference manual for the extensions library.
+	* thunar/thunar-file.c: Implement the ThunarxFileInfo interface.
+	* thunar/thunar-extension-manager.{c,h}, thunar/Makefile.am: Import the
+	  ThunarExtensionManager class.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c: Add
+	  support for context menu providers to the standard views.
+	* po/POTFILES.in: Add thunarx/thunarx-property-page.c here.
+	* thunar/thunar-properties-dialog.c: Add support for property page
+	  providers here.
+	* Makefile.am, configure.in.in, examples/Makefile.am,
+	  examples/open-terminal-here/: Add "Open Terminal Here" menu provider
+	  example.
+
+2005-09-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Don't emit the "row-inserted" and
+	  "row-deleted" signals when changing folders unless somebody
+	  is actually interested in these signals.
+	* thunar/thunar-list-model.c(thunar_list_model_set_folder): Actually
+	  specify the correct path when deleting the previous items from the
+	  model.
+	* thunar/thunar-local-folder.c(thunar_local_folder_file_destroy): No
+	  need to request a new list from GLib here.
+	* thunar/thunar-local-folder.c(thunar_local_folder_infos_ready): Don't
+	  add new files to two lists. Instead add them to one temporary list
+	  and append the temporary list to the internal list later.
+	* thunar/thunar-local-file.c(thunar_local_file_get_for_info): Fix an
+	  invalid instance cast check.
+	* thunar/thunar-file.c: Manage the file cache directly without using
+	  weak references to avoid problems and save memory (weak references
+	  are allocated in the GObject dataset).
+
+2005-09-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.c: Store the VFS monitor handle in the
+	  GObject dataset as it's used only for explicit file monitoring (e.g.
+	  for the properties dialog).
+	* thunar/thunar-list-model.c(thunar_list_model_get_iter): Skip every
+	  second comparison for iter lookups.
+	* icons/, configure.in.in, Makefile.am: Add the Thunar icon.
+
+2005-09-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c: Invoke the parent's finalize method, as
+	  that will be required for language bindings once we have weak/toggle
+	  references for ExoObject.
+	* thunar/thunar-local-file.c(thunar_local_file_rename): Re-register with
+	  the VFS monitor if the rename succeeds.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_hash): Don't hash the
+	  hostname if it's NULL.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_equal): We don't need to
+	  query the hostname string here, as local files will always have host
+	  set to NULL.
+	* tests/test-thunar-vfs-uri.c(main): Extend the ThunarVfsURI test.
+	* pixmaps/, Makefile.am, configure.in.in, thunar/thunar-window.c,
+	  thunar/Makefile.am: Initial idea for the about dialog logo.
+
+2005-09-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.{c,h}, thunar-vfs/thunar-vfs-listdir-job.c:
+	  Use GList instead of GSList to manage ThunarVfsInfo lists, which
+	  increases data locality and decreases memory usage (as there's no
+	  need to keep another allocator around any more).
+	* thunar/thunar-computer-folder.c, thunar/thunar-folder.{c,h},
+	  thunar/thunar-list-model.c, thunar/thunar-local-folder.c,
+	  thunar/thunar-trash-folder.c: Use GList instead of GSList to manage
+	  the list of files for a folder for the same reason.
+	* thunar/thunar-file.{c,h}, thunar/thunar-folder.c,
+	  thunar/thunar-local-folder.c, thunar/thunar-local-file.c: ThunarFile
+	  is derived from GObject now, instead of GtkObject.
+	* thunar/thunar-list-model.c: No need to implement GtkTreeDragDest,
+	  as that's handled in ThunarStandardView.
+
+2005-09-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-launcher.c, thunar/thunar-list-model.c,
+	  thunar/thunar-open-with-action.c, thunar/thunar-properties-dialog.c:
+	  We don't need to check the result of thunar_file_get_mime_info() any
+	  more as it's garantied to be a valid ThunarVfsMimeInfo.
+
+2005-09-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-computer-folder.c, thunar/thunar-file.c,
+	  thunar/thunar-list-model.c: Always return a valid ThunarVfsMimeInfo
+	  from the get_mime_info() method.
+
+2005-09-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.{c,h}: Drop the unused icon columns from the
+	  ThunarListModel.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-renderer.c(thunar_icon_renderer_render): Generate
+	  the colorized/spotlighted version of the icon only if the icon area
+	  is affected by expose event.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c(escape): And of course, we need to escape
+	  the '+' and '%' characters in URIs.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c(escape): Also escape '&' in URIs.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-thumb.{c,h}: Implement the store thumbnail
+	  functionality.
+	* thunar-vfs/thunar-vfs-sysdep.c, thunar-vfs/thunar-vfs-trash.c,
+	  thunar-vfs/thunar-vfs-uri.{c,h}, thunar-vfs/thunar-vfs.symbols,
+	  thunar/thunar-clipboard-manager.c, thunar/thunar-favourites-model.c,
+	  thunar/thunar-favourites-view.c, thunar/thunar-file.c,
+	  thunar/thunar-location-buttons.c, thunar/thunar-path-entry.c,
+	  thunar/thunar-standard-view.c, thunar/thunar-statusbar.c: Improve
+	  the thunar_vfs_uri_to_string() method to support UTF-8 URI strings
+	  and escaping of URIs, which is required for proper Drag'n'Drop
+	  interaction with other applications.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.{c,h}: Store the watch count in the GObject data
+	  list, as it seldomly used.
+	* thunar/thunar-file.c(thunar_file_load_icon): Try to load the "loading"
+	  icon directly instead of checking the icon theme first.
+	* thunar/thunar-standard-view.c: Revert the "num-files" special handling
+	  as it leads to a bug where the actions aren't updated properly when
+	  changing directories.
+	* thunar-vfs/thunar-vfs-sysdep.h: Fix typo.
+	* thunar-vfs/thunar-vfs-transfer-job.c,
+	  thunar-vfs/thunar-vfs-unlink-job.c: Unlink thumbnails after removing
+	  a file to reduce the junk in ~/.thumbnails/.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_get_md5sum): Escape the
+	  path properly, so the thumbnail paths we determine are equal to those
+	  of other file managers.
+
+2005-09-04	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/Makefile.am: Add the thumbnail frame source image to the
+	  distribution.
+	* thunar/thunar-icon-factory.c: Add some more cleverness in determining
+	  whether or not to add a frame to a thumbnail.
+
+2005-09-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs.symbols, thunar-vfs/thunar-vfs-mime-info.{c,h},
+	  thunar-vfs/thunar-vfs-mime-database.c: Determine media and subtype of
+	  a ThunarVfsMimeInfo on-demand.
+	* thunar-vfs/thunar-vfs-info.c(thunar_vfs_info_new_for_uri): Move the
+	  .desktop file handling to the regular file case.
+	* thunar-vfs/thunar-vfs-thumb.{c,h}, thunar-vfs/thunar-vfs.symbols,
+	  thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs.h: Import the
+	  ThunarVfsThumbFactory class, which implements the freedesktop
+	  thumbnail management specification.
+	* thunarx/thunarx-gdk-pixbuf-extensions.{c,h}: Add new helper function
+	  thunarx_gdk_pixbuf_frame(), which is used to embed an arbitrary image
+	  into a frame (e.g. for thumbnails).
+	* thunar/thunar-favourites-model.c, thunar/thunar-file.c,
+	  thunar/thunar-icon-factory.{c,h}, thunar/thunar-icon-renderer.c,
+	  thunar/thunar-list-model.c, thunar/thunar-location-buttons.c,
+	  thunar/thunar-window.c: Make sure we don't leak the default icon
+	  factory instance on exit.
+	* thunar/Makefile.am, thunar/thunar-thumbnail-frame.{h,png}: Import
+	  the thumbnail frame image used by Nautilus.
+	* thunar/thunar-icon-factory.{c,h}: Add thumbnail loading support to
+	  the icon factory and reorganize the internals a bit.
+	* thunar/thunar-file.c: Load thumbnails for regular if possible.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-renderer.c(thunar_icon_renderer_render): Don't
+	  scale the icon if it fits into the cell area.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-text-renderer.c: Select the text prior to the last
+	  dot when starting to edit a cell.
+	* thunar/thunar-properties-dialog.c(thunar_properties_dialog_update):
+	  Place input focus on the name entry widget and select the text prior
+	  to the last dot.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-open-with-action.c(thunar_open_with_action_activated):
+	  Remove obsolete code.
+	* thunar/thunar-standard-view.c
+	  (thunar_standard_view_button_release_event): Don't popup the context
+	  menu using the just released button, as that would render the items
+	  unclickable.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c: Avoid going through the selection
+	  changed handling whenever the number of files in a model changes,
+	  as the only thing that needs updating here is the statusbar text.
+	* thunar-vfs/thunar-vfs-mime-cache.c
+	  (thunar_vfs_mime_cache_lookup_parents): Fix the offset from which the
+	  parent mime type name is read.
+	* thunar-vfs/thunar-vfs-mime-cache.c(cache_node_lookup_suffix):
+	  Optimize the tail-recursive suffix lookup.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_info_for_file): Use fast stack memory
+	  for the extattr and content lookups.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-factory.c(thunar_icon_factory_lookup_icon): Add
+	  support to load icons from absolute paths.
+	* thunar/thunar-local-file.c(thunar_local_file_get_icon_name): Allow the
+	  VFS layer to pass absolute paths for the file icon hint. This is
+	  required for some .desktop files, that specify absolute icon paths
+	  instead of themed icon names.
+	* thunar/thunar-location-buttons.c(thunar_location_buttons_make_button):
+	  Don't permit location buttons to grab the focus.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c: Be sure to override the default
+	  drag-data-delete handler of ExoIconView/GtkTreeView.
+	* thunar/thunar-icon-view.c(thunar_icon_view_get_path_at_pos): The
+	  exo_icon_view_get_path_at_pos() method really accepts widget
+	  coordinates now, like GtkTreeView does, so we don't need to translate
+	  the widget coordinates to icon window coordinates first.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c(thunar_standard_view_get_dest_actions):
+	  Set the drop-file icon renderer property only if we have a valid
+	  drag action.
+	* thunar/thunar-local-file.c(thunar_local_file_accepts_uri_drop): Do
+	  not accept directory drops if the directory isn't writable.
+
+2005-09-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-renderer.c(thunar_icon_renderer_render): Prelight
+	  drop destination icons.
+
+2005-09-01	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-computer-folder.c, thunar/thunar-desktop-view.c,
+	  thunar/thunar-favourites-model.c, thunar/thunar-file.{c,h},
+	  thunar/thunar-list-model.c, thunar/thunar-local-file.c,
+	  thunar/thunar-location-buttons.c, thunar/thunar-path-entry.c,
+	  thunar/thunar-properties-dialog.c, thunar/thunar-standard-view.c,
+	  thunar/thunar-statusbar.c, thunar/thunar-trash-file.c,
+	  thunar/thunar-trash-folder.c, thunar/thunar-window.c: Add an icon
+	  state parameter to the ThunarFile icon loader, which allows to grab
+	  icons for a certain state from a given file.
+	* thunar/thunar-file.c: Drop the cached icon, as the ThunarIconFactory
+	  does this pretty well already and we don't need to keep an additional
+	  cached version of every file's icon.
+	* thunar/thunar-icon-renderer.c, thunar/thunar-standard-view.c: Use the
+	  drop icon for the views while dragging over an item/row in the view.
+
+2005-09-01	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-listdir-job.c: Fix the pre-sorting of files, so
+	  upper layers always receive the info list sorted by name.
+	* thunar/thunar-details-view.c(thunar_details_view_button_press_event),
+	  thunar/thunar-icon-view.c(thunar_icon_view_button_press_event): Don't
+	  popup the context menu immediately on right-clicks, but schedule the
+	  menu popup using thunar_standard_view_queue_popup().
+	* thunar/thunar-standard-view.{c,h}: Add the ability to start a drag
+	  operation using the right mouse button.
+	* thunar/thunar-file.{c,h}: Add virtual method accepts_uri_drop() and
+	  method thunar_file_accepts_uri_drop(), which are used to determine
+	  whether it is possible to drop a certain list of ThunarVfsURIs on
+	  a given ThunarFile (using a set of actions specified by the drag
+	  source).
+	* thunar/thunar-local-file.c: Implement the accepts_uri_drop() method
+	  for local file handling.
+	* thunar/thunar-progress-dialog.c(thunar_progress_dialog_ask),
+	  (thunar_progress_dialog_error): Be sure to display the progress dialog
+	  prior to opening an error or question dialog.
+	* thunar-vfs/thunar-vfs-info.c(thunar_vfs_info_rename): Fix gcc4
+	  warning.
+	* thunar-vfs/thunar-vfs.symbols: Add missing thunar_vfs_rename symbol.
+	* thunar/thunar-favourites-model.c(thunar_favourites_model_get_value):
+	  Work-around a compiler bug with newer gcc versions.
+	* thunar/thunar-standard-view.{c,h}: Turn ThunarStandardView into a
+	  valid drop site with support for text/uri-list drops.
+	* thunar/Makefile.am, thunar/thunar-dnd.{c,h}: Add DnD helper functions,
+	  which can be used by other modules as well (e.g. for the desktop
+	  view).
+
+2005-08-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.c: Drop the icon caching from the
+	  favourites model as it causes trouble with icon theme changing and
+	  is unnecessary since the ThunarIconFactory already performs quite
+	  well at caching icons.
+	* thunar/thunar-location-buttons.c: Reload the icons for the location
+	  buttons when the active icon/gtk theme is changed.
+
+2005-08-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.c(thunar_local_folder_infos_ready): Do not
+	  compare the newly inserted files, as they are garantied to be
+	  different from each other.
+	* thunar-vfs/thunar-vfs-info.c(thunar_vfs_info_matches): Move the URI
+	  comparison to the end as that takes most of the time.
+	* thunar-vfs/thunar-vfs-listdir-job.c(thunar_vfs_listdir_job_execute):
+	  Pre-sort the names in ascending order to get faster inserts for the
+	  usual case where the user sorts its views by name.
+
+2005-08-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-properties-dialog.c: Adjust the "editability" of the
+	  name entry widget depending on whether the file can be renamed.
+	* thunar-vfs/thunar-vfs-info.{c,h}: Add methd thunar_vfs_info_rename()
+	  which supports renaming of regular files and .desktop files.
+	* thunar/thunar-file.{c,h}: Add _thunar_file_cache_rename() to support
+	  ThunarFile implementations that provide the thunar_file_rename()
+	  method.
+	* thunar/thunar-local-file.c: Add support to rename local files based
+	  on thunar_vfs_info_rename().
+	* thunar/thunar-properties-dialog.c: Allow users to rename files using
+	  the name entry widget.
+	* thunar/thunar-list-model.c(thunar_list_model_file_changed): Re-sort
+	  the model as the file may have changed its name.
+	* thunar/thunar-list-model.c(thunar_list_model_sort): Avoid the GArray
+	  overhead and try to use stack memory if possible.
+	* thunar/thunar-standard-view.h, thunar/thunar-details-view.c,
+	  thunar/thunar-icon-view.c: Add virtual methods set_cursor() and
+	  scroll_to_path() to the ThunarStandardView class and implement them
+	  in ThunarDetailsView and ThunarIconView.
+	* thunar/thunar-standard-view.c: Implement the "Rename" action based
+	  on the inline editing capabilities of ThunarTextRenderer.
+
+2005-08-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-view.c(thunar_favourites_view_init): Use
+	  auto-sizing for the favourites column.
+	* thunar/thunar-favourites-model.{c,h}, thunar/thunar-favourites-view.c:
+	  Add support for Gtk+ 2.8 shortcuts, which allow the user to assign
+	  aliases with mutable shortcuts.
+
+2005-08-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view.c, thunar/thunar-icon-view.c,
+	  thunar/thunar-standard-view.{c,h}: Turn the name cell renderer into
+	  a property of the ThunarStandardView class, so related functionality
+	  can be easily shared between the icon and details views.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-window-ui.xml: Add
+	  placeholder for alteration actions to the "Edit" menu in the thunar
+	  window and fill this placeholder with the "Rename" action in the
+	  standard view. In addition, add the "Rename" action to the file
+	  context menu.
+	* thunar/thunar-file.{c,h}: Add rename functionality to the ThunarFile
+	  interface.
+	* thunar/thunar-standard-view.c(thunar_standard_view_selection_changed):
+	  Enable the "Rename" action if exactly one file is selected and that
+	  file is renameable.
+
+2005-08-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.c: Use GLib linked lists to manage
+	  the favourites.
+	* thunar/thunar-favourites-model.c: Monitor the bookmarks file for
+	  changes.
+
+2005-08-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add side pane
+	  selection to the View menu.
+
+2005-08-29	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Check for Intel MMX Intrinsics header.
+	* thunarx/thunarx-gdk-pixbuf-extensions.c: Use Intel MMX Intrinsics to
+	  speed up pixbuf operations, if supported by the compiler (the -mmmx
+	  option in gcc).
+	* thunar/thunar-window.c(thunar_window_action_location_bar_changed):
+	  Apply the location bar patch submitted by Jeffs Franks
+	  <jcfranks at tpg.com.au> in a slightly modified form.
+
+2005-08-28	Benedikt Meurer <benny at xfce.org>
+
+	* po/POTFILES.in: Remove thunar-vfs-mime.{c,h}.
+	* po/*.po: Update .po files.
+
+2005-08-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c(thunar_list_model_sort): Use temporary
+	  storage on the stack, rather than the heap.
+	* thunar/thunar-list-model.c: Derive from GObject rather than
+	  GtkObject, as we don't need GtkObject's features anymore in
+	  ThunarListModel.
+	* thunar/thunar-list-model.c(thunar_list_model_class_init): Use
+	  EXO_PARAM_* macros rather than G_PARAM_*.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_equal): Add a check to
+	  see whether the compared references refer to the same object, which
+	  can happen quite often (in case of a positive match).
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_list_to_string): Prealloc
+	  a buffer of 512 bytes for the URI list string representation.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_list_free): Use
+	  g_list_foreach() to unref the URIs.
+	* thunar/thunar-local-file.c(thunar_local_file_get_emblem_names):
+	  Properly verify the parent uri when testing for the Desktop
+	  directory.
+	* thunar-vfs/thunar-vfs.{c,h}, thunar-vfs/Makefile.am: Drop the
+	  thunar_vfs_mime_info_get() and thunar_vfs_mime_info_get_for_file()
+	  methods, and merge the thunar-vfs-mime initialization into the
+	  thunar-vfs initialization routines.
+
+2005-08-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.{c,h}, thunar/thunar-local-file.c,
+	  thunar/thunar-standard-view.c: Rename can_execute(), can_read() and
+	  can_write() to is_executable(), is_readable() and is_writable() to
+	  get consistent naming.
+	* thunar-vfs/thunar-vfs-info.{c,h}: Add THUNAR_VFS_FILE_FLAGS_EXECUTABLE
+	  to the ThunarVfsFileFlags, which will be set if a ThunarVfsInfo
+	  can be executed, either as regular binary or as .desktop file.
+	* thunar-vfs/thunar-vfs-mime-application.c,
+	  thunar-vfs/thunar-vfs-sysdep.{c,h}: Move the Exec parsing code from
+	  ThunarVfsMimeApplication to thunar-vfs-sysdep, so it can be used by
+	  other modules as well.
+	* thunar-vfs/thunar-vfs-info.{c,h}, thunar-vfs/thunar-vfs.symbols: Add
+	  new method thunar_vfs_info_execute(), which is used to execute
+	  files with a list of URIs. These method can handle both regular
+	  executable files as well as .desktop files.
+	* thunar/thunar-file.{c,h}, thunar/thunar-launcher.c,
+	  thunar/thunar-local-file.c: Add support to execute files that are
+	  marked as executable by the ThunarVfsInfo module.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_info_locked),
+	  (thunar_vfs_mime_database_get_infos_for_info_locked): Be sure to
+	  always unalias MIME-types prior to returning them from the mime
+	  database instance. This way we don't need to care for unaliasing
+	  when determining the MIME-type comment or MIME-type icon.
+	* thunar-vfs/thunar-vfs-mime-database.{c,h},
+	  thunar-vfs/thunar-vfs.symbols: Add new method
+	  thunar_vfs_mime_database_get_infos_for_info() to the public API, to
+	  allow other components to access the subclassing information.
+	* FAQ, Makefile.am: Add initial items for the list of frequently asked
+	  questions.
+	* TODO: Remove obsolete items.
+
+2005-08-27	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.{c,h}: Add support to pass hints from the
+	  ThunarVfsInfo to the upper layers. Use these hints to pass icon and
+	  name information from .desktop files.
+	* thunar-vfs/thunar-vfs.symbols: Add new symbols.
+	* thunar/thunar-local-file.c: Use the new hints to display appropriate
+	  names and icons for .desktop files.
+
+2005-08-27	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-trash.c: Use ThunarVfsMonitor instead of
+	  polling the trash files/ directories manually.
+
+2005-08-27	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-legacy.c: Add support for MIME-type
+	  aliases and parents to the legacy implementation.
+	* configure.in.in, thunar-vfs/thunar-vfs-mime-database.c: Add support
+	  for determining the MIME type from an extended attribute on SunOS
+	  and Linux.
+
+2005-08-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-path-entry.c: Add drag support for the path entry icon.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add view
+	  selection to the "View" menu.
+	* thunar/thunar-icon-view.c(thunar_icon_view_button_press_event): Use
+	  gtk_accelerator_get_default_mod_mask() rather than hardcoding
+	  GDK_CONTROL_MASK.
+	* thunar/thunar-details-view.c(thunar_details_view_button_press_event):
+	  Add support to open the folder menu by right-clicking on an empty
+	  area in the tree view.
+	* thunar/thunar-details-view.c: Work-around the problem that GtkTreeView
+	  resets the search column whenever the model changes.
+	* thunar/thunar-standard-view.c(thunar_standard_view_grab_focus):
+	  Properly forward any grab-focus request to the child view.
+	* thunar/thunar-marshal.list, thunar/Makefile.am,
+	  thunar/thunar-text-renderer.c: Add initial cell editing support to
+	  the text renderer. We'll need a multiline entry widget for the
+	  icon view.
+	* thunar/thunar-details-view.c, thunar/thunar-icon-view.c,
+	  thunar/thunar-standard-view.c, thunar/thunar-standard-view.h: Add
+	  drag source support to the standard views.
+	* thunar/thunar-list-model.c: Don't implement GtkTreeDragSource, as
+	  that's handled by ThunarStandardView now.
+
+2005-08-20	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job.c(thunar_vfs_job_emit): Use G_VA_COPY to
+	  copy variable argument lists in a portable manner.
+
+2005-08-19	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.{c,h}: Allow derived classes to add
+	  custom actions to the user interface.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-window-ui.xml: Add
+	  support for custom view item actions.
+	* thunar/Makefile.am, thunar/thunar-icon-view-ui.xml,
+	  thunar/thunar-icon-view.c: Add support to arrange items within the
+	  icon view.
+	* thunar/thunar-file.h, thunar/thunar-local-file.c: Provide an emblem
+	  for the desktop folder in regular file listings.
+	* thunar/thunar-icon-view.c(thunar_icon_view_init): Add 3 pixel padding
+	  in vertical direction to the icon cell, to allow better placement
+	  of the emblems.
+	* thunar/thunar-icon-renderer.c(thunar_icon_renderer_render): Improve
+	  the emblem placement and drawing code to work-around issues with
+	  most icon themes, that don't provide emblems in the appropriate
+	  sizes.
+
+2005-08-19	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-statusbar.c: Drop the dependency on X11.
+	* thunar/thunar-desktop-window.c: Include <gdk/gdkx.h> explicitly (since
+	  that's no longer done by libexo -> libxfcegui4).
+
+2005-08-18	Benedikt Meurer <benny at xfce.org>
+
+	* thunarx/thunarx-gdk-pixbuf-extensions.{c,h}: Add new function
+	  thunarx_gdk_pixbuf_spotlight(), which is used to create a
+	  special icon for the Gtk prelight state.
+	* thunar/thunar-icon-renderer.{c,h}, thunar/Makefile.am,
+	  thunar/thunar-details-view.c, po/POTFILES.in: Rename
+	  ThunarDetailsViewIconRenderer to ThunarIconRenderer, as
+	  it will also be used by the icon view now.
+	* thunar/thunar-text-renderer.{c,h}, thunar/Makefile.am,
+	  thunar/thunar-details-view.c, po/POTFILES.in: Rename
+	  ThunarDetailsViewTextRenderer to ThunarTextRenderer,
+	  as it will also be used by the icon view now.
+	* thunar/thunar-icon-renderer.{c,h}, thunar/thunar-text-renderer.{c,h}:
+	  Add required functionality to use these renderers with the new
+	  ExoIconView.
+	* thunar/thunar-icon-view.c: Update to use the new ExoIconView class,
+	  with the modified ThunarIconRenderer and ThunarTextRenderer.
+	* thunar/thunar-launcher.h, thunar/thunar-open-with-action.h: Use
+	  G_GNUC_MALLOC instead of EXO_GNUC_MALLOC.
+	* thunar/thunar-window.c(thunar_window_init): Use the icon view by
+	  default for testing now.
+	* configure.in.in: Bump version to 0.1.2.
+	* thunar/thunar-window.c(thunar_window_action_about): Switch to
+	  GtkAboutDialog.
+
+2005-08-18	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c(thunar_list_model_files_added): Speed up
+	  inserts if the order of the files match the current sort order, which
+	  is usually the case with sorting by name.
+
+2005-08-18	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c(thunar_list_model_set_folder): Speed up
+	  the removal of existing rows when changing folders. It's now O(n)
+	  instead of O(n^2).
+	* thunar/thunar-list-model.c: The memory chunk used for the rows is
+	  now an object attribute, rather than a global variable.
+
+2005-08-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-application.c
+	  (thunar_vfs_mime_application_new_from_desktop_id): Use "Name" instead
+	  of "GenericName" for the application's name, as the "Name" usually
+	  includes the project name in addition to the functional description
+	  of the application, which provides better results than having several
+	  applications named "Text Editor", etc.
+	* configure.in.in: Prefer Gamin over FAM to avoid the C++ dependency
+	  if possible. Besides that, Gamin offers several other advantages over
+	  FAM, which makes it better suitable to be used in Thunar.
+	* po/POTFILES.in: Add missing source files here, and remove obsolete
+	  files.
+	* Thunar.desktop.in, Makefile.am, configure.in.in, po/POTFILES.in: Add
+	  desktop file for Thunar.
+
+2005-08-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-jobs.{c,h}, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs.{c,h}: Merge thunar-vfs-jobs.[ch] into
+	  thunar-vfs.[ch].
+	* thunar-vfs/thunar-vfs-mime-database.c, thunar/thunar-local-folder.c,
+	  thunar-vfs/thunar-vfs-monitor.{c,h}, thunar/thunar-local-file.c:
+	  Rename thunar_vfs_monitor_get() to thunar_vfs_monitor_get_default().
+	* thunar-vfs/thunar-vfs-mime-database.{c,h},
+	  thunar-vfs/thunar-vfs-mime.c, thunar-vfs/thunar-vfs-info.c,
+	  thunar/thunar-launcher.c, thunar/thunar-open-with-action.c,
+	  thunar/thunar-trash-folder.c: Rename thunar_vfs_mime_database_get()
+	  to thunar_vfs_mime_database_get_default().
+	* thunar-vfs/, thunar/Makefile.am, tests/Makefile.am, configure.in.in:
+	  Turn libthunar-vfs into a shared library, so we can use it in other
+	  applications/plugins as well.
+
+2005-08-10	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Bump version to 0.1.1.
+	* thunar-vfs/thunar-vfs-mime-info.h: Add list handling method
+	  thunar_vfs_mime_info_list_free().
+	* thunar-vfs/thunar-vfs-mime-info.c(thunar_vfs_mime_info_get_comment):
+	  Automatically generate a comment for 'application/x-extension-<EXT>'
+	  types if no comment is found on the disk.
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_info_for_file): Automatically generate
+	  an 'application/x-extension-<EXT>' type on the fly if all other
+	  checks fail and the file name has an extension.
+	* thunar-vfs/thunar-vfs-mime-cache.c,
+	  thunar-vfs/thunar-vfs-mime-legacy.c,
+	  thunar-vfs/thunar-vfs-mime-database.c,
+	  thunar-vfs/thunar-vfs-mime-provider.{c,h}: Add provider methods to
+	  unalias mime types and to determine the parents of a given mime
+	  type. Use these information to query additional MIME applications.
+
+2005-08-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-database.c
+	  (thunar_vfs_mime_database_get_default_application): Fall back to the
+	  first available application if no explicit default application is
+	  set by the user.
+	* thunar/thunar-file.{c,h}, thunar/thunar-launcher.c: Rename
+	  thunar_file_list_dup() to thunar_file_list_copy() to get
+	  consistent naming.
+	* thunar-vfs/thunar-vfs-mime-application.{c,h}: Add support methods
+	  required for hashing.
+	* thunar-vfs/thunar-vfs-mime-application.{c,h}: Add methods to launch
+	  an application on a given list of URIs on a specific screen. Implement
+	  the Desktop Entry Specification 0.9.4, except for startup notification
+	  support, which will be added soon.
+	* thunar/thunar-launcher.c, thunar/thunar-open-with-action.c: Allow
+	  users to open files using the newly added ThunarVfsMimeApplication
+	  functionality.
+
+2005-08-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-database.c: According to the specification
+	  the defaults.list may specify more than one desktop-id per MIME type,
+	  where the first available application should be used.
+
+2005-08-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-info.{c,h}: Add support methods required
+	  for hashing.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-mime-application.{c,h},
+	  thunar-vfs/thunar-vfs-mime-database.{c,h}: Add initial MIME
+	  application support to the MIME database.
+	* thunar/thunar-launcher.{c,h}: Add ThunarLauncher class, which provides
+	  actions to launch files using appropriate MIME applications. The
+	  ThunarLauncher class will also be used by the desktop view.
+	* thunar/thunar-open-with-action.{c,h}: Add special action class
+	  ThunarOpenWithAction, which provides a GtkAction implementation, that
+	  - when used as menu - displays a submenu with all available MIME
+	  applications for a given file.
+	* thunar/thunar-window-ui.xml: Add a placeholder to include the launcher
+	  support in the "File" menu on the main menu bar.
+	* thunar/thunar-standard-view.c, thunar/thunar-standard-view-ui.xml,
+	  thunar/thunar-icon-view.c, thunar/thunar-details-view.c: Add file
+	  launcher support based on the new ThunarLauncher class.
+	* thunar/thunar-file.{c,h}: Add methods to handle lists of ThunarFile
+	  items easily.
+	* thunar/thunar-icon-factory.c(thunar_icon_factory_load_icon): Handle
+	  the case of passing a NULL or empty name properly.
+
+2005-08-07	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in, po/ja.po, THANKS: Add initial japanese translations,
+	  thanks to Daichi Kawahata <daichik at users.sourceforge.net>. This
+	  fixes #1004.
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-mime-legacy.c: Add support for the various
+	  globs to the legacy mime provider.
+	* thunar-vfs/thunar-vfs-mime-database.c(thunar_vfs_mime_database_init):
+	  Read atleast 64 bytes from every file to reliably detect text files.
+	* thunar-vfs/thunar-vfs-mime-database.c: When looking up the MIME info
+	  for a given file, and the magic check doesn't return a match, we'll
+	  return "application/x-executable" for every regular file that is
+	  atleast 1 byte in size and has the executable bit set, as this is
+	  more precise than "application/octet-stream".
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Use AC_TRY_LINK() to avoid trouble with funky
+	  systems.
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add some autoconf magic to get posix_madvise()
+	  working with glibc.
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.{c,h}: Determine the display_name for
+	  each file info.
+	* thunar-vfs/thunar-vfs-info.c(thunar_vfs_info_new_for_uri): Hand the
+	  display name to thunar_vfs_mime_database_get_info_for_file(), so
+	  we don't need to determine it again.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_get_display_name): Don't
+	  use g_filename_display_basename(), because it may returned a somehow
+	  translated file name.
+	* thunar/thunar-local-file.c: Use the display_name supplied with the
+	  ThunarVfsInfo rather than determining it again.
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in, thunar-vfs/thunar-vfs-mime-database.c: Add support
+	  to query the MIME type stored in the extended attribute
+	  "user.mime_type" as specified in the Shared MIME-info spec.
+	* docs/design/mime.xmi, docs/design/Makefile.am: Import description for
+	  the ThunarVFS mime module.
+	* thunar-vfs/thunar-vfs-mime-cache.c(thunar_vfs_mime_cache_lookup_glob):
+	  Use correct offset when iterating over the GlobEntries.
+	* thunar-vfs/thunar-vfs-mime-cache.c
+	  (thunar_vfs_mime_cache_lookup_literal): Fix the offset returned for
+	  the MIME-type name.
+
+2005-08-06	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Check for fnmatch.h and sys/mman.h. Add checks for
+	  working mmap and posix_madvise.
+	* configure.in.in, thunar-vfs/xdgmime/, thunar-vfs/Makefile.am: Drop
+	  the xdgmime library.
+	* thunar-vfs/thunar-vfs-mime-cache.{c,h},
+	  thunar-vfs/thunar-vfs-mime-database.{c,h},
+	  thunar-vfs/thunar-vfs-mime-info.{c,h},
+	  thunar-vfs/thunar-vfs-mime-legacy.{c,h},
+	  thunar-vfs/thunar-vfs-mime-provider.{c,h},
+	  thunar-vfs/thunar-vfs-mime.{c,h}: Import thread-safe replacement for
+	  the xdgmime library. Works only with very recent shared-mime-info
+	  right now.
+	* thunar-vfs/Makefile.am: Add new files to the build framework.
+	* thunar-vfs/thunar-vfs-job.c, thunar-vfs/thunar-vfs-mime.c,
+	  thunar-vfs/thunar-vfs.c, thunar-vfs/thunar-vfs.h, thunar/main.c: Add
+	  ability to shutdown the VFS library.
+
+2005-08-04	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add "r" in front of the revision for the version
+	  string.
+	* thunar-vfs/thunar-vfs-job.{c,h}, thunar-vfs/thunar-vfs-listdir-job.c,
+	  thunar-vfs/thunar-vfs-mime.{c,h}, thunar-vfs/thunar-vfs-unlink-job.c,
+	  thunar-vfs/thunar-vfs-uri.{c,h}, thunar-vfs/thunar-vfs-transfer-job.c,
+	  thunar/thunar-progress-dialog.c: Use ExoObject as base class for
+	  ThunarVfsJob, ThunarVfsMimeInfo and ThunarVfsUri, which were fun-
+	  damental types previously. ExoObject does exactly what we need
+	  here, without any additional overhead. In particular, the ref-
+	  counting is atomic, even with GLib < 2.7.4.
+	* configure.in.in: Connect greek translations, previously committed
+	  by Stavros Giannouris <stavrosg2002 at freemail.gr>.
+	* thunar/thunar-file.c: Use exo-noops for the defaults where possible
+	  instead of providing several fallback implementations.
+	* configure.in.in: Bump version number to 0.1.0.
+
+2005-08-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/main.c(main): Connect the translation domain and setup the
+	  application name.
+	* thunar/thunar-standard-view.c(thunar_standard_view_init): Setup the
+	  translation domain for the action group.
+	* thunar/thunar-window.c(thunar_window_init): Setup the translation
+	  domain for the action group.
+	* po/hu.po, configure.in.in, THANKS: Add hungarian translations, thanks
+	  to Szervác Attila <sas at 321.hu>.
+
+2005-08-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-folder.c(thunar_folder_files_removed): Update docu-
+	  mentation.
+	* thunar/thunar-local-folder.c(thunar_local_folder_file_destroy): In-
+	  voke the "files-removed" signal when a file in this folder is de-
+	  stroyed.
+	* thunar/thunar-list-model.c: Do not connect the "destroy" signal of
+	  ThunarFile anymore, but instead we rely on the folder to emit
+	  "files-removed" appropriately.
+	* thunar/thunar-list-model.c(thunar_list_model_class_init): Increase
+	  the number of preallocated rows.
+	* po/, Makefile.am, configure.in.in: Add i18n support.
+
+2005-08-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view-text-renderer.c: Calculating the approxi-
+	  mate sizes based on the font metrics requires way too much additional
+	  data memory (because Pango loads the whole fontset for this calcu-
+	  lation), so we base our calculation on a sample text instead.
+
+2005-08-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job.c(thunar_vfs_job_emit_valist): Lower the
+	  Job signal priority to increase the responsiveness of the user
+	  interface.
+
+2005-08-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view-text-renderer.{c,h}: Fast text cell
+	  renderer, which provides less accurate cell area size calculation.
+	* thunar/Makefile.am: Add ThunarDetailsViewTextRenderer to the build
+	  framework.
+	* thunar/thunar-details-view.c: Use the new text renderer.
+
+2005-08-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-monitor.c: Implement the
+	  thunar_vfs_monitor_feed() method in a reentrant way.
+
+2005-08-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Add sort_by_name() calls missing from the
+	  initial patch.
+
+2005-08-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.c(thunar_local_file_monitor): Actually
+	  reload the file info when the VFS monitor notices a change.
+	* thunar/thunar-list-model.c: Apply Jens Luedickes patch to add
+	  sub-sorting on the filename.
+	* thunar-vfs/thunar-vfs-monitor.c: Add missing header files.
+	* configure.in.in: Drop the kevent related checks.
+
+2005-08-02	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add check for the FAM/Gamin library.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-monitor.{c,h}: Redesign
+	  the VFS monitor to use FAM if available. It also provides an interface
+	  to feed the monitor with external events, which will be used by the
+	  VFS jobs, which know for sure that they changed/created/deleted a
+	  file. The interface is not yet implemented.
+	* thunar/thunar-file.{c,h}: Add a virtual method reload(), which allows
+	  external entities to trigger a reload on a ThunarFile.
+	* thunar/thunar-local-file.c: Implement the reload() method.
+	* thunar/thunar-local-file.c, thunar/thunar-local-folder.c: Add support
+	  for the new VFS monitor.
+
+2005-08-01	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.{c,h}: Add new method
+	  thunar_list_model_get_paths_for_pattern(), which is used to
+	  generate a list of GtkTreePaths for all rows matching a
+	  certain pattern.
+	* thunar/thunar-details-view.c, thunar/thunar-icon-view.c,
+	  thunar/thunar-standard-view.h: Add virtual methods select_all(),
+	  unselect_all() and select_path(), and implement them in the details
+	  and icon views.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c,
+	  thunar/thunar-window-ui.xml: Add actions "select-all" and
+	  "select-by-pattern" to the "Edit" menu.
+	* thunar-vfs/thunar-vfs-trash.c: Cosmetic fix.
+
+2005-07-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-folder.c: Properly disconnect all signal handlers
+	  prior to releasing the job.
+	* TODO: Remove completed items. Add note about the copy&paste behaviour
+	  within the same folder.
+	* thunar-vfs/thunar-vfs-transfer-job.c
+	  (thunar_vfs_transfer_job_insert_base): Fix the check whether source
+	  and target directory are equal.
+	* thunar-vfs/thunar-vfs-user.c(thunar_vfs_user_local_class_init): Fix
+	  a crash, where the thunar_vfs_local_user_parent_class wasn't initia-
+	  lized properly.
+	* thunar/thunar-location-buttons.c: Allow users to automatically enter
+	  directories while dragging a text/uri-list over one of the folder
+	  buttons.
+
+2005-07-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-transfer-job.c: Include <time.h> since we
+	  use the time() library call. g_chmod() will be introduced with GLib
+	  2.8.0, so adjust the check.
+
+2005-07-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.c
+	  (thunar_clipboard_manager_contents_received): Properly clear the
+	  CLIPBOARD selection after a paste on "cutted data". Manually trigger
+	  an "owner-changed" after a successfully initiating the paste operation
+	  if either the Xserver or the GTK+ version doesn't support the XFixes
+	  extension.
+	* thunar-vfs/thunar-vfs-transfer-job.c, configure.in.in: Add work-around
+	  for systems that lack the lchmod() system call.
+	* thunar/thunar-standard-view.{c,h}: Query all actions from the group
+	  when initializing the view to speed up access later.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c:
+	  Add a "paste-into-folder" action, which is only available from the
+	  context menu.
+	* autogen.sh, configure.in.in: Adopt the version numbering scheme from
+	  libexo and ditch the date.
+
+2005-07-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.{c,h}: Implement paste support based
+	  on the recent API additions to ThunarApplication.
+	* thunar/thunar-standard-view.c(thunar_standard_view_action_paste):
+	  Implement the paste action based on the new functionality in
+	  ThunarClipboardManager.
+
+2005-07-31	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-unlink-job.c: Allocate dirent buffer for
+	  the job instead of the stack on every thunar_vfs_unlink_item_collect
+	  call to reduce the stack overhead for the threads.
+	* thunar-vfs/thunar-vfs-interactive-job.c: Check the cancellation
+	  state prior to invoking the "ask" signal.
+	* thunar-vfs/thunar-vfs-interactive-job.{c,h}: Reduce the number
+	  of "percent" signal invokations to one per second to reduce the
+	  overall load on the main thread.
+	* thunar-vfs/thunar-vfs-job.c(thunar_vfs_job_emit_valist): Lower
+	  the priority of inter-thread signals.
+	* thunar/thunar-progress-dialog.c(thunar_progress_dialog_init): Use
+	  an ellipsizing label for the progress info message to avoid
+	  automatic resizing of the progress dialog.
+	* thunar/thunar-application.{c,h}: Add "copy" and "move" actions. Drop
+	  "unlink" action, will be replaced with "trash" and "empty-trash-bin"
+	  later.
+	* thunar-vfs/thunar-vfs-transfer-job.{c,h}: Import the
+	  ThunarVfsTransferJob class, which can only handle 'file:'-URI
+	  transfers right now.
+
+2005-07-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunarx/thunarx-gtk-extensions.{c,h}, thunarx/Makefile.am: Add a
+	  helper function thunarx_gtk_action_group_set_action_sensitive(),
+	  which is used to easily change the sensitivity of a GtkAction
+	  within a GtkActionGroup.
+	* thunar/thunar-window.c, thunar/thunar-standard-view.c: Use the newly
+	  added thunarx_gtk_action_group_set_action_sensitive() method.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add new actions
+	  "open-new-window" and "close-all-windows".
+	* thunar/thunar-application.{c,h}: Add support for progress dialogs
+	  based on the ThunarVfsInteractiveJob. Turn the ThunarApplication
+	  class into a single-instance class. Add support to open new windows
+	  and querying the list of currently open windows.
+	* thunar/thunar-progress-dialog.{c,h}: GtkWindow already provides the
+	  "icon-name" property (since Gtk 2.6), no need to duplicate that.
+	* thunar/main.c: Switch to ThunarApplication.
+
+2005-07-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.c, thunar/thunar-favourites-view.c,
+	  thunar/thunar-location-buttons.c, thunar/thunar-statusbar.c: Fix
+	  GCC 4.0 cast warnings, thanks to Jeff Franks <jcfranks at tpg.com.au>.
+
+2005-07-30	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job.c: Emit signals independant of the
+	  cancellation state of the current job.
+	* thunar-vfs/thunar-vfs-trash.{c,h}: Add a way to query the absolute
+	  path to the .trashinfo file. Support relative paths and not just
+	  filenames for several trash methods.
+	* thunar-vfs/thunar-vfs-interactive-job.{c,h}: Import the
+	  ThunarVfsInteractiveJob class, which provides the base for all
+	  jobs, that require extended user interaction.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-marshal.list: Add
+	  required marshallers, which are not provided by GObject out of
+	  the box.
+	* thunar-vfs/thunar-vfs-unlink-job.{c,h}: Import ThunarVfsUnlinkJob
+	  class, which is used to unlink a bunch of local or trashed files.
+	* thunar-vfs/thunar-vfs-jobs.{c,h}: Add public interface to the
+	  various jobs provided by Thunar-VFS.
+	* thunar-vfs/thunar-vfs.h: Remove the listdir job from the public
+	  interface. Add the jobs and the interactive job headers.
+	* thunar/thunar-progress-dialog.{c,h}: Add ThunarProgressDialog class,
+	  which provides a dialog, that monitors the progress of an interactive
+	  and supports the required user interaction.
+	* thunar/Makefile.am, thunar/thunar-local-folder.c: Catch up with
+	  Thunar-VFS changes.
+
+2005-07-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job.{c,h}, thunar-vfs/thunar-vfs-listdir-job.c:
+	  Move "error" signal to the ThunarVfsJob class. Make proper use of the
+	  virtual finalize method.
+	* thunar/thunar-local-folder.c: Catch up with the ThunarVfsJob
+	  interface changes.
+
+2005-07-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job.{c,h}: Add a parameter spec for
+	  ThunarVfsJob and derived types. Add support methods to handle
+	  GValues easily.
+	* thunar-vfs/thunar-vfs-listdir-job.{c,h}, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs.h, thunar/thunar-local-folder.c: Rename the
+	  ThunarVfsJobListdir class to ThunarVfsListdirJob.
+
+2005-07-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-sysdep.{c,h}: Add _thunar_vfs_sysdep_readdir()
+	  as a portable, thread-safe readdir replacement.
+	* thunar-vfs/thunar-vfs-job-listdir.c(thunar_vfs_job_listdir_execute):
+	  Use _thunar_vfs_sysdep_readdir().
+	* thunar-vfs/Makefile.am: Add the sysdep component to the build
+	  framework.
+
+2005-07-24	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-desktop-view.c,
+	  thunar/thunar-details-view-icon-renderer.c,
+	  thunar/thunar-favourites-model.c, thunar/thunar-file.{c,h},
+	  thunar/thunar-list-model.c, thunar/thunar-location-buttons.c,
+	  thunar/thunar-path-entry.c, thunar/thunar-properties-dialog.c,
+	  thunar/thunar-statusbar.c, thunar/thunar-window.c: Do not hardcode
+	  the default icon factory in thunar_file_load_icon. Instead the icon
+	  factory is now a parameter to that function, which permits for proper
+	  multi-screen support.
+
+2005-07-24	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-factory.c(thunar_icon_factory_load_icon): Handle
+	  the case where no XSETTINGS manager is running on one of the
+	  connected screens.
+
+2005-07-24	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.c(thunar_file_load_icon): Actually cache the result
+	  of an icon lookup.
+	* thunarx/, thunarx/Makefile.am, configure.in.in: Add "thunarx"
+	  namespace, which contains extensions to existing frameworks and
+	  various helper functions that don't fit anywhere else.
+	* thunarx/thunarx-gdk-pixbuf-extensions.{c,h}: Add a method to colorize
+	  a GdkPixbuf to a given GdkColor.
+	* thunar/main.c, thunar/thunar-desktop-model.{c,h}, thunar/Makefile.am,
+	  thunar/thunar-desktop-window.{c,h}, thunar/thunar-desktop-view.{c,h}:
+	  Add proof-of-concept for the desktop support.
+
+2005-07-23	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Fix incorrect ThunarVfsMimeInfo -> GObject
+	  casts.
+
+2005-07-22	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add -O0 if debugging is enabled.
+	* thunar-vfs/thunar-vfs-job.{c,h}, thunar/thunar-local-folder.c,
+	  thunar-vfs/thunar-vfs-job-listdir.{c,h}: Do the ThunarVfsJob
+	  communication based on GSignals to provide more flexibility for
+	  the various upcoming jobs.
+
+2005-07-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.c, thunar/thunar-standard-view.c,
+	  thunar/thunar-window.c: Remove duplicate "const"s.
+
+2005-07-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Use "const" parameters if possible
+	  to give more hints to the compiler.
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add thunar_vfs_uri_get_md5sum()
+	  method to calculate the MD5 digest of an URI.
+	* thunar/thunar-local-file.c: Preallocate 512 instances of the
+	  ThunarLocalFile class to speed up the creation of new objects.
+	* thunar/thunar-details-view.c(thunar_details_view_init): Do not
+	  allow reordering of treeview columns.
+
+2005-07-22	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add --disable-debug option, which can be used to
+	  disable all kinds of debugging support, and thereby may speed up
+	  the whole application in certain cases.
+	* thunar/thunar-statusbar.c: Use the foreground color from the selected
+	  style instead of hard coding black for the animation.
+
+2005-07-21	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-view.c: Add support for the LINK DnD action.
+	* thunar/thunar-location-buttons.c(thunar_location_buttons_init): Use
+	  GDK_ACTION_LINK instead of GDK_ACTION_COPY to avoid accident copying
+	  of directories.
+	* thunar/thunar-statusbar.{c,h}: Implement the ThunarNavigator
+	  interface.
+	* thunar/thunar-statusbar.{c,h}: Add a "loading" indicator to the
+	  statusbar. Add support to dnd from the shortcut indicator to the
+	  favourites list.
+	* thunar/thunar-window.c(thunar_window_init): Connect the statusbar as
+	  a navigator. Forward the "loading" property from the view to the
+	  statusbar.
+	* configure.in.in: Check for additional headers. Add optional
+	  dependency on cairo.
+
+2005-07-20	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Rename to "thunar" again, as this is now the main
+	  development line.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.{c,h}:
+	  Add context-menu support to the standard view's action framework.
+	* thunar/thunar-details-view.c: Implement context-menu support for
+	  right-button click and "Menu"/"<Shift>F10" keyboard shortcuts.
+
+2005-07-18	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-job-listdir.c(thunar_vfs_job_listdir_execute):
+	  Always ignore the "." and ".." entries for directories.
+	* thunar/thunar-location-bar.{c,h}: Add virtual method accept_focus(),
+	  which tries to transfer keyboard focus to the location bar if it
+	  provides a way for the user to enter the location as text. Else
+	  the method returns FALSE and the window will open a separate dialog.
+	* thunar/thunar-location-buttons.c, thunar/thunar-location-entry.c:
+	  Implement the accept_focus() method on the ThunarLocationBar
+	  interface appropriately.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Make the
+	  location bar configurable using the action system.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-path-entry.c: Do not handle the focus-out-event here,
+	  as it's better to handle it in the upper layers.
+	* thunar/thunar-path-entry.c(thunar_path_entry_set_current_file): Set
+	  the cursor to the end and queue a redraw on the whole widget.
+	* thunar/thunar-window.c: Include <thunar/thunar-location-entry.h>.
+	* thunar/thunar-location-entry.{c,h}, thunar/Makefile.am: Add
+	  ThunarLocationEntry, which implements ThunarLocationBar using a
+	  ThunarPathEntry widget.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-path-entry.{c,h}: Add ThunarPathEntry class, which
+	  implements a widget to which the user can enter paths. The auto
+	  completion support is not yet provided.
+	* thunar/thunar-location-dialog.{c,h}: Add ThunarLocationDialog class,
+	  which provides a "Open Location"-dialog similar to the one found in
+	  GtkFileChooser.
+	* thunar/Makefile.am: Add new classes to the build framework.
+	* thunar/thunar-window-ui.xml, thunar/thunar-window.c: Add "Open
+	  Location" action to the window, which will bring up a
+	  ThunarLocationDialog.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Use "thunar-threaded" instead of "Thunar-threaded".
+	* tests/test-thunar-vfs-volume-bsd.c(main): Get this test working again.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* TODO: Add note to based the ThunarVfsJob communication on the GSignal
+	  mechanism.
+	* configure.in.in: Set tarname to be "Thunar-threaded".
+	* thunar-vfs/thunar-vfs-info.{c,h}: Let thunar_vfs_info_list_free()
+	  return NULL.
+	* thunar-vfs/thunar-vfs-job-listdir.c: Invoke the callback every two
+	  seconds, so for large directories, the user does not need to wait for
+	  the whole folder to be loaded. Also sort the item names prior to
+	  loading the infos.
+	* thunar/thunar-local-folder.c: Support partial loading, as implemented
+	  for ThunarVfsJobListdir.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-volume-sysv.c: Fix compile warning with wrong
+	  parameters to thunar_vfs_volume_manager_sysv_get_volume_by_info().
+	  This fixes bug #1083.
+
+2005-07-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/xdgmime/: Import the XDG mime implementation with the
+	  patches from libexo.
+	* thunar-vfs/: The ThunarVfsInfo framework is now thread-safe, using
+	  the ThunarVfsMime framework provided by ThunarVFS.
+	* thunar/: Turn Thunar into a threaded application.
+
+2005-07-16	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-folder.{c,h}: Add a "files-removed" signal, which can
+	  be used by ThunarFolder implementation to solve the reload problem,
+	  and probably other problems as well (like asynchronous loading).
+	* thunar/thunar-local-folder.c(thunar_local_folder_rescan): Use
+	  "files-removed" instead of destroying the no longer present files,
+	  so we don't accidently terminate other stuff here.
+	* thunar/thunar-list-model.c: Handle the "files-removed" signal of the
+	  ThunarFolder.
+
+2005-07-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view.c: Unselect all selected items if the
+	  user clicks on an empty area of the treeview and neither Control
+	  nor Shift is active.
+	* thunar/thunar-properties-dialog.{c,h}: Add the first draft for the
+	  ThunarPropertiesDialog class, which implements a properties dialog for
+	  a single file.
+	* thunar/Makefile.am: Add ThunarPropertiesDialog to the build framework.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-standard-view.c,
+	  thunar/thunar-window-ui.xml: Add the "properties" action to the
+	  menu structure, which displays a properties dialog for the selected
+	  file.
+
+2005-07-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-volume.{c,h}: Extend the ThunarVfsVolumeManager
+	  interface to be able to query the ThunarVfsVolume for a given
+	  ThunarVfsInfo.
+	* thunar-vfs/thunar-vfs-volume-{bsd,sysv}.c: Catch up with the latest
+	  ThunarVfsVolumeManager changes.
+	* thunar-vfs/thunar-vfs-volume-bsd.c(thunar_vfs_volume_bsd_new): Add
+	  support for SCSI direct access devices.
+	* thunar/thunar-file.{c,h}: Add thunar_file_get_volume() to be able
+	  to query the ThunarVfsVolume for a given ThunarFile, if possible.
+	* thunar/thunar-local-file.c: Implement the newly added get_volume()
+	  method based on the ThunarVfsVolumeManager.
+	* thunar/thunar-list-model.c: Use the new volume related functionality
+	  to display the free space of the currently active directory in the
+	  statusbar.
+
+2005-07-15	Benedikt Meurer <benny at xfce.org>
+
+	* docs/papers/HackingOnThunar.odt: Improve the "Hacking on Thunar"
+	  guide.
+	* thunar-vfs/thunar-vfs-volume.{c,h}: Change the icon lookup mechanism
+	  to return an icon name instead of a GtkIconInfo object. Also allow
+	  the ThunarVfsVolume implementation to specify a custom icon by
+	  overriding the lookup_icon_name() method. Add a new method
+	  get_free_space() which can be used to determine the amount of free
+	  space on a given volume.
+	* thunar-vfs/thunar-vfs-volume-bsd.c: Catch up with the changes to
+	  ThunarVfsVolume.
+	* thunar/thunar-favourites-model.c: Cache icons for the favourites and
+	  reload them whenever the file/volume changes. Adopt the new icon
+	  lookup mechanism for ThunarVfsVolume.
+
+2005-07-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view.c(thunar_standard_view_init): Add frame
+	  shadow to the standard views.
+
+2005-07-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-clipboard-manager.c: Fake an "owner-changed" event
+	  for the clipboard if either GDK or the Xserver do not support the
+	  XFixes extension.
+	* thunar/thunar-standard-view.c: Monitor the associated clipboard for
+	  changes. Enable the "paste" action only if the both the current
+	  directory is writable and the clipboard contents are pastable.
+
+2005-07-13	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-user.c(thunar_vfs_user_manager_init): Use
+	  direct hashing instead of int hashing.
+	* thunar/thunar-local-file.c(thunar_local_file_get_emblem_names): If
+	  the file cannot be written, return the "noread" emblem as well.
+	* thunar/thunar-file.{c,h}: Add can_execute(), can_read() and
+	  can_write() methods, and a default implementation, so not every
+	  class derived from ThunarFile needs to implement these methods of
+	  its own.
+	* thunar/thunar-standard-view.c(thunar_standard_view_selection_changed):
+	  Update the "cut" and "paste" actions depending on whether the
+	  current directory is writable.
+
+2005-07-12	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-vfs-uri.c(thunar_vfs_uri_list_to_string): Use GString
+	  to build the URI list string.
+	* thunar/thunar-vfs-uri.{c,h}: Add a method thunar_vfs_uri_list_copy()
+	  which duplicates a list of ThunarVfsURIs.
+	* thunar-vfs/thunar-vfs-volume-bsd.c(thunar_vfs_volume_bsd_finalize):
+	  Properly remove the update timer here.
+	* thunar/thunar-list-model.c(thunar_list_model_remove): Perform the
+	  GtkTreeModel delete operation prior to notifying the "num-files"
+	  property to make sure the selection of the view is updated before
+	  the standard-view requests the statusbar text for the selection.
+	* TODO: Add another two issues.
+	* thunar/thunar-clipboard-manager.{c,h}, thunar/Makefile.am: Add the new
+	  ThunarClipboardManager class, which does the interaction with the
+	  clipboard.
+	* thunar/thunar-standard-view.{c,h}: Implement Copy/Cut operations based
+	  on the newly added ThunarClipboardManager class.
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-window-ui.xml: Add
+	  clipboard operations to the "Edit" menu.
+
+2005-07-12	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window.c: Add a readonly property "ui-manager" to the
+	  ThunarWindow and use property binding to sync the UI manager with
+	  the ThunarView.
+
+2005-07-12	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-standard-view-ui.xml, thunar/thunar-window-ui.xml:
+	  Specify the name in addition to the action.
+
+2005-07-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-navigator.c(thunar_navigator_class_init): Use
+	  EXO_PARAM_READWRITE instead of G_PARAM_READWRITE.
+	* thunar/thunar-list-model.c: Fix several bugs related to incorrect
+	  signal registration/removal in the hidden files handling.
+	* thunar/thunar-view.{c,h}: Add a new "ui-manager" property, which is
+	  set by the surrounding window for the view in question. The view in
+	  turn can hook its own actions - and thereby menu and toolbar items -
+	  into the ui manager, using GtkUIManager's merging capabilities.
+	* thunar/thunar-window.c(thunar_window_init): Tell the main view about
+	  our UI manager.
+	* thunar/thunar-window-ui.xml, thunar/thunar-standard-view-ui.xml,
+	  thunar/thunar-standard-view.{c,h}, thunar/Makefile.am: Add initial
+	  support for menu merging to the standard view class - and thereby to
+	  the icon and details view. You can now control the "show-hidden"
+	  property of the main view's model from the menu bar.
+
+2005-07-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.{c,h}: Readd the get_statusbar_text() method.
+	* thunar/thunar-favourites-view.c(thunar_favourites_view_row_activated):
+	  Make sure the activated row is not the separator row, as calling
+	  thunar_navigator_change_directory() with NULL for the directory
+	  parameter will lead to a crash.
+	* thunar/thunar-standard-view.{c,h}, thunar/thunar-details-view.{c,h},
+	  thunar/thunar-icon-view.{c,h}, thunar/Makefile.am: Add a new abstract
+	  base class ThunarStandardView, which is inherited by ThunarIconView
+	  and ThunarDetailsView. ThunarStandardView itself is derived from
+	  GtkScrolledWindow. This change was made to reduce the amount of
+	  duplicated code in ThunarIconView and ThunarDetailsView, and to
+	  workaround the problem that Gtk style properties don't pickup the
+	  custom properties for certain widgets once you have a derived class.
+	* thunar/thunar-statusbar.{c,h}: Revert to the previous ThunarStatusbar
+	  implementation, which has a single "text" property that is bound to
+	  the "statusbar-text" property of the active view.
+	* thunar/thunar-view.{c,h}: ThunarView now inherits (in terms of
+	  interface inheritance) from ThunarNavigator, which will allow for
+	  unified handling in ThunarWindow. In addition, the ThunarView now
+	  provides a "loading" and a "statusbar-text" property (both readonly)
+	  to put the view back in control of the loading process.
+
+2005-07-07	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c: Be sure to register the type in a
+	  thread-safe manner.
+
+2005-07-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.{c,h}, thunar/thunar-favourites-view.c:
+	  Also provide a GtkWindow instance to the action list generator, so
+	  actions can fire dialogs if necessary.
+
+2005-07-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.{c,h}, thunar/thunar-favourites-view.c:
+	  Add possibility to remove user-defined shortcuts from the list.
+
+2005-07-03	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.c(thunar_favourites_model_get_value):
+	  The ThunarVfsVolume interface does no longer provide the "name"
+	  property.
+	* thunar-vfs/thunar-vfs-volume-bsd.c: Read the label from the ISO9660
+	  volume descriptor block whenever a new medium is inserted and use
+	  this label as name.
+
+2005-07-02	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window-ui.xml, thunar/Makefile.am,
+	  thunar/thunar-window.c: The UI description for the ThunarWindow is
+	  now placed in a separate XML file for easier editing, and compiled
+	  into the binary using the exo-csource utility.
+
+2005-07-02	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add checks for functions used in the user module.
+	* thunar-vfs/thunar-vfs-user.{c,h}: Add a user module to the VFS
+	  library, which is extensible and performs some caching to reduce
+	  the overhead caused by the underlying NSS implementation.
+	* docs/papers/HackingOnThunar.odt: Add comments about the newly added
+	  ThunarVfsUser module.
+	* thunar-vfs/thunar-vfs-info.h: Add ThunarVfsUserId and ThunarVfsGroupId
+	  typedefs.
+	* thunar-vfs/thunar-vfs.h, thunar-vfs/Makefile.am: Add the new
+	  ThunarVfsUser module to the build framework.
+	* thunar/thunar-file.{c,h}, thunar/thunar-local-file.c,
+	  thunar/thunar-trash-file.c: Add two new methods to the ThunarFile
+	  class - get_group() and get_user() - and add an implementation of
+	  these methods to the local and trash backends.
+
+2005-06-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view-icon-renderer.c
+	  (thunar_details_view_icon_renderer_render): Add support to render
+	  the primary emblem of the given file.
+	* thunar/thunar-file.{c,h}: Add support to query the list of emblems
+	  for a given ThunarFile.
+	* thunar/thunar-local-file.c: Implement the ThunarFile emblem support
+	  for symbolic links.
+
+2005-06-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view-icon-renderer.{c,h}: Add a custom icon
+	  renderer for the details view.
+	* thunar/thunar-list-model.{c,h}: Allow consumers of this model to
+	  query the file for a given row.
+	* thunar/Makefile.am: Add the new ThunarDetailsViewIconRenderer class
+	  to the build framework.
+	* thunar/thunar-details-view.c(thunar_details_view_init): Use the custom
+	  icon renderer instead of the generic pixbuf renderer provided by Gtk+.
+
+2005-06-29	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-location-buttons.c: Make this behave like GtkFileChooser
+	  again.
+
+2005-06-28	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-volume-bsd.c, thunar-vfs/thunar-vfs-volume.c:
+	  Remove the GObject properties from the ThunarVfsVolume interface.
+
+2005-06-26	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-info.{c,h}: Do not automatically determine the
+	  link target for ThunarVfsInfo objects. Instead, we'll add a method
+	  to ThunarVfsInfo later, so modules can do this on-demand. This speeds
+	  up loading directories with lots of symlinks within.
+	* TODO: Remove the ThunarVfsInfo symlink item.
+
+2005-06-26	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Don't use a GObject for the
+	  ThunarVfsURI class. GObject is really overhead here, as we don't need
+	  anything of whats provided by GObject.
+	* TODO: Add note about missing GValue handling for ThunarVfsURI.
+	* TODO: Add note to fix ThunarVfsInfo to not implicitly query the
+	  link target.
+	* thunar-vfs/*.[ch], thunar/*.[ch]: Use thunar_vfs_uri_unref() and
+	  thunar_vfs_uri_ref() instead of g_object_unref() and g_object_ref(),
+	  as ThunarVfsURI is no longer a GObject derived type.
+	* thunar/thunar-window.c: Make loading new directories look and feel
+	  "smoother". Still not perfect.
+
+2005-06-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.c: Use a static variable for the VFS monitor
+	  instead of a class variable, that never gets freed with static types.
+	* thunar/thunar-favourites-model.c: Watch the files in the favourites
+	  list for changes, so that folders that no longer exists are
+	  automatically removed from the list.
+
+2005-06-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-navigator.c(thunar_navigator_get_type): Do not require
+	  derived classes to inherit GtkWidget. This enables us to let arbitrary
+	  classes implement the ThunarNavigator interface and therefore reduce
+	  the amount of hardcoded knowledge in ThunarWindow.
+	* thunar/thunar-side-pane.c(thunar_side_pane_get_type): Require derived
+	  classes to inhert GtkWidget.
+
+2005-06-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view.c(thunar_details_view_init): Use a
+	  GtkCellRendererText instead of an ExoCellRendererEllipsizedText
+	  for the name column.
+	* thunar/thunar-details-view.c, thunar/thunar-icon-view.c: Set proper
+	  ATK name and descriptions here.
+
+2005-06-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/main.c(main): Disable thread support for now, as it's not used
+	  and just slows down stuff.
+	* thunar/thunar-file.{c,h}, thunar/thunar-local-file.{c,h},
+	  thunar/thunar-local-folder.c, thunar/thunar-trash-file.c: Watch local
+	  directories and trashed files for changes.
+
+2005-06-25	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-location-buttons.c
+	  (thunar_location_buttons_set_current_directory): Don't display the
+	  real root node - the 'computer:'-node - if a sub-node is active. So
+	  currently we have four distinctive possible roots for the location
+	  buttons bar, which are the home directory of the user, the file system
+	  root node ('file:/'), the trash root ('trash:') and the real computer
+	  root node ('computer:'), which are checked in the given order.
+	* thunar/thunar-list-model.c(thunar_list_model_get_value): Use slightly
+	  larger icons for the details view.
+	* thunar/thunar-window.c: Add preliminary menu support with 'Close'
+	  and 'Go up'.
+
+2005-06-24	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add support for the 'computer://'
+	  URI.
+	* thunar/thunar-trash-folder.c, thunar/thunar-local-folder.c,
+	  thunar/thunar-folder.c: Drop the GObject properties, as they are
+	  mostly useless here.
+	* thunar/main.c(main): Use thunar_vfs_uri_new() for the optional
+	  command line parameter to be able to open arbitrary URIs from the
+	  command line.
+	* thunar/Makefile.am: Add new class ThunarComputerFolder to the build
+	  framework.
+	* thunar/thunar-computer-folder.{c,h}: Add ThunarComputerFolder class,
+	  which implements the 'computer:' URI. This vfolder is the root of all
+	  other root folders, currently 'file:/' and 'trash:'.
+	* thunar/thunar-file.{c,h}, thunar/thunar-folder.c,
+	  thunar/thunar-list-model.c, thunar/thunar-local-file.c,
+	  thunar/thunar-local-folder.c, thunar/thunar-statusbar.c,
+	  thunar/thunar-trash-file.c, thunar/thunar-trash-folder.c: Add support
+	  for the 'computer:' vfolder as overall root node. Rearrange the
+	  get_size() method to be able to support objects for which no size
+	  is known, currently vfolders and directories in general. The virtual
+	  get_mime_info() method now automatically takes a reference on the
+	  returned object for the caller.
+
+2005-06-24	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add check for localtime_r.
+	* thunar/thunar-file.{c,h}: Add support to query accessed, changed and
+	  modified dates of ThunarFiles.
+	* thunar/thunar-local-file.c, thunar/thunar-trash-file.c: Implement
+	  the virtual get_date() method.
+	* thunar/thunar-list-model.{c,h}: Add new columns accessed date,
+	  modified date and mime type. Fix the sorting for the mime comment
+	  column.
+	* thunar/thunar-details-view.c: Display type and date modified columns
+	  as well.
+
+2005-06-23	Benedikt Meurer <benny at xfce.org>
+
+	* docs/papers/HackingOnThunar.odt, docs/papers/Makefile.am,
+	  configure.in.in, docs/Makefile.am: Add initial draft of the "Hacking
+	  on Thunar" paper.
+
+2005-06-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.c, thunar/thunar-local-folder.c: If for
+	  some reason the constructor fails, we need to make sure to handle
+	  the floating reference correctly, therefore we call gtk_object_sink()
+	  instead of g_object_unref() in this case now.
+
+2005-06-22	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-file.c, thunar/thunar-local-folder.c: Add an assertion
+	  to verify that an object has a floating reference before we call
+	  gtk_object_sink() on it.
+
+2005-06-22	Benedikt Meurer <benny at xfce.org>
+
+	* TODO: Addd new TODO items and remove solved issues.
+	* thunar/Makefile.am: Add new class ThunarTrashFile to the build
+	  framework.
+	* thunar-vfs/thunar-vfs-monitor.c(thunar_vfs_monitor_add_info): Do not
+	  use kevent for symlinks, it's way easier to watch them using regular
+	  polling. This shouldn't be a problem anyways, as watching symlinks
+	  is not a common case.
+	* thunar-vfs/thunar-vfs-trash.{c,h}: Add functionality to handle trash:
+	  URIs and determine the real path for a file in a particular trash
+	  can.
+	* thunar-vfs/thunar-vfs-trash.c(thunar_vfs_trash_manager_get_trashes):
+	  Fix a typo where the order of arguments to the g_list_prepend()
+	  function was wrong.
+	* thunar/thunar-trash-file.{c,h}: Add a ThunarTrashFile class, which
+	  represents a trashed file.
+	* thunar/thunar-trash-folder.c: Add support for listing the contents
+	  of the various trash cans, and also provide a simple proxy mechanism,
+	  that automatically forwards the constructor invokation to the
+	  ThunarTrashFile class if required. The trash can handling must be
+	  improved, see bug #1027.
+
+2005-06-21	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-window.c(thunar_window_set_current_directory): Use
+	  thunar_file_open_as_folder() to open new folders.
+	* thunar/thunar-folder.{c,h}: ThunarFolder is now an interface, which
+	  can be implemented in different ways.
+	* thunar/thunar-local-folder.{c,h}: The previous ThunarFolder is now
+	  named ThunarLocalFolder.
+	* thunar/thunar-file.{c,h}: Add thunar_file_open_as_folder() virtual
+	  method, which allows the ThunarFile implementation to choose an
+	  appropriate ThunarFolder implementation and thereby removes the
+	  need for the surrounding modules to "guess" the correct ThunarFolder.
+	* thunar/thunar-local-file.c: Implement the open_as_folder() method
+	  for local files by simply instantiating a ThunarLocalFolder on the
+	  file in question.
+	* thunar/thunar-trash-folder.{c,h}: The ThunarTrashFile class is now
+	  named ThunarTrashFolder as it really represents the trash toplevel
+	  folder. It also implements the ThunarFolder interface now. The real
+	  folder implementation is missing currently.
+	* thunar/Makefile.am: Sync the build framework with the changes
+	  described above.
+
+2005-06-20	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-monitor.c(thunar_vfs_monitor_event): Remove
+	  unused variables.
+	* thunar/thunar-folder.c: Apply the same optimization concerning signal
+	  id lookups and closure generations as done with ThunarListModel
+	  earlier.
+	* thunar/thunar-folder.c: Actually react to events on the corresponding
+	  file. We still need a mode in which we'll handle errors in async
+	  folder reloads.
+	* thunar/thunar-local-file.c: Drop the cached MIME type whenever the
+	  file changes. The MIME type will be recalculated on demand when
+	  needed.
+	* thunar/thunar-icon-factory.c: Instead of binding to the icon theme
+	  instance's "changed" signal and risking that somebody else already
+	  registered a handler earlier, we use a signal emission hook now, which
+	  is garantied to be fired before any of the signal handlers are
+	  invoked. See the code for details and additional comments.
+
+2005-06-20	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-local-file.h: Add missing THUNAR_LOCAL_FILE_GET_CLASS().
+	* configure.in.in: Add checks for kqueue() and required headers.
+	* thunar-vfs/thunar-vfs-info.{c,h}: thunar_vfs_info_update() is now
+	  part of the public API as it's used by monitor and will be used
+	  by the ThunarLocalFile implementation later as well.
+	* thunar-vfs/thunar-vfs-monitor.{c,h}: Add implementation for most
+	  of the ThunarVfsMonitor. The current implementation uses kqueue()
+	  if available with a fallback to regular polling.
+
+2005-06-20	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c: Instead of resolving the ids for the
+	  "destroy" and "changed" signals on ThunarFile everytime we need to
+	  register it, we query the signal id in the constructor and remember
+	  it. In addition, instead of creating a closure for every signal
+	  registration on a ThunarFile, we create a closure for "changed" and
+	  a closure for "destroy" in the constructor and reuse that closure
+	  everytime we need to register a signal handler.
+	* thunar/thunar-list-model.c: Watch hidden files for "destroy" condition
+	  as well.
+	* thunar/thunar-trash-file.c: Emit the "changed" signal whenever the
+	  "empty" property on the trash manager changes.
+	* thunar/thunar-file.{c,h}: Add a method thunar_file_changed(), which
+	  is used by derived classes to emit the "changed" signal on a given
+	  ThunarFile.
+
+2005-06-19	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-trash.{c,h}: Import first implementation of a
+	  trash manager into thunar-vfs. Does currently only support the "home
+	  trash", but will be extended to use the volume manager in order to
+	  support foreign trashes as well.
+	* thunar-vfs/Makefile.am: Add the trash manager to the build framework.
+	* thunar-vfs/thunar-vfs.h: Include the trash manager header.
+	* thunar/thunar-trash-file.c: Make use of the experimental trash
+	  manager to display the proper icon depending on whether the trash
+	  is full or empty.
+
+2005-06-19	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-statusbar.c, thunar/thunar-list-model.c,
+	  thunar/thunar-favourites-model.c: Fix bug, where Thunar crashed when
+	  NULL was returned for a mime info.
+	* thunar/thunar-file.{c,h}: Turn this into an abstract base class, which
+	  can be implemented in different ways.
+	* thunar/thunar-local-file.{c,h}: Implementation of the abstract
+	  ThunarFile class for local files handled by the 'file:///' URI
+	  scheme.
+	* thunar/thunar-trash-file.{c,h}: Implementation of the abstract
+	  ThunarFile class for trashed files handled by the 'trash:///' URI
+	  scheme and the trash can itself. This is currently only a boilerplate
+	  and waiting for the trash backend to show up.
+	* thunar/Makefile.am: Add new classes to the build framework.
+
+2005-06-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-details-view.c(thunar_details_view_init): Use the
+	  ellipsizing text renderer for the name column and get the sizing
+	  correct.
+
+2005-06-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-view.{c,h}: Further improve the interface to ease the
+	  implementation and reduce the amount of duplicated code in the view
+	  implementations.
+	* thunar/thunar-details-view.{c,h}: Add a first implementation for a
+	  details view.
+	* thunar/thunar-icon-view.c: Catch up with the changes to ThunarView.
+	* thunar/thunar-window.c: Test the new ThunarDetailsView.
+	* thunar/Makefile.am: Add ThunarDetailsView class to the build
+	  framework.
+
+2005-06-17	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-view.{c,h}: Adjust the interface for views to be more
+	  like the FilerView interface, which makes things slightly easier and
+	  adds more flexibility for the statusbar. Also the "list-model"
+	  property is now named "model", which is the easiest way for both
+	  ExoIconView and GtkTreeView, and it's safe to name it that way, as
+	  the ThunarView interface is the only way to change models anyways.
+	* thunar/thunar-list-model.{c,h}: Drop the statusbar text generator.
+	  It's now handled completely within the ThunarStatusbar class, which
+	  provides more flexibility.
+	* thunar/thunar-statusbar.{c,h}: Each statusbar instance is now
+	  associated with a ThunarView instance and automatically updates the
+	  status text according to the view.
+	* thunar/thunar-icon-view.c: Implement modified ThunarView interface,
+	  which makes things very easy here for now.
+	* thunar/thunar-window.c: Catch up with the changes to the other
+	  classes.
+
+2005-06-15	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-icon-factory.c: Implement the recently used list using
+	  a circular buffer. This saves us from having to memmove() the list
+	  content on every icon lookup.
+	* thunar/thunar-window.c(thunar_window_set_current_directory): Use
+	  a simple optimization when loading new folders into a view. See the
+	  code comments for details about the trick.
+
+2005-06-14	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Depend on GLib 2.6 for now.
+
+2005-06-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-volume-sysv.{c,h}: Add no-op implementation
+	  to make it possible to compile Thunar on non-BSD systems again.
+	* configure.in.in, thunar-vfs/Makefile.am,
+	  thunar-vfs/thunar-vfs-volume.c, thunar-vfs/thunar-vfs-volume-bsd.c:
+	  Add a rather hacky way to support different system flavours based
+	  on AC_CONFIG_LINKS(). Needs to be replaced by a real solution at
+	  some time.
+	* TODO: Add note about the wacky AC_CONFIG_LINKS() hacks mentioned
+	  above.
+
+2005-06-14	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_new_for_path): Add some
+	  code to automatically remove trailing slashes from path names, which
+	  would otherwise confuse the whole file manager.
+	* thunar/thunar-fallback-icon.{h,png}, thunar/Makefile.am: The fallback
+	  icon is now stored in a C file and automatically generated at compile
+	  time if maintainer mode is enabled, while dist tarballs will ship the
+	  generated C file.
+	* thunar/thunar-icon-factory.{c,h}: Add new class ThunarIconFactory,
+	  which provides caching of themed icons. The basic concept is based
+	  on the NautilusIconFactory class, but the implementation is simpler
+	  and faster than the implementation found in Nautilus.
+	* thunar/thunar-file.c: Use the new ThunarIconFactory class and the
+	  new exo_mime_info_lookup_icon_name() method to lookup and cache icons
+	  for files. This speeds up folder loading quite a lot.
+	* docs/design/overview.xmi: Add ThunarIconFactory diagram.
+
+2005-06-13	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Add header checks required for the BSD volume
+	  manager implementation.
+	* thunar/thunar-window.c: Display the current folder's special name.
+	* thunar/thunar-file.{c,h}: Add property "special-name", which contains
+	  the special name of a given file if any, else it contains the same
+	  value as the "display-name" property.
+	* thunar/thunar-location-buttons.c: Use the home directory as root.
+	  Don't display a label for the 'Filesystem' node, similar to how it
+	  is done with GtkFileChooser.
+	* thunar-vfs/thunar-vfs-volume.{c,h},
+	  thunar-vfs/thunar-vfs-volume-bsd.c: Try more advanced features, like
+	  detecting whether a medium is present for a given volume. This is
+	  currently just testing, based on what is provided by the BSD
+	  interface. The final design may look different, maybe even a
+	  D-BUS based thunar-volume-manager service, which can be run with
+	  special permissions in order to be able to query device stats and
+	  mount volumes.
+	* thunar/thunar-favourites-model.c: Use the new features provided by
+	  the volume manager to dynamically display volumes when a medium is
+	  inserted.
+
+2005-06-12	Benedikt Meurer <benny at xfce.org>
+
+	* docs/design/overview.xmi: Refined the basic ideas for the volume
+	  manager, which will provide core functionality required by the
+	  trash system. The ThunarVfsVolume and ThunarVfsVolumeManager concepts
+	  are interfaces now, which will be implemented by the backend (usually
+	  one backend per operating system family).
+	* tests/data/test-thunar-vfs-volume-bsd.fstab, tests/data/Makefile.am,
+	  tests/test-thunar-vfs-volume-bsd.c, tests/Makefile.am: Add test case
+	  for the BSD specific implementation of the ThunarVfsVolumeManager
+	  module.
+	* tests/test-thunar-vfs-uri.c: Fix copyright and includes.
+	* TODO: Add item about possible improvements of the BSD specific
+	  volume manager implementation.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs.h, configure.in.in: Add
+	  new classes and interfaces to the build framework.
+	* thunar-vfs/thunar-vfs-volume.{c,h}: Import the basic interfaces to
+	  the volume manager module, with a minimum set of methods and signals,
+	  which will be extended later.
+	* thunar-vfs/thunar-vfs-volume-bsd.{c,h}: Add first try of an
+	  implementation of the the volume manager interfaces for BSD systems.
+
+2005-06-11	Benedikt Meurer <benny at xfce.org>
+
+	* docs/design/overview.xmi: Extend the ThunarVfsURI functionality.
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add host handling to ThunarVfsURI.
+	  Add support for different URI schemes, currently 'file://' and
+	  'trash://'.
+	* thunar/thunar-favourites-model.c, thunar/thunar-favourites-view.c, 
+	  thunar/thunar-location-buttons.c: Sync with the little API change
+	  to ThunarVfsURI.
+	* tests/Makefile.am: Delete core files on `make clean'.
+	* tests/test-thunar-vfs-uri.c(main): Add test cases for the trash:
+	  scheme.
+
+2005-06-11	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in, Makefile.am, tests/: Import first test program for
+	  ThunarVfsURI validation.
+
+2005-06-11	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add functions to ease the handling
+	  of URI lists, specifically to automatically parse and generate
+	  string representations of URI lists that conform to the
+	  text/uri-list mime type.
+	* thunar/thunar-location-buttons.c
+	  (thunar_location_buttons_drag_data_get): Use new ThunarVfsURI list
+	  handling functions instead.
+	* thunar/thunar-favourites-model.c
+	  (thunar_favourites_model_file_destroy): Handle the case where a
+	  directory referenced by a favourite disappears from the backend media.
+	* thunar/thunar-favourites-model.c
+	  (thunar_favourites_model_file_changed): Remove a given favourite if
+	  the system notices that the favourite's file no longer refers to a
+	  directory.
+	* thunar/thunar-favourites-model.c(thunar_favourites_model_init): Do
+	  not re-add favourites initially, that do not refer to a directory.
+	* thunar/thunar-favourites-model.{c,h}: Add a new method
+	  thunar_favourites_model_add(), which is used by the
+	  ThunarFavouritesView to add new favourites to the list and
+	  automatically sync the changes with the Gtk+ bookmarks list.
+	* thunar/thunar-favourites-view.c: Handle "text/uri-list" drops,
+	  adding new favourites as appropriate. Add note, that the initial
+	  idea is based on the GtkFileChooser written by Red Hat for Gtk+.
+	* TODO: Remove the 'text/uri-list'-handling for ThunarFavouritesView.
+	  Add item concerning the Trash in the favourites list.
+
+2005-06-10	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.{c,h},
+	  thunar/thunar-favourites-view.c: Add initial drag&drop-support for
+	  the favourites view. This is currently limited to rearranging
+	  favourites in the list. Support for adding new favourites by
+	  dropping text/uri-list's will be added soon. Also, the
+	  ThunarFavouritesModel also saves changes made by the user back to
+	  the .gtk-bookmarks file now.
+	* TODO: Add note about missing text/uri-list support in
+	  ThunarFavouritesView, and missing .gtk-bookmarks monitor support.
+
+2005-06-08	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.c: Use a signed gint for the number
+	  of favourites to be compatible with the Gtk+ API.
+
+2005-06-08	Benedikt Meurer <benny at xfce.org>
+
+	* autogen.sh: Better determine the file dynamically, which is used to
+	  query the sandbox revision.
+
+2005-06-08	Benedikt Meurer <benny at xfce.org>
+
+	* autogen.sh, configure.in.in: Add build number to the version during
+	  development.
+
+2005-06-08	Benedikt Meurer <benny at xfce.org>
+
+	* docs/design/overview.xmi: All navigational UI elements in a
+	  ThunarWindow now implement the ThunarNavigator interface, which
+	  defines the "current-directory" property and the "change-directory"
+	  signal. See the ThunarNavigator gtk-docs for details about the
+	  behaviour.
+	* thunar/thunar-navigator.{h,c}: Provide source code for the current
+	  ThunarNavigator interface.
+	* thunar/thunar-side-pane.{h,c}, thunar/thunar-favourites-pane.c:
+	  Changed to use ThunarNavigator instead. ThunarSidePane is currently
+	  an empty interface.
+	* thunar-vfs/thunar-vfs-uri.{h,c}: Add a thunar_vfs_uri_to_string()
+	  method, which transform a ThunarVfsURI into a file:// uri.
+	* thunar/thunar-location-bar.{h,c}: Provide source code for the
+	  ThunarLocationBar interface, which extends the ThunarNavigator
+	  interface. The ThunarLocationBar interface does not add anything new
+	  currently, but that will change in future revisions.
+	* thunar/thunar-location-buttons.{c,h}: Add location path buttons
+	  implementation of the ThunarLocationBar interface. The layouting
+	  code was mostly copied from gtkpathbar.c, which was initially
+	  written by Jonathan Blandford. The implementation is not complete
+	  yet, and the layouting code is still very buggy.
+	* TODO: Add a bunch of TODO items for Thunar 1.0.
+
+2005-06-07	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-list-model.c(thunar_list_model_set_folder): Fix a bug
+	  where the signals for the ThunarFolder weren't connected if the
+	  folder contained no files initially.
+	* thunar/thunar-side-pane.c(thunar_side_pane_class_init): Fix typo in
+	  the documentation.
+	* thunar/thunar-file.{c,h}: Add new method thunar_file_get_parent() to
+	  figure out the parent directory for a given ThunarFile.
+
+2005-06-06	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_finalize): Use the
+	  parent_class variable set by G_DEFINE_TYPE instead of dynamically
+	  querying the parent class on-demand.
+	* thunar/thunar-application.c, thunar/thunar-desktop-view.c,
+	  thunar/thunar-favourites-model.c, thunar/thunar-favourites-pane.c,
+	  thunar/thunar-favourites-view.c, thunar/thunar-file.c,
+	  thunar/thunar-folder.c, thunar/thunar-icon-view.c,
+	  thunar/thunar-preferences.c, thunar/thunar-statusbar.c,
+	  thunar/thunar-window.c: G_DEFINE_TYPE and G_DEFINE_TYPE_WITH_CODE
+	  already generate a parent_class variable, so we don't need to do
+	  that manually as well. It looks like this was added with GLib 2.4.x
+	  and I somehow missed that change. Thanks to Jeff Franks for pointing
+	  this out.
+
+2005-06-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.c: Fix a bug in the thunar_vfs_uri_parent()
+	  and thunar_vfs_uri_relative() methods, where the name attribute of
+	  the newly created objects wasn't initialized properly.
+	* thunar-vfs/thunar-vfs-uri.c(thunar_vfs_uri_equal): Instead of always
+	  comparing the full path of both URIs, a simple optimization was
+	  introduced, which checks the basenames first, if they are equal,
+	  it'll check whether the dirnames have the same length, and as the
+	  last fallback, it'll compare the dirnames char by char. This way we
+	  can optimize the common case - with GHashTable - that two URIs
+	  differ.
+
+2005-06-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.{c,h}: Add new method
+	  thunar_favourites_model_file_for_iter() to be able to easily
+	  determine the ThunarFile for a given favourite.
+	* thunar/thunar-file.c(thunar_file_class_init): Fix a type in the
+	  "changed" signal definition.
+	* thunar/thunar-file.c(thunar_file_finalize): Fix a bug where the
+	  ThunarVfsURI was freed first, and then an attempt was made to remove
+	  the ThunarFile from the file_cache using the previously freed
+	  ThunarVfsURI as key.
+	* thunar/thunar-view.{c,h}: Add the "change-directory" signal, which
+	  is emitted by ThunarIconView and ThunarListView whenever the user
+	  double clicks a folder (or otherwise requests a directory change
+	  from within the view).
+	* thunar/thunar-list-model.{c,h}: Add a thunar_list_model_new()
+	  default constructor, which does not take a ThunarFolder instance.
+	* thunar/thunar-icon-view.c: Implement the "change-directory" signal
+	  in ThunarView.
+	* thunar/thunar-favourites-view.c, thunar/thunar-favourites-pane.c:
+	  Double-clicking a favourite now opens the associated directory (using
+	  the "current-directory" property, which is linked to the
+	  "current-directory" property of ThunarWindow).
+	* thunar/thunar-window.{c,h}: Add a "current-directory" property,
+	  which describes the directory currently displayed in this window.
+	  Remove the thunar_window_new_with_folder() constructor and replace
+	  it by a default constructor. Automatically synchronize the current
+	  directory with both the view and the side pane.
+	* thunar/main.c(main): ThunarWindow now uses ThunarFile to refer to
+	  the active directory and so we do here as well.
+
+2005-06-05	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Bumped version to 0.0.2.
+	* docs/design/overview.xmi: Fix some issues, see the code changes
+	  below.
+	* thunar-vfs/Makefile.am: Don't install the thunar-vfs library for
+	  now. Makes debugging easier.
+	* thunar/Makefile.am: Add new classes to the build framework.
+	* thunar/thunar-view.{c,h}: Implement first draft for the ThunarView
+	  interface, which is to beimplemented by all views.
+	* thunar/thunar-icon-view.{c,h}: Implement first draft for the
+	  ThunarIconView class, which implements the ThunarView interface to
+	  provide an icon view of the current folder.
+	* thunar/thunar-statusbar.{c,h}: Add basic implementation of the
+	  ThunarStatusbar class. In order to avoid an association between the
+	  ThunarView or ThunarListModel classes and the ThunarStatusbar and in
+	  order to provide more flexibility about what is to be displayed in
+	  the statusbar, we use a write-only property "text" for the
+	  ThunarStatusbar, which can be connected to another string property
+	  using the ExoBindings module.
+	* thunar/thunar-list-model.{c,h}: The number of rows should be a gint
+	  rather than a guint, as that's what GtkTreeModel uses. Add a new
+	  method thunar_list_model_get_statusbar_text(), that will be used by
+	  both ThunarIconView and ThunarListView to determine the proper
+	  statusbar text that should be displayed for a given selection. Add a
+	  new column THUNAR_LIST_MODEL_COLUMN_TYPE, which provides a string
+	  representation of the MIME-Type (using the comment set for the
+	  MIME-Type). The sort function is not yet implemented tho.
+
+2005-06-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar/thunar-favourites-model.c(thunar_favourites_model_get_value):
+	  The display_name's of ThunarFile's can be considered static (as the
+	  name cannot change during the ThunarFile's life-time), so we don't
+	  need to take a copy here.
+	* thunar/thunar-list-model.c(thunar_list_model_get_value): Same here,
+	  the ThunarFile's display_name is static.
+	* thunar/thunar-file.c: Add the simple caching on the ThunarFile
+	  level. If a ThunarFile for the same ThunarVfsURI is requested
+	  multiple times, the same ThunarFile instance will be used, instead
+	  of allocating a new one. Future versions will extend this scheme
+	  using a smarter caching mechanism.
+	* thunar/thunar-side-pane.{c,h}: Add implementation for the
+	  ThunarSidePane interface, which is to be implemented by all widgets
+	  that can be placed on the right side. The interface currently
+	  includes only the "current-directory" property, which is the most
+	  important communication mechanism. We'll need some way to pass in
+	  other per-window settings here (e.g. "show-hidden" and such).
+	  Hopefully somebody will pick up the preferences task soon.
+	* thunar/thunar-favourites-model.{c,h},
+	  thunar/thunar-favourites-view.{c,h},
+	  thunar/thunar-favourites-pane.{c,h}: More work on the
+	  ThunarFavourites module. The ThunarFavouritesPane class implements
+	  the ThunarSidePane interface and acts as a bridge to the underlying
+	  ThunarFavouritesView.
+	* thunar/thunar-window.c: Test the new ThunarFavouritesPane class.
+	* thunar/Makefile.am: Add the new classes to the build framework.
+
+2005-06-05	Benedikt Meurer <benny at xfce.org>
+
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add thunar_vfs_uri_new()
+	  constructor, that creates a new ThunarVfsURI object from a resource
+	  identifier string.
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Add thunar_vfs_uri_is_home(), which
+	  determines whether a given ThunarVfsURI referes to the home
+	  directory of the current user.
+	* thunar/thunar-file.c(thunar_file_load_icon): Pay attention to
+	  special icons for the home folder and the file system root.
+	* thunar/thunar-favourites-model.{c,h},
+	  thunar/thunar-favourites-view.{c,h}: Add experimental
+	  ThunarFavouritesModel and ThunarFavouritesView classes, that will be
+	  used in the implementation of the ThunarFavouritesPane class. Other
+	  than with the mockups, I've skipped the 'Desktop' favourite for now,
+	  as it does not make much sense. The usablity team should evaluate
+	  this at some time.
+	* thunar/thunar-window.c: Add ThunarFavouritesView on the left side
+	  for testing.
+	* thunar/Makefile.am: Add ThunarFavouritesModel and
+	  ThunarFavouritesView to the build system.
+
+2005-06-04	Benedikt Meurer <benny at xfce.org>
+
+	* configure.in.in: Fix copyright texts.
+	* docs/design/overview.xmi: Add is_local() and is_root() for
+	  ThunarVfsURI, which were missing.
+	* thunar-vfs/thunar-vfs-uri.{c,h}: Implemented the missing
+	  thunar_vfs_uri_is_root() and thunar_vfs_uri_parent() methods.
+
+2005-06-04	Benedikt Meurer <benny at xfce.org>
+
+	* COPYING.LIB: Add license text for the thunar-vfs library (which is
+	  licensed under the LGPL).
+	* HACKING: Add information for people that plan to hack on Thunar.
+	* AUTHORS: Add Jeff Franks.
+	* THANKS: Import the THANKS template.
+	* README: Add some basic information about Thunar. Needs more details.
+	* docs/design/overview.xmi: Import the current overview diagram for
+	  Thunar.
+	* Makefile.am, configure.in.in, docs/Makefile.am,
+	  docs/design/Makefile.am: Include the docs/ tree with the build
+	  framework.
+	* configure.in.in, thunar/Makefile.am, thunar-vfs/Makefile.am: Link
+	  against GThread (not yet required from what is coded so far).
+	* configure.in.in: Check for several required header files.
+	* thunar-vfs/Makefile.am, thunar-vfs/thunar-vfs-info.{c,h},
+	  thunar-vfs/thunar-vfs-monitor.{c,h},
+	  thunar-vfs/thunar-vfs-uri.{c,h}, thunar-vfs/thunar-vfs-util.{c,h},
+	  thunar-vfs/thunar-vfs.h: Add some experimental source code to
+	  implement parts of the VFS module.
+	* thunar/fallback-icon.h, thunar/fallback-icon.png: Import the
+	  fallback icon.
+	* thunar/thunar-application.{c,h}: Import Jeff's ThunarApplication
+	  boilerplate (adjusting style as required).
+	* thunar/thunar-desktop-view.{c,h}: Boilerplate for the
+	  ThunarDesktopView class with the very basic requirements.
+	* thunar/thunar-file.{c,h}, thunar/thunar-folder.{c,h}: Experimental
+	  implementation of ThunarFile and ThunarFolder based on the
+	  experimental source for the VFS module.
+	* thunar/thunar-list-model.{c,h}: Sample implementation of the
+	  ThunarListModel class, based on an earlier implementation found in
+	  Filer.
+	* thunar/thunar-preferences.{c,h}: Template for the ThunarPreferences
+	  class.
+	* thunar/thunar-window.{c,h}: Quick-and-dirty ThunarWindow
+	  implementation to be able to roughly test the ThunarListModel class.
+	* thunar/main.c: Add code to start a single ThunarWindow.
+	* autogen.sh: Copyright fixes. Substitute date to make it easier to
+	  identify snapshots during the early development stages.
+
+2005-05-30	Benedikt Meurer <benny at xfce.org>
+
+	* Initial import.
+
+# vi:set ts=8 sw=8 noet ai nocindent:

Added: desktop/trunk/thunar/branches/upstream/current/FAQ
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/FAQ	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/FAQ	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,66 @@
+This file contains a list of frequently asked questions about Thunar and the
+appropriate answers to these questions.
+
+
+1. What is Thunar?
+==================
+
+  Thunar is a fast and easy-to-use file manager for the X Window System, with a
+  special focus on the Xfce Desktop Environment.
+
+
+2. Why doesn't Thunar execute files marked as executable?
+=========================================================
+
+  For security reasons Thunar only executes files of type application/x-desktop,
+  application/x-executable and application/x-shellscript. For desktop files
+  the execution feature will only be enabled if the desktop file is of type
+  Application and a valid Exec line is given. For the other types the feature
+  is available if the file is marked executable for the current user.
+
+  Also note that for application/x-executable and application/x-shellscript, the
+  types of the file don't really need to match these types exactly, but it is
+  suffice if the detected type has a parent that matches one of the two types
+  listed above, or if the MIME-type is an alias for one of the above.
+
+
+3. Where does Thunar store the metadata associated with files?
+==============================================================
+
+  Thunar associates various settings with files/folders, which we call metadata.
+  This metadata for all files is stored in tdb database file, which is called
+  the metafile. The database file is stored in
+  
+    $XDG_CACHE_HOME/Thunar/metafile.tdb
+
+  and can be examined using the tdbtool, which is part of the Thunar
+  distribution (located in the tdb/ subdirectory).
+
+
+4. Where does Thunar store its preferences?
+===========================================
+
+  Thunar stores the user configurable preferences in a tdb database file, which
+  is located at
+
+    $XDG_CONFIG_HOME/Thunar/preferences.tdb
+
+  and can be examined using the tdbtool, which is part of the Thunar
+  distribution (located in the tdb/ subdirectory).
+
+
+5. How to use mouse gestures in Thunar?
+=======================================
+
+  Thunar currently features basic support for so called "mouse gestures" in its
+  icon view. You can use these "mouse gestures" by holding down the middle
+  mouse button (usually the mouse wheel) while the mouse pointer is on the
+  background area of the icon view component (any area that is not covered by
+  an icon or a text). Now you can move the cursor into four directions to
+  perform certain actions, which are described below.
+
+   * Left  - opens the previous visited folder
+   * Up    - opens the parent folder
+   * Right - opens the next visited folder
+   * Down  - cancels the gesture action
+

Added: desktop/trunk/thunar/branches/upstream/current/HACKING
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/HACKING	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/HACKING	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,70 @@
+Bug tracking system
+===================
+
+Thunar uses the Xfce bug tracking system at http://bugzilla.xfce.org/,
+hosted and maintained by the Xfce project.
+
+
+Patches
+=======
+
+Please submit patches to the Xfce bug tracking system or to the thunar-dev
+mailinglist. Your patch should be in unified diff format (the -u option
+to GNU diff) and it must comply with the coding style described below.
+
+Please send a patch against a recent version of this package. Patches
+against the Subversion trunk branch are most preferable. You can always
+access the trunk branch from
+
+  http://svn.foo-projects.org/svn/xfce/thunar/trunk
+
+or using an installed Subversion client
+
+  svn co http://svn.foo-projects.org/svn/xfce/thunar/trunk thunar
+
+
+Feature requests
+================
+
+Please file feature requests to the Xfce bug tracking system
+(http://buzilla.xfce.org, product Thunar) with a Severity of
+enhancement. Make sure that your feature request wasn't reported
+already before; requesting a feature several times won't increase
+the changed that it gets added!
+
+
+Coding Style
+============
+
+ - GNU coding conventions, with GLib-like extensions, mostly the same
+   as GTK+.
+ - Always expand tabs. This differs from the GNU suggestion, but it is
+   necessary to be independent from a given tab setting.
+ - Do NOT ever misuse debugging macros like g_return_val_if_fail() or
+   g_return_if_fail() to control program flow. They are solely useful
+   to discover bugs, the final binary won't include code for these
+   statements, and so any use of these macros to control program
+   flow presents a bug!
+ - Do NOT follow the philosophy "If it works, it's right" that most
+   other open source projects follow, instead Thunar's philosophy is
+   "It doesn't work unless it's right". Think carefully of what you want
+   to do, don't just fire up your favourite editor and start hacking
+   in the hope that it will evolve into something useful one day.
+ - Maintainability goes over performance. If you have to choose between
+   a maintainable and a fast solution, always prefer the former, as it's
+   quite easy to optimize well-designed modules, but very hard and costly
+   to make spaghetti-code readable.
+ - Write ChangeLog entries. Whenever you commit a change or send a patch,
+   write a good entry per change to the ChangeLog file, see the libexo
+   ChangeLog for the exact format; it's very important to be descriptive
+   and correct here, else you'll loose your commit bits or your patches
+   won't be considered for inclusion.
+ - Use GObject whenever possible. Object-oriented design and programming
+   makes it easier to separate functionality and also aids in verification
+   and testing, and GObject provides a very solid base.
+
+
+Release process
+===============
+
+Yet to be defined!

Added: desktop/trunk/thunar/branches/upstream/current/INSTALL
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/INSTALL	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/INSTALL	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,231 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   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 only 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.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  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=c89 CFLAGS=-O2 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 must use a version of `make' that
+supports the `VPATH' variable, such as 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 `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have 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' will install the package's files in
+`/usr/local/bin', `/usr/local/man', 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
+give `configure' the option `--exec-prefix=PREFIX', the package will
+use PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files will 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 `--target=TYPE' option 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
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`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.
+

Added: desktop/trunk/thunar/branches/upstream/current/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	icons								\
+	pixmaps								\
+	po								\
+	tdb								\
+	thunar-vfs							\
+	thunarx								\
+	thunar								\
+	tests								\
+	docs								\
+	examples
+
+AUTOMAKE_OPTIONS =							\
+	1.8								\
+	dist-bzip2
+
+distclean-local:
+	rm -rf *.spec *.cache *~
+
+rpm: dist
+	rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
+	@rm -f $(PACKAGE)-$(VERSION).tar.gz
+
+desktopdir = $(datadir)/applications
+desktop_in_files = Thunar.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+ at INTLTOOL_DESKTOP_RULE@
+
+EXTRA_DIST =								\
+	FAQ								\
+	HACKING								\
+	intltool-extract.in						\
+	intltool-merge.in						\
+	intltool-update.in						\
+	$(desktop_in_files)
+
+DISTCLEANFILES =							\
+	intltool-extract						\
+	intltool-merge							\
+	intltool-update							\
+	$(desktop_DATA)
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,788 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(top_srcdir)/configure AUTHORS COPYING COPYING.LIB ChangeLog \
+	INSTALL NEWS THANKS TODO compile config.guess config.sub \
+	depcomp install-sh ltmain.sh missing mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(desktopdir)"
+desktopDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(desktop_DATA)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	icons								\
+	pixmaps								\
+	po								\
+	tdb								\
+	thunar-vfs							\
+	thunarx								\
+	thunar								\
+	tests								\
+	docs								\
+	examples
+
+AUTOMAKE_OPTIONS = \
+	1.8								\
+	dist-bzip2
+
+desktopdir = $(datadir)/applications
+desktop_in_files = Thunar.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+EXTRA_DIST = \
+	FAQ								\
+	HACKING								\
+	intltool-extract.in						\
+	intltool-merge.in						\
+	intltool-update.in						\
+	$(desktop_in_files)
+
+DISTCLEANFILES = \
+	intltool-extract						\
+	intltool-merge							\
+	intltool-update							\
+	$(desktop_DATA)
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-desktopDATA: $(desktop_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(desktopdir)" || $(mkdir_p) "$(DESTDIR)$(desktopdir)"
+	@list='$(desktop_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(desktopDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(desktopdir)/$$f'"; \
+	  $(desktopDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(desktopdir)/$$f"; \
+	done
+
+uninstall-desktopDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(desktop_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(desktopdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(desktopdir)/$$f"; \
+	done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(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: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(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)
+	$(am__remove_distdir)
+	mkdir $(distdir)
+	$(mkdir_p) $(distdir)/docs/reference/thunar-vfs $(distdir)/docs/reference/thunarx $(distdir)/po $(distdir)/tdb $(distdir)/thunar-vfs $(distdir)/thunarx
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(desktopdir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+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-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-local distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-desktopDATA
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-desktopDATA uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+	check-am clean clean-generic clean-libtool clean-recursive \
+	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+	dist-shar dist-tarZ dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-local distclean-recursive distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-desktopDATA install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-desktopDATA uninstall-info-am
+
+
+distclean-local:
+	rm -rf *.spec *.cache *~
+
+rpm: dist
+	rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
+	@rm -f $(PACKAGE)-$(VERSION).tar.gz
+ at INTLTOOL_DESKTOP_RULE@
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/NEWS
===================================================================

Added: desktop/trunk/thunar/branches/upstream/current/README
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/README	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/README	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,45 @@
+What is it?
+===========
+
+Thunar is a modern file manager for the Unix/Linux desktop, aiming to be
+easy-to-use and fast.
+
+
+Required packages
+=================
+
+Thunar depends on the following packages:
+
+ - perl 5.6 or above
+ - GTK+ 2.6.0 or above
+ - libexo 0.3.1 or above
+ - intltool 0.30 or above
+ - libpng12 1.2.0 or above
+ - shared-mime-info 0.15 or above
+ - desktop-file-utils 0.10 or above
+
+Thunar can optionally use the following packages:
+
+ - cairo 0.5 or above
+ - gamin 0.1.0 or above
+ - gconf 2.4 or above
+ - libjpeg 6 or above
+ - libstartup-notification 0.4 or above
+
+
+Installation
+============
+
+The file 'INSTALL' contains generic installation instructions. For more
+detailed information, visit the Thunar website at http://thunar.xfce.org/.
+
+
+How to report bugs?
+===================
+
+Bugs should be reported to the Xfce bug tracking system
+(http://bugzilla.xfce.org, product Thunar). You will need to
+create an account for yourself.
+
+Please read the HACKING file for information on where to send
+changes or bugfixes for this package.

Added: desktop/trunk/thunar/branches/upstream/current/THANKS
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/THANKS	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/THANKS	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,33 @@
+What's this file about?
+-----------------------
+This file lists all external people that have contributed to this project and
+thereby helped to make Thunar such a successful project.
+
+
+
+Testers (sorted by name):
+--------------------------
+These people have contributed to Thunar by testing the software,
+reporting problems and making useful suggestions.
+
+
+
+Translators (sorted by language):
+----------------------------------
+These people have translated Thunar to foreign languages.
+
+ Pablo Hernández-M. Saiz <homeless3d at gmail.com>
+  * es translations
+
+ Szervác Attila <sas at 321.hu>
+  * hu translations
+
+ Daichi Kawahata <daichik at users.sourceforge.net>
+  * ja translations
+
+
+
+Other contributors (sorted by name):
+------------------------------------
+
+

Added: desktop/trunk/thunar/branches/upstream/current/TODO
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/TODO	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/TODO	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,61 @@
+Important for Thunar 1.0
+========================
+
+ - Add ThunarVfsFlags, which specifies various flags for the job starters
+   (like thunar_vfs_copy_files, etc.). One important flag would be
+   THUNAR_VFS_FLAG_ERROR_ON_OVERWRITE, which tells the job not to ask the
+   user when the target exists, but to fail directly (the flags could also
+   be part of thunar-vfs-interactive-job.h, as they're only interesting
+   for interactive jobs).
+
+ - We need a way to "refresh" folders after a "Cut"-operation with Nautilus.
+   With local folders - with not many files inside - the move is too fast!
+
+ - The ThunarTrashFile constructor needs some rework, as it's currently
+   mostly brain-dead. Should probably be splitted into several functions.
+   In addition the ThunarTrashFile should enable the monitoring on the
+   real file in order to stay informed about changes.
+
+ - The ThunarTrashFolder class should watch the trash manager and the
+   trash cans for changes.
+
+ - Use better way to handle system flavours than simply (mis)using
+   AC_CONFIG_LINKS(), which is pretty messy for this purpose.
+
+ - Check getmntinfo() or getfsstat() for ThunarVfsVolumeManagerBSD, which
+   might be faster than several statfs() calls.
+
+ - The layouting code for ThunarLocationButtons is still buggy. Problem shows
+   with paths that include a very long directory; you cannot scroll to the
+   last path component then.
+
+ - A design for the ThunarTreePane framework must be developed and later
+   be implemented.
+
+ - The preferences must be sorted out and a suggestion for both a good
+   set of preferences and a layout for the preferences dialog must be
+   developed and presented.
+
+ - A design for the ThunarDesktopView module must be developed and later
+   be implemented.
+
+ - We need a suite of unit tests and probably high-level tests, that enable
+   us to test parts of the file manager automatically and isolate bugs
+   early.
+
+ - Setup gtk-doc to present developers with the internal API of Thunar
+   to ease development of core modules (and later plugins).
+
+ - Write good user documentation. Must be both precise and complete.
+
+ - Design (UI design this time) the file properties dialog, develop
+   a software design and implement it.
+
+ - We need some easy way to manage diagrams and related developer
+   information, which also includes results from discussions on
+   thunar-dev.
+
+ - The HACKING file must be updated with strict rules about how
+   development of Thunar core modules is to be done, and what
+   material each developer in addition to the source code.
+

Added: desktop/trunk/thunar/branches/upstream/current/Thunar.desktop.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/Thunar.desktop.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/Thunar.desktop.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Encoding=UTF-8
+_Name=Thunar File Manager
+_Comment=Browse the filesystem with the file manager
+_GenericName=File Manager
+Exec=Thunar
+Icon=Thunar
+Terminal=false
+StartupNotify=true
+Type=Application
+Categories=Application;System;Utility;Core;
+
+# vi:set encoding=UTF-8:

Added: desktop/trunk/thunar/branches/upstream/current/aclocal.m4
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/aclocal.m4	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/aclocal.m4	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,8127 @@
+# generated automatically by aclocal 1.9.2 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file 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.
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 47 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+         [],
+         [m4_define([AC_PROVIDE_IFELSE],
+	         [m4_ifdef([AC_PROVIDE_$1],
+		           [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+  AC_PROVIDE_IFELSE([AC_PROG_CXX],
+    [AC_LIBTOOL_CXX],
+    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+  ])])
+dnl And a similar setup for Fortran 77 support
+  AC_PROVIDE_IFELSE([AC_PROG_F77],
+    [AC_LIBTOOL_F77],
+    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+    [AC_LIBTOOL_GCJ],
+    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+      [AC_LIBTOOL_GCJ],
+      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+	[AC_LIBTOOL_GCJ],
+      [ifdef([AC_PROG_GCJ],
+	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([A][M_PROG_GCJ],
+	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([LT_AC_PROG_GCJ],
+	     [define([LT_AC_PROG_GCJ],
+		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+    [AC_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+[$]*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+  ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$5], , :, [$5])
+else
+    ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                          [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+     else
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$4], , :, [$4])
+else
+    ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+   test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_AC_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         AC_MSG_RESULT([yes])
+       else
+  AC_MSG_RESULT([no])
+fi
+       ;;
+   *)
+  AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # find out which ABI we are using
+  libsuff=
+  case "$host_cpu" in
+  x86_64*|s390x*|powerpc64*)
+    echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+    if AC_TRY_EVAL(ac_compile); then
+      case `/usr/bin/file conftest.$ac_objext` in
+      *64-bit*)
+        libsuff=64
+        sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+        ;;
+      esac
+    fi
+    rm -rf conftest*
+    ;;
+  esac
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+        [include additional configurations @<:@automatic@:>@])],
+    [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    AC_MSG_WARN([output file `$ofile' does not exist])
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+    else
+      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+    "") ;;
+    *)  AC_MSG_ERROR([invalid tag name: $tagname])
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      AC_MSG_ERROR([tag name \"$tagname\" already exists])
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  AC_LIBTOOL_LANG_CXX_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+	  AC_LIBTOOL_LANG_F77_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+	  AC_LIBTOOL_LANG_GCJ_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+	AC_LIBTOOL_LANG_RC_CONFIG
+	;;
+
+      *)
+	AC_MSG_ERROR([Unsupported tag name: $tagname])
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+  fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  case $host_cpu in
+  alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*)
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!).  If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, lt_dlinit,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    LTDLINCL=
+  fi
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+    ;;
+  esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ 	]]" >/dev/null; then :
+  else
+    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+  [],
+  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+  AC_PROG_LD
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    _LT_AC_TAGVAR(archive_cmds, $1)=''
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	else
+	  # We have old collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      _LT_AC_SYS_LIBPATH_AIX
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	_LT_AC_SYS_LIBPATH_AIX
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	# Exported symbols can be pulled into shared objects from archives
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+    # as there is no search path for DLLs.
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+    _LT_AC_TAGVAR(always_export_symbols, $1)=no
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  freebsd[12]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  freebsd-elf*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    aCC)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+        ;;
+      ia64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        ;;
+      *)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+    ia64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+	;;
+    esac
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  sco*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	case $host_os in
+	  solaris2.[0-5] | solaris2.[0-5].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars.  Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    _LT_AC_TAGVAR(compiler, $1) \
+    _LT_AC_TAGVAR(CC, $1) \
+    _LT_AC_TAGVAR(LD, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+    _LT_AC_TAGVAR(old_archive_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+    _LT_AC_TAGVAR(predep_objects, $1) \
+    _LT_AC_TAGVAR(postdep_objects, $1) \
+    _LT_AC_TAGVAR(predeps, $1) \
+    _LT_AC_TAGVAR(postdeps, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(archive_cmds, $1) \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(postinstall_cmds, $1) \
+    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+    _LT_AC_TAGVAR(no_undefined_flag, $1) \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+    _LT_AC_TAGVAR(hardcode_automatic, $1) \
+    _LT_AC_TAGVAR(module_cmds, $1) \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(exclude_expsyms, $1) \
+    _LT_AC_TAGVAR(include_expsyms, $1); do
+
+    case $var in
+    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(module_cmds, $1) | \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\[$]0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+    ;;
+  esac
+
+ifelse([$1], [],
+  [cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  AC_MSG_NOTICE([creating $ofile])],
+  [cfgfile="$ofile"])
+
+  cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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.
+#
+# 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.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+])
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDRT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      ccc*)
+        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+],[
+  runpath_var=
+  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_AC_TAGVAR(archive_cmds, $1)=
+  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+  _LT_AC_TAGVAR(module_cmds, $1)=
+  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(always_export_symbols, $1)=no
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_AC_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=no
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
+      fi
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+      runpath_var=LD_RUN_PATH
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_AC_TAGVAR(archive_cmds, $1)=''
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  else
+  	  # We have old collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       _LT_AC_SYS_LIBPATH_AIX
+       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 _LT_AC_SYS_LIBPATH_AIX
+	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      # see comment about different semantics on the GNU ld section
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    bsdi4*)
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      case "$host_os" in
+      rhapsody* | darwin1.[[012]])
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+      ;;
+
+    dgux*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    openbsd*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	   ;;
+	 *)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+      esac
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv5*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_AC_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+  AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+])
+AC_MSG_RESULT([$SED])
+])
+
+#                                                        -*- Autoconf -*-
+# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# 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, 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
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+	 [AM_AUTOMAKE_VERSION([1.9.2])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 6
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# serial 7						-*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+#   Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 7
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# This macro actually does too much some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+	      		     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+#                                                          -*- Autoconf -*-
+# Copyright (C) 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 3
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+#  -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# serial 1
+
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+dnl $Id: xdt-depends.m4 2273 2005-01-31 19:38:09Z benny $
+dnl
+dnl Copyright (c) 2002-2005
+dnl         The Xfce development team. All rights reserved.
+dnl
+dnl Written for Xfce by Benedikt Meurer <benny at xfce.org>.
+dnl
+dnl xdt-depends
+dnl -----------
+dnl  Contains M4 macros to check for software dependencies.
+dnl  Partly based on prior work of the XDG contributors.
+dnl
+
+
+
+dnl We need recent a autoconf version
+AC_PREREQ([2.53])
+
+
+
+dnl XDT_PROG_PKG_CONFIG()
+dnl
+dnl Checks for the freedesktop.org pkg-config
+dnl utility and sets the PKG_CONFIG environment
+dnl variable to the full path if found.
+dnl
+AC_DEFUN([XDT_PROG_PKG_CONFIG],
+[
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    AC_PATH_PROG([PKG_CONFIG], [pkg-config], [no])
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    AC_MSG_CHECKING([for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION])
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      AC_MSG_RESULT([$xdt_cv_PKG_CONFIG_VERSION])
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      AC_MSG_RESULT([$xdt_cv_PKG_CONFIG_VERSION])
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+])
+
+
+
+dnl XDT_CHECK_PACKAGE(varname, package, version, [action-if], [action-if-not])
+dnl
+dnl Checks if "package" >= "version" is installed on the
+dnl target system, using the pkg-config utility. If the
+dnl dependency is met, "varname"_CFLAGS, "varname"_LIBS,
+dnl "varname"_VERSION and "varname"_REQUIRED_VERSION
+dnl will be set and marked for substition.
+dnl
+dnl "varname"_REQUIRED_VERSION will be set to the value of
+dnl "version". This is mostly useful to automatically
+dnl place the correct version information into the RPM
+dnl .spec file.
+dnl
+dnl In addition, if the dependency is met, "action-if" will
+dnl be executed if given.
+dnl
+dnl If the package check fails, "action-if-not" will be
+dnl executed. If this parameter isn't specified, a diagnostic
+dnl message will be printed and the configure script will
+dnl be terminated with exit code 1.
+dnl
+AC_DEFUN([XDT_CHECK_PACKAGE],
+[
+  XDT_PROG_PKG_CONFIG()
+
+  AC_MSG_CHECKING([for $2 >= $3])
+  if $PKG_CONFIG "--atleast-version=$3" "$2" >/dev/null 2>&1; then
+    $1_VERSION=`$PKG_CONFIG --modversion "$2"`
+    AC_MSG_RESULT([$$1_VERSION])
+
+    AC_MSG_CHECKING([$1_CFLAGS])
+    $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+    AC_MSG_RESULT([$$1_CFLAGS])
+
+    AC_MSG_CHECKING([$1_LIBS])
+    $1_LIBS=`$PKG_CONFIG --libs "$2"`
+    AC_MSG_RESULT([$$1_LIBS])
+
+    $1_REQUIRED_VERSION=$3
+
+    AC_SUBST([$1_VERSION])
+    AC_SUBST([$1_CFLAGS])
+    AC_SUBST([$1_LIBS])
+    AC_SUBST([$1_REQUIRED_VERSION])
+
+    ifelse([$4], , , [$4])
+  elif $PKG_CONFIG --exists "$2" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "$2"`
+    AC_MSG_RESULT([found, but $xdt_cv_version])
+
+    ifelse([$5], ,
+    [
+      echo "*** The required package $2 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade $2 to atleast version $3, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+    ], [$5])
+  else
+    AC_MSG_RESULT([not found])
+
+    ifelse([$5], ,
+    [
+      echo "*** The required package $2 was not found on your system."
+      echo "*** Please install $2 (atleast version $3) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+    ], [$5])
+  fi
+])
+
+
+
+dnl XDT_CHECK_OPTIONAL_PACKAGE(varname, package, version, optionname, helpstring, [default])
+dnl
+dnl Checks for an optional dependency on "package" >= "version". "default"
+dnl can be "yes" or "no" (defaults to "yes" if not specified) and controls
+dnl whether configure should check this dependency by default, or only if
+dnl the user explicitly enables it using a command line switch.
+dnl
+dnl This macro automatically adds a commandline switch based on the "optionname"
+dnl parameter (--enable-optionname/--disable-optionname), which allows the
+dnl user to explicitly control whether this optional dependency should be
+dnl enabled or not. The "helpstring" parameter gives a brief(!) description
+dnl about this dependency.
+dnl
+dnl If the user chose to enable this dependency and the required package
+dnl was found, this macro defines the variable "varname"_FOUND and sets it
+dnl to the string "yes", in addition to the 4 variables set by XDT_CHECK_PACKAGE.
+dnl But "varname"_FOUND will not be marked for substition. Furthermore,
+dnl a CPP define HAVE_"varname" will be placed in config.h (or added to
+dnl the cc command line, depending on your configure.ac) and set to
+dnl 1.
+dnl
+AC_DEFUN([XDT_CHECK_OPTIONAL_PACKAGE],
+[
+  AC_REQUIRE([XDT_PROG_PKG_CONFIG])
+
+  AC_ARG_ENABLE([$4],
+AC_HELP_STRING([--enable-$4], [Enable checking for $5 (default=m4_default([$6], [yes]))])
+AC_HELP_STRING([--disable-$4], [Disable checking for $5]),
+    [xdt_cv_$1_check=$enableval], [xdt_cv_$1_check=m4_default([$6], [yes])])
+
+  if test x"$xdt_cv_$1_check" = x"yes"; then
+    if $PKG_CONFIG --exists "$2 >= $3" >/dev/null 2>&1; then
+      XDT_CHECK_PACKAGE([$1], [$2], [$3],
+      [
+        AC_DEFINE([HAVE_$1], [1], [Define if $2 >= $3 present])
+        $1_FOUND="yes"
+      ])
+    else
+      AC_MSG_CHECKING([for optional package $2 >= $3])
+      AC_MSG_RESULT([not found])
+    fi
+  else
+    AC_MSG_CHECKING([for optional package $2])
+    AC_MSG_RESULT([disabled])
+  fi
+
+  AM_CONDITIONAL([HAVE_$1], [test x"$$1_FOUND" = x"yes"])
+])
+
+
+
+dnl BM_DEPEND(varname, package, version)
+dnl
+dnl Simple wrapper for XDT_CHECK_PACKAGE("varname", "package", "version"). Kept
+dnl for backward compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_DEPEND],
+[
+  XDT_CHECK_PACKAGE([$1], [$2], [$3])
+])
+
+
+
+dnl BM_DEPEND_CHECK(var, pkg, version, name, helpstring, default)
+dnl
+dnl Simple wrapper for XDT_CHECK_OPTIONAL_PACKAGE(). Kept for backward
+dnl compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_DEPEND_CHECK],
+[
+  XDT_CHECK_OPTIONAL_PACKAGE([$1], [$2], [$3], [$4], [$5], [$6])
+])
+
+
+
+dnl XDT_CHECK_LIBX11()
+dnl
+dnl Executes various checks for X11. Sets LIBX11_CFLAGS, LIBX11_LDFLAGS
+dnl and LIBX11_LIBS (and marks them for substitution). In addition
+dnl HAVE_LIBX11 is set to 1 in config.h, if the X window system and
+dnl the development files are detected on the target system.
+dnl
+AC_DEFUN([XDT_CHECK_LIBX11],
+[
+  AC_REQUIRE([AC_PATH_XTRA])
+
+  LIBX11_CFLAGS= LIBX11_LDFLAGS= LIBX11_LIBS=
+  if test x"$no_x" != x"yes"; then
+    AC_CHECK_LIB([X11], [main],
+    [
+      AC_DEFINE([HAVE_LIBX11], [1], [Define if libX11 is available])
+      LIBX11_CFLAGS="$X_CFLAGS"
+      for option in $X_PRE_LIBS $X_EXTRA_LIBS $X_LIBS; do
+      	case "$option" in
+        -L*)
+          path=`echo $option | sed 's/^-L//'`
+          if test x"$path" != x""; then
+            LIBX11_LDFLAGS="$LIBX11_LDFLAGS -L$path"
+          fi
+          ;;
+        *)
+          LIBX11_LIBS="$LIBX11_LIBS $option"
+          ;;
+        esac
+      done
+      if ! echo $LIBX11_LIBS | grep -- '-lX11' >/dev/null; then
+        LIBX11_LIBS="$LIBX11_LIBS -lX11"
+      fi
+    ], [], [$X_CFLAGS $X_PRE_LIBS $X_EXTRA_LIBS $X_LIBS])
+  fi
+  AC_SUBST([LIBX11_CFLAGS])
+  AC_SUBST([LIBX11_LDFLAGS])
+  AC_SUBST([LIBX11_LIBS])
+])
+
+
+
+dnl XDT_CHECK_LIBX11_REQUIRE()
+dnl
+dnl Similar to XDT_CHECK_LIBX11(), but terminates with an error if
+dnl the X window system and development files aren't detected on the
+dnl target system.
+dnl
+AC_DEFUN([XDT_CHECK_LIBX11_REQUIRE],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11])
+  
+  if test x"$no_x" = x"yes"; then
+    AC_MSG_ERROR([X Window system libraries and header files are required])
+  fi
+])
+
+
+
+dnl XDT_CHECK_LIBSM()
+dnl
+dnl Checks whether the session management library is present on the
+dnl target system, and sets LIBSM_CFLAGS, LIBSM_LDFLAGS and LIBSM_LIBS
+dnl properly. In addition, HAVE_LIBSM will be set to 1 in config.h
+dnl if libSM is detected.
+dnl
+AC_DEFUN([XDT_CHECK_LIBSM],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11])
+
+  LIBSM_CFLAGS= LIBSM_LDFLAGS= LIBSM_LIBS=
+  if test x"$no_x" != x"yes"; then
+    AC_CHECK_LIB([SM], [SmcSaveYourselfDone],
+    [
+      AC_DEFINE([HAVE_LIBSM], [1], [Define if libSM is available])
+      LIBSM_CFLAGS="$LIBX11_CFLAGS"
+      LIBSM_LDFLAGS="$LIBX11_LDFLAGS"
+      LIBSM_LIBS="$LIBX11_LIBS"
+      if ! echo $LIBSM_LIBS | grep -- '-lSM' >/dev/null; then
+        LIBSM_LIBS="$LIBSM_LIBS -lSM -lICE"
+      fi
+    ], [], [$LIBX11_CFLAGS $LIBX11_LDFLAGS $LIBX11_LIBS -lICE])
+  fi
+  AC_SUBST([LIBSM_CFLAGS])
+  AC_SUBST([LIBSM_LDFLAGS])
+  AC_SUBST([LIBSM_LIBS])
+])
+
+
+
+dnl XDT_CHECK_LIBXPM()
+dnl
+dnl Checks if the Xpm library is present on the target system, and
+dnl sets LIBXPM_CFLAGS, LIBXPM_LDFLAGS and LIBXPM_LIBS. In addition,
+dnl HAVE_LIBXPM will be set to 1 in config.h if libXpm is detected.
+dnl
+AC_DEFUN([XDT_CHECK_LIBXPM],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11])
+
+  LIBXPM_CFLAGS= LIBXPM_LDFLAGS= LIBXPM_LIBS=
+  if test "$no_x" != "yes"; then
+    AC_CHECK_LIB([Xpm], [main],
+    [
+      AC_DEFINE([HAVE_LIBXPM], [1], [Define if libXpm is available])
+      LIBXPM_CFLAGS="$LIBX11_CFLAGS"
+      LIBXPM_LDFLAGS="$LIBX11_LDFLAGS"
+      LIBXPM_LIBS="$LIBX11_LIBS"
+      if ! echo $LIBXPM_LIBS | grep -- '-lXpm' >/dev/null; then
+        LIBXPM_LIBS="$LIBXPM_LIBS -lXpm"
+      fi
+    ], [], [$LIBX11_CFLAGS $LIBX11_LDFLAGS $LIBX11_LIBS -lXpm])
+  fi
+  AC_SUBST([LIBXPM_CFLAGS])
+  AC_SUBST([LIBXPM_LDFLAGS])
+  AC_SUBST([LIBXPM_LIBS])
+])
+
+
+
+dnl XDT_CHECK_LIBXPM_REQUIRE()
+dnl
+dnl Similar to XDT_CHECK_LIBXPM(), but fails if the Xpm library isn't
+dnl present on the target system.
+dnl
+AC_DEFUN([XDT_CHECK_LIBXPM_REQUIRE],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11_REQUIRE])
+  AC_REQUIRE([XDT_CHECK_LIBXPM])
+
+  if test x"$LIBXPM_LIBS" = x""; then
+    AC_MSG_ERROR([The Xpm library was not found on your system])
+  fi
+])
+
+
+
+dnl BM_LIBX11()
+dnl
+dnl Simple wrapper for XDT_CHECK_LIBX11. Kept for backward
+dnl compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_LIBX11],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11])
+])
+
+
+
+dnl BM_LIBX11_REQUIRE()
+dnl
+dnl Simple wrapper for XDT_CHECK_LIBX11_REQUIRE. Kept for backward
+dnl compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_LIBX11_REQUIRE],
+[
+  AC_REQUIRE([XDT_CHECK_LIBX11_REQUIRE])
+])
+
+
+
+dnl BM_LIBSM()
+dnl
+dnl Simple wrapper for XDT_CHECK_LIBSM. Kept for backward
+dnl compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_LIBSM],
+[
+  AC_REQUIRE([XDT_CHECK_LIBSM])
+])
+
+
+
+dnl BM_LIBXPM
+dnl
+dnl Simple wrapper for XDT_CHECK_LIBXPM. Kept for backward
+dnl compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_LIBXPM],
+[
+  AC_REQUIRE([XDT_CHECK_LIBXPM])
+])
+
+
+
+dnl BM_LIBXPM_REQUIRE
+dnl
+dnl Simple wrapper for XDT_CHECK_LIBXPM_REQUIRE. Kept for
+dnl backward compatibility. Will be removed in the future.
+dnl
+AC_DEFUN([BM_LIBXPM_REQUIRE],
+[
+  AC_REQUIRE([XDT_CHECK_LIBXPM_REQUIRE])
+])
+
+
+dnl $Id: xdt-i18n.m4 2278 2005-03-08 15:23:49Z benny $
+dnl
+dnl Copyright (c) 2002-2005
+dnl         The Xfce development team. All rights reserved.
+dnl
+dnl Written for Xfce by Benedikt Meurer <benny at xfce.org>.
+dnl
+dnl xdt-i18n
+dnl --------
+dnl  Internalization M4 macros.
+dnl
+
+
+dnl XDT_I18N(LINGUAS [, PACKAGE])
+dnl
+dnl This macro takes care of setting up everything for i18n support.
+dnl
+dnl If PACKAGE isn't specified, it defaults to the package tarname; see
+dnl the description of AC_INIT() for an explanation of what makes up
+dnl the package tarname. Normally, you don't need to specify PACKAGE,
+dnl but you can stick with the default.
+dnl
+AC_DEFUN([XDT_I18N],
+[
+  dnl Substitute GETTEXT_PACKAGE variable
+  GETTEXT_PACKAGE=m4_default([$2], [AC_PACKAGE_TARNAME()])
+  AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Name of default gettext domain])
+  AC_SUBST([GETTEXT_PACKAGE])
+
+  dnl gettext and stuff
+  ALL_LINGUAS="$1"
+  AM_GLIB_GNU_GETTEXT()
+
+  dnl This is required on some Linux systems
+  AC_CHECK_FUNC([bind_textdomain_codeset])
+
+  dnl Determine where to install locale files
+  AC_MSG_CHECKING([for locales directory])
+  AC_ARG_WITH([locales-dir], 
+  [
+    AC_HELP_STRING([--with-locales-dir=DIR], [Install locales into DIR])
+  ], [localedir=$withval],
+  [
+    if test x"$CATOBJEXT" = x".mo"; then
+      localedir=$libdir/locale
+    else
+      localedir=$datadir/locale
+    fi
+  ])
+  AC_MSG_RESULT([$localedir])
+  AC_SUBST([localedir])
+
+  dnl Determine additional xgettext flags
+  AC_MSG_CHECKING([for additional xgettext flags])
+  if test x"$XGETTEXT_ARGS" = x""; then
+    XGETTEXT_ARGS="--keyword=Q_";
+  else
+    XGETTEXT_ARGS="$XGETTEXT_ARGS --keyword=Q_";
+  fi
+  AC_SUBST([XGETTEXT_ARGS])
+  AC_MSG_RESULT([$XGETTEXT_ARGS])
+])
+
+
+
+dnl BM_I18N(PACKAGE, LINGUAS)
+dnl
+dnl Simple wrapper for XDT_I18N(LINGUAS, PACKAGE). Kept for
+dnl backward compatibility. Will be removed in the
+dnl future.
+dnl
+AC_DEFUN([BM_I18N],
+[
+  XDT_I18N([$2], [$1])
+])
+
+
+# Copyright (C) 1995-2002 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003 Red Hat, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# This file can 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.
+#
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper at cygnus.com>, 1995, 1996
+#
+# Modified to never use included libintl. 
+# Owen Taylor <otaylor at redhat.com>, 12/15/1998
+#
+# Major rework to remove unused code
+# Owen Taylor <otaylor at redhat.com>, 12/11/2002
+#
+# Added better handling of ALL_LINGUAS from GNU gettext version 
+# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
+
+#
+# We need this here as well, since someone might use autoconf-2.5x
+# to configure GLib then an older version to configure a package
+# using AM_GLIB_GNU_GETTEXT
+AC_PREREQ(2.53)
+
+dnl
+dnl We go to great lengths to make sure that aclocal won't 
+dnl try to pull in the installed version of these macros
+dnl when running aclocal in the glib directory.
+dnl
+m4_copy([AC_DEFUN],[glib_DEFUN])
+m4_copy([AC_REQUIRE],[glib_REQUIRE])
+dnl
+dnl At the end, if we're not within glib, we'll define the public
+dnl definitions in terms of our private definitions.
+dnl
+
+# GLIB_LC_MESSAGES
+#--------------------
+glib_DEFUN([GLIB_LC_MESSAGES],
+  [AC_CHECK_HEADERS([locale.h])
+    if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# GLIB_PATH_PROG_WITH_TEST
+#----------------------------
+dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+	ac_cv_path_$1="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# GLIB_WITH_NLS
+#-----------------
+glib_DEFUN([GLIB_WITH_NLS],
+  dnl NLS is obligatory
+  [USE_NLS=yes
+    AC_SUBST(USE_NLS)
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    AC_CHECK_HEADER(libintl.h,
+     [gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
+        [AC_TRY_LINK([
+#include <libintl.h>
+],
+          [return (int) dgettext ("","")],
+	  gt_cv_func_dgettext_libc=yes,
+          gt_cv_func_dgettext_libc=no)
+        ])
+  
+      if test "$gt_cv_func_dgettext_libc" = "yes" ; then
+        AC_CHECK_FUNCS(bind_textdomain_codeset)
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+        
+        AC_CHECK_LIB(intl, bindtextdomain,
+	    [AC_CHECK_LIB(intl, dgettext,
+		          gt_cv_func_dgettext_libintl=yes)])
+
+	if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+	  AC_MSG_CHECKING([if -liconv is needed to use gettext])
+	  AC_MSG_RESULT([])
+          AC_CHECK_LIB(intl, dcgettext,
+		       [gt_cv_func_dgettext_libintl=yes
+			libintl_extra_libs=-liconv],
+			:,-liconv)
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+          AC_CHECK_FUNCS(bind_textdomain_codeset)
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+	|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+  
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+  
+      if test "$gt_cv_have_gettext" = "yes"; then
+	AC_DEFINE(HAVE_GETTEXT,1,
+	  [Define if the GNU gettext() function is already present or preinstalled.])
+	GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+	if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+	  AC_CHECK_FUNCS(dcgettext)
+	  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+	  GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+	    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+	  AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
+			 return _nl_msg_cat_cntr],
+	    [CATOBJEXT=.gmo 
+             DATADIRNAME=share],
+	    [case $host in
+	    *-*-solaris*)
+	    dnl On Solaris, if bind_textdomain_codeset is in libc,
+	    dnl GNU format message catalog is always supported,
+            dnl since both are added to the libc all together.
+	    dnl Hence, we'd like to go with DATADIRNAME=share and
+	    dnl and CATOBJEXT=.gmo in this case.
+            AC_CHECK_FUNC(bind_textdomain_codeset,
+	      [CATOBJEXT=.gmo 
+               DATADIRNAME=share],
+	      [CATOBJEXT=.mo
+               DATADIRNAME=lib])
+	    ;;
+	    *)
+	    CATOBJEXT=.mo
+            DATADIRNAME=lib
+	    ;;
+	    esac])
+          LIBS="$glib_save_LIBS"
+	  INSTOBJEXT=.mo
+	else
+	  gt_cv_have_gettext=no
+	fi
+      fi
+    ])
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [always defined to indicate that i18n is enabled])
+    fi
+
+    dnl Test whether we really found GNU xgettext.
+    if test "$XGETTEXT" != ":"; then
+      dnl If it is not GNU xgettext we define it as : so that the
+      dnl Makefiles still can work.
+      if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+        : ;
+      else
+        AC_MSG_RESULT(
+	  [found xgettext program is not GNU xgettext; ignore it])
+        XGETTEXT=":"
+      fi
+    fi
+
+    # We need to process the po/ directory.
+    POSUB=po
+
+    AC_OUTPUT_COMMANDS(
+      [case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac])
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(PO_IN_DATADIR_TRUE)
+    AC_SUBST(PO_IN_DATADIR_FALSE)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+# AM_GLIB_GNU_GETTEXT
+# -------------------
+# Do checks necessary for use of gettext. If a suitable implementation 
+# of gettext is found in either in libintl or in the C library,
+# it will set INTLLIBS to the libraries needed for use of gettext
+# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
+# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
+# on various variables needed by the Makefile.in.in installed by 
+# glib-gettextize.
+dnl
+glib_DEFUN([GLIB_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   
+   GLIB_LC_MESSAGES
+   GLIB_WITH_NLS
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+ 	   # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Generate list of files to be processed by xgettext which will
+   dnl be included in po/Makefile.
+   test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+	< $srcdir/po/POTFILES.in > po/POTFILES
+  ])
+
+# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
+# -------------------------------
+# Define VARIABLE to the location where catalog files will
+# be installed by po/Makefile.
+glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
+[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
+glib_save_prefix="$prefix"
+glib_save_exec_prefix="$exec_prefix"
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+if test "x$CATOBJEXT" = "x.mo" ; then
+  localedir=`eval echo "${libdir}/locale"`
+else
+  localedir=`eval echo "${datadir}/locale"`
+fi
+prefix="$glib_save_prefix"
+exec_prefix="$glib_save_exec_prefix"
+AC_DEFINE_UNQUOTED($1, "$localedir",
+  [Define the location where the catalogs will be installed])
+])
+
+dnl
+dnl Now the definitions that aclocal will find
+dnl
+ifdef(glib_configure_in,[],[
+AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
+AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
+])dnl
+
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH(html-dir,
+    AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST(HTML_DIR)
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE(gtk-doc,
+    AC_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [default=no]]),,
+    enable_gtk_doc=no)
+
+  have_gtk_doc=no
+  if test x$enable_gtk_doc = xyes; then
+    if test -z "$PKG_CONFIG"; then
+      AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+    fi
+    if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
+      have_gtk_doc=yes
+    fi
+
+  dnl do we want to do a version check?
+ifelse([$1],[],,
+    [gtk_doc_min_version=$1
+    if test "$have_gtk_doc" = yes; then
+      AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
+      if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
+        AC_MSG_RESULT(yes)
+      else
+        AC_MSG_RESULT(no)
+        have_gtk_doc=no
+      fi
+    fi
+])
+    if test "$have_gtk_doc" != yes; then
+      enable_gtk_doc=no
+    fi
+  fi
+
+  AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
+  AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
+])
+
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 2 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL],
+[
+
+if test -n "$1"; then
+    AC_MSG_CHECKING(for intltool >= $1)
+
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ printf "%d", $[1] * 100 + $[2]; }'`
+    INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $[2]; }'  < ${ac_aux_dir}/intltool-update.in`
+    changequote({{,}})
+    INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split(${{2}}, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in`
+    changequote([,])
+
+    if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then
+	AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+    else
+	AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found. Your intltool is too old.  You need intltool $1 or later.])
+	exit 1
+    fi
+fi
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' 
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+
+AC_SUBST(INTLTOOL_DESKTOP_RULE)
+AC_SUBST(INTLTOOL_DIRECTORY_RULE)
+AC_SUBST(INTLTOOL_KEYS_RULE)
+AC_SUBST(INTLTOOL_PROP_RULE)
+AC_SUBST(INTLTOOL_OAF_RULE)
+AC_SUBST(INTLTOOL_PONG_RULE)
+AC_SUBST(INTLTOOL_SERVER_RULE)
+AC_SUBST(INTLTOOL_SHEET_RULE)
+AC_SUBST(INTLTOOL_SOUNDLIST_RULE)
+AC_SUBST(INTLTOOL_UI_RULE)
+AC_SUBST(INTLTOOL_XAM_RULE)
+AC_SUBST(INTLTOOL_KBD_RULE)
+AC_SUBST(INTLTOOL_XML_RULE)
+AC_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+AC_SUBST(INTLTOOL_CAVES_RULE)
+AC_SUBST(INTLTOOL_SCHEMAS_RULE)
+AC_SUBST(INTLTOOL_THEME_RULE)
+
+# Use the tools built into the package, not the ones that are installed.
+
+INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract'
+INTLTOOL_MERGE='$(top_builddir)/intltool-merge'
+INTLTOOL_UPDATE='$(top_builddir)/intltool-update'
+
+AC_SUBST(INTLTOOL_EXTRACT)
+AC_SUBST(INTLTOOL_MERGE)
+AC_SUBST(INTLTOOL_UPDATE)
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+   AC_MSG_ERROR([perl not found; required for intltool])
+fi
+if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then
+   AC_MSG_ERROR([perl 5.x required for intltool])
+fi
+if test "x$2" != "xno-xml"; then
+   AC_MSG_CHECKING([for XML::Parser])
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       AC_MSG_RESULT([ok])
+   else
+       AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+   fi
+fi
+
+AC_PATH_PROG(INTLTOOL_ICONV, iconv, iconv)
+AC_PATH_PROG(INTLTOOL_MSGFMT, msgfmt, msgfmt)
+AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge)
+AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext)
+
+# Remove file type tags (using []) from po/POTFILES.
+
+ifdef([AC_DIVERSION_ICMDS],[
+  AC_DIVERT_PUSH(AC_DIVERSION_ICMDS)
+      changequote(,)
+      mv -f po/POTFILES po/POTFILES.tmp
+      sed -e '/\[encoding.*\]/d' -e 's/\[.*\] *//' < po/POTFILES.tmp > po/POTFILES
+      rm -f po/POTFILES.tmp
+      changequote([,])
+  AC_DIVERT_POP()
+],[
+  ifdef([AC_CONFIG_COMMANDS_PRE],[
+    AC_CONFIG_COMMANDS_PRE([
+        changequote(,)
+        mv -f po/POTFILES po/POTFILES.tmp
+        sed -e '/\[encoding.*\]/d' -e 's/\[.*\] *//' < po/POTFILES.tmp > po/POTFILES
+        rm -f po/POTFILES.tmp
+        changequote([,])
+    ])
+  ])
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])
+])
+
+# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT.
+
+AC_CONFIG_COMMANDS([intltool], [
+
+intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \
+               -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \
+               -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \
+               -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \
+               -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \
+               -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'"
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \
+  > intltool-extract.out
+if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then
+  rm -f intltool-extract.out
+else
+  mv -f intltool-extract.out intltool-extract
+fi
+chmod ugo+x intltool-extract
+chmod u+w intltool-extract
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \
+  > intltool-merge.out
+if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then
+  rm -f intltool-merge.out
+else
+  mv -f intltool-merge.out intltool-merge
+fi
+chmod ugo+x intltool-merge
+chmod u+w intltool-merge
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \
+  > intltool-update.out
+if cmp -s intltool-update intltool-update.out 2>/dev/null; then
+  rm -f intltool-update.out
+else
+  mv -f intltool-update.out intltool-update
+fi
+chmod ugo+x intltool-update
+chmod u+w intltool-update
+
+], INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir}
+INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}'
+MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}'
+XGETTEXT='${INTLTOOL_XGETTEXT}')
+
+])
+
+# deprecated macros
+AC_DEFUN([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL($@)])
+
+

Added: desktop/trunk/thunar/branches/upstream/current/compile
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/compile	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/compile	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,140 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2004-09-10.20
+
+# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.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, 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.
+
+# 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.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit 0
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit 0
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as `compile cc -o foo foo.c'.
+	# So we strip `-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/compile
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/config.guess
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/config.guess	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/config.guess	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1459 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
+# This file 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.
+#
+# 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.
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pegasos:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/config.guess
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/config.h.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/config.h.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/config.h.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,246 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* always defined to indicate that i18n is enabled */
+#undef ENABLE_NLS
+
+/* Name of default gettext domain */
+#undef GETTEXT_PACKAGE
+
+/* Define to 1 if you have the `attropen' function. */
+#undef HAVE_ATTROPEN
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define if cairo >= 0.5 present */
+#undef HAVE_CAIRO
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the `dcgettext' function. */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the `extattr_get_fd' function. */
+#undef HAVE_EXTATTR_GET_FD
+
+/* Define to 1 if you have the `FAMNoExists' function. */
+#undef HAVE_FAMNOEXISTS
+
+/* Define to 1 if you have the <fam.h> header file. */
+#undef HAVE_FAM_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fgetxattr' function. */
+#undef HAVE_FGETXATTR
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the <fstab.h> header file. */
+#undef HAVE_FSTAB_H
+
+/* Define if gconf-2.0 >= 2.4.0 present */
+#undef HAVE_GCONF
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the <grp.h> header file. */
+#undef HAVE_GRP_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if jpeglib.h is found */
+#undef HAVE_JPEGLIB_H
+
+/* Define to 1 if you have the `lchmod' function. */
+#undef HAVE_LCHMOD
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if the File Alteration Monitor is available. */
+#undef HAVE_LIBFAM
+
+/* Define to 1 if libjpeg is found */
+#undef HAVE_LIBJPEG
+
+/* Define if libstartup-notification-1.0 >= 0.4 present */
+#undef HAVE_LIBSTARTUP_NOTIFICATION
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the <mmintrin.h> header file. */
+#undef HAVE_MMINTRIN_H
+
+/* Define if posix_madvise is working */
+#undef HAVE_POSIX_MADVISE
+
+/* Define to 1 if you have the `pread' function. */
+#undef HAVE_PREAD
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the `pwrite' function. */
+#undef HAVE_PWRITE
+
+/* Define to 1 if you have the `readdir_r' function. */
+#undef HAVE_READDIR_R
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if you have the `setgroupent' function. */
+#undef HAVE_SETGROUPENT
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#undef HAVE_SETJMP_H
+
+/* Define to 1 if you have the `setpassent' function. */
+#undef HAVE_SETPASSENT
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+#undef HAVE_SYS_CDIO_H
+
+/* Define to 1 if you have the <sys/extattr.h> header file. */
+#undef HAVE_SYS_EXTATTR_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <sys/xattr.h> header file. */
+#undef HAVE_SYS_XATTR_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of a `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of a `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE

Added: desktop/trunk/thunar/branches/upstream/current/config.sub
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/config.sub	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/config.sub	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1549 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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.
+
+# 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.
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/config.sub
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/configure
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/configure	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/configure	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,28719 @@
+#! /bin/sh
+# From configure.in Id: configure.in.in 18846 2005-11-14 17:33:30Z benny .
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for Thunar 0.1.4pre-alpha-r18850.
+#
+# Report bugs to <benny at xfce.org>.
+#
+# Copyright (c) 2004-2005
+#         The Thunar development team. All rights reserved.
+#
+# Written for Thunar by Benedikt Meurer <benny at xfce.org>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=${tagnames+${tagnames},}CXX
+
+tagnames=${tagnames+${tagnames},}F77
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='Thunar'
+PACKAGE_TARNAME='Thunar'
+PACKAGE_VERSION='0.1.4pre-alpha-r18850'
+PACKAGE_STRING='Thunar 0.1.4pre-alpha-r18850'
+PACKAGE_BUGREPORT='benny at xfce.org'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_PROP_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XAM_RULE INTLTOOL_KBD_RULE INTLTOOL_XML_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_CAVES_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_THEME_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL INTLTOOL_ICONV INTLTOOL_MSGFMT INTLTOOL_MSGMERGE INTLTOOL_XGETTEXT PERL LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL THUNAR_VERINFO THUNAR_VERSION_API THUNAR_VERSION_MAJOR THUNAR_VERSION_MINOR THUNAR_VERSION_MICRO TDB_U32_TYPE GETTEXT_PACKAGE USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLLIBS PO_IN_DATADIR_TRUE PO_IN_DATADIR_FALSE POFILES POSUB MKINSTALLDIRS localedir XGETTEXT_ARGS PKG_CONFIG EXO_VERSION EXO_CFLAGS EXO_LIBS EXO_REQUIRED_VERSION GLIB_VERSION GLIB_CFLAGS GLIB_LIBS GLIB_REQUIRED_VERSION GTHREAD_VERSION GTHREAD_CFLAGS GTHREAD_LIBS GTHREAD_REQUIRED_VERSION GTK_VERSION GTK_CFLAGS GTK_LIBS GTK_REQUIRED_VERSION LIBPNG_VERSION LIBPNG_CFLAGS LIBPNG_LIBS LIBPNG_REQUIRED_VERSION CAIRO_VERSION CAIRO_CFLAGS CAIRO_LIBS CAIRO_REQUIRED_VERSION HAVE_CAIRO_TRUE HAVE_CAIRO_FALSE GCONF_VERSION GCONF_CFLAGS GCONF_LIBS GCONF_REQUIRED_VERSION HAVE_GCONF_TRUE HAVE_GCONF_FALSE LIBSTARTUP_NOTIFICATION_VERSION LIBSTARTUP_NOTIFICATION_CFLAGS LIBSTARTUP_NOTIFICATION_LIBS LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION HAVE_LIBSTARTUP_NOTIFICATION_TRUE HAVE_LIBSTARTUP_NOTIFICATION_FALSE LIBJPEG_CFLAGS LIBJPEG_LIBS HTML_DIR ENABLE_GTK_DOC_TRUE ENABLE_GTK_DOC_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_USE_LIBTOOL_FALSE LIBFAM_VERSION LIBFAM_CFLAGS LIBFAM_LIBS LIBFAM_REQUIRED_VERSION HAVE_GNUC_VISIBILITY_TRUE HAVE_GNUC_VISIBILITY_FALSE PLATFORM_CFLAGS PLATFORM_CPPFLAGS PLATFORM_LDFLAGS LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures Thunar 0.1.4pre-alpha-r18850 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of Thunar 0.1.4pre-alpha-r18850:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-static[=PKGS]
+                          build static libraries [default=no]
+  --enable-shared[=PKGS]
+                          build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-cairo          Enable checking for Cairo (default=yes)
+  --disable-cairo         Disable checking for Cairo
+  --enable-gnome-thumbnailers
+                          Enable checking for GNOME thumbnailer support
+                          (default=yes)
+  --disable-gnome-thumbnailers
+                          Disable checking for GNOME thumbnailer support
+  --enable-startup-notification
+                          Enable checking for startup notification library
+                          (default=yes)
+  --disable-startup-notification
+                          Disable checking for startup notification library
+  --enable-gtk-doc        use gtk-doc to build documentation default=no
+  --disable-debug         Disable debugging support
+  --disable-visibility    Don't use ELF visibility attributes
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-tags[=TAGS]
+                          include additional configurations [automatic]
+
+      --with-locales-dir=DIR  Install locales into DIR
+
+  --with-html-dir=PATH    path to installed docs
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <benny at xfce.org>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+Thunar configure 0.1.4pre-alpha-r18850
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+
+Copyright (c) 2004-2005
+        The Thunar development team. All rights reserved.
+
+Written for Thunar by Benedikt Meurer <benny at xfce.org>.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Thunar $as_me 0.1.4pre-alpha-r18850, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_target_alias=$target_alias
+test "x$ac_cv_target_alias" = "x" &&
+  ac_cv_target_alias=$ac_cv_host_alias
+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6
+target=$ac_cv_target
+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+am__api_version="1.9"
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=Thunar
+ VERSION=0.1.4pre-alpha-r18850
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval="$enable_maintainer_mode"
+  USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi;
+  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+
+echo "$as_me:$LINENO: checking for AIX" >&5
+echo $ECHO_N "checking for AIX... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef _AIX
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest*
+
+
+echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
+if test "${ac_cv_search_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+ac_cv_search_strerror=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_strerror="none required"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_strerror" = no; then
+  for ac_lib in cposix; do
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_search_strerror="-l$ac_lib"
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6
+if test "$ac_cv_search_strerror" != no; then
+  test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+
+fi
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <minix/config.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <minix/config.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+
+fi
+if test $ac_cv_header_minix_config_h = yes; then
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+
+fi
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+
+if test -n ""; then
+    echo "$as_me:$LINENO: checking for intltool >= " >&5
+echo $ECHO_N "checking for intltool >= ... $ECHO_C" >&6
+
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo  | awk -F. '{ printf "%d", $1 * 100 + $2; }'`
+    INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $2; }'  < ${ac_aux_dir}/intltool-update.in`
+
+    INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($2, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in`
+
+
+    if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then
+	echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found" >&5
+echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found" >&6
+    else
+	echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found. Your intltool is too old.  You need intltool  or later." >&5
+echo "${ECHO_T}$INTLTOOL_APPLIED_VERSION found. Your intltool is too old.  You need intltool  or later." >&6
+	exit 1
+    fi
+fi
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@'
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Use the tools built into the package, not the ones that are installed.
+
+INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract'
+INTLTOOL_MERGE='$(top_builddir)/intltool-merge'
+INTLTOOL_UPDATE='$(top_builddir)/intltool-update'
+
+
+
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INTLTOOL_PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  ;;
+esac
+fi
+INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
+
+if test -n "$INTLTOOL_PERL"; then
+  echo "$as_me:$LINENO: result: $INTLTOOL_PERL" >&5
+echo "${ECHO_T}$INTLTOOL_PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$INTLTOOL_PERL"; then
+   { { echo "$as_me:$LINENO: error: perl not found; required for intltool" >&5
+echo "$as_me: error: perl not found; required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then
+   { { echo "$as_me:$LINENO: error: perl 5.x required for intltool" >&5
+echo "$as_me: error: perl 5.x required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test "x" != "xno-xml"; then
+   echo "$as_me:$LINENO: checking for XML::Parser" >&5
+echo $ECHO_N "checking for XML::Parser... $ECHO_C" >&6
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+   else
+       { { echo "$as_me:$LINENO: error: XML::Parser perl module is required for intltool" >&5
+echo "$as_me: error: XML::Parser perl module is required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+fi
+
+# Extract the first word of "iconv", so it can be a program name with args.
+set dummy iconv; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INTLTOOL_ICONV+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INTLTOOL_ICONV in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_ICONV="$INTLTOOL_ICONV" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_ICONV="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_INTLTOOL_ICONV" && ac_cv_path_INTLTOOL_ICONV="iconv"
+  ;;
+esac
+fi
+INTLTOOL_ICONV=$ac_cv_path_INTLTOOL_ICONV
+
+if test -n "$INTLTOOL_ICONV"; then
+  echo "$as_me:$LINENO: result: $INTLTOOL_ICONV" >&5
+echo "${ECHO_T}$INTLTOOL_ICONV" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INTLTOOL_MSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INTLTOOL_MSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_MSGFMT="$INTLTOOL_MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_INTLTOOL_MSGFMT" && ac_cv_path_INTLTOOL_MSGFMT="msgfmt"
+  ;;
+esac
+fi
+INTLTOOL_MSGFMT=$ac_cv_path_INTLTOOL_MSGFMT
+
+if test -n "$INTLTOOL_MSGFMT"; then
+  echo "$as_me:$LINENO: result: $INTLTOOL_MSGFMT" >&5
+echo "${ECHO_T}$INTLTOOL_MSGFMT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INTLTOOL_MSGMERGE+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INTLTOOL_MSGMERGE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_MSGMERGE="$INTLTOOL_MSGMERGE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_INTLTOOL_MSGMERGE" && ac_cv_path_INTLTOOL_MSGMERGE="msgmerge"
+  ;;
+esac
+fi
+INTLTOOL_MSGMERGE=$ac_cv_path_INTLTOOL_MSGMERGE
+
+if test -n "$INTLTOOL_MSGMERGE"; then
+  echo "$as_me:$LINENO: result: $INTLTOOL_MSGMERGE" >&5
+echo "${ECHO_T}$INTLTOOL_MSGMERGE" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INTLTOOL_XGETTEXT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INTLTOOL_XGETTEXT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_XGETTEXT="$INTLTOOL_XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_INTLTOOL_XGETTEXT" && ac_cv_path_INTLTOOL_XGETTEXT="xgettext"
+  ;;
+esac
+fi
+INTLTOOL_XGETTEXT=$ac_cv_path_INTLTOOL_XGETTEXT
+
+if test -n "$INTLTOOL_XGETTEXT"; then
+  echo "$as_me:$LINENO: result: $INTLTOOL_XGETTEXT" >&5
+echo "${ECHO_T}$INTLTOOL_XGETTEXT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+# Remove file type tags (using []) from po/POTFILES.
+
+
+
+
+
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+
+
+# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT.
+
+          ac_config_commands="$ac_config_commands intltool"
+
+
+
+for ac_prog in perl5 perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PERL="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$PERL" && break
+done
+
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=no
+fi;
+
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi;
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi;
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  case $host_cpu in
+  alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*)
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 5832 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_F77" && break
+done
+
+  F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:6931:" \
+     "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_f77_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDRT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  AR=$ac_ct_AR
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    lt_prog_cc_shlib='-belf'
+    ;;
+  esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | grep "[ 	]$lt_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+    { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+     else
+       lt_prog_compiler_static_works=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:7965: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:7969: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic='-Kpic'
+      lt_prog_compiler_static='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8198: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8202: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8258: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8262: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag=
+  enable_shared_with_static_runtimes=no
+  archive_cmds=
+  archive_expsym_cmds=
+  old_archive_From_new_cmds=
+  old_archive_from_expsyms_cmds=
+  export_dynamic_flag_spec=
+  whole_archive_flag_spec=
+  thread_safe_flag_spec=
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_direct=no
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  link_all_deplibs=unknown
+  hardcode_automatic=no
+  module_cmds=
+  module_expsym_cmds=
+  always_export_symbols=no
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L=yes
+  	  hardcode_libdir_flag_spec='-L$libdir'
+  	  hardcode_libdir_separator=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec=' '
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct=no
+      hardcode_automatic=yes
+      hardcode_shlibpath_var=unsupported
+      whole_archive_flag_spec='-all_load $convenience'
+      link_all_deplibs=yes
+    else
+      ld_shlibs=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld='+b $libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    openbsd*)
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      hardcode_shlibpath_var=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec=
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # find out which ABI we are using
+  libsuff=
+  case "$host_cpu" in
+  x86_64*|s390x*|powerpc64*)
+    echo '#line 9592 "configure"' > conftest.$ac_ext
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      case `/usr/bin/file conftest.$ac_objext` in
+      *64-bit*)
+        libsuff=64
+        sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+        ;;
+      esac
+    fi
+    rm -rf conftest*
+    ;;
+  esac
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var " || \
+   test "X$hardcode_automatic"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 10463 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 10561 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    archive_cmds_need_lc=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+  else
+    ld_shlibs=no
+  fi
+    ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler \
+    CC \
+    LD \
+    lt_prog_compiler_wl \
+    lt_prog_compiler_pic \
+    lt_prog_compiler_static \
+    lt_prog_compiler_no_builtin_flag \
+    export_dynamic_flag_spec \
+    thread_safe_flag_spec \
+    whole_archive_flag_spec \
+    enable_shared_with_static_runtimes \
+    old_archive_cmds \
+    old_archive_from_new_cmds \
+    predep_objects \
+    postdep_objects \
+    predeps \
+    postdeps \
+    compiler_lib_search_path \
+    archive_cmds \
+    archive_expsym_cmds \
+    postinstall_cmds \
+    postuninstall_cmds \
+    old_archive_from_expsyms_cmds \
+    allow_undefined_flag \
+    no_undefined_flag \
+    export_symbols_cmds \
+    hardcode_libdir_flag_spec \
+    hardcode_libdir_flag_spec_ld \
+    hardcode_libdir_separator \
+    hardcode_automatic \
+    module_cmds \
+    module_expsym_cmds \
+    lt_cv_prog_compiler_c_o \
+    exclude_expsyms \
+    include_expsyms; do
+
+    case $var in
+    old_archive_cmds | \
+    old_archive_from_new_cmds | \
+    archive_cmds | \
+    archive_expsym_cmds | \
+    module_cmds | \
+    module_expsym_cmds | \
+    old_archive_from_expsyms_cmds | \
+    export_symbols_cmds | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+  cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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.
+#
+# 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.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+  withval="$with_tags"
+  tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+    else
+      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+    "") ;;
+    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+  lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec_CXX=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    archive_cmds_CXX=''
+    hardcode_direct_CXX=yes
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.012|aix4.012.*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct_CXX=yes
+	else
+	  # We have old collect2
+	  hardcode_direct_CXX=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_CXX=yes
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  hardcode_libdir_separator_CXX=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    always_export_symbols_CXX=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag_CXX='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag_CXX="-z nodefs"
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	no_undefined_flag_CXX=' ${wl}-bernotok'
+	allow_undefined_flag_CXX=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	always_export_symbols_CXX=yes
+	# Exported symbols can be pulled into shared objects from archives
+	whole_archive_flag_spec_CXX=' '
+	archive_cmds_need_lc_CXX=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+    # as there is no search path for DLLs.
+    hardcode_libdir_flag_spec_CXX='-L$libdir'
+    allow_undefined_flag_CXX=unsupported
+    always_export_symbols_CXX=no
+    enable_shared_with_static_runtimes_CXX=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    archive_cmds_need_lc_CXX=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag_CXX='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_CXX='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct_CXX=no
+    hardcode_automatic_CXX=yes
+    hardcode_shlibpath_var_CXX=unsupported
+    whole_archive_flag_spec_CXX='-all_load $convenience'
+    link_all_deplibs_CXX=yes
+  else
+    ld_shlibs_CXX=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  freebsd12*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    ld_shlibs_CXX=no
+    ;;
+  freebsd-elf*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    ld_shlibs_CXX=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    hardcode_direct_CXX=yes
+    hardcode_minus_L_CXX=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      ld_shlibs_CXX=no
+      ;;
+    aCC)
+      archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+	hardcode_libdir_separator_CXX=:
+        ;;
+      ia64*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+        ;;
+      *)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+	export_dynamic_flag_spec_CXX='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      ;;
+    ia64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      hardcode_direct_CXX=yes
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	link_all_deplibs_CXX=yes
+	;;
+    esac
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	archive_cmds_need_lc_CXX=no
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      hardcode_libdir_flag_spec_CXX='-R$libdir'
+      hardcode_direct_CXX=yes
+      hardcode_shlibpath_var_CXX=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' -expect_unresolved \*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  sco*)
+    archive_cmds_need_lc_CXX=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	no_undefined_flag_CXX=' -zdefs'
+	archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-R$libdir'
+	hardcode_shlibpath_var_CXX=no
+	case $host_os in
+	  solaris2.0-5 | solaris2.0-5.*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	link_all_deplibs_CXX=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_CXX=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:12740: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:12744: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:12800: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:12804: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # find out which ABI we are using
+  libsuff=
+  case "$host_cpu" in
+  x86_64*|s390x*|powerpc64*)
+    echo '#line 13311 "configure"' > conftest.$ac_ext
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      case `/usr/bin/file conftest.$ac_objext` in
+      *64-bit*)
+        libsuff=64
+        sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+        ;;
+      esac
+    fi
+    rm -rf conftest*
+    ;;
+  esac
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+   test -n "$runpath_var CXX" || \
+   test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 14182 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 14280 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_CXX \
+    CC_CXX \
+    LD_CXX \
+    lt_prog_compiler_wl_CXX \
+    lt_prog_compiler_pic_CXX \
+    lt_prog_compiler_static_CXX \
+    lt_prog_compiler_no_builtin_flag_CXX \
+    export_dynamic_flag_spec_CXX \
+    thread_safe_flag_spec_CXX \
+    whole_archive_flag_spec_CXX \
+    enable_shared_with_static_runtimes_CXX \
+    old_archive_cmds_CXX \
+    old_archive_from_new_cmds_CXX \
+    predep_objects_CXX \
+    postdep_objects_CXX \
+    predeps_CXX \
+    postdeps_CXX \
+    compiler_lib_search_path_CXX \
+    archive_cmds_CXX \
+    archive_expsym_cmds_CXX \
+    postinstall_cmds_CXX \
+    postuninstall_cmds_CXX \
+    old_archive_from_expsyms_cmds_CXX \
+    allow_undefined_flag_CXX \
+    no_undefined_flag_CXX \
+    export_symbols_cmds_CXX \
+    hardcode_libdir_flag_spec_CXX \
+    hardcode_libdir_flag_spec_ld_CXX \
+    hardcode_libdir_separator_CXX \
+    hardcode_automatic_CXX \
+    module_cmds_CXX \
+    module_expsym_cmds_CXX \
+    lt_cv_prog_compiler_c_o_CXX \
+    exclude_expsyms_CXX \
+    include_expsyms_CXX; do
+
+    case $var in
+    old_archive_cmds_CXX | \
+    old_archive_from_new_cmds_CXX | \
+    archive_cmds_CXX | \
+    archive_expsym_cmds_CXX | \
+    module_cmds_CXX | \
+    module_expsym_cmds_CXX | \
+    old_archive_from_expsyms_cmds_CXX | \
+    export_symbols_cmds_CXX | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_F77='-Kpic'
+      lt_prog_compiler_static_F77='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_F77=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15107: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15111: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15167: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15171: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  enable_shared_with_static_runtimes_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  old_archive_From_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  export_dynamic_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  thread_safe_flag_spec_F77=
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_flag_spec_ld_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_direct_F77=no
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  link_all_deplibs_F77=unknown
+  hardcode_automatic_F77=no
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  always_export_symbols_F77=no
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_F77=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_F77="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_F77="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs_F77=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_F77" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_F77=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_F77=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_F77=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_F77=yes
+  	  hardcode_libdir_flag_spec_F77='-L$libdir'
+  	  hardcode_libdir_separator_F77=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' ${wl}-bernotok'
+	  allow_undefined_flag_F77=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_F77=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_F77=' '
+	  archive_cmds_need_lc_F77=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_F77=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_F77=' '
+      allow_undefined_flag_F77=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_F77='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_F77=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_F77='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_F77='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_F77=no
+      hardcode_automatic_F77=yes
+      hardcode_shlibpath_var_F77=unsupported
+      whole_archive_flag_spec_F77='-all_load $convenience'
+      link_all_deplibs_F77=yes
+    else
+      ld_shlibs_F77=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_F77='-L$libdir'
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=yes
+	  export_dynamic_flag_spec_F77='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      link_all_deplibs_F77=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_F77='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_F77='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_F77='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_F77=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_F77=
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_F77 in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_F77
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+        allow_undefined_flag_F77=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_F77=no
+        else
+	  archive_cmds_need_lc_F77=yes
+        fi
+        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # find out which ABI we are using
+  libsuff=
+  case "$host_cpu" in
+  x86_64*|s390x*|powerpc64*)
+    echo '#line 16481 "configure"' > conftest.$ac_ext
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      case `/usr/bin/file conftest.$ac_objext` in
+      *64-bit*)
+        libsuff=64
+        sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+        ;;
+      esac
+    fi
+    rm -rf conftest*
+    ;;
+  esac
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+   test -n "$runpath_var F77" || \
+   test "X$hardcode_automatic_F77"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_F77" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+     test "$hardcode_minus_L_F77" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_F77 \
+    CC_F77 \
+    LD_F77 \
+    lt_prog_compiler_wl_F77 \
+    lt_prog_compiler_pic_F77 \
+    lt_prog_compiler_static_F77 \
+    lt_prog_compiler_no_builtin_flag_F77 \
+    export_dynamic_flag_spec_F77 \
+    thread_safe_flag_spec_F77 \
+    whole_archive_flag_spec_F77 \
+    enable_shared_with_static_runtimes_F77 \
+    old_archive_cmds_F77 \
+    old_archive_from_new_cmds_F77 \
+    predep_objects_F77 \
+    postdep_objects_F77 \
+    predeps_F77 \
+    postdeps_F77 \
+    compiler_lib_search_path_F77 \
+    archive_cmds_F77 \
+    archive_expsym_cmds_F77 \
+    postinstall_cmds_F77 \
+    postuninstall_cmds_F77 \
+    old_archive_from_expsyms_cmds_F77 \
+    allow_undefined_flag_F77 \
+    no_undefined_flag_F77 \
+    export_symbols_cmds_F77 \
+    hardcode_libdir_flag_spec_F77 \
+    hardcode_libdir_flag_spec_ld_F77 \
+    hardcode_libdir_separator_F77 \
+    hardcode_automatic_F77 \
+    module_cmds_F77 \
+    module_expsym_cmds_F77 \
+    lt_cv_prog_compiler_c_o_F77 \
+    exclude_expsyms_F77 \
+    include_expsyms_F77; do
+
+    case $var in
+    old_archive_cmds_F77 | \
+    old_archive_from_new_cmds_F77 | \
+    archive_cmds_F77 | \
+    archive_expsym_cmds_F77 | \
+    module_cmds_F77 | \
+    module_expsym_cmds_F77 | \
+    old_archive_from_expsyms_cmds_F77 | \
+    export_symbols_cmds_F77 | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17222: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:17226: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_GCJ='-Wl,'
+    lt_prog_compiler_static_GCJ='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_GCJ='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_GCJ=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_GCJ=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_GCJ='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      else
+	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-KPIC'
+	lt_prog_compiler_static_GCJ='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_GCJ='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_GCJ='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_GCJ='-Kpic'
+      lt_prog_compiler_static_GCJ='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_GCJ='-Qoption ld '
+      lt_prog_compiler_pic_GCJ='-PIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_GCJ='-Kconform_pic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_GCJ='-pic'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_GCJ=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17455: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:17459: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+    case $lt_prog_compiler_pic_GCJ in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+     esac
+else
+    lt_prog_compiler_pic_GCJ=
+     lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_GCJ=
+    ;;
+  *)
+    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_GCJ=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17515: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:17519: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_GCJ=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_GCJ=
+  enable_shared_with_static_runtimes_GCJ=no
+  archive_cmds_GCJ=
+  archive_expsym_cmds_GCJ=
+  old_archive_From_new_cmds_GCJ=
+  old_archive_from_expsyms_cmds_GCJ=
+  export_dynamic_flag_spec_GCJ=
+  whole_archive_flag_spec_GCJ=
+  thread_safe_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_ld_GCJ=
+  hardcode_libdir_separator_GCJ=
+  hardcode_direct_GCJ=no
+  hardcode_minus_L_GCJ=no
+  hardcode_shlibpath_var_GCJ=unsupported
+  link_all_deplibs_GCJ=unknown
+  hardcode_automatic_GCJ=no
+  module_cmds_GCJ=
+  module_expsym_cmds_GCJ=
+  always_export_symbols_GCJ=no
+  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_GCJ=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_GCJ=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_GCJ=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_GCJ=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=no
+      enable_shared_with_static_runtimes_GCJ=yes
+      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_GCJ="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_GCJ="$tmp_archive_cmds"
+      fi
+    else
+      ld_shlibs_GCJ=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_GCJ" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_GCJ=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=yes
+      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_GCJ=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_GCJ=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_GCJ=''
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_GCJ=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_GCJ=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_GCJ=yes
+  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+  	  hardcode_libdir_separator_GCJ=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_GCJ=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_GCJ='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_GCJ="-z nodefs"
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_GCJ=' ${wl}-bernotok'
+	  allow_undefined_flag_GCJ=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_GCJ=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_GCJ=' '
+	  archive_cmds_need_lc_GCJ=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_GCJ=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_GCJ=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ=' '
+      allow_undefined_flag_GCJ=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_GCJ='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_GCJ=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_GCJ=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_GCJ='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_GCJ='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_GCJ=no
+      hardcode_automatic_GCJ=yes
+      hardcode_shlibpath_var_GCJ=unsupported
+      whole_archive_flag_spec_GCJ='-all_load $convenience'
+      link_all_deplibs_GCJ=yes
+    else
+      ld_shlibs_GCJ=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_GCJ=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_direct_GCJ=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=yes
+	  export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    newsos6)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      allow_undefined_flag_GCJ=unsupported
+      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_GCJ=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+	  hardcode_direct_GCJ=no
+        ;;
+	motorola)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_GCJ=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_GCJ=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_GCJ='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_GCJ=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_GCJ=
+      hardcode_shlibpath_var_GCJ=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      ld_shlibs_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_GCJ=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_GCJ in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_GCJ
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+        allow_undefined_flag_GCJ=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_GCJ=no
+        else
+	  archive_cmds_need_lc_GCJ=yes
+        fi
+        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # find out which ABI we are using
+  libsuff=
+  case "$host_cpu" in
+  x86_64*|s390x*|powerpc64*)
+    echo '#line 18849 "configure"' > conftest.$ac_ext
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      case `/usr/bin/file conftest.$ac_objext` in
+      *64-bit*)
+        libsuff=64
+        sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+        ;;
+      esac
+    fi
+    rm -rf conftest*
+    ;;
+  esac
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+   test -n "$runpath_var GCJ" || \
+   test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_GCJ" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+     test "$hardcode_minus_L_GCJ" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_GCJ=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_GCJ=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 19720 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 19818 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_GCJ \
+    CC_GCJ \
+    LD_GCJ \
+    lt_prog_compiler_wl_GCJ \
+    lt_prog_compiler_pic_GCJ \
+    lt_prog_compiler_static_GCJ \
+    lt_prog_compiler_no_builtin_flag_GCJ \
+    export_dynamic_flag_spec_GCJ \
+    thread_safe_flag_spec_GCJ \
+    whole_archive_flag_spec_GCJ \
+    enable_shared_with_static_runtimes_GCJ \
+    old_archive_cmds_GCJ \
+    old_archive_from_new_cmds_GCJ \
+    predep_objects_GCJ \
+    postdep_objects_GCJ \
+    predeps_GCJ \
+    postdeps_GCJ \
+    compiler_lib_search_path_GCJ \
+    archive_cmds_GCJ \
+    archive_expsym_cmds_GCJ \
+    postinstall_cmds_GCJ \
+    postuninstall_cmds_GCJ \
+    old_archive_from_expsyms_cmds_GCJ \
+    allow_undefined_flag_GCJ \
+    no_undefined_flag_GCJ \
+    export_symbols_cmds_GCJ \
+    hardcode_libdir_flag_spec_GCJ \
+    hardcode_libdir_flag_spec_ld_GCJ \
+    hardcode_libdir_separator_GCJ \
+    hardcode_automatic_GCJ \
+    module_cmds_GCJ \
+    module_expsym_cmds_GCJ \
+    lt_cv_prog_compiler_c_o_GCJ \
+    exclude_expsyms_GCJ \
+    include_expsyms_GCJ; do
+
+    case $var in
+    old_archive_cmds_GCJ | \
+    old_archive_from_new_cmds_GCJ | \
+    archive_cmds_GCJ | \
+    archive_expsym_cmds_GCJ | \
+    module_cmds_GCJ | \
+    module_expsym_cmds_GCJ | \
+    old_archive_from_expsyms_cmds_GCJ | \
+    export_symbols_cmds_GCJ | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_RC \
+    CC_RC \
+    LD_RC \
+    lt_prog_compiler_wl_RC \
+    lt_prog_compiler_pic_RC \
+    lt_prog_compiler_static_RC \
+    lt_prog_compiler_no_builtin_flag_RC \
+    export_dynamic_flag_spec_RC \
+    thread_safe_flag_spec_RC \
+    whole_archive_flag_spec_RC \
+    enable_shared_with_static_runtimes_RC \
+    old_archive_cmds_RC \
+    old_archive_from_new_cmds_RC \
+    predep_objects_RC \
+    postdep_objects_RC \
+    predeps_RC \
+    postdeps_RC \
+    compiler_lib_search_path_RC \
+    archive_cmds_RC \
+    archive_expsym_cmds_RC \
+    postinstall_cmds_RC \
+    postuninstall_cmds_RC \
+    old_archive_from_expsyms_cmds_RC \
+    allow_undefined_flag_RC \
+    no_undefined_flag_RC \
+    export_symbols_cmds_RC \
+    hardcode_libdir_flag_spec_RC \
+    hardcode_libdir_flag_spec_ld_RC \
+    hardcode_libdir_separator_RC \
+    hardcode_automatic_RC \
+    module_cmds_RC \
+    module_expsym_cmds_RC \
+    lt_cv_prog_compiler_c_o_RC \
+    exclude_expsyms_RC \
+    include_expsyms_RC; do
+
+    case $var in
+    old_archive_cmds_RC | \
+    old_archive_from_new_cmds_RC | \
+    archive_cmds_RC | \
+    archive_expsym_cmds_RC | \
+    module_cmds_RC | \
+    module_expsym_cmds_RC | \
+    old_archive_from_expsyms_cmds_RC | \
+    export_symbols_cmds_RC | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	;;
+
+      *)
+	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+THUNAR_VERINFO=0:0:0
+THUNAR_VERSION_API=1
+THUNAR_VERSION_MAJOR=0
+THUNAR_VERSION_MINOR=1
+THUNAR_VERSION_MICRO=4
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int *) 0)
+  return 0;
+if (sizeof (int))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
+
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((long *) 0)
+  return 0;
+if (sizeof (long))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
+
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_long" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (long))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (long))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (long))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6
+if test "${ac_cv_type_short+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((short *) 0)
+  return 0;
+if (sizeof (short))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_short=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_short=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6
+
+echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_short+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_short" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (short)); }
+unsigned long ulongval () { return (long) (sizeof (short)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (short))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (short))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (short))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_short=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for 32bit unsigned integer" >&5
+echo $ECHO_N "checking for 32bit unsigned integer... $ECHO_C" >&6
+case 4 in
+$ac_cv_sizeof_int)   TDB_U32_TYPE="unsigned int" ;;
+$ac_cv_sizeof_long)  TDB_U32_TYPE="unsigned long" ;;
+$ac_cv_sizeof_short) TDB_U32_TYPE="unsigned short" ;;
+esac
+
+echo "$as_me:$LINENO: result: $TDB_U32_TYPE" >&5
+echo "${ECHO_T}$TDB_U32_TYPE" >&6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in ctype.h dirent.h errno.h fcntl.h fnmatch.h fstab.h grp.h \
+                  locale.h math.h memory.h mmintrin.h pwd.h sched.h setjmp.h \
+                  stdarg.h stdlib.h string.h sys/xattr.h sys/extattr.h \
+                  sys/cdio.h sys/mman.h \
+                  sys/mount.h sys/param.h sys/stat.h sys/time.h sys/uio.h \
+                  sys/wait.h time.h wchar.h wctype.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+	mmap private not fixed
+	mmap private fixed at somewhere currently unmapped
+	mmap private fixed at somewhere already mapped
+	mmap shared not fixed
+	mmap shared fixed at somewhere currently unmapped
+	mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the file system buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propagated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !STDC_HEADERS && !HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#if !HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h.  */
+# if !HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  if HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192	/* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+  char *data, *data2, *data3;
+  int i, pagesize;
+  int fd;
+
+  pagesize = getpagesize ();
+
+  /* First, make a file with some known garbage in it. */
+  data = (char *) malloc (pagesize);
+  if (!data)
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    exit (1);
+  if (write (fd, data, pagesize) != pagesize)
+    exit (1);
+  close (fd);
+
+  /* Next, try to mmap the file at a fixed address which already has
+     something else allocated at it.  If we can, also make sure that
+     we see the same garbage.  */
+  fd = open ("conftest.mmap", O_RDWR);
+  if (fd < 0)
+    exit (1);
+  data2 = (char *) malloc (2 * pagesize);
+  if (!data2)
+    exit (1);
+  data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      exit (1);
+
+  /* Finally, make sure that changes to the mapped area do not
+     percolate back to the file as seen by read().  (This is a bug on
+     some variants of i386 svr4.0.)  */
+  for (i = 0; i < pagesize; ++i)
+    *(data2 + i) = *(data2 + i) + 1;
+  data3 = (char *) malloc (pagesize);
+  if (!data3)
+    exit (1);
+  if (read (fd, data3, pagesize) != pagesize)
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      exit (1);
+  close (fd);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in attropen extattr_get_fd fgetxattr lchmod localtime_r \
+                mbrtowc pread pwrite readdir_r \
+                sched_yield setgroupent setpassent
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+echo "$as_me:$LINENO: checking for working posix_madvise" >&5
+echo $ECHO_N "checking for working posix_madvise... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/mman.h>
+int
+main ()
+{
+
+posix_madvise (0, 0, POSIX_MADV_NORMAL);
+posix_madvise (0, 0, POSIX_MADV_SEQUENTIAL);
+posix_madvise (0, 0, POSIX_MADV_RANDOM);
+posix_madvise (0, 0, POSIX_MADV_WILLNEED);
+posix_madvise (0, 0, POSIX_MADV_DONTNEED);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_MADVISE 1
+_ACEOF
+
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+    ac_save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -D__USE_XOPEN2K"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/mman.h>
+int
+main ()
+{
+
+posix_madvise (0, 0, POSIX_MADV_NORMAL);
+posix_madvise (0, 0, POSIX_MADV_SEQUENTIAL);
+posix_madvise (0, 0, POSIX_MADV_RANDOM);
+posix_madvise (0, 0, POSIX_MADV_WILLNEED);
+posix_madvise (0, 0, POSIX_MADV_DONTNEED);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_MADVISE 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+
+    GETTEXT_PACKAGE=Thunar
+
+cat >>confdefs.h <<_ACEOF
+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
+_ACEOF
+
+
+
+    ALL_LINGUAS="de el es hu ja"
+
+
+for ac_header in locale.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_locale_h = yes; then
+    echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
+if test "${am_cv_val_LC_MESSAGES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  am_cv_val_LC_MESSAGES=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
+    if test $am_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+    fi
+  fi
+     USE_NLS=yes
+
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    if test "${ac_cv_header_libintl_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for libintl.h" >&5
+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
+if test "${ac_cv_header_libintl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking libintl.h usability" >&5
+echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <libintl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking libintl.h presence" >&5
+echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: libintl.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: libintl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for libintl.h" >&5
+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
+if test "${ac_cv_header_libintl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_libintl_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
+
+fi
+if test $ac_cv_header_libintl_h = yes; then
+  gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      echo "$as_me:$LINENO: checking for dgettext in libc" >&5
+echo $ECHO_N "checking for dgettext in libc... $ECHO_C" >&6
+if test "${gt_cv_func_dgettext_libc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <libintl.h>
+
+int
+main ()
+{
+return (int) dgettext ("","")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_func_dgettext_libc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_dgettext_libc=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5
+echo "${ECHO_T}$gt_cv_func_dgettext_libc" >&6
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" ; then
+
+for ac_func in bind_textdomain_codeset
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+
+        echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
+echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char bindtextdomain ();
+int
+main ()
+{
+bindtextdomain ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_intl_bindtextdomain=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_bindtextdomain=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6
+if test $ac_cv_lib_intl_bindtextdomain = yes; then
+  echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5
+echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_dgettext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dgettext ();
+int
+main ()
+{
+dgettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_intl_dgettext=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_dgettext=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_dgettext" >&6
+if test $ac_cv_lib_intl_dgettext = yes; then
+  gt_cv_func_dgettext_libintl=yes
+fi
+
+fi
+
+
+	if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+	  echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5
+echo $ECHO_N "checking if -liconv is needed to use gettext... $ECHO_C" >&6
+	  echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+          echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5
+echo $ECHO_N "checking for dcgettext in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_dcgettext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl -liconv $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dcgettext ();
+int
+main ()
+{
+dcgettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_intl_dcgettext=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_dcgettext=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_dcgettext" >&6
+if test $ac_cv_lib_intl_dcgettext = yes; then
+  gt_cv_func_dgettext_libintl=yes
+			libintl_extra_libs=-liconv
+else
+  :
+fi
+
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+
+for ac_func in bind_textdomain_codeset
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+	|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+
+      if test "$gt_cv_have_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+	# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$MSGFMT" in
+  /*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+	ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
+  ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != "no"; then
+  echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+	if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+
+for ac_func in dcgettext
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+	  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+
+if test -n "$GMSGFMT"; then
+  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+	  # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+	ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+	  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+			 return _nl_msg_cat_cntr
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  CATOBJEXT=.gmo
+             DATADIRNAME=share
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+case $host in
+	    *-*-solaris*)
+	    	                	    	                echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5
+echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6
+if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define bind_textdomain_codeset to an innocuous variant, in case <limits.h> declares bind_textdomain_codeset.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define bind_textdomain_codeset innocuous_bind_textdomain_codeset
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char bind_textdomain_codeset (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef bind_textdomain_codeset
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char bind_textdomain_codeset ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset)
+choke me
+#else
+char (*f) () = bind_textdomain_codeset;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != bind_textdomain_codeset;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_bind_textdomain_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_bind_textdomain_codeset=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5
+echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6
+if test $ac_cv_func_bind_textdomain_codeset = yes; then
+  CATOBJEXT=.gmo
+               DATADIRNAME=share
+else
+  CATOBJEXT=.mo
+               DATADIRNAME=lib
+fi
+
+	    ;;
+	    *)
+	    CATOBJEXT=.mo
+            DATADIRNAME=lib
+	    ;;
+	    esac
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+          LIBS="$glib_save_LIBS"
+	  INSTOBJEXT=.mo
+	else
+	  gt_cv_have_gettext=no
+	fi
+      fi
+
+fi
+
+
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+    fi
+
+        if test "$XGETTEXT" != ":"; then
+                  if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+        : ;
+      else
+        echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+        XGETTEXT=":"
+      fi
+    fi
+
+    # We need to process the po/ directory.
+    POSUB=po
+
+              ac_config_commands="$ac_config_commands default-1"
+
+
+                for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+
+
+
+
+
+
+
+
+
+
+
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+ 	   # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
+     fi
+
+          if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+            MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+
+
+         test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+	< $srcdir/po/POTFILES.in > po/POTFILES
+
+
+    echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5
+echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6
+if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define bind_textdomain_codeset to an innocuous variant, in case <limits.h> declares bind_textdomain_codeset.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define bind_textdomain_codeset innocuous_bind_textdomain_codeset
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char bind_textdomain_codeset (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef bind_textdomain_codeset
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char bind_textdomain_codeset ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset)
+choke me
+#else
+char (*f) () = bind_textdomain_codeset;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != bind_textdomain_codeset;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_bind_textdomain_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_bind_textdomain_codeset=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5
+echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6
+
+
+    echo "$as_me:$LINENO: checking for locales directory" >&5
+echo $ECHO_N "checking for locales directory... $ECHO_C" >&6
+
+# Check whether --with-locales-dir or --without-locales-dir was given.
+if test "${with_locales_dir+set}" = set; then
+  withval="$with_locales_dir"
+  localedir=$withval
+else
+
+    if test x"$CATOBJEXT" = x".mo"; then
+      localedir=$libdir/locale
+    else
+      localedir=$datadir/locale
+    fi
+
+fi;
+  echo "$as_me:$LINENO: result: $localedir" >&5
+echo "${ECHO_T}$localedir" >&6
+
+
+    echo "$as_me:$LINENO: checking for additional xgettext flags" >&5
+echo $ECHO_N "checking for additional xgettext flags... $ECHO_C" >&6
+  if test x"$XGETTEXT_ARGS" = x""; then
+    XGETTEXT_ARGS="--keyword=Q_";
+  else
+    XGETTEXT_ARGS="$XGETTEXT_ARGS --keyword=Q_";
+  fi
+
+  echo "$as_me:$LINENO: result: $XGETTEXT_ARGS" >&5
+echo "${ECHO_T}$XGETTEXT_ARGS" >&6
+
+
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for exo-0.3 >= 0.3.1.1" >&5
+echo $ECHO_N "checking for exo-0.3 >= 0.3.1.1... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=0.3.1.1" "exo-0.3" >/dev/null 2>&1; then
+    EXO_VERSION=`$PKG_CONFIG --modversion "exo-0.3"`
+    echo "$as_me:$LINENO: result: $EXO_VERSION" >&5
+echo "${ECHO_T}$EXO_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking EXO_CFLAGS" >&5
+echo $ECHO_N "checking EXO_CFLAGS... $ECHO_C" >&6
+    EXO_CFLAGS=`$PKG_CONFIG --cflags "exo-0.3"`
+    echo "$as_me:$LINENO: result: $EXO_CFLAGS" >&5
+echo "${ECHO_T}$EXO_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking EXO_LIBS" >&5
+echo $ECHO_N "checking EXO_LIBS... $ECHO_C" >&6
+    EXO_LIBS=`$PKG_CONFIG --libs "exo-0.3"`
+    echo "$as_me:$LINENO: result: $EXO_LIBS" >&5
+echo "${ECHO_T}$EXO_LIBS" >&6
+
+    EXO_REQUIRED_VERSION=0.3.1.1
+
+
+
+
+
+
+
+  elif $PKG_CONFIG --exists "exo-0.3" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "exo-0.3"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package exo-0.3 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade exo-0.3 to atleast version 0.3.1.1, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package exo-0.3 was not found on your system."
+      echo "*** Please install exo-0.3 (atleast version 0.3.1.1) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for glib-2.0 >= 2.6.4" >&5
+echo $ECHO_N "checking for glib-2.0 >= 2.6.4... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=2.6.4" "glib-2.0" >/dev/null 2>&1; then
+    GLIB_VERSION=`$PKG_CONFIG --modversion "glib-2.0"`
+    echo "$as_me:$LINENO: result: $GLIB_VERSION" >&5
+echo "${ECHO_T}$GLIB_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking GLIB_CFLAGS" >&5
+echo $ECHO_N "checking GLIB_CFLAGS... $ECHO_C" >&6
+    GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0"`
+    echo "$as_me:$LINENO: result: $GLIB_CFLAGS" >&5
+echo "${ECHO_T}$GLIB_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking GLIB_LIBS" >&5
+echo $ECHO_N "checking GLIB_LIBS... $ECHO_C" >&6
+    GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0"`
+    echo "$as_me:$LINENO: result: $GLIB_LIBS" >&5
+echo "${ECHO_T}$GLIB_LIBS" >&6
+
+    GLIB_REQUIRED_VERSION=2.6.4
+
+
+
+
+
+
+
+  elif $PKG_CONFIG --exists "glib-2.0" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "glib-2.0"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package glib-2.0 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade glib-2.0 to atleast version 2.6.4, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package glib-2.0 was not found on your system."
+      echo "*** Please install glib-2.0 (atleast version 2.6.4) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for gthread-2.0 >= 2.6.4" >&5
+echo $ECHO_N "checking for gthread-2.0 >= 2.6.4... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=2.6.4" "gthread-2.0" >/dev/null 2>&1; then
+    GTHREAD_VERSION=`$PKG_CONFIG --modversion "gthread-2.0"`
+    echo "$as_me:$LINENO: result: $GTHREAD_VERSION" >&5
+echo "${ECHO_T}$GTHREAD_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking GTHREAD_CFLAGS" >&5
+echo $ECHO_N "checking GTHREAD_CFLAGS... $ECHO_C" >&6
+    GTHREAD_CFLAGS=`$PKG_CONFIG --cflags "gthread-2.0"`
+    echo "$as_me:$LINENO: result: $GTHREAD_CFLAGS" >&5
+echo "${ECHO_T}$GTHREAD_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking GTHREAD_LIBS" >&5
+echo $ECHO_N "checking GTHREAD_LIBS... $ECHO_C" >&6
+    GTHREAD_LIBS=`$PKG_CONFIG --libs "gthread-2.0"`
+    echo "$as_me:$LINENO: result: $GTHREAD_LIBS" >&5
+echo "${ECHO_T}$GTHREAD_LIBS" >&6
+
+    GTHREAD_REQUIRED_VERSION=2.6.4
+
+
+
+
+
+
+
+  elif $PKG_CONFIG --exists "gthread-2.0" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "gthread-2.0"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package gthread-2.0 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade gthread-2.0 to atleast version 2.6.4, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package gthread-2.0 was not found on your system."
+      echo "*** Please install gthread-2.0 (atleast version 2.6.4) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.6.0" >&5
+echo $ECHO_N "checking for gtk+-2.0 >= 2.6.0... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=2.6.0" "gtk+-2.0" >/dev/null 2>&1; then
+    GTK_VERSION=`$PKG_CONFIG --modversion "gtk+-2.0"`
+    echo "$as_me:$LINENO: result: $GTK_VERSION" >&5
+echo "${ECHO_T}$GTK_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5
+echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6
+    GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0"`
+    echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5
+echo "${ECHO_T}$GTK_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking GTK_LIBS" >&5
+echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6
+    GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0"`
+    echo "$as_me:$LINENO: result: $GTK_LIBS" >&5
+echo "${ECHO_T}$GTK_LIBS" >&6
+
+    GTK_REQUIRED_VERSION=2.6.0
+
+
+
+
+
+
+
+  elif $PKG_CONFIG --exists "gtk+-2.0" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "gtk+-2.0"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package gtk+-2.0 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade gtk+-2.0 to atleast version 2.6.0, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package gtk+-2.0 was not found on your system."
+      echo "*** Please install gtk+-2.0 (atleast version 2.6.0) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for libpng12 >= 1.2.0" >&5
+echo $ECHO_N "checking for libpng12 >= 1.2.0... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=1.2.0" "libpng12" >/dev/null 2>&1; then
+    LIBPNG_VERSION=`$PKG_CONFIG --modversion "libpng12"`
+    echo "$as_me:$LINENO: result: $LIBPNG_VERSION" >&5
+echo "${ECHO_T}$LIBPNG_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking LIBPNG_CFLAGS" >&5
+echo $ECHO_N "checking LIBPNG_CFLAGS... $ECHO_C" >&6
+    LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "libpng12"`
+    echo "$as_me:$LINENO: result: $LIBPNG_CFLAGS" >&5
+echo "${ECHO_T}$LIBPNG_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking LIBPNG_LIBS" >&5
+echo $ECHO_N "checking LIBPNG_LIBS... $ECHO_C" >&6
+    LIBPNG_LIBS=`$PKG_CONFIG --libs "libpng12"`
+    echo "$as_me:$LINENO: result: $LIBPNG_LIBS" >&5
+echo "${ECHO_T}$LIBPNG_LIBS" >&6
+
+    LIBPNG_REQUIRED_VERSION=1.2.0
+
+
+
+
+
+
+
+  elif $PKG_CONFIG --exists "libpng12" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "libpng12"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package libpng12 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade libpng12 to atleast version 1.2.0, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package libpng12 was not found on your system."
+      echo "*** Please install libpng12 (atleast version 1.2.0) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+
+
+
+
+  # Check whether --enable-cairo or --disable-cairo was given.
+if test "${enable_cairo+set}" = set; then
+  enableval="$enable_cairo"
+  xdt_cv_CAIRO_check=$enableval
+else
+  xdt_cv_CAIRO_check=yes
+fi;
+
+  if test x"$xdt_cv_CAIRO_check" = x"yes"; then
+    if $PKG_CONFIG --exists "cairo >= 0.5" >/dev/null 2>&1; then
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for cairo >= 0.5" >&5
+echo $ECHO_N "checking for cairo >= 0.5... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=0.5" "cairo" >/dev/null 2>&1; then
+    CAIRO_VERSION=`$PKG_CONFIG --modversion "cairo"`
+    echo "$as_me:$LINENO: result: $CAIRO_VERSION" >&5
+echo "${ECHO_T}$CAIRO_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking CAIRO_CFLAGS" >&5
+echo $ECHO_N "checking CAIRO_CFLAGS... $ECHO_C" >&6
+    CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo"`
+    echo "$as_me:$LINENO: result: $CAIRO_CFLAGS" >&5
+echo "${ECHO_T}$CAIRO_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking CAIRO_LIBS" >&5
+echo $ECHO_N "checking CAIRO_LIBS... $ECHO_C" >&6
+    CAIRO_LIBS=`$PKG_CONFIG --libs "cairo"`
+    echo "$as_me:$LINENO: result: $CAIRO_LIBS" >&5
+echo "${ECHO_T}$CAIRO_LIBS" >&6
+
+    CAIRO_REQUIRED_VERSION=0.5
+
+
+
+
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO 1
+_ACEOF
+
+        CAIRO_FOUND="yes"
+
+  elif $PKG_CONFIG --exists "cairo" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "cairo"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package cairo was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade cairo to atleast version 0.5, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package cairo was not found on your system."
+      echo "*** Please install cairo (atleast version 0.5) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+    else
+      echo "$as_me:$LINENO: checking for optional package cairo >= 0.5" >&5
+echo $ECHO_N "checking for optional package cairo >= 0.5... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+    fi
+  else
+    echo "$as_me:$LINENO: checking for optional package cairo" >&5
+echo $ECHO_N "checking for optional package cairo... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+  fi
+
+
+
+if test x"$CAIRO_FOUND" = x"yes"; then
+  HAVE_CAIRO_TRUE=
+  HAVE_CAIRO_FALSE='#'
+else
+  HAVE_CAIRO_TRUE='#'
+  HAVE_CAIRO_FALSE=
+fi
+
+
+
+
+
+
+  # Check whether --enable-gnome-thumbnailers or --disable-gnome-thumbnailers was given.
+if test "${enable_gnome_thumbnailers+set}" = set; then
+  enableval="$enable_gnome_thumbnailers"
+  xdt_cv_GCONF_check=$enableval
+else
+  xdt_cv_GCONF_check=yes
+fi;
+
+  if test x"$xdt_cv_GCONF_check" = x"yes"; then
+    if $PKG_CONFIG --exists "gconf-2.0 >= 2.4.0" >/dev/null 2>&1; then
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for gconf-2.0 >= 2.4.0" >&5
+echo $ECHO_N "checking for gconf-2.0 >= 2.4.0... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=2.4.0" "gconf-2.0" >/dev/null 2>&1; then
+    GCONF_VERSION=`$PKG_CONFIG --modversion "gconf-2.0"`
+    echo "$as_me:$LINENO: result: $GCONF_VERSION" >&5
+echo "${ECHO_T}$GCONF_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking GCONF_CFLAGS" >&5
+echo $ECHO_N "checking GCONF_CFLAGS... $ECHO_C" >&6
+    GCONF_CFLAGS=`$PKG_CONFIG --cflags "gconf-2.0"`
+    echo "$as_me:$LINENO: result: $GCONF_CFLAGS" >&5
+echo "${ECHO_T}$GCONF_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking GCONF_LIBS" >&5
+echo $ECHO_N "checking GCONF_LIBS... $ECHO_C" >&6
+    GCONF_LIBS=`$PKG_CONFIG --libs "gconf-2.0"`
+    echo "$as_me:$LINENO: result: $GCONF_LIBS" >&5
+echo "${ECHO_T}$GCONF_LIBS" >&6
+
+    GCONF_REQUIRED_VERSION=2.4.0
+
+
+
+
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GCONF 1
+_ACEOF
+
+        GCONF_FOUND="yes"
+
+  elif $PKG_CONFIG --exists "gconf-2.0" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "gconf-2.0"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package gconf-2.0 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade gconf-2.0 to atleast version 2.4.0, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package gconf-2.0 was not found on your system."
+      echo "*** Please install gconf-2.0 (atleast version 2.4.0) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+    else
+      echo "$as_me:$LINENO: checking for optional package gconf-2.0 >= 2.4.0" >&5
+echo $ECHO_N "checking for optional package gconf-2.0 >= 2.4.0... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+    fi
+  else
+    echo "$as_me:$LINENO: checking for optional package gconf-2.0" >&5
+echo $ECHO_N "checking for optional package gconf-2.0... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+  fi
+
+
+
+if test x"$GCONF_FOUND" = x"yes"; then
+  HAVE_GCONF_TRUE=
+  HAVE_GCONF_FALSE='#'
+else
+  HAVE_GCONF_TRUE='#'
+  HAVE_GCONF_FALSE=
+fi
+
+
+
+
+
+
+  # Check whether --enable-startup-notification or --disable-startup-notification was given.
+if test "${enable_startup_notification+set}" = set; then
+  enableval="$enable_startup_notification"
+  xdt_cv_LIBSTARTUP_NOTIFICATION_check=$enableval
+else
+  xdt_cv_LIBSTARTUP_NOTIFICATION_check=yes
+fi;
+
+  if test x"$xdt_cv_LIBSTARTUP_NOTIFICATION_check" = x"yes"; then
+    if $PKG_CONFIG --exists "libstartup-notification-1.0 >= 0.4" >/dev/null 2>&1; then
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for libstartup-notification-1.0 >= 0.4" >&5
+echo $ECHO_N "checking for libstartup-notification-1.0 >= 0.4... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=0.4" "libstartup-notification-1.0" >/dev/null 2>&1; then
+    LIBSTARTUP_NOTIFICATION_VERSION=`$PKG_CONFIG --modversion "libstartup-notification-1.0"`
+    echo "$as_me:$LINENO: result: $LIBSTARTUP_NOTIFICATION_VERSION" >&5
+echo "${ECHO_T}$LIBSTARTUP_NOTIFICATION_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking LIBSTARTUP_NOTIFICATION_CFLAGS" >&5
+echo $ECHO_N "checking LIBSTARTUP_NOTIFICATION_CFLAGS... $ECHO_C" >&6
+    LIBSTARTUP_NOTIFICATION_CFLAGS=`$PKG_CONFIG --cflags "libstartup-notification-1.0"`
+    echo "$as_me:$LINENO: result: $LIBSTARTUP_NOTIFICATION_CFLAGS" >&5
+echo "${ECHO_T}$LIBSTARTUP_NOTIFICATION_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking LIBSTARTUP_NOTIFICATION_LIBS" >&5
+echo $ECHO_N "checking LIBSTARTUP_NOTIFICATION_LIBS... $ECHO_C" >&6
+    LIBSTARTUP_NOTIFICATION_LIBS=`$PKG_CONFIG --libs "libstartup-notification-1.0"`
+    echo "$as_me:$LINENO: result: $LIBSTARTUP_NOTIFICATION_LIBS" >&5
+echo "${ECHO_T}$LIBSTARTUP_NOTIFICATION_LIBS" >&6
+
+    LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION=0.4
+
+
+
+
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBSTARTUP_NOTIFICATION 1
+_ACEOF
+
+        LIBSTARTUP_NOTIFICATION_FOUND="yes"
+
+  elif $PKG_CONFIG --exists "libstartup-notification-1.0" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "libstartup-notification-1.0"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+      echo "*** The required package libstartup-notification-1.0 was found on your system,"
+      echo "*** but the installed version ($xdt_cv_version) is too old."
+      echo "*** Please upgrade libstartup-notification-1.0 to atleast version 0.4, or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you installed"
+      echo "*** the new version of the package in a nonstandard prefix so"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+      echo "*** The required package libstartup-notification-1.0 was not found on your system."
+      echo "*** Please install libstartup-notification-1.0 (atleast version 0.4) or adjust"
+      echo "*** the PKG_CONFIG_PATH environment variable if you"
+      echo "*** installed the package in a nonstandard prefix so that"
+      echo "*** pkg-config is able to find it."
+      exit 1
+
+  fi
+
+    else
+      echo "$as_me:$LINENO: checking for optional package libstartup-notification-1.0 >= 0.4" >&5
+echo $ECHO_N "checking for optional package libstartup-notification-1.0 >= 0.4... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+    fi
+  else
+    echo "$as_me:$LINENO: checking for optional package libstartup-notification-1.0" >&5
+echo $ECHO_N "checking for optional package libstartup-notification-1.0... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+  fi
+
+
+
+if test x"$LIBSTARTUP_NOTIFICATION_FOUND" = x"yes"; then
+  HAVE_LIBSTARTUP_NOTIFICATION_TRUE=
+  HAVE_LIBSTARTUP_NOTIFICATION_FALSE='#'
+else
+  HAVE_LIBSTARTUP_NOTIFICATION_TRUE='#'
+  HAVE_LIBSTARTUP_NOTIFICATION_FALSE=
+fi
+
+
+
+LIBJPEG_LIBS=""
+LIBJPEG_CFLAGS=""
+echo "$as_me:$LINENO: checking for jpeg_start_decompress in -ljpeg" >&5
+echo $ECHO_N "checking for jpeg_start_decompress in -ljpeg... $ECHO_C" >&6
+if test "${ac_cv_lib_jpeg_jpeg_start_decompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljpeg  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char jpeg_start_decompress ();
+int
+main ()
+{
+jpeg_start_decompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_jpeg_jpeg_start_decompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_jpeg_jpeg_start_decompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_jpeg_jpeg_start_decompress" >&5
+echo "${ECHO_T}$ac_cv_lib_jpeg_jpeg_start_decompress" >&6
+if test $ac_cv_lib_jpeg_jpeg_start_decompress = yes; then
+
+  if test "${ac_cv_header_jpeglib_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for jpeglib.h" >&5
+echo $ECHO_N "checking for jpeglib.h... $ECHO_C" >&6
+if test "${ac_cv_header_jpeglib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_jpeglib_h" >&5
+echo "${ECHO_T}$ac_cv_header_jpeglib_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking jpeglib.h usability" >&5
+echo $ECHO_N "checking jpeglib.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <jpeglib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking jpeglib.h presence" >&5
+echo $ECHO_N "checking jpeglib.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <jpeglib.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: jpeglib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: jpeglib.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: jpeglib.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: jpeglib.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: jpeglib.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: jpeglib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: jpeglib.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: jpeglib.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: jpeglib.h: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for jpeglib.h" >&5
+echo $ECHO_N "checking for jpeglib.h... $ECHO_C" >&6
+if test "${ac_cv_header_jpeglib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_jpeglib_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_jpeglib_h" >&5
+echo "${ECHO_T}$ac_cv_header_jpeglib_h" >&6
+
+fi
+if test $ac_cv_header_jpeglib_h = yes; then
+
+    LIBJPEG_LIBS="-ljpeg -lm"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBJPEG 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_JPEGLIB_H 1
+_ACEOF
+
+
+fi
+
+
+
+else
+  -lm
+fi
+
+
+
+
+
+
+# Check whether --with-html-dir or --without-html-dir was given.
+if test "${with_html_dir+set}" = set; then
+  withval="$with_html_dir"
+
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi;
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc or --disable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then
+  enableval="$enable_gtk_doc"
+
+else
+  enable_gtk_doc=no
+fi;
+
+  have_gtk_doc=no
+  if test x$enable_gtk_doc = xyes; then
+    if test -z "$PKG_CONFIG"; then
+      # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    fi
+    if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
+      have_gtk_doc=yes
+    fi
+
+  gtk_doc_min_version=1.0
+    if test "$have_gtk_doc" = yes; then
+      echo "$as_me:$LINENO: checking gtk-doc version >= $gtk_doc_min_version" >&5
+echo $ECHO_N "checking gtk-doc version >= $gtk_doc_min_version... $ECHO_C" >&6
+      if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
+        echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+      else
+        echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+        have_gtk_doc=no
+      fi
+    fi
+
+    if test "$have_gtk_doc" != yes; then
+      enable_gtk_doc=no
+    fi
+  fi
+
+
+
+if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+
+
+if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+
+
+LIBFAM_CFLAGS=""
+LIBFAM_LIBS=""
+have_libfam=no
+
+
+  # minimum supported version of pkg-config
+  xdt_cv_PKG_CONFIG_MIN_VERSION=0.9.0
+
+  # lookup pkg-config utility
+  if test x"$PKG_CONFIG" = x""; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+    if test x"$PKG_CONFIG" = x"no"; then
+      echo "*** The pkg-config utility could not be found on your system."
+      echo "*** Make sure it is in your path, or set the PKG_CONFIG"
+      echo "*** environment variable to the full path to pkg-config."
+      echo "*** You can download pkg-config from the freedesktop.org"
+      echo "*** software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+
+    # check pkg-config version
+    echo "$as_me:$LINENO: checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION" >&5
+echo $ECHO_N "checking for pkg-config >= $xdt_cv_PKG_CONFIG_MIN_VERSION... $ECHO_C" >&6
+    if $PKG_CONFIG --atleast-pkgconfig-version $xdt_cv_PKG_CONFIG_MIN_VERSION; then
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+    else
+      xdt_cv_PKG_CONFIG_VERSION=`$PKG_CONFIG --version`
+      echo "$as_me:$LINENO: result: $xdt_cv_PKG_CONFIG_VERSION" >&5
+echo "${ECHO_T}$xdt_cv_PKG_CONFIG_VERSION" >&6
+      echo "*** Your version of pkg-config is too old. You need atleast"
+      echo "*** pkg-config $xdt_cv_PKG_CONFIG_MIN_VERSION or newer. You can download pkg-config "
+      echo "*** from the freedesktop.org software repository at"
+      echo "***"
+      echo "***    http://www.freedesktop.org/software/pkgconfig"
+      echo "***"
+      exit 1
+    fi
+  fi
+
+
+  echo "$as_me:$LINENO: checking for gamin >= 0.1.0" >&5
+echo $ECHO_N "checking for gamin >= 0.1.0... $ECHO_C" >&6
+  if $PKG_CONFIG "--atleast-version=0.1.0" "gamin" >/dev/null 2>&1; then
+    LIBFAM_VERSION=`$PKG_CONFIG --modversion "gamin"`
+    echo "$as_me:$LINENO: result: $LIBFAM_VERSION" >&5
+echo "${ECHO_T}$LIBFAM_VERSION" >&6
+
+    echo "$as_me:$LINENO: checking LIBFAM_CFLAGS" >&5
+echo $ECHO_N "checking LIBFAM_CFLAGS... $ECHO_C" >&6
+    LIBFAM_CFLAGS=`$PKG_CONFIG --cflags "gamin"`
+    echo "$as_me:$LINENO: result: $LIBFAM_CFLAGS" >&5
+echo "${ECHO_T}$LIBFAM_CFLAGS" >&6
+
+    echo "$as_me:$LINENO: checking LIBFAM_LIBS" >&5
+echo $ECHO_N "checking LIBFAM_LIBS... $ECHO_C" >&6
+    LIBFAM_LIBS=`$PKG_CONFIG --libs "gamin"`
+    echo "$as_me:$LINENO: result: $LIBFAM_LIBS" >&5
+echo "${ECHO_T}$LIBFAM_LIBS" >&6
+
+    LIBFAM_REQUIRED_VERSION=0.1.0
+
+
+
+
+
+
+    have_libfam=yes
+  elif $PKG_CONFIG --exists "gamin" >/dev/null 2>&1; then
+    xdg_cv_version=`$PKG_CONFIG --modversion "gamin"`
+    echo "$as_me:$LINENO: result: found, but $xdt_cv_version" >&5
+echo "${ECHO_T}found, but $xdt_cv_version" >&6
+
+
+
+for ac_header in fam.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    echo "$as_me:$LINENO: checking for FAMOpen in -lfam" >&5
+echo $ECHO_N "checking for FAMOpen in -lfam... $ECHO_C" >&6
+if test "${ac_cv_lib_fam_FAMOpen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfam  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char FAMOpen ();
+int
+main ()
+{
+FAMOpen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_fam_FAMOpen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_fam_FAMOpen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_fam_FAMOpen" >&5
+echo "${ECHO_T}$ac_cv_lib_fam_FAMOpen" >&6
+if test $ac_cv_lib_fam_FAMOpen = yes; then
+  have_libfam="yes" LIBFAM_LIBS="-lfam"
+fi
+
+
+fi
+
+done
+
+
+  else
+    echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6
+
+
+
+for ac_header in fam.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------- ##
+## Report this to benny at xfce.org ##
+## ----------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    echo "$as_me:$LINENO: checking for FAMOpen in -lfam" >&5
+echo $ECHO_N "checking for FAMOpen in -lfam... $ECHO_C" >&6
+if test "${ac_cv_lib_fam_FAMOpen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfam  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char FAMOpen ();
+int
+main ()
+{
+FAMOpen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_fam_FAMOpen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_fam_FAMOpen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_fam_FAMOpen" >&5
+echo "${ECHO_T}$ac_cv_lib_fam_FAMOpen" >&6
+if test $ac_cv_lib_fam_FAMOpen = yes; then
+  have_libfam="yes" LIBFAM_LIBS="-lfam"
+fi
+
+
+fi
+
+done
+
+
+  fi
+
+if test x"$have_libfam" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FAM_H 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBFAM 1
+_ACEOF
+
+
+    save_LIBS="$LIBS"
+  LIBS="$LIBS $LIBFAM_LIBS"
+
+for ac_func in FAMNoExists
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  LIBS="$save_LIBS"
+fi
+
+
+
+echo "$as_me:$LINENO: checking for system flavour" >&5
+echo $ECHO_N "checking for system flavour... $ECHO_C" >&6
+case "$target_os" in
+*bsd*)
+  FLAVOUR="bsd"
+  ;;
+*)
+  FLAVOUR="sysv"
+  ;;
+esac
+echo "$as_me:$LINENO: result: $FLAVOUR" >&5
+echo "${ECHO_T}$FLAVOUR" >&6
+
+                    ac_config_links="$ac_config_links thunar-vfs/thunar-vfs-volume-impl.c:thunar-vfs/thunar-vfs-volume-$FLAVOUR.c thunar-vfs/thunar-vfs-volume-impl.h:thunar-vfs/thunar-vfs-volume-$FLAVOUR.h"
+
+
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+
+else
+  enable_debug=yes
+fi;
+echo "$as_me:$LINENO: checking whether to enable debugging support" >&5
+echo $ECHO_N "checking whether to enable debugging support... $ECHO_C" >&6
+if test x"$enable_debug" != x"no"; then
+  PLATFORM_CFLAGS="$PLATFORM_CFLAGS -O0 -g3 -DG_DISABLE_DEPRECATED -Werror -Wall"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+        save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-strict-aliasing"
+  echo "$as_me:$LINENO: checking whether $CC accepts -fno-strict-aliasing" >&5
+echo $ECHO_N "checking whether $CC accepts -fno-strict-aliasing... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+int x;
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+    PLATFORM_CFLAGS="$PLATFORM_CFLAGS -fno-strict-aliasing"
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+else
+  PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CAST_CHECKS -DG_DISABLE_CHECKS"
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+  echo "$as_me:$LINENO: checking whether $LD accepts -O1" >&5
+echo $ECHO_N "checking whether $LD accepts -O1... $ECHO_C" >&6
+  case `$LD -O1 -v 2>&1 </dev/null` in
+  *GNU* | *'with BFD'*)
+    PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -Wl,-O1"
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+# Check whether --enable-visibility or --disable-visibility was given.
+if test "${enable_visibility+set}" = set; then
+  enableval="$enable_visibility"
+
+else
+  enable_visibility=yes
+fi;
+have_gnuc_visibility=no
+if test x"$enable_visibility" != x"no"; then
+    echo "$as_me:$LINENO: checking whether $CC supports the GNUC visibility attribute" >&5
+echo $ECHO_N "checking whether $CC supports the GNUC visibility attribute... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+    void __attribute__ ((visibility("default"))) test_default (void) {}
+    void __attribute__ ((visibility("hidden"))) test_hidden (void) {}
+    int main (int argc, char **argv) { test_default (); test_hidden (); return 0; }
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+    have_gnuc_visibility=yes
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+if test x"$have_gnuc_visibility" = x"yes"; then
+  PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DHAVE_GNUC_VISIBILITY"
+fi
+
+
+if test x"$have_gnuc_visibility" = x"yes"; then
+  HAVE_GNUC_VISIBILITY_TRUE=
+  HAVE_GNUC_VISIBILITY_FALSE='#'
+else
+  HAVE_GNUC_VISIBILITY_TRUE='#'
+  HAVE_GNUC_VISIBILITY_FALSE=
+fi
+
+
+
+
+
+
+                                                                                                                                                                                                                                                                              ac_config_files="$ac_config_files Makefile docs/Makefile docs/design/Makefile docs/papers/Makefile docs/reference/Makefile docs/reference/thunar-vfs/Makefile docs/reference/thunar-vfs/version.xml docs/reference/thunarx/Makefile docs/reference/thunarx/version.xml examples/Makefile examples/open-terminal-here/Makefile icons/Makefile icons/24x24/Makefile icons/48x48/Makefile po/Makefile.in tdb/Makefile tdb/tdbconfig.h pixmaps/Makefile tests/Makefile tests/data/Makefile thunar/Makefile thunar-vfs/Makefile thunar-vfs/thunar-vfs-1.pc thunar-vfs/thunar-vfs-config.h thunarx/Makefile thunarx/thunarx-1.pc thunarx/thunarx-config.h"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+        mv -f po/POTFILES po/POTFILES.tmp
+        sed -e '/\[encoding.*\]/d' -e 's/\[.*\] *//' < po/POTFILES.tmp > po/POTFILES
+        rm -f po/POTFILES.tmp
+
+
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GCONF_TRUE}" && test -z "${HAVE_GCONF_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GCONF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GCONF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_LIBSTARTUP_NOTIFICATION_TRUE}" && test -z "${HAVE_LIBSTARTUP_NOTIFICATION_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_LIBSTARTUP_NOTIFICATION\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_LIBSTARTUP_NOTIFICATION\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GNUC_VISIBILITY_TRUE}" && test -z "${HAVE_GNUC_VISIBILITY_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GNUC_VISIBILITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GNUC_VISIBILITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by Thunar $as_me 0.1.4pre-alpha-r18850, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+Thunar config.status 0.1.4pre-alpha-r18850
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir}
+INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}'
+MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}'
+XGETTEXT='${INTLTOOL_XGETTEXT}'
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+  "docs/design/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/design/Makefile" ;;
+  "docs/papers/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/papers/Makefile" ;;
+  "docs/reference/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/reference/Makefile" ;;
+  "docs/reference/thunar-vfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/reference/thunar-vfs/Makefile" ;;
+  "docs/reference/thunar-vfs/version.xml" ) CONFIG_FILES="$CONFIG_FILES docs/reference/thunar-vfs/version.xml" ;;
+  "docs/reference/thunarx/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/reference/thunarx/Makefile" ;;
+  "docs/reference/thunarx/version.xml" ) CONFIG_FILES="$CONFIG_FILES docs/reference/thunarx/version.xml" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "examples/open-terminal-here/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/open-terminal-here/Makefile" ;;
+  "icons/Makefile" ) CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;;
+  "icons/24x24/Makefile" ) CONFIG_FILES="$CONFIG_FILES icons/24x24/Makefile" ;;
+  "icons/48x48/Makefile" ) CONFIG_FILES="$CONFIG_FILES icons/48x48/Makefile" ;;
+  "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+  "tdb/Makefile" ) CONFIG_FILES="$CONFIG_FILES tdb/Makefile" ;;
+  "tdb/tdbconfig.h" ) CONFIG_FILES="$CONFIG_FILES tdb/tdbconfig.h" ;;
+  "pixmaps/Makefile" ) CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;;
+  "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+  "tests/data/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/data/Makefile" ;;
+  "thunar/Makefile" ) CONFIG_FILES="$CONFIG_FILES thunar/Makefile" ;;
+  "thunar-vfs/Makefile" ) CONFIG_FILES="$CONFIG_FILES thunar-vfs/Makefile" ;;
+  "thunar-vfs/thunar-vfs-1.pc" ) CONFIG_FILES="$CONFIG_FILES thunar-vfs/thunar-vfs-1.pc" ;;
+  "thunar-vfs/thunar-vfs-config.h" ) CONFIG_FILES="$CONFIG_FILES thunar-vfs/thunar-vfs-config.h" ;;
+  "thunarx/Makefile" ) CONFIG_FILES="$CONFIG_FILES thunarx/Makefile" ;;
+  "thunarx/thunarx-1.pc" ) CONFIG_FILES="$CONFIG_FILES thunarx/thunarx-1.pc" ;;
+  "thunarx/thunarx-config.h" ) CONFIG_FILES="$CONFIG_FILES thunarx/thunarx-config.h" ;;
+  "thunar-vfs/thunar-vfs-volume-impl.c" ) CONFIG_LINKS="$CONFIG_LINKS thunar-vfs/thunar-vfs-volume-impl.c:thunar-vfs/thunar-vfs-volume-$FLAVOUR.c" ;;
+  "thunar-vfs/thunar-vfs-volume-impl.h" ) CONFIG_LINKS="$CONFIG_LINKS thunar-vfs/thunar-vfs-volume-impl.h:thunar-vfs/thunar-vfs-volume-$FLAVOUR.h" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "intltool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS intltool" ;;
+  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at target@,$target,;t t
+s, at target_cpu@,$target_cpu,;t t
+s, at target_vendor@,$target_vendor,;t t
+s, at target_os@,$target_os,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at CYGPATH_W@,$CYGPATH_W,;t t
+s, at PACKAGE@,$PACKAGE,;t t
+s, at VERSION@,$VERSION,;t t
+s, at ACLOCAL@,$ACLOCAL,;t t
+s, at AUTOCONF@,$AUTOCONF,;t t
+s, at AUTOMAKE@,$AUTOMAKE,;t t
+s, at AUTOHEADER@,$AUTOHEADER,;t t
+s, at MAKEINFO@,$MAKEINFO,;t t
+s, at install_sh@,$install_sh,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s, at mkdir_p@,$mkdir_p,;t t
+s, at AWK@,$AWK,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at am__leading_dot@,$am__leading_dot,;t t
+s, at AMTAR@,$AMTAR,;t t
+s, at am__tar@,$am__tar,;t t
+s, at am__untar@,$am__untar,;t t
+s, at MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s, at MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s, at MAINT@,$MAINT,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at DEPDIR@,$DEPDIR,;t t
+s, at am__include@,$am__include,;t t
+s, at am__quote@,$am__quote,;t t
+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s, at CCDEPMODE@,$CCDEPMODE,;t t
+s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at INTLTOOL_DESKTOP_RULE@,$INTLTOOL_DESKTOP_RULE,;t t
+s, at INTLTOOL_DIRECTORY_RULE@,$INTLTOOL_DIRECTORY_RULE,;t t
+s, at INTLTOOL_KEYS_RULE@,$INTLTOOL_KEYS_RULE,;t t
+s, at INTLTOOL_PROP_RULE@,$INTLTOOL_PROP_RULE,;t t
+s, at INTLTOOL_OAF_RULE@,$INTLTOOL_OAF_RULE,;t t
+s, at INTLTOOL_PONG_RULE@,$INTLTOOL_PONG_RULE,;t t
+s, at INTLTOOL_SERVER_RULE@,$INTLTOOL_SERVER_RULE,;t t
+s, at INTLTOOL_SHEET_RULE@,$INTLTOOL_SHEET_RULE,;t t
+s, at INTLTOOL_SOUNDLIST_RULE@,$INTLTOOL_SOUNDLIST_RULE,;t t
+s, at INTLTOOL_UI_RULE@,$INTLTOOL_UI_RULE,;t t
+s, at INTLTOOL_XAM_RULE@,$INTLTOOL_XAM_RULE,;t t
+s, at INTLTOOL_KBD_RULE@,$INTLTOOL_KBD_RULE,;t t
+s, at INTLTOOL_XML_RULE@,$INTLTOOL_XML_RULE,;t t
+s, at INTLTOOL_XML_NOMERGE_RULE@,$INTLTOOL_XML_NOMERGE_RULE,;t t
+s, at INTLTOOL_CAVES_RULE@,$INTLTOOL_CAVES_RULE,;t t
+s, at INTLTOOL_SCHEMAS_RULE@,$INTLTOOL_SCHEMAS_RULE,;t t
+s, at INTLTOOL_THEME_RULE@,$INTLTOOL_THEME_RULE,;t t
+s, at INTLTOOL_EXTRACT@,$INTLTOOL_EXTRACT,;t t
+s, at INTLTOOL_MERGE@,$INTLTOOL_MERGE,;t t
+s, at INTLTOOL_UPDATE@,$INTLTOOL_UPDATE,;t t
+s, at INTLTOOL_PERL@,$INTLTOOL_PERL,;t t
+s, at INTLTOOL_ICONV@,$INTLTOOL_ICONV,;t t
+s, at INTLTOOL_MSGFMT@,$INTLTOOL_MSGFMT,;t t
+s, at INTLTOOL_MSGMERGE@,$INTLTOOL_MSGMERGE,;t t
+s, at INTLTOOL_XGETTEXT@,$INTLTOOL_XGETTEXT,;t t
+s, at PERL@,$PERL,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at AR@,$AR,;t t
+s, at ac_ct_AR@,$ac_ct_AR,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at CXX@,$CXX,;t t
+s, at CXXFLAGS@,$CXXFLAGS,;t t
+s, at ac_ct_CXX@,$ac_ct_CXX,;t t
+s, at CXXDEPMODE@,$CXXDEPMODE,;t t
+s, at am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s, at am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s, at CXXCPP@,$CXXCPP,;t t
+s, at F77@,$F77,;t t
+s, at FFLAGS@,$FFLAGS,;t t
+s, at ac_ct_F77@,$ac_ct_F77,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at THUNAR_VERINFO@,$THUNAR_VERINFO,;t t
+s, at THUNAR_VERSION_API@,$THUNAR_VERSION_API,;t t
+s, at THUNAR_VERSION_MAJOR@,$THUNAR_VERSION_MAJOR,;t t
+s, at THUNAR_VERSION_MINOR@,$THUNAR_VERSION_MINOR,;t t
+s, at THUNAR_VERSION_MICRO@,$THUNAR_VERSION_MICRO,;t t
+s, at TDB_U32_TYPE@,$TDB_U32_TYPE,;t t
+s, at GETTEXT_PACKAGE@,$GETTEXT_PACKAGE,;t t
+s, at USE_NLS@,$USE_NLS,;t t
+s, at MSGFMT@,$MSGFMT,;t t
+s, at GMSGFMT@,$GMSGFMT,;t t
+s, at XGETTEXT@,$XGETTEXT,;t t
+s, at CATALOGS@,$CATALOGS,;t t
+s, at CATOBJEXT@,$CATOBJEXT,;t t
+s, at DATADIRNAME@,$DATADIRNAME,;t t
+s, at GMOFILES@,$GMOFILES,;t t
+s, at INSTOBJEXT@,$INSTOBJEXT,;t t
+s, at INTLLIBS@,$INTLLIBS,;t t
+s, at PO_IN_DATADIR_TRUE@,$PO_IN_DATADIR_TRUE,;t t
+s, at PO_IN_DATADIR_FALSE@,$PO_IN_DATADIR_FALSE,;t t
+s, at POFILES@,$POFILES,;t t
+s, at POSUB@,$POSUB,;t t
+s, at MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s, at localedir@,$localedir,;t t
+s, at XGETTEXT_ARGS@,$XGETTEXT_ARGS,;t t
+s, at PKG_CONFIG@,$PKG_CONFIG,;t t
+s, at EXO_VERSION@,$EXO_VERSION,;t t
+s, at EXO_CFLAGS@,$EXO_CFLAGS,;t t
+s, at EXO_LIBS@,$EXO_LIBS,;t t
+s, at EXO_REQUIRED_VERSION@,$EXO_REQUIRED_VERSION,;t t
+s, at GLIB_VERSION@,$GLIB_VERSION,;t t
+s, at GLIB_CFLAGS@,$GLIB_CFLAGS,;t t
+s, at GLIB_LIBS@,$GLIB_LIBS,;t t
+s, at GLIB_REQUIRED_VERSION@,$GLIB_REQUIRED_VERSION,;t t
+s, at GTHREAD_VERSION@,$GTHREAD_VERSION,;t t
+s, at GTHREAD_CFLAGS@,$GTHREAD_CFLAGS,;t t
+s, at GTHREAD_LIBS@,$GTHREAD_LIBS,;t t
+s, at GTHREAD_REQUIRED_VERSION@,$GTHREAD_REQUIRED_VERSION,;t t
+s, at GTK_VERSION@,$GTK_VERSION,;t t
+s, at GTK_CFLAGS@,$GTK_CFLAGS,;t t
+s, at GTK_LIBS@,$GTK_LIBS,;t t
+s, at GTK_REQUIRED_VERSION@,$GTK_REQUIRED_VERSION,;t t
+s, at LIBPNG_VERSION@,$LIBPNG_VERSION,;t t
+s, at LIBPNG_CFLAGS@,$LIBPNG_CFLAGS,;t t
+s, at LIBPNG_LIBS@,$LIBPNG_LIBS,;t t
+s, at LIBPNG_REQUIRED_VERSION@,$LIBPNG_REQUIRED_VERSION,;t t
+s, at CAIRO_VERSION@,$CAIRO_VERSION,;t t
+s, at CAIRO_CFLAGS@,$CAIRO_CFLAGS,;t t
+s, at CAIRO_LIBS@,$CAIRO_LIBS,;t t
+s, at CAIRO_REQUIRED_VERSION@,$CAIRO_REQUIRED_VERSION,;t t
+s, at HAVE_CAIRO_TRUE@,$HAVE_CAIRO_TRUE,;t t
+s, at HAVE_CAIRO_FALSE@,$HAVE_CAIRO_FALSE,;t t
+s, at GCONF_VERSION@,$GCONF_VERSION,;t t
+s, at GCONF_CFLAGS@,$GCONF_CFLAGS,;t t
+s, at GCONF_LIBS@,$GCONF_LIBS,;t t
+s, at GCONF_REQUIRED_VERSION@,$GCONF_REQUIRED_VERSION,;t t
+s, at HAVE_GCONF_TRUE@,$HAVE_GCONF_TRUE,;t t
+s, at HAVE_GCONF_FALSE@,$HAVE_GCONF_FALSE,;t t
+s, at LIBSTARTUP_NOTIFICATION_VERSION@,$LIBSTARTUP_NOTIFICATION_VERSION,;t t
+s, at LIBSTARTUP_NOTIFICATION_CFLAGS@,$LIBSTARTUP_NOTIFICATION_CFLAGS,;t t
+s, at LIBSTARTUP_NOTIFICATION_LIBS@,$LIBSTARTUP_NOTIFICATION_LIBS,;t t
+s, at LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@,$LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION,;t t
+s, at HAVE_LIBSTARTUP_NOTIFICATION_TRUE@,$HAVE_LIBSTARTUP_NOTIFICATION_TRUE,;t t
+s, at HAVE_LIBSTARTUP_NOTIFICATION_FALSE@,$HAVE_LIBSTARTUP_NOTIFICATION_FALSE,;t t
+s, at LIBJPEG_CFLAGS@,$LIBJPEG_CFLAGS,;t t
+s, at LIBJPEG_LIBS@,$LIBJPEG_LIBS,;t t
+s, at HTML_DIR@,$HTML_DIR,;t t
+s, at ENABLE_GTK_DOC_TRUE@,$ENABLE_GTK_DOC_TRUE,;t t
+s, at ENABLE_GTK_DOC_FALSE@,$ENABLE_GTK_DOC_FALSE,;t t
+s, at GTK_DOC_USE_LIBTOOL_TRUE@,$GTK_DOC_USE_LIBTOOL_TRUE,;t t
+s, at GTK_DOC_USE_LIBTOOL_FALSE@,$GTK_DOC_USE_LIBTOOL_FALSE,;t t
+s, at LIBFAM_VERSION@,$LIBFAM_VERSION,;t t
+s, at LIBFAM_CFLAGS@,$LIBFAM_CFLAGS,;t t
+s, at LIBFAM_LIBS@,$LIBFAM_LIBS,;t t
+s, at LIBFAM_REQUIRED_VERSION@,$LIBFAM_REQUIRED_VERSION,;t t
+s, at HAVE_GNUC_VISIBILITY_TRUE@,$HAVE_GNUC_VISIBILITY_TRUE,;t t
+s, at HAVE_GNUC_VISIBILITY_FALSE@,$HAVE_GNUC_VISIBILITY_FALSE,;t t
+s, at PLATFORM_CFLAGS@,$PLATFORM_CFLAGS,;t t
+s, at PLATFORM_CPPFLAGS@,$PLATFORM_CPPFLAGS,;t t
+s, at PLATFORM_LDFLAGS@,$PLATFORM_LDFLAGS,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_LINKS section.
+#
+
+for ac_file in : $CONFIG_LINKS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+
+  { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_dest" >&5
+echo "$as_me: linking $srcdir/$ac_source to $ac_dest" >&6;}
+
+  if test ! -r $srcdir/$ac_source; then
+    { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5
+echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  rm -f $ac_dest
+
+  # Make relative symlinks.
+  ac_dest_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dest_dir"
+  else
+    as_dir="$ac_dest_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dest_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dest_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dest_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dest_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dest_dir";;
+*)
+  case "$ac_dest_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dest_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dest_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $srcdir in
+  [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;;
+      *) ac_rel_source=$ac_top_builddir$srcdir/$ac_source ;;
+  esac
+
+  # Try a symlink, then a hard link, then a copy.
+  ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+    ln $srcdir/$ac_source $ac_dest 2>/dev/null ||
+    cp -p $srcdir/$ac_source $ac_dest ||
+    { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&5
+echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&2;}
+   { (exit 1); exit 1; }; }
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    intltool )
+
+intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \
+               -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \
+               -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \
+               -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \
+               -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \
+               -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'"
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \
+  > intltool-extract.out
+if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then
+  rm -f intltool-extract.out
+else
+  mv -f intltool-extract.out intltool-extract
+fi
+chmod ugo+x intltool-extract
+chmod u+w intltool-extract
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \
+  > intltool-merge.out
+if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then
+  rm -f intltool-merge.out
+else
+  mv -f intltool-merge.out intltool-merge
+fi
+chmod ugo+x intltool-merge
+chmod u+w intltool-merge
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \
+  > intltool-update.out
+if cmp -s intltool-update intltool-update.out 2>/dev/null; then
+  rm -f intltool-update.out
+else
+  mv -f intltool-update.out intltool-update
+fi
+chmod ugo+x intltool-update
+chmod u+w intltool-update
+
+ ;;
+    default-1 ) case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+


Property changes on: desktop/trunk/thunar/branches/upstream/current/configure
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/configure.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/configure.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/configure.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,348 @@
+dnl $Id: configure.in.in 18846 2005-11-14 17:33:30Z benny $
+dnl
+dnl Copyright (c) 2004-2005
+dnl         The Thunar development team. All rights reserved.
+dnl
+dnl Written for Thunar by Benedikt Meurer <benny at xfce.org>.
+dnl
+
+dnl ***************************
+dnl *** Version information ***
+dnl ***************************
+m4_define([thunar_verinfo], [0:0:0])
+m4_define([thunar_version_api], [1])
+m4_define([thunar_version_major], [0])
+m4_define([thunar_version_minor], [1])
+m4_define([thunar_version_micro], [4])
+m4_define([thunar_version_build], [r18850])
+m4_define([thunar_version_tag], [pre-alpha])
+m4_define([thunar_version], [thunar_version_major().thunar_version_minor().thunar_version_micro()ifelse(thunar_version_tag(), [], [], [thunar_version_tag()-thunar_version_build()])])
+
+dnl ***************************
+dnl *** Initialize autoconf ***
+dnl ***************************
+AC_COPYRIGHT([Copyright (c) 2004-2005
+        The Thunar development team. All rights reserved.
+        
+Written for Thunar by Benedikt Meurer <benny at xfce.org>.])
+AC_INIT([Thunar], [thunar_version()], [benny at xfce.org], [Thunar])
+AC_PREREQ([2.50])
+AC_CANONICAL_TARGET()
+AC_REVISION([$Id: configure.in.in 18846 2005-11-14 17:33:30Z benny $])
+
+dnl ***************************
+dnl *** Initialize automake ***
+dnl ***************************
+AM_INIT_AUTOMAKE([AC_PACKAGE_TARNAME()], [AC_PACKAGE_VERSION()])
+AM_CONFIG_HEADER([config.h])
+AM_MAINTAINER_MODE()
+
+dnl *******************************
+dnl *** Check for UNIX variants ***
+dnl *******************************
+AC_AIX()
+AC_ISC_POSIX()
+AC_MINIX()
+
+dnl ********************************
+dnl *** Check for basic programs ***
+dnl ********************************
+AC_PROG_CC()
+AC_PROG_LD()
+AC_PROG_INSTALL()
+AC_PROG_INTLTOOL()
+AC_CHECK_PROGS([PERL], [perl5 perl])
+
+dnl **************************
+dnl *** Initialize libtool ***
+dnl **************************
+AC_DISABLE_STATIC()
+AC_PROG_LIBTOOL()
+
+dnl **************************************
+dnl *** Substitute version information ***
+dnl **************************************
+THUNAR_VERINFO=thunar_verinfo()
+THUNAR_VERSION_API=thunar_version_api()
+THUNAR_VERSION_MAJOR=thunar_version_major()
+THUNAR_VERSION_MINOR=thunar_version_minor()
+THUNAR_VERSION_MICRO=thunar_version_micro()
+AC_SUBST([THUNAR_VERINFO])
+AC_SUBST([THUNAR_VERSION_API])
+AC_SUBST([THUNAR_VERSION_MAJOR])
+AC_SUBST([THUNAR_VERSION_MINOR])
+AC_SUBST([THUNAR_VERSION_MICRO])
+
+dnl ***********************************************
+dnl *** Determine the u32 type required for tdb ***
+dnl ***********************************************
+AC_CHECK_SIZEOF([int])
+AC_CHECK_SIZEOF([long])
+AC_CHECK_SIZEOF([short])
+AC_MSG_CHECKING([for 32bit unsigned integer])
+case 4 in
+$ac_cv_sizeof_int)   TDB_U32_TYPE="unsigned int" ;;
+$ac_cv_sizeof_long)  TDB_U32_TYPE="unsigned long" ;;
+$ac_cv_sizeof_short) TDB_U32_TYPE="unsigned short" ;;
+esac
+AC_SUBST([TDB_U32_TYPE])
+AC_MSG_RESULT([$TDB_U32_TYPE])
+
+dnl **********************************
+dnl *** Check for standard headers ***
+dnl **********************************
+AC_CHECK_HEADERS([ctype.h dirent.h errno.h fcntl.h fnmatch.h fstab.h grp.h \
+                  locale.h math.h memory.h mmintrin.h pwd.h sched.h setjmp.h \
+                  stdarg.h stdlib.h string.h sys/xattr.h sys/extattr.h \
+                  sys/cdio.h sys/mman.h \
+                  sys/mount.h sys/param.h sys/stat.h sys/time.h sys/uio.h \
+                  sys/wait.h time.h wchar.h wctype.h])
+
+dnl ************************************
+dnl *** Check for standard functions ***
+dnl ************************************
+AC_FUNC_MMAP()
+AC_CHECK_FUNCS([attropen extattr_get_fd fgetxattr lchmod localtime_r \
+                mbrtowc pread pwrite readdir_r \
+                sched_yield setgroupent setpassent])
+
+dnl ***************************************
+dnl *** Check for working posix_madvise ***
+dnl ***************************************
+m4_define([posix_madvise_test],
+[
+posix_madvise (0, 0, POSIX_MADV_NORMAL);
+posix_madvise (0, 0, POSIX_MADV_SEQUENTIAL);
+posix_madvise (0, 0, POSIX_MADV_RANDOM);
+posix_madvise (0, 0, POSIX_MADV_WILLNEED);
+posix_madvise (0, 0, POSIX_MADV_DONTNEED);
+])
+AC_MSG_CHECKING([for working posix_madvise])
+AC_TRY_LINK([#include <sys/mman.h>], posix_madvise_test(),
+[
+  AC_DEFINE([HAVE_POSIX_MADVISE], [1], [Define if posix_madvise is working])
+  AC_MSG_RESULT([yes])
+],
+[
+  dnl As usual, Linux/glibc doesn't work properly out-of-the-box
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -D__USE_XOPEN2K"
+  AC_TRY_LINK([#include <sys/mman.h>], posix_madvise_test(),
+  [
+    AC_DEFINE([HAVE_POSIX_MADVISE], [1], [Define if posix_madvise is working])
+    AC_MSG_RESULT([yes])
+  ],
+  [
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    AC_MSG_RESULT([no])
+  ])
+])
+
+dnl ******************************
+dnl *** Check for i18n support ***
+dnl ******************************
+XDT_I18N([de el es hu ja])
+
+dnl ***********************************
+dnl *** Check for required packages ***
+dnl ***********************************
+XDT_CHECK_PACKAGE([EXO], [exo-0.3], [0.3.1.1])
+XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.6.4])
+XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.6.4])
+XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0])
+XDT_CHECK_PACKAGE([LIBPNG], [libpng12], [1.2.0])
+
+dnl **********************************
+dnl *** Optional support for cairo ***
+dnl **********************************
+XDT_CHECK_OPTIONAL_PACKAGE([CAIRO], [cairo], [0.5], [cairo], [Cairo])
+
+dnl *******************************************************
+dnl *** Optional support for gconf (GNOME thumbnailers) ***
+dnl *******************************************************
+XDT_CHECK_OPTIONAL_PACKAGE([GCONF], [gconf-2.0],
+                           [2.4.0], [gnome-thumbnailers],
+                           [GNOME thumbnailer support])
+
+dnl *************************************************
+dnl *** Optional support for startup notification ***
+dnl *************************************************
+XDT_CHECK_OPTIONAL_PACKAGE([LIBSTARTUP_NOTIFICATION],
+                           [libstartup-notification-1.0],
+                           [0.4], [startup-notification],
+                           [startup notification library])
+
+dnl *************************
+dnl *** Check for libjpeg ***
+dnl *************************
+LIBJPEG_LIBS=""
+LIBJPEG_CFLAGS=""
+AC_CHECK_LIB([jpeg], [jpeg_start_decompress],
+[
+  AC_CHECK_HEADER([jpeglib.h],
+  [
+    LIBJPEG_LIBS="-ljpeg -lm"
+    AC_DEFINE([HAVE_LIBJPEG], [1], [Define to 1 if libjpeg is found])
+    AC_DEFINE([HAVE_JPEGLIB_H], [1], [Define to 1 if jpeglib.h is found])
+  ])
+], [-lm])
+AC_SUBST([LIBJPEG_CFLAGS])
+AC_SUBST([LIBJPEG_LIBS])
+
+dnl *************************
+dnl *** Check for gtk-doc ***
+dnl *************************
+GTK_DOC_CHECK([1.0])
+
+dnl ***************************
+dnl *** Check for Gamin/FAM ***
+dnl ***************************
+LIBFAM_CFLAGS=""
+LIBFAM_LIBS=""
+have_libfam=no
+XDT_CHECK_PACKAGE([LIBFAM], [gamin], [0.1.0], [have_libfam=yes],
+[
+  dnl Fallback to a generic FAM check
+  AC_CHECK_HEADERS([fam.h],
+  [
+    AC_CHECK_LIB([fam], [FAMOpen], [have_libfam="yes" LIBFAM_LIBS="-lfam"])
+  ])
+])
+if test x"$have_libfam" = x"yes"; then
+  dnl Define appropriate symbols
+  AC_DEFINE([HAVE_FAM_H], [1], [Define to 1 if you have the <fam.h> header file.])
+  AC_DEFINE([HAVE_LIBFAM], [1], [Define to 1 if the File Alteration Monitor is available.])
+
+  dnl Check for FAMNoExists (currently Gamin only)
+  save_LIBS="$LIBS"
+  LIBS="$LIBS $LIBFAM_LIBS"
+  AC_CHECK_FUNCS([FAMNoExists])
+  LIBS="$save_LIBS"
+fi
+AC_SUBST([LIBFAM_CFLAGS])
+AC_SUBST([LIBFAM_LIBS])
+
+dnl ************************************
+dnl *** Check for the system flavour ***
+dnl ************************************
+AC_MSG_CHECKING([for system flavour])
+case "$target_os" in
+*bsd*)
+  FLAVOUR="bsd"
+  ;;
+*)
+  FLAVOUR="sysv"
+  ;;
+esac
+AC_MSG_RESULT([$FLAVOUR])
+
+dnl **********************************************************
+dnl *** Create links for the volume manager implementation ***
+dnl **********************************************************
+AC_CONFIG_LINKS(
+[
+  thunar-vfs/thunar-vfs-volume-impl.c:thunar-vfs/thunar-vfs-volume-$FLAVOUR.c
+  thunar-vfs/thunar-vfs-volume-impl.h:thunar-vfs/thunar-vfs-volume-$FLAVOUR.h
+])
+
+dnl ***********************************
+dnl *** Check for debugging support ***
+dnl ***********************************
+AC_ARG_ENABLE([debug], AC_HELP_STRING([--disable-debug], [Disable debugging support]), [], [enable_debug=yes])
+AC_MSG_CHECKING([whether to enable debugging support])
+if test x"$enable_debug" != x"no"; then
+  PLATFORM_CFLAGS="$PLATFORM_CFLAGS -O0 -g3 -DG_DISABLE_DEPRECATED -Werror -Wall"
+  AC_MSG_RESULT([yes])
+
+  dnl Check whether the compiler accepts the -fno-strict-aliasing
+  dnl switch, as certain packages - like Glib - still don't work
+  dnl properly with newer compilers.
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-strict-aliasing"
+  AC_MSG_CHECKING([whether $CC accepts -fno-strict-aliasing])
+  AC_COMPILE_IFELSE(AC_LANG_SOURCE([int x;]), [
+    AC_MSG_RESULT([yes])
+    PLATFORM_CFLAGS="$PLATFORM_CFLAGS -fno-strict-aliasing"
+  ], [
+    AC_MSG_RESULT([no])
+  ])
+  CFLAGS="$save_CFLAGS"
+else
+  PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CAST_CHECKS -DG_DISABLE_CHECKS"
+  AC_MSG_RESULT([no])
+
+  AC_MSG_CHECKING([whether $LD accepts -O1])
+  case `$LD -O1 -v 2>&1 </dev/null` in
+  *GNU* | *'with BFD'*)
+    PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -Wl,-O1"
+    AC_MSG_RESULT([yes])
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+
+dnl ****************************************
+dnl *** Check for ELF visibility support ***
+dnl ****************************************
+AC_ARG_ENABLE([visibility], AC_HELP_STRING([--disable-visibility], [Don't use ELF visibility attributes]), [], [enable_visibility=yes])
+have_gnuc_visibility=no
+if test x"$enable_visibility" != x"no"; then
+  dnl Check whether the compiler supports the visibility attribute
+  AC_MSG_CHECKING([whether $CC supports the GNUC visibility attribute])
+  AC_COMPILE_IFELSE(AC_LANG_SOURCE(
+  [
+    void __attribute__ ((visibility("default"))) test_default (void) {}
+    void __attribute__ ((visibility("hidden"))) test_hidden (void) {}
+    int main (int argc, char **argv) { test_default (); test_hidden (); return 0; }
+  ]),
+  [
+    have_gnuc_visibility=yes
+    AC_MSG_RESULT([yes])
+  ],
+  [
+    AC_MSG_RESULT([no])
+  ])
+fi
+if test x"$have_gnuc_visibility" = x"yes"; then
+  PLATFORM_CPPFLAGS="$PLATFORM_CPPFLAGS -DHAVE_GNUC_VISIBILITY"
+fi
+AM_CONDITIONAL([HAVE_GNUC_VISIBILITY], [test x"$have_gnuc_visibility" = x"yes"])
+
+dnl *********************************
+dnl *** Substitute platform flags ***
+dnl *********************************
+AC_SUBST([PLATFORM_CFLAGS])
+AC_SUBST([PLATFORM_CPPFLAGS])
+AC_SUBST([PLATFORM_LDFLAGS])
+
+AC_OUTPUT([
+Makefile
+docs/Makefile
+docs/design/Makefile
+docs/papers/Makefile
+docs/reference/Makefile
+docs/reference/thunar-vfs/Makefile
+docs/reference/thunar-vfs/version.xml
+docs/reference/thunarx/Makefile
+docs/reference/thunarx/version.xml
+examples/Makefile
+examples/open-terminal-here/Makefile
+icons/Makefile
+icons/24x24/Makefile
+icons/48x48/Makefile
+po/Makefile.in
+tdb/Makefile
+tdb/tdbconfig.h
+pixmaps/Makefile
+tests/Makefile
+tests/data/Makefile
+thunar/Makefile
+thunar-vfs/Makefile
+thunar-vfs/thunar-vfs-1.pc
+thunar-vfs/thunar-vfs-config.h
+thunarx/Makefile
+thunarx/thunarx-1.pc
+thunarx/thunarx-config.h
+])

Added: desktop/trunk/thunar/branches/upstream/current/depcomp
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/depcomp	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/depcomp	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,522 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2004-05-31.23
+
+# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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.
+
+# 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.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit 0
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit 0
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # Dependencies are output in .lo.d with libtool 1.4.
+      # With libtool 1.5 they are output both in $dir.libs/$base.o.d
+      # and in $dir.libs/$base.o.d and $dir$base.o.d.  We process the
+      # latter, because the former will be cleaned when $dir.libs is
+      # erased.
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir$base.o.d"
+      tmpdepfile3="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      tmpdepfile3="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   elif test -f "$tmpdepfile2"; then
+      tmpdepfile="$tmpdepfile2"
+   else
+      tmpdepfile="$tmpdepfile3"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/depcomp
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/docs/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,8 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	design								\
+	papers								\
+	reference
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,575 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	design								\
+	papers								\
+	reference
+
+all: all-recursive
+
+.SUFFIXES:
+$(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  docs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	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: ctags-recursive $(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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,7 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+EXTRA_DIST =								\
+	mime.xmi							\
+	overview.xmi
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/design/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,429 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = docs/design
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+EXTRA_DIST = \
+	mime.xmi							\
+	overview.xmi
+
+all: all-am
+
+.SUFFIXES:
+$(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  docs/design/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/design/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+installdirs:
+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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/design/mime.xmi
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/design/mime.xmi	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/design/mime.xmi	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,2118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2005-08-06T16:29:34" xmi.version="1.2" >
+ <XMI.header>
+  <XMI.documentation>
+   <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
+   <XMI.exporterVersion>1.4</XMI.exporterVersion>
+   <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
+  </XMI.documentation>
+  <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
+ </XMI.header>
+ <XMI.content>
+  <UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" >
+   <UML:Namespace.ownedElement>
+    <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" xmi.id="3" isRoot="false" isAbstract="false" name="datatype" />
+    <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" xmi.id="12" isRoot="false" isAbstract="false" name="interface" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="2" isRoot="false" isAbstract="false" name="int" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="4" isRoot="false" isAbstract="false" name="char" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="5" isRoot="false" isAbstract="false" name="bool" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="6" isRoot="false" isAbstract="false" name="float" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="7" isRoot="false" isAbstract="false" name="double" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="8" isRoot="false" isAbstract="false" name="long" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="9" isRoot="false" isAbstract="false" name="short" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="10" isRoot="false" isAbstract="false" name="string" />
+    <UML:DataType stereotype="3" isSpecification="false" isLeaf="false" visibility="public" xmi.id="14" isRoot="false" isAbstract="false" name="void" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="45" isRoot="false" isAbstract="true" name="ThunarVfsMimeProvider" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="46" isRoot="false" isAbstract="true" name="lookup_data" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="677" type="10" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="47" isRoot="false" value="" type="10" isAbstract="false" name="data" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="48" isRoot="false" value="" type="2" isAbstract="false" name="length" />
+        <UML:Parameter isSpecification="false" kind="out" isLeaf="false" visibility="private" xmi.id="49" isRoot="false" value="" type="2" isAbstract="false" name="priority" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="51" isRoot="false" isAbstract="true" name="lookup_literal" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="678" type="10" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="52" isRoot="false" value="" type="10" isAbstract="false" name="filename" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="54" isRoot="false" isAbstract="true" name="lookup_suffix" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="679" type="10" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="55" isRoot="false" value="" type="10" isAbstract="false" name="suffix" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="58" isRoot="false" value="" type="5" isAbstract="false" name="ignore_case" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="61" isRoot="false" isAbstract="true" name="lookup_glob" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="680" type="10" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="62" isRoot="false" value="" type="10" isAbstract="false" name="filename" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="66" isRoot="false" isAbstract="true" name="get_stop_characters" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="681" type="10" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="67" isRoot="false" isAbstract="true" name="get_max_buffer_extents" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="682" type="2" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="92" isRoot="false" isAbstract="false" name="ThunarVfsMimeCache" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="142" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="99" isRoot="false" isAbstract="false" name="ThunarVfsMimeLegacy" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="157" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="196" isRoot="false" isAbstract="false" name="ThunarVfsMimeDatabase" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="232" isRoot="false" isAbstract="false" name="get_info" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="683" type="204" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="233" isRoot="false" value="" type="10" isAbstract="false" name="mime_type" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="245" isRoot="false" isAbstract="false" name="get_info_for_data" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="684" type="204" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="246" isRoot="false" value="" type="10" isAbstract="false" name="data" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="258" isRoot="false" value="" type="2" isAbstract="false" name="length" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="270" isRoot="false" isAbstract="false" name="get_info_for_name" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="685" type="204" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="271" isRoot="false" value="" type="10" isAbstract="false" name="name" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="284" isRoot="false" isAbstract="false" name="get_info_for_file" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="686" type="204" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="285" isRoot="false" value="" type="10" isAbstract="false" name="path" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="299" isRoot="false" value="" type="10" isAbstract="false" name="name" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="204" isRoot="false" isAbstract="false" name="ThunarVfsMimeInfo" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="217" isRoot="false" isAbstract="false" name="get_comment" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="687" type="10" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="218" isRoot="false" isAbstract="false" name="get_name" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="688" type="10" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="219" isRoot="false" isAbstract="false" name="get_media" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="689" type="10" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="220" isRoot="false" isAbstract="false" name="get_subtype" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="690" type="10" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Generalization isSpecification="false" child="92" visibility="public" xmi.id="142" parent="45" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="99" visibility="public" xmi.id="157" parent="45" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="453" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="454" aggregation="none" type="196" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="455" aggregation="none" type="45" name="" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="544" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="545" aggregation="none" type="196" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="546" aggregation="none" type="204" name="" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+   </UML:Namespace.ownedElement>
+  </UML:Model>
+ </XMI.content>
+ <XMI.extensions xmi.extender="umbrello" >
+  <docsettings viewid="1" documentation="" uniqueid="690" />
+  <diagrams>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="886" snapy="10" showatts="1" xmi.id="1" documentation="" type="402" showops="1" showpackage="0" name="ThunarVFS MIME components" localid="900000" showstereotype="1" showscope="1" snapcsgrid="1" font="Bitstream Vera Sans,11,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="745" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="540" showattsigs="601" usesdiagramusefillcolour="0" x="30" linecolour="#ff0000" y="235" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="170" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="45" showoperations="1" showpackage="0" showscope="1" showstereotype="1" font="Bitstream Vera Sans,11,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="190" showattsigs="603" usesdiagramusefillcolour="0" x="105" linecolour="#ff0000" y="490" showopsigs="603" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="92" showoperations="0" showpackage="0" showscope="0" showstereotype="0" font="Bitstream Vera Sans,11,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="200" showattsigs="603" usesdiagramusefillcolour="0" x="310" linecolour="#ff0000" y="490" showopsigs="603" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="99" showoperations="0" showpackage="0" showscope="0" showstereotype="0" font="Bitstream Vera Sans,11,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="580" showattsigs="601" usesdiagramusefillcolour="0" x="10" linecolour="#ff0000" y="25" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="130" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="196" showoperations="1" showpackage="0" showscope="1" showstereotype="1" font="Bitstream Vera Sans,11,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="220" showattsigs="601" usesdiagramusefillcolour="0" x="590" linecolour="#ff0000" y="235" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="130" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="204" showoperations="1" showpackage="0" showscope="1" showstereotype="1" font="Bitstream Vera Sans,11,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="45" widgetaid="92" xmi.id="142" >
+      <linepath>
+       <startpoint startx="200" starty="490" />
+       <endpoint endx="210" endy="405" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="45" widgetaid="99" xmi.id="157" >
+      <linepath>
+       <startpoint startx="410" starty="490" />
+       <endpoint endx="390" endy="405" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="45" widgetaid="196" xmi.id="453" >
+      <linepath>
+       <startpoint startx="300" starty="155" />
+       <endpoint endx="300" endy="235" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="300" linecolour="none" y="205" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="501" text="*" font="Bitstream Vera Sans,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="80" usesdiagramusefillcolour="1" x="205" linecolour="none" y="205" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="499" text="providers" font="Bitstream Vera Sans,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="204" widgetaid="196" xmi.id="544" >
+      <linepath>
+       <startpoint startx="590" starty="90" />
+       <endpoint endx="700" endy="235" />
+       <point x="700" y="90" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="700" linecolour="none" y="205" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="620" text="*" font="Bitstream Vera Sans,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="640" linecolour="none" y="205" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="618" text="infos" font="Bitstream Vera Sans,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+  </diagrams>
+  <listview>
+   <listitem open="1" type="800" label="Views" >
+    <listitem open="1" type="801" label="Logical View" >
+     <listitem open="0" type="807" id="1" label="ThunarVFS MIME components" />
+     <listitem open="1" type="813" id="92" />
+     <listitem open="1" type="813" id="196" >
+      <listitem open="0" type="815" id="232" />
+      <listitem open="0" type="815" id="245" />
+      <listitem open="0" type="815" id="270" />
+      <listitem open="0" type="815" id="284" />
+     </listitem>
+     <listitem open="1" type="813" id="204" >
+      <listitem open="0" type="815" id="217" />
+      <listitem open="0" type="815" id="218" />
+      <listitem open="0" type="815" id="219" />
+      <listitem open="0" type="815" id="220" />
+     </listitem>
+     <listitem open="1" type="813" id="99" />
+     <listitem open="1" type="813" id="45" >
+      <listitem open="0" type="815" id="46" />
+      <listitem open="0" type="815" id="51" />
+      <listitem open="0" type="815" id="54" />
+      <listitem open="0" type="815" id="61" />
+      <listitem open="0" type="815" id="66" />
+      <listitem open="0" type="815" id="67" />
+     </listitem>
+     <listitem open="1" type="830" label="Datatypes" >
+      <listitem open="1" type="829" id="5" />
+      <listitem open="1" type="829" id="4" />
+      <listitem open="1" type="829" id="7" />
+      <listitem open="1" type="829" id="6" />
+      <listitem open="1" type="829" id="2" />
+      <listitem open="1" type="829" id="8" />
+      <listitem open="1" type="829" id="9" />
+      <listitem open="1" type="829" id="10" />
+      <listitem open="1" type="829" id="14" />
+     </listitem>
+    </listitem>
+    <listitem open="1" type="802" label="Use Case View" />
+    <listitem open="1" type="821" label="Component View" />
+    <listitem open="1" type="827" label="Deployment View" />
+    <listitem open="1" type="836" label="Entity Relationship Model" />
+   </listitem>
+  </listview>
+  <codegeneration>
+   <codegenerator language="Cpp" >
+    <codedocument writeOutCode="false" package="" id="Makefile_DOC" fileExt="" fileName="Makefile" >
+     <textblocks/>
+     <header>
+      <codecomment tag="" />
+     </header>
+    </codedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="45" parent_class="45" fileExt=".cpp" fileName="thunarvfsmimeprovider" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmimeprovider.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="46" tag="operation_46" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="51" tag="operation_51" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="54" tag="operation_54" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="61" tag="operation_61" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="66" tag="operation_66" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="67" tag="operation_67" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimeprovider.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:09&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="142" field_type="6619252" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="157" field_type="6619252" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="453" field_type="6619252" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="92" parent_class="92" fileExt=".cpp" fileName="thunarvfsmimecache" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmimecache.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimecache.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:57&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="142" field_type="7667816" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="142" tag="" canDelete="false" writeOutText="false" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="99" parent_class="99" fileExt=".cpp" fileName="thunarvfsmimelegacy" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmimelegacy.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimelegacy.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:59&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="157" field_type="6815828" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="157" tag="" canDelete="false" writeOutText="false" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="196" parent_class="196" fileExt=".cpp" fileName="thunarvfsmimedatabase" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmimedatabase.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="232" tag="operation_232" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="245" tag="operation_245" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="270" tag="operation_270" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="284" tag="operation_284" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimedatabase.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:34&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="453" field_type="6226034" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="453" tag="" canDelete="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="453" tag="" canDelete="false" writeOutText="false" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="453" tag="" canDelete="false" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="453" tag="" canDelete="false" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="453" tag="" canDelete="false" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="544" field_type="6226034" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="544" tag="" canDelete="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="544" tag="" canDelete="false" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="544" tag="" canDelete="false" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="544" tag="" canDelete="false" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="204" parent_class="204" fileExt=".cpp" fileName="thunarvfsmimeinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmimeinfo.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="217" tag="operation_217" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="218" tag="operation_218" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="219" tag="operation_219" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="220" tag="operation_220" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimeinfo.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:43&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="544" field_type="6684773" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="544" tag="" canDelete="false" writeOutText="false" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader45" parent_class="45" fileExt=".h" fileName="thunarvfsmimeprovider" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMIMEPROVIDER_H&amp;#010;#define THUNARVFSMIMEPROVIDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarvfsmimedatabase.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="45" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMimeProvider&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMimeProvider ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="46" tag="operation_46" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param data &amp;#010;@param length &amp;#010;@param priority " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="51" tag="operation_51" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param filename " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="54" tag="operation_54" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param suffix &amp;#010;@param ignore_case " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="61" tag="operation_61" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param filename " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="66" tag="operation_66" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="67" tag="operation_67" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMIMEPROVIDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimeprovider.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:09&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="142" field_type="7143519" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarVfsMimeCache ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="157" field_type="7143519" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarVfsMimeLegacy ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="453" field_type="7143519" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarVfsMimeDatabase ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader92" parent_class="92" fileExt=".h" fileName="thunarvfsmimecache" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMIMECACHE_H&amp;#010;#define THUNARVFSMIMECACHE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarvfsmimeprovider.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="92" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMimeCache&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMimeCache ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMIMECACHE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimecache.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:57&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="142" field_type="6815860" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text=" ThunarVfsMimeProvider ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="142" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="142" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader99" parent_class="99" fileExt=".h" fileName="thunarvfsmimelegacy" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMIMELEGACY_H&amp;#010;#define THUNARVFSMIMELEGACY_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarvfsmimeprovider.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="99" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMimeLegacy&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMimeLegacy ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMIMELEGACY_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimelegacy.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:59&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="157" field_type="6815860" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text=" ThunarVfsMimeProvider ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="157" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="157" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader196" parent_class="196" fileExt=".h" fileName="thunarvfsmimedatabase" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMIMEDATABASE_H&amp;#010;#define THUNARVFSMIMEDATABASE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &lt;vector>&amp;#010;#include &quot;thunarvfsmimeprovider.h&quot;&amp;#010;#include &quot;thunarvfsmimeinfo.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="196" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMimeDatabase&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMimeDatabase ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="232" tag="operation_232" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param mime_type " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="245" tag="operation_245" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param data &amp;#010;@param length " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="270" tag="operation_270" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param name " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="284" tag="operation_284" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param path &amp;#010;@param name " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMIMEDATABASE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimedatabase.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:34&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="453" field_type="4456549" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="453" tag="" canDelete="false" indentLevel="1" role_id="0" text=" vector providersVector;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="453" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="453" tag="" canDelete="false" indentLevel="1" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="453" tag="" canDelete="false" indentLevel="1" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="453" tag="" canDelete="false" indentLevel="1" classfield_id="453" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="544" field_type="4456549" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="544" tag="" canDelete="false" indentLevel="1" role_id="0" text=" vector infosVector;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="544" tag="" canDelete="false" indentLevel="1" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="544" tag="" canDelete="false" indentLevel="1" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="544" tag="" canDelete="false" indentLevel="1" classfield_id="544" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader204" parent_class="204" fileExt=".h" fileName="thunarvfsmimeinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMIMEINFO_H&amp;#010;#define THUNARVFSMIMEINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarvfsmimedatabase.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="204" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMimeInfo&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMimeInfoi ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="217" tag="operation_217" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="218" tag="operation_218" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="219" tag="operation_219" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="220" tag="operation_220" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMIMEINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmimeinfo.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Sat Aug 6 2005 at 16:28:43&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="544" field_type="7667827" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarVfsMimeDatabase ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="544" tag="" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="544" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+   </codegenerator>
+  </codegeneration>
+ </XMI.extensions>
+</XMI>

Added: desktop/trunk/thunar/branches/upstream/current/docs/design/overview.xmi
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/design/overview.xmi	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/design/overview.xmi	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,15653 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2005-06-14T22:18:04" xmi.version="1.2" >
+ <XMI.header>
+  <XMI.documentation>
+   <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
+   <XMI.exporterVersion>1.4</XMI.exporterVersion>
+   <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
+  </XMI.documentation>
+  <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
+ </XMI.header>
+ <XMI.content>
+  <UML:Model isSpecification="false" isLeaf="false" isRoot="false" isAbstract="false" >
+   <UML:Namespace.ownedElement>
+    <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" xmi.id="62" isRoot="false" isAbstract="false" name="datatype" />
+    <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" xmi.id="119" isRoot="false" isAbstract="false" name="enum" />
+    <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" xmi.id="197" isRoot="false" isAbstract="false" name="interface" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1638" isRoot="false" isAbstract="false" name="void" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="61" isRoot="false" isAbstract="false" name="int" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="63" isRoot="false" isAbstract="false" name="char" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="64" isRoot="false" isAbstract="false" name="bool" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="65" isRoot="false" isAbstract="false" name="float" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="66" isRoot="false" isAbstract="false" name="double" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="67" isRoot="false" isAbstract="false" name="long" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="68" isRoot="false" isAbstract="false" name="short" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="69" isRoot="false" isAbstract="false" name="string" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="173" isRoot="false" isAbstract="false" name="uid_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="175" isRoot="false" isAbstract="false" name="gid_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="177" isRoot="false" isAbstract="false" name="off_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="179" isRoot="false" isAbstract="false" name="time_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="183" isRoot="false" isAbstract="false" name="ino_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="185" isRoot="false" isAbstract="false" name="dev_t" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="422" isRoot="false" isAbstract="false" name="ThunarVfsURI" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="744" isRoot="false" isAbstract="false" name="ExoMimeInfo" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="767" isRoot="false" isAbstract="false" name="ThunarVfsFileSize" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="768" isRoot="false" isAbstract="false" name="ThunarVfsFileTime" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="769" isRoot="false" isAbstract="false" name="ThunarVfsFileInode" />
+    <UML:DataType stereotype="62" isSpecification="false" isLeaf="false" visibility="public" xmi.id="770" isRoot="false" isAbstract="false" name="ThunarVfsFileDevice" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1637" isRoot="false" isAbstract="false" name="class" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1636" isRoot="false" isAbstract="false" name="GError" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="70" isRoot="false" isAbstract="false" name="ThunarFile" >
+     <UML:Classifier.feature>
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="686" isRoot="false" initialValue="" type="69" isAbstract="false" name="display_name" />
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="743" isRoot="false" initialValue="" type="744" isAbstract="false" name="mime_info" />
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="692" isRoot="false" isAbstract="false" name="get_for_uri" ownerScope="classifier" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2027" type="70" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="693" isRoot="false" value="" type="422" isAbstract="false" name="uri" />
+        <UML:Parameter isSpecification="false" kind="out" isLeaf="false" visibility="public" xmi.id="783" isRoot="false" value="" type="1636" isAbstract="false" name="error" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="745" isRoot="false" isAbstract="false" name="get_mode_string" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2028" type="69" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="746" isRoot="false" isAbstract="false" name="get_size_string" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2029" type="69" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="747" isRoot="false" isAbstract="false" name="is_hidden" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2030" type="64" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="748" isRoot="false" isAbstract="false" name="is_directory" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2031" type="64" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="749" isRoot="false" isAbstract="false" name="is_symlink" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2032" type="64" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="71" isRoot="false" isAbstract="false" name="ThunarFolder" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="761" isRoot="false" isAbstract="false" name="get_for_file" ownerScope="classifier" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2033" type="71" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="762" isRoot="false" value="" type="70" isAbstract="false" name="file" />
+        <UML:Parameter isSpecification="false" kind="out" isLeaf="false" visibility="public" xmi.id="763" isRoot="false" value="" type="1636" isAbstract="false" name="error" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="764" isRoot="false" isAbstract="false" name="get_for_uri" ownerScope="classifier" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2034" type="71" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="765" isRoot="false" value="" type="422" isAbstract="false" name="uri" />
+        <UML:Parameter isSpecification="false" kind="out" isLeaf="false" visibility="public" xmi.id="766" isRoot="false" value="" type="1636" isAbstract="false" name="error" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Package isSpecification="false" isLeaf="false" visibility="public" xmi.id="78" isRoot="false" isAbstract="false" name="thunar-vfs" >
+     <UML:Namespace.ownedElement>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="73" isRoot="false" isAbstract="false" name="ThunarVfsInfo" >
+       <UML:Classifier.feature>
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="117" isRoot="false" initialValue="" type="69" isAbstract="false" name="target" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="172" isRoot="false" initialValue="" type="173" isAbstract="false" name="uid" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="174" isRoot="false" initialValue="" type="175" isAbstract="false" name="gid" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="176" isRoot="false" initialValue="" type="767" isAbstract="false" name="size" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="178" isRoot="false" initialValue="" type="768" isAbstract="false" name="atime" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="180" isRoot="false" initialValue="" type="768" isAbstract="false" name="mtime" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="181" isRoot="false" initialValue="" type="768" isAbstract="false" name="ctime" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="182" isRoot="false" initialValue="" type="769" isAbstract="false" name="inode" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="public" xmi.id="184" isRoot="false" initialValue="" type="770" isAbstract="false" name="device" />
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="771" isRoot="false" isAbstract="false" name="get_mime_info" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2035" type="744" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+       </UML:Classifier.feature>
+      </UML:Class>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="72" isRoot="false" isAbstract="false" name="ThunarVfsURI" >
+       <UML:GeneralizableElement.generalization>
+        <UML:Generalization xmi.idref="288" />
+       </UML:GeneralizableElement.generalization>
+       <UML:Classifier.feature>
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="1187" isRoot="false" initialValue="" type="69" isAbstract="false" name="host" />
+        <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="102" isRoot="false" initialValue="" type="69" isAbstract="false" name="path" />
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="114" isRoot="false" isAbstract="false" name="parent" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2036" type="72" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="115" isRoot="false" isAbstract="false" name="relative" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2037" type="72" />
+          <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="116" isRoot="false" value="" type="69" isAbstract="false" name="name" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="169" isRoot="false" isAbstract="false" name="hash" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2038" type="61" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="170" isRoot="false" isAbstract="false" name="equal" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2039" type="64" />
+          <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="171" isRoot="false" value="" type="422" isAbstract="false" name="uri" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="889" isRoot="false" isAbstract="false" name="is_local" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2040" type="64" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="890" isRoot="false" isAbstract="false" name="is_root" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2041" type="64" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+       </UML:Classifier.feature>
+      </UML:Class>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="835" isRoot="false" isAbstract="false" name="ThunarVfsMonitor" >
+       <UML:Classifier.feature>
+        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="836" isRoot="false" isAbstract="false" name="get_for_uri" ownerScope="classifier" >
+         <UML:BehavioralFeature.parameter>
+          <UML:Parameter kind="return" xmi.id="2042" type="835" />
+          <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="837" isRoot="false" value="" type="422" isAbstract="false" name="uri" />
+         </UML:BehavioralFeature.parameter>
+        </UML:Operation>
+       </UML:Classifier.feature>
+      </UML:Class>
+     </UML:Namespace.ownedElement>
+    </UML:Package>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="85" isRoot="false" isAbstract="false" name="ThunarDesktopFile" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="86" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="87" isRoot="false" isAbstract="false" name="ThunarTrashedFile" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="88" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="89" isRoot="false" isAbstract="false" name="ThunarTrashFolder" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="90" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Enumeration stereotype="119" isSpecification="false" isLeaf="false" visibility="public" xmi.id="118" isRoot="false" isAbstract="false" name="ThunarVfsFileType" >
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="120" isRoot="false" isAbstract="false" name="SOCKET" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="121" isRoot="false" isAbstract="false" name="SYMLINK" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="122" isRoot="false" isAbstract="false" name="REGULAR" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="123" isRoot="false" isAbstract="false" name="BLOCKDEV" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="124" isRoot="false" isAbstract="false" name="DIRECTORY" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="125" isRoot="false" isAbstract="false" name="CHARDEV" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="126" isRoot="false" isAbstract="false" name="FIFO" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="127" isRoot="false" isAbstract="false" name="UNKNOWN" />
+    </UML:Enumeration>
+    <UML:Enumeration stereotype="119" isSpecification="false" isLeaf="false" visibility="public" xmi.id="133" isRoot="false" isAbstract="false" name="ThunarVfsFileMode" >
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="134" isRoot="false" isAbstract="false" name="SUID" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="135" isRoot="false" isAbstract="false" name="SGID" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="136" isRoot="false" isAbstract="false" name="STICKY" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="137" isRoot="false" isAbstract="false" name="USR_ALL" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="138" isRoot="false" isAbstract="false" name="USR_READ" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="139" isRoot="false" isAbstract="false" name="USR_WRITE" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="140" isRoot="false" isAbstract="false" name="USR_EXEC" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="141" isRoot="false" isAbstract="false" name="GRP_ALL" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="142" isRoot="false" isAbstract="false" name="GRP_READ" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="143" isRoot="false" isAbstract="false" name="GRP_WRITE" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="144" isRoot="false" isAbstract="false" name="GRP_EXEC" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="145" isRoot="false" isAbstract="false" name="OTH_ALL" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="146" isRoot="false" isAbstract="false" name="OTH_READ" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="147" isRoot="false" isAbstract="false" name="OTH_WRITE" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="148" isRoot="false" isAbstract="false" name="OTH_EXEC" />
+    </UML:Enumeration>
+    <UML:Enumeration stereotype="119" isSpecification="false" isLeaf="false" visibility="public" xmi.id="154" isRoot="false" isAbstract="false" name="ThunarVfsFileFlags" >
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="155" isRoot="false" isAbstract="false" name="NONE" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="156" isRoot="false" isAbstract="false" name="SYMLINK" />
+    </UML:Enumeration>
+    <UML:Package isSpecification="false" isLeaf="false" visibility="public" xmi.id="162" isRoot="false" isAbstract="false" name="exo" >
+     <UML:Namespace.ownedElement>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="163" isRoot="false" isAbstract="false" name="ExoMimeInfo" />
+     </UML:Namespace.ownedElement>
+    </UML:Package>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="195" isRoot="false" isAbstract="false" name="ThunarListModel" />
+    <UML:Package isSpecification="false" isLeaf="false" visibility="public" xmi.id="198" isRoot="false" isAbstract="false" name="gobject" >
+     <UML:Namespace.ownedElement>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="186" isRoot="false" isAbstract="false" name="GSignal" >
+       <UML:ModelElement.templateParameter>
+        <UML:TemplateParameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="187" isRoot="false" type="1637" isAbstract="false" name="type" />
+       </UML:ModelElement.templateParameter>
+       <UML:Namespace.ownedElement>
+        <UML:TemplateParameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="187" isRoot="false" type="1637" isAbstract="false" name="type" />
+       </UML:Namespace.ownedElement>
+      </UML:Class>
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="267" isRoot="false" isAbstract="false" name="GObject" />
+     </UML:Namespace.ownedElement>
+    </UML:Package>
+    <UML:Package isSpecification="false" isLeaf="false" visibility="public" xmi.id="199" isRoot="false" isAbstract="false" name="gtk" >
+     <UML:Namespace.ownedElement>
+      <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="196" isRoot="false" isAbstract="true" name="GtkTreeModel" />
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="226" isRoot="false" isAbstract="false" name="GtkTreeView" />
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1009" isRoot="false" isAbstract="false" name="GtkContainer" />
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1010" isRoot="false" isAbstract="false" name="GtkButton" />
+     </UML:Namespace.ownedElement>
+    </UML:Package>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="202" isRoot="false" isAbstract="false" name="ThunarTreeModel" />
+    <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="214" isRoot="false" isAbstract="true" name="ThunarView" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="220" isRoot="false" isAbstract="false" name="ThunarListView" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="221" isRoot="false" isAbstract="false" name="ThunarIconView" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="224" isRoot="false" isAbstract="false" name="ThunarTreeView" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="227" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="234" isRoot="false" isAbstract="false" name="ThunarWindow" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="240" isRoot="false" isAbstract="false" name="ThunarStatusBar" >
+     <UML:Classifier.feature>
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="946" isRoot="false" initialValue="" type="69" isAbstract="false" name="text" />
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="251" isRoot="false" isAbstract="false" name="ThunarApplication" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="257" isRoot="false" isAbstract="false" name="ThunarDesktopView" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="264" isRoot="false" isAbstract="false" name="ThunarPreferences" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="268" />
+     </UML:GeneralizableElement.generalization>
+     <UML:Classifier.feature>
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="265" isRoot="false" initialValue="" type="64" isAbstract="false" name="manage-desktop" />
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="269" isRoot="false" isAbstract="false" name="ThunarPreferencesDialog" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="270" isRoot="false" isAbstract="false" name="get_for_window" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2043" type="269" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="271" isRoot="false" value="" type="234" isAbstract="false" name="window" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="279" isRoot="false" isAbstract="false" name="ThunarDesktopModel" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="280" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="327" isRoot="false" isAbstract="true" name="ThunarSidePane" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="334" isRoot="false" isAbstract="false" name="ThunarTreePane" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="337" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="335" isRoot="false" isAbstract="false" name="ThunarFavouritesPane" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="338" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="336" isRoot="false" isAbstract="false" name="ThunarFavouritesView" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="353" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="343" isRoot="false" isAbstract="false" name="ThunarFavouritesModel" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="425" isRoot="false" isAbstract="false" name="GUI" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="426" isRoot="false" isAbstract="false" name="Application Layer" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="428" isRoot="false" isAbstract="false" name="Plugin interface" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="429" isRoot="false" isAbstract="false" name="IPC interface" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="432" isRoot="false" isAbstract="false" name="ThunarVFS" />
+    <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" xmi.id="479" isRoot="false" isAbstract="false" name="Backend" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="535" isRoot="false" isAbstract="false" name="ThunarMimeAction" />
+    <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1001" isRoot="false" isAbstract="true" name="ThunarLocationBar" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1002" isRoot="false" isAbstract="false" name="ThunarLocationButtons" >
+     <UML:GeneralizableElement.generalization>
+      <UML:Generalization xmi.idref="1011" />
+     </UML:GeneralizableElement.generalization>
+    </UML:Class>
+    <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1068" isRoot="false" isAbstract="true" name="ThunarNavigator" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1069" isRoot="false" isAbstract="false" name="get_current_directory" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2044" type="70" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1070" isRoot="false" isAbstract="false" name="set_current_directory" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="1071" isRoot="false" value="" type="70" isAbstract="false" name="current_directory" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1072" isRoot="false" isAbstract="false" name="change_directory" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="public" xmi.id="1073" isRoot="false" value="" type="70" isAbstract="false" name="directory" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Interface>
+    <UML:Enumeration stereotype="119" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1188" isRoot="false" isAbstract="false" name="ThunarVfsURIScheme" >
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1189" isRoot="false" isAbstract="false" name="FILE" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1190" isRoot="false" isAbstract="false" name="TRASH" />
+    </UML:Enumeration>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1253" isRoot="false" isAbstract="false" name="ThunarVfsVolumeManagerBSD" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1342" isRoot="false" isAbstract="false" name="lookup_by_device" />
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1343" isRoot="false" isAbstract="false" name="lookup_by_path" />
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1254" isRoot="false" isAbstract="false" name="ThunarVfsVolumeBSD" >
+     <UML:Classifier.feature>
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="1255" isRoot="false" initialValue="" type="64" isAbstract="false" name="mount-status" />
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Enumeration stereotype="119" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1263" isRoot="false" isAbstract="false" name="ThunarVfsVolumeKind" >
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1267" isRoot="false" isAbstract="false" name="UNKNOWN" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1406" isRoot="false" isAbstract="false" name="CDROM" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1407" isRoot="false" isAbstract="false" name="FLOPPY" />
+     <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" xmi.id="1408" isRoot="false" isAbstract="false" name="HARDDISK" />
+    </UML:Enumeration>
+    <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1409" isRoot="false" isAbstract="true" name="ThunarVfsVolumeManager" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1416" isRoot="false" isAbstract="false" name="get_volumes" />
+     </UML:Classifier.feature>
+    </UML:Interface>
+    <UML:Interface stereotype="197" isSpecification="false" isLeaf="false" visibility="public" xmi.id="1410" isRoot="false" isAbstract="true" name="ThunarVfsVolume" >
+     <UML:Classifier.feature>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1413" isRoot="false" isAbstract="false" name="get_kind" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2045" type="1263" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1414" isRoot="false" isAbstract="false" name="get_mount_point" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2046" type="422" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1415" isRoot="false" isAbstract="false" name="get_mount_status" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter kind="return" xmi.id="2047" type="64" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Interface>
+    <UML:Actor isSpecification="false" isLeaf="false" visibility="public" xmi.id="1480" isRoot="false" isAbstract="false" name="Trash system" />
+    <UML:Actor isSpecification="false" isLeaf="false" visibility="public" xmi.id="1481" isRoot="false" isAbstract="false" name="Favourites/Tree pane" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1483" isRoot="false" isAbstract="false" name="Query volume for a given path" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1485" isRoot="false" isAbstract="false" name="Mount volume" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1486" isRoot="false" isAbstract="false" name="Umount/eject volume" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1487" isRoot="false" isAbstract="false" name="Query removable volumes" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1488" isRoot="false" isAbstract="false" name="Change notification" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1489" isRoot="false" isAbstract="false" name="Notifcation about added/removed drives" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1490" isRoot="false" isAbstract="false" name="Notification about status changes" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1491" isRoot="false" isAbstract="false" name="Query medium status" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1492" isRoot="false" isAbstract="false" name="Query mount status" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1493" isRoot="false" isAbstract="false" name="Query name/label" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1494" isRoot="false" isAbstract="false" name="Query kind" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1495" isRoot="false" isAbstract="false" name="Query icon" />
+    <UML:UseCase isSpecification="false" isLeaf="false" visibility="public" xmi.id="1496" isRoot="false" isAbstract="false" name="Query status" />
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1788" isRoot="false" isAbstract="false" name="ThunarIconFactory" >
+     <UML:Classifier.feature>
+      <UML:Attribute isSpecification="false" isLeaf="false" visibility="private" xmi.id="1810" isRoot="false" initialValue="" type="1811" isAbstract="false" name="icon_theme" />
+      <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="1833" isRoot="false" isAbstract="false" name="load_icon" >
+       <UML:BehavioralFeature.parameter>
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="1834" isRoot="false" value="" type="69" isAbstract="false" name="name" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="1856" isRoot="false" value="" type="61" isAbstract="false" name="size" />
+        <UML:Parameter isSpecification="false" kind="out" isLeaf="false" visibility="private" xmi.id="1878" isRoot="false" value="" type="ThunarEmblemAttachPoints" isAbstract="false" name="attach_points" />
+        <UML:Parameter isSpecification="false" isLeaf="false" visibility="private" xmi.id="1900" isRoot="false" value="" type="64" isAbstract="false" name="wants_default" />
+       </UML:BehavioralFeature.parameter>
+      </UML:Operation>
+     </UML:Classifier.feature>
+    </UML:Class>
+    <UML:Class isSpecification="false" isLeaf="false" visibility="public" xmi.id="1811" isRoot="false" isAbstract="false" name="GtkIconTheme" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="75" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="95" aggregation="none" type="70" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="96" aggregation="none" type="72" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="76" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="97" aggregation="none" type="71" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="98" aggregation="none" type="72" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="77" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="99" aggregation="none" type="73" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="100" aggregation="none" type="72" name="uri" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="85" visibility="public" xmi.id="86" parent="70" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="87" visibility="public" xmi.id="88" parent="70" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="89" visibility="public" xmi.id="90" parent="71" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="128" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="101" aggregation="none" type="73" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="102" aggregation="none" type="118" name="type" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="149" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="103" aggregation="none" type="73" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="104" aggregation="none" type="133" name="mode" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="157" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="105" aggregation="none" type="73" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="106" aggregation="none" type="154" name="flags" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="189" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="107" aggregation="none" type="71" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="108" aggregation="none" type="186" name="files-added" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="192" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="109" aggregation="none" type="70" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="110" aggregation="none" type="73" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="195" visibility="public" xmi.id="200" parent="196" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="201" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="111" aggregation="none" type="195" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="112" aggregation="none" type="71" name="folder" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="202" visibility="public" xmi.id="203" parent="196" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="204" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="113" aggregation="none" type="202" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="114" aggregation="none" type="71" name="folders" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="214" visibility="public" xmi.id="215" parent="195" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="220" visibility="public" xmi.id="222" parent="214" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="221" visibility="public" xmi.id="223" parent="214" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="225" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="117" aggregation="none" type="224" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="118" aggregation="none" type="202" name="model" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="224" visibility="public" xmi.id="227" parent="226" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="228" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="119" aggregation="none" type="226" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="protected" changeability="changeable" isNavigable="true" xmi.id="120" aggregation="none" type="202" name="" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="234" visibility="public" xmi.id="242" parent="214" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="243" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="123" aggregation="none" type="234" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="124" aggregation="none" type="240" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="252" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="125" aggregation="none" type="251" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="126" aggregation="none" type="234" name="windows" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="258" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="127" aggregation="none" type="251" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="128" aggregation="none" type="257" name="desktop" multiplicity="0..1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="264" visibility="public" xmi.id="268" parent="267" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="272" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="129" aggregation="none" type="269" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="130" aggregation="none" type="264" name="preferences" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="279" visibility="public" xmi.id="280" parent="195" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="281" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="131" aggregation="none" type="257" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="132" aggregation="none" type="279" name="model" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="72" visibility="public" xmi.id="288" parent="267" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="328" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="133" aggregation="none" type="234" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="134" aggregation="none" type="327" name="side_pane" multiplicity="0..1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="334" visibility="public" xmi.id="337" parent="327" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="335" visibility="public" xmi.id="338" parent="327" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="339" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="135" aggregation="none" type="334" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="136" aggregation="none" type="224" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="340" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="137" aggregation="none" type="335" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="138" aggregation="none" type="336" name="view" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="344" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="139" aggregation="none" type="336" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="140" aggregation="none" type="343" name="model" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="336" visibility="public" xmi.id="353" parent="226" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="343" visibility="public" xmi.id="354" parent="196" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="403" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="141" aggregation="none" type="224" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="142" aggregation="none" type="202" name="model" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="632" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="143" aggregation="none" type="279" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="144" aggregation="none" type="71" name="folder" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="687" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="145" aggregation="composite" type="70" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="146" aggregation="none" type="73" name="" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="751" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="147" aggregation="shared" type="71" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="148" aggregation="none" type="70" name="files" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="756" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="149" aggregation="none" type="71" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="150" aggregation="none" type="70" name="corresponding_file" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="772" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="151" aggregation="composite" type="70" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="152" aggregation="none" type="73" name="info" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="941" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="153" aggregation="none" type="327" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="154" aggregation="none" type="70" name="current_directory" multiplicity="0..1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="1002" visibility="public" xmi.id="1004" parent="1001" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="1002" visibility="public" xmi.id="1011" parent="1009" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1012" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="155" aggregation="none" type="1002" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="private" changeability="changeable" isNavigable="true" xmi.id="156" aggregation="none" type="1010" name="" multiplicity="*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="1001" visibility="public" xmi.id="1074" parent="1068" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="1068" visibility="public" xmi.id="1130" parent="186" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1191" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="159" aggregation="none" type="72" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="160" aggregation="none" type="1188" name="scheme" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1258" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="161" aggregation="none" type="1253" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="162" aggregation="none" type="1254" name="volumes" multiplicity="0..*" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1268" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="163" aggregation="none" type="1254" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="164" aggregation="none" type="1263" name="kind" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1273" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="165" aggregation="none" type="1254" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="166" aggregation="none" type="72" name="mount_point" multiplicity="1" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Generalization isSpecification="false" child="1254" visibility="public" xmi.id="1411" parent="1410" discriminator="" name="" />
+    <UML:Generalization isSpecification="false" child="1253" visibility="public" xmi.id="1412" parent="1409" discriminator="" name="" />
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1484" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="167" aggregation="none" type="1480" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="168" aggregation="none" type="1483" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1497" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="169" aggregation="none" type="1481" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="170" aggregation="none" type="1487" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1498" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="171" aggregation="none" type="1481" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="172" aggregation="none" type="1485" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1499" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="173" aggregation="none" type="1481" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="174" aggregation="none" type="1486" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1500" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="175" aggregation="none" type="1481" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="176" aggregation="none" type="1488" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1501" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="177" aggregation="none" type="1488" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="178" aggregation="none" type="1490" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1502" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="179" aggregation="none" type="1488" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="180" aggregation="none" type="1489" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1507" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="181" aggregation="none" type="1487" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="182" aggregation="none" type="1496" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1508" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="183" aggregation="none" type="1487" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="184" aggregation="none" type="1495" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1509" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="185" aggregation="none" type="1487" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="186" aggregation="none" type="1494" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1510" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="187" aggregation="none" type="1487" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="188" aggregation="none" type="1493" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1511" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="189" aggregation="none" type="1496" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="190" aggregation="none" type="1491" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1512" name="" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="191" aggregation="none" type="1495" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="192" aggregation="none" type="1492" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Association isSpecification="false" visibility="public" xmi.id="1517" name="&lt;&lt;includes>>" >
+     <UML:Association.connection>
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="193" aggregation="none" type="1496" name="" />
+      <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="194" aggregation="none" type="1492" name="" />
+     </UML:Association.connection>
+    </UML:Association>
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1532" client="70" name="" supplier="72" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1535" client="71" name="" supplier="72" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1538" client="71" name="" supplier="78" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1541" client="70" name="" supplier="78" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1547" client="89" name="" supplier="87" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1582" client="251" name="" supplier="264" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1595" client="343" name="" supplier="70" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1602" client="425" name="" supplier="426" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1605" client="426" name="" supplier="479" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1614" client="835" name="" supplier="73" />
+    <UML:Dependency isSpecification="false" visibility="public" xmi.id="1632" client="1495" name="" supplier="1494" />
+   </UML:Namespace.ownedElement>
+  </UML:Model>
+ </XMI.content>
+ <XMI.extensions xmi.extender="umbrello" >
+  <docsettings viewid="1724" documentation="" uniqueid="2047" />
+  <diagrams>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="60" documentation="" type="402" showops="1" showpackage="0" name="ThunarVFS usage" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="100" showattsigs="600" usesdiagramusefillcolour="0" x="250" linecolour="#ff0000" y="70" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="70" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="600" usesdiagramusefillcolour="0" x="390" linecolour="#ff0000" y="70" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="71" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="600" usesdiagramusefillcolour="0" x="450" linecolour="#ff0000" y="245" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="70" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="72" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="600" usesdiagramusefillcolour="0" x="430" linecolour="#ff0000" y="360" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="73" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="155" linecolour="none" y="295" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="78" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="190" usesdiagramusefillcolour="1" x="615" linecolour="none" y="230" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="79" text="To avoid extensive copying of path strings." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="220" usesdiagramusefillcolour="1" x="370" linecolour="none" y="480" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="80" usefillcolor="1" isinstance="0" xmi.id="80" text="Must be threadsafe and cachable (we cannot derive from GObject here because of that)." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <boxwidget usesdiagramfillcolour="1" width="770" usesdiagramusefillcolour="1" x="65" linecolour="none" y="215" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="370" usefillcolor="1" isinstance="0" xmi.id="81" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="260" usesdiagramusefillcolour="1" x="70" linecolour="none" y="455" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="110" usefillcolor="1" isinstance="0" xmi.id="82" text="Provides thread-safe caching of VFS infos (if appropriate), a synchronous interface to the file system and asynchronous notifications." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="72" widgetaid="73" xmi.id="77" >
+      <linepath>
+       <startpoint startx="510" starty="360" />
+       <endpoint endx="510" endy="315" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="510" linecolour="none" y="305" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1531" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="470" linecolour="none" y="305" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1530" text="uri" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" widgetbid="73" widgetaid="78" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="245" starty="330" />
+       <endpoint endx="430" endy="380" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="72" widgetaid="79" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="615" starty="260" />
+       <endpoint endx="570" endy="280" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="73" widgetaid="80" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="480" starty="480" />
+       <endpoint endx="490" endy="400" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="78" widgetaid="82" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="200" starty="455" />
+       <endpoint endx="200" endy="345" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="3" totalcountb="3" indexb="1" widgetbid="72" widgetaid="70" xmi.id="1532" >
+      <linepath>
+       <startpoint startx="330" starty="110" />
+       <endpoint endx="490" endy="245" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="2" widgetbid="72" widgetaid="71" xmi.id="1535" >
+      <linepath>
+       <startpoint startx="470" starty="110" />
+       <endpoint endx="530" endy="245" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="2" widgetbid="78" widgetaid="71" xmi.id="1538" >
+      <linepath>
+       <startpoint startx="430" starty="110" />
+       <endpoint endx="220" endy="295" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="1" totalcountb="3" indexb="1" widgetbid="78" widgetaid="70" xmi.id="1541" >
+      <linepath>
+       <startpoint startx="280" starty="110" />
+       <endpoint endx="190" endy="295" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="72" widgetaid="78" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="245" starty="310" />
+       <endpoint endx="450" endy="280" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="2" totalcountb="3" indexb="1" widgetbid="73" widgetaid="70" xmi.id="772" >
+      <linepath>
+       <startpoint startx="300" starty="110" />
+       <endpoint endx="470" endy="360" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="460" linecolour="none" y="325" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1545" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="420" linecolour="none" y="325" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1544" text="info" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="84" documentation="" type="402" showops="1" showpackage="0" name="Filesystem hierarchy" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="600" usesdiagramusefillcolour="0" x="120" linecolour="#ff0000" y="290" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="85" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="100" showattsigs="600" usesdiagramusefillcolour="0" x="260" linecolour="#ff0000" y="80" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="70" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="600" usesdiagramusefillcolour="0" x="320" linecolour="#ff0000" y="290" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="87" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="530" linecolour="#ff0000" y="80" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="71" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="600" usesdiagramusefillcolour="0" x="510" linecolour="#ff0000" y="290" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="89" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="90" showattsigs="600" usesdiagramusefillcolour="0" x="855" linecolour="#7ca332" y="65" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="70" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="186" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="855" linecolour="#7ca332" y="205" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="198" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="70" widgetaid="85" xmi.id="86" >
+      <linepath>
+       <startpoint startx="200" starty="290" />
+       <endpoint endx="290" endy="120" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="70" widgetaid="87" xmi.id="88" >
+      <linepath>
+       <startpoint startx="400" starty="290" />
+       <endpoint endx="330" endy="120" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="71" widgetaid="89" xmi.id="90" >
+      <linepath>
+       <startpoint startx="590" starty="290" />
+       <endpoint endx="590" endy="120" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="186" widgetaid="71" xmi.id="189" >
+      <linepath>
+       <startpoint startx="650" starty="100" />
+       <endpoint endx="855" endy="100" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="760" linecolour="none" y="95" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1546" text="files-added" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="87" widgetaid="89" xmi.id="1547" >
+      <linepath>
+       <startpoint startx="510" starty="310" />
+       <endpoint endx="480" endy="310" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="186" widgetaid="198" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="890" starty="205" />
+       <endpoint endx="900" endy="135" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="109" documentation="" type="402" showops="1" showpackage="0" name="ThunarVFS module" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="600" usesdiagramusefillcolour="0" x="220" linecolour="#ff0000" y="125" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="210" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="73" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="290" showattsigs="601" usesdiagramusefillcolour="0" x="525" linecolour="#ff0000" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="160" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="72" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,11,-1,5,75,0,0,0,0,0" />
+     <enumwidget usesdiagramfillcolour="0" width="160" usesdiagramusefillcolour="0" x="70" linecolour="#ff0000" y="445" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="190" usefillcolor="1" isinstance="0" xmi.id="118" showpackage="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <enumwidget usesdiagramfillcolour="0" width="160" usesdiagramusefillcolour="0" x="220" linecolour="#ff0000" y="445" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="330" usefillcolor="1" isinstance="0" xmi.id="133" showpackage="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <enumwidget usesdiagramfillcolour="0" width="160" usesdiagramusefillcolour="0" x="370" linecolour="#ff0000" y="450" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="80" usefillcolor="1" isinstance="0" xmi.id="154" showpackage="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="80" showattsigs="601" usesdiagramusefillcolour="0" x="640" linecolour="#7ca332" y="70" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="267" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="140" usesdiagramusefillcolour="1" x="10" linecolour="none" y="150" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="140" usefillcolor="1" isinstance="0" xmi.id="289" text="Must be usable with threads. So we'll prefer copying over refcounting (GObject) when necessary." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <enumwidget usesdiagramfillcolour="0" width="180" usesdiagramusefillcolour="0" x="580" linecolour="#ff0000" y="390" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="80" usefillcolor="1" isinstance="0" xmi.id="1188" showpackage="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="72" widgetaid="73" xmi.id="77" >
+      <linepath>
+       <startpoint startx="380" starty="230" />
+       <endpoint endx="525" endy="220" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="510" linecolour="none" y="225" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1551" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="480" linecolour="none" y="205" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1550" text="uri" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="1" totalcountb="2" indexb="1" widgetbid="118" widgetaid="73" xmi.id="128" >
+      <linepath>
+       <startpoint startx="260" starty="335" />
+       <endpoint endx="150" endy="445" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="120" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1553" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="145" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1552" text="type" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="2" totalcountb="2" indexb="1" widgetbid="133" widgetaid="73" xmi.id="149" >
+      <linepath>
+       <startpoint startx="300" starty="335" />
+       <endpoint endx="300" endy="445" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="300" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1555" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="230" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1554" text="mode" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="3" totalcountb="2" indexb="1" widgetbid="154" widgetaid="73" xmi.id="157" >
+      <linepath>
+       <startpoint startx="340" starty="335" />
+       <endpoint endx="450" endy="450" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="440" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1557" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="390" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1556" text="flags" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="267" widgetaid="72" xmi.id="288" >
+      <linepath>
+       <startpoint startx="670" starty="140" />
+       <endpoint endx="680" endy="110" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="73" widgetaid="289" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="150" starty="220" />
+       <endpoint endx="220" endy="230" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1188" widgetaid="72" xmi.id="1191" >
+      <linepath>
+       <startpoint startx="670" starty="300" />
+       <endpoint endx="670" endy="390" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="680" linecolour="none" y="355" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1559" text="1" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="70" usesdiagramusefillcolour="1" x="595" linecolour="none" y="355" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1558" text="scheme" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="194" documentation="" type="402" showops="1" showpackage="0" name="GUI bridge" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="500" linecolour="#ff0000" y="490" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="71" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="290" linecolour="#ff0000" y="380" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="195" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="120" usesdiagramusefillcolour="0" x="500" linecolour="#7ca332" y="375" drawascircle="0" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="196" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="515" linecolour="#7ca332" y="265" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="199" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="150" showattsigs="601" usesdiagramusefillcolour="0" x="685" linecolour="#ff0000" y="380" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="202" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="110" usesdiagramusefillcolour="0" x="305" linecolour="#ff0000" y="235" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" isinstance="0" xmi.id="214" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="220" linecolour="#ff0000" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="220" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="370" linecolour="#ff0000" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="221" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="690" linecolour="#ff0000" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="224" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="110" showattsigs="601" usesdiagramusefillcolour="0" x="505" linecolour="#7ca332" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="226" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="55" linecolour="#ff0000" y="140" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="257" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="180" showattsigs="601" usesdiagramusefillcolour="0" x="60" linecolour="#ff0000" y="380" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="279" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="196" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="550" starty="315" />
+       <endpoint endx="560" endy="375" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="196" widgetaid="195" xmi.id="200" >
+      <linepath>
+       <startpoint startx="430" starty="400" />
+       <endpoint endx="500" endy="400" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="71" widgetaid="195" xmi.id="201" >
+      <linepath>
+       <startpoint startx="360" starty="420" />
+       <endpoint endx="500" endy="510" />
+       <point x="350" y="500" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="480" linecolour="none" y="465" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1561" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="450" linecolour="none" y="505" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1560" text="folder" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="196" widgetaid="202" xmi.id="203" >
+      <linepath>
+       <startpoint startx="685" starty="400" />
+       <endpoint endx="620" endy="400" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="71" widgetaid="202" xmi.id="204" >
+      <linepath>
+       <startpoint startx="760" starty="420" />
+       <endpoint endx="620" endy="510" />
+       <point x="750" y="500" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="600" linecolour="none" y="465" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1563" text="*" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="70" usesdiagramusefillcolour="1" x="605" linecolour="none" y="505" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1562" text="folders" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="195" widgetaid="214" xmi.id="215" >
+      <linepath>
+       <startpoint startx="360" starty="285" />
+       <endpoint endx="360" endy="380" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="350" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1565" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="255" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="#" isinstance="0" xmi.id="1564" text="list_model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="214" widgetaid="220" xmi.id="222" >
+      <linepath>
+       <startpoint startx="290" starty="180" />
+       <endpoint endx="340" endy="235" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="214" widgetaid="221" xmi.id="223" >
+      <linepath>
+       <startpoint startx="440" starty="180" />
+       <endpoint endx="380" endy="235" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="226" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="550" starty="265" />
+       <endpoint endx="560" endy="180" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="226" widgetaid="224" xmi.id="227" >
+      <linepath>
+       <startpoint startx="690" starty="160" />
+       <endpoint endx="615" endy="160" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="279" widgetaid="257" xmi.id="281" >
+      <linepath>
+       <startpoint startx="140" starty="180" />
+       <endpoint endx="150" endy="380" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="140" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1567" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="70" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1566" text="model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="202" widgetaid="224" xmi.id="403" >
+      <linepath>
+       <startpoint startx="760" starty="180" />
+       <endpoint endx="760" endy="380" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="760" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1569" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="690" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1568" text="model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="71" widgetaid="279" xmi.id="632" >
+      <linepath>
+       <startpoint startx="150" starty="420" />
+       <endpoint endx="560" endy="530" />
+       <point x="130" y="580" />
+       <point x="550" y="580" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="550" linecolour="none" y="515" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1571" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="500" linecolour="none" y="515" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1570" text="folder" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1004" snapy="10" showatts="1" xmi.id="233" documentation="" type="402" showops="0" showpackage="0" name="Window GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="780" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="130" showattsigs="601" usesdiagramusefillcolour="0" x="325" linecolour="#ff0000" y="100" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="234" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="110" usesdiagramusefillcolour="0" x="335" linecolour="#ff0000" y="225" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" isinstance="0" xmi.id="214" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="320" linecolour="#ff0000" y="320" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="195" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="150" showattsigs="601" usesdiagramusefillcolour="0" x="535" linecolour="#ff0000" y="235" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="240" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="330" linecolour="#ff0000" y="410" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="71" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="260" usesdiagramusefillcolour="1" x="740" linecolour="none" y="190" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="120" usefillcolor="1" isinstance="0" xmi.id="249" text="Requires knowledge about the ThunarFolder in order to be able to display a progress bar, while the folder is loading. That should be
+fixed, better use ThunarListModel here." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="160" linecolour="#ff0000" y="230" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="327" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="195" widgetaid="214" xmi.id="215" >
+      <linepath>
+       <startpoint startx="390" starty="275" />
+       <endpoint endx="390" endy="320" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="390" linecolour="none" y="275" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1573" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="325" linecolour="none" y="275" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="#" isinstance="0" xmi.id="1572" text="list_model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="2" totalcountb="2" indexb="1" widgetbid="214" widgetaid="234" xmi.id="242" >
+      <linepath>
+       <startpoint startx="390" starty="140" />
+       <endpoint endx="390" endy="225" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="3" totalcountb="2" indexb="1" widgetbid="240" widgetaid="234" xmi.id="243" >
+      <linepath>
+       <startpoint startx="420" starty="140" />
+       <endpoint endx="610" endy="235" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="71" widgetaid="195" xmi.id="201" >
+      <linepath>
+       <startpoint startx="390" starty="360" />
+       <endpoint endx="390" endy="410" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="390" linecolour="none" y="375" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1575" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="330" linecolour="none" y="375" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1574" text="folder" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="240" widgetaid="249" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="740" starty="250" />
+       <endpoint endx="685" endy="260" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="4" indexa="1" totalcountb="2" indexb="1" widgetbid="327" widgetaid="234" xmi.id="328" >
+      <linepath>
+       <startpoint startx="360" starty="140" />
+       <endpoint endx="230" endy="230" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="180" linecolour="none" y="195" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1577" text="0..1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="255" linecolour="none" y="195" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1576" text="side_pane" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="250" documentation="" type="402" showops="1" showpackage="0" name="Application bridge" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="601" usesdiagramusefillcolour="0" x="170" linecolour="#ff0000" y="120" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="251" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="130" showattsigs="601" usesdiagramusefillcolour="0" x="515" linecolour="#ff0000" y="90" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="234" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="515" linecolour="#ff0000" y="160" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="257" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="165" linecolour="#ff0000" y="310" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="264" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="234" widgetaid="251" xmi.id="252" >
+      <linepath>
+       <startpoint startx="330" starty="130" />
+       <endpoint endx="515" endy="110" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="500" linecolour="none" y="65" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1579" text="*" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="80" usesdiagramusefillcolour="1" x="430" linecolour="none" y="105" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1578" text="windows" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="257" widgetaid="251" xmi.id="258" >
+      <linepath>
+       <startpoint startx="330" starty="150" />
+       <endpoint endx="515" endy="180" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="480" linecolour="none" y="165" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1581" text="0..1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="80" usesdiagramusefillcolour="1" x="450" linecolour="none" y="135" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1580" text="desktop" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="264" widgetaid="251" xmi.id="1582" >
+      <linepath>
+       <startpoint startx="250" starty="160" />
+       <endpoint endx="250" endy="310" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="263" documentation="" type="402" showops="1" showpackage="0" name="Settings" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="190" showattsigs="601" usesdiagramusefillcolour="0" x="315" linecolour="#ff0000" y="85" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="264" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="675" linecolour="#7ca332" y="75" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="198" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="80" showattsigs="601" usesdiagramusefillcolour="0" x="550" linecolour="#7ca332" y="90" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="267" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="580" showattsigs="601" usesdiagramusefillcolour="0" x="150" linecolour="#ff0000" y="210" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="269" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="240" usesdiagramusefillcolour="1" x="30" linecolour="none" y="50" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="100" usefillcolor="1" isinstance="0" xmi.id="277" text="All thunar objects using the ThunarPreferences register notifications using the GObject &quot;notify&quot; signal to stay informed of changes." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="380" usesdiagramusefillcolour="1" x="210" linecolour="none" y="305" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="278" text="Not all settings will show up in the preferences dialog, there'll be hidden settings just like in Terminal." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="267" widgetaid="198" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="675" starty="100" />
+       <endpoint endx="630" endy="110" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="267" widgetaid="264" xmi.id="268" >
+      <linepath>
+       <startpoint startx="505" starty="110" />
+       <endpoint endx="550" endy="110" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="264" widgetaid="269" xmi.id="272" >
+      <linepath>
+       <startpoint startx="440" starty="210" />
+       <endpoint endx="410" endy="135" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="400" linecolour="none" y="125" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1586" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="310" linecolour="none" y="125" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1585" text="preferences" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="264" widgetaid="277" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="270" starty="100" />
+       <endpoint endx="315" endy="110" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="269" widgetaid="278" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="400" starty="305" />
+       <endpoint endx="440" endy="250" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="333" documentation="" type="402" showops="1" showpackage="0" name="Sidepane GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="290" linecolour="#ff0000" y="60" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="327" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="140" showattsigs="601" usesdiagramusefillcolour="1" x="170" linecolour="none" y="180" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="334" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="190" showattsigs="601" usesdiagramusefillcolour="1" x="405" linecolour="none" y="180" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="335" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="190" showattsigs="601" usesdiagramusefillcolour="1" x="405" linecolour="none" y="300" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="336" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="140" showattsigs="601" usesdiagramusefillcolour="1" x="170" linecolour="none" y="300" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="224" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="210" usesdiagramusefillcolour="1" x="545" linecolour="none" y="45" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="341" text="Provides scrolling and other basic services for the sidepane implementations." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="327" widgetaid="334" xmi.id="337" >
+      <linepath>
+       <startpoint startx="240" starty="180" />
+       <endpoint endx="340" endy="100" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="327" widgetaid="335" xmi.id="338" >
+      <linepath>
+       <startpoint startx="500" starty="180" />
+       <endpoint endx="380" endy="100" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="224" widgetaid="334" xmi.id="339" >
+      <linepath>
+       <startpoint startx="240" starty="220" />
+       <endpoint endx="240" endy="300" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="336" widgetaid="335" xmi.id="340" >
+      <linepath>
+       <startpoint startx="500" starty="220" />
+       <endpoint endx="500" endy="300" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="480" linecolour="none" y="265" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1590" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="425" linecolour="none" y="265" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1588" text="view" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="327" widgetaid="341" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="545" starty="80" />
+       <endpoint endx="430" endy="80" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1034" snapy="10" showatts="1" xmi.id="342" documentation="" type="402" showops="1" showpackage="0" name="Favourites GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="780" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="1" width="190" showattsigs="601" usesdiagramusefillcolour="1" x="55" linecolour="none" y="80" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="335" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="190" showattsigs="601" usesdiagramusefillcolour="1" x="55" linecolour="none" y="220" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="336" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="140" showattsigs="601" usesdiagramusefillcolour="0" x="300" linecolour="#ff0000" y="80" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="327" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="485" linecolour="#7ca332" y="255" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="199" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="120" usesdiagramusefillcolour="0" x="310" linecolour="#7ca332" y="315" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="196" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="200" showattsigs="601" usesdiagramusefillcolour="1" x="50" linecolour="none" y="310" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="343" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="480" showattsigs="601" usesdiagramusefillcolour="0" x="550" linecolour="#ff0000" y="20" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="180" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="70" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="110" showattsigs="601" usesdiagramusefillcolour="0" x="315" linecolour="#7ca332" y="230" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="226" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="336" widgetaid="335" xmi.id="340" >
+      <linepath>
+       <startpoint startx="150" starty="120" />
+       <endpoint endx="150" endy="220" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="140" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1592" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="75" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1591" text="view" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="327" widgetaid="335" xmi.id="338" >
+      <linepath>
+       <startpoint startx="245" starty="100" />
+       <endpoint endx="300" endy="100" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" widgetbid="196" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="485" starty="290" />
+       <endpoint endx="430" endy="340" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="343" widgetaid="336" xmi.id="344" >
+      <linepath>
+       <startpoint startx="150" starty="260" />
+       <endpoint endx="150" endy="310" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="140" linecolour="none" y="275" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1594" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="70" linecolour="none" y="275" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1593" text="model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="196" widgetaid="343" xmi.id="354" >
+      <linepath>
+       <startpoint startx="250" starty="330" />
+       <endpoint endx="310" endy="340" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="70" widgetaid="343" xmi.id="1595" >
+      <linepath>
+       <startpoint startx="150" starty="350" />
+       <endpoint endx="790" endy="200" />
+       <point x="130" y="450" />
+       <point x="760" y="450" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="226" widgetaid="336" xmi.id="353" >
+      <linepath>
+       <startpoint startx="245" starty="240" />
+       <endpoint endx="315" endy="250" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="226" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="485" starty="270" />
+       <endpoint endx="425" endy="250" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="70" widgetaid="327" xmi.id="941" >
+      <linepath>
+       <startpoint startx="440" starty="100" />
+       <endpoint endx="550" endy="110" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="40" usesdiagramusefillcolour="1" x="510" linecolour="none" y="65" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1599" text="0..1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="140" usesdiagramusefillcolour="1" x="420" linecolour="none" y="105" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1598" text="current_directory" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="0" xmi.id="355" documentation="" type="402" showops="0" showpackage="0" name="Treepane GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="1" width="140" showattsigs="601" usesdiagramusefillcolour="1" x="130" linecolour="none" y="210" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="224" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="140" showattsigs="601" usesdiagramusefillcolour="1" x="130" linecolour="none" y="60" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="334" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="140" showattsigs="601" usesdiagramusefillcolour="1" x="360" linecolour="none" y="60" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="327" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="515" linecolour="#7ca332" y="225" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="199" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="110" showattsigs="601" usesdiagramusefillcolour="0" x="335" linecolour="#7ca332" y="210" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="226" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="120" usesdiagramusefillcolour="0" x="330" linecolour="#7ca332" y="285" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="196" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="150" showattsigs="601" usesdiagramusefillcolour="1" x="125" linecolour="none" y="290" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="202" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="220" usesdiagramusefillcolour="1" x="80" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="420" text="May not be required (left as an implementation detail)." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="224" widgetaid="334" xmi.id="339" >
+      <linepath>
+       <startpoint startx="200" starty="100" />
+       <endpoint endx="200" endy="210" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="327" widgetaid="334" xmi.id="337" >
+      <linepath>
+       <startpoint startx="270" starty="80" />
+       <endpoint endx="360" endy="80" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="226" widgetaid="224" xmi.id="227" >
+      <linepath>
+       <startpoint startx="270" starty="230" />
+       <endpoint endx="335" endy="230" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="226" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="515" starty="240" />
+       <endpoint endx="445" endy="230" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" widgetbid="196" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="515" starty="260" />
+       <endpoint endx="450" endy="310" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="196" widgetaid="202" xmi.id="203" >
+      <linepath>
+       <startpoint startx="275" starty="310" />
+       <endpoint endx="330" endy="310" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="202" widgetaid="224" xmi.id="225" >
+      <linepath>
+       <startpoint startx="200" starty="250" />
+       <endpoint endx="200" endy="290" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="190" linecolour="none" y="255" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1601" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="130" linecolour="none" y="255" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1600" text="model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="224" widgetaid="420" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="80" starty="370" />
+       <endpoint endx="130" endy="230" />
+       <point x="50" y="370" />
+       <point x="50" y="220" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="424" documentation="" type="406" showops="1" showpackage="0" name="Overview" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <componentwidget usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="265" linecolour="none" y="95" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="425" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <componentwidget usesdiagramfillcolour="1" width="200" usesdiagramusefillcolour="1" x="220" linecolour="none" y="235" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="426" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <componentwidget usesdiagramfillcolour="1" width="190" usesdiagramusefillcolour="1" x="625" linecolour="none" y="135" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="428" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <componentwidget usesdiagramfillcolour="1" width="160" usesdiagramusefillcolour="1" x="640" linecolour="none" y="225" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="429" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <boxwidget usesdiagramfillcolour="1" width="250" usesdiagramusefillcolour="1" x="605" linecolour="none" y="110" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="220" usefillcolor="1" isinstance="0" xmi.id="430" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <floatingtext usesdiagramfillcolour="1" width="70" usesdiagramusefillcolour="1" x="605" linecolour="none" y="305" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="700" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="431" text="Optional" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <componentwidget usesdiagramfillcolour="1" width="130" usesdiagramusefillcolour="1" x="255" linecolour="none" y="385" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="479" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="426" widgetaid="425" xmi.id="1602" >
+      <linepath>
+       <startpoint startx="310" starty="165" />
+       <endpoint endx="320" endy="235" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="479" widgetaid="426" xmi.id="1605" >
+      <linepath>
+       <startpoint startx="320" starty="305" />
+       <endpoint endx="320" endy="385" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="525" documentation="" type="402" showops="1" showpackage="0" name="Filesystem abstraction layer" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="480" showattsigs="601" usesdiagramusefillcolour="0" x="180" linecolour="#ff0000" y="70" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="180" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="70" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="500" showattsigs="601" usesdiagramusefillcolour="0" x="170" linecolour="#ff0000" y="465" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="70" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="71" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="1" widgetbid="70" widgetaid="71" xmi.id="751" >
+      <linepath>
+       <startpoint startx="340" starty="465" />
+       <endpoint endx="340" endy="250" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="320" linecolour="none" y="235" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1609" text="*" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="285" linecolour="none" y="235" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1608" text="files" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="2" widgetbid="70" widgetaid="71" xmi.id="756" >
+      <linepath>
+       <startpoint startx="500" starty="465" />
+       <endpoint endx="500" endy="250" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="440" linecolour="none" y="235" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1611" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="150" usesdiagramusefillcolour="1" x="465" linecolour="none" y="235" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1610" text="corresponding_file" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="534" documentation="" type="402" showops="1" showpackage="0" name="MIME actions" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="160" showattsigs="601" usesdiagramusefillcolour="0" x="220" linecolour="#ff0000" y="200" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="535" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="190" usesdiagramusefillcolour="1" x="445" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="537" text="This should probably be handled in exo as well." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="535" widgetaid="537" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="445" starty="210" />
+       <endpoint endx="380" endy="220" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="777" documentation="" type="402" showops="1" showpackage="0" name="Desktop GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="1" width="180" showattsigs="601" usesdiagramusefillcolour="1" x="270" linecolour="none" y="220" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="279" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="170" showattsigs="601" usesdiagramusefillcolour="1" x="265" linecolour="none" y="90" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="257" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="250" usesdiagramusefillcolour="1" x="175" linecolour="none" y="390" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="160" usefillcolor="1" isinstance="0" xmi.id="782" text="Store icon positions and backdrop settings into the ~/Desktop/.directory file as special attributes? Would be logical to keep the desktop folder attributes with the physical desktop folder." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="279" widgetaid="257" xmi.id="281" >
+      <linepath>
+       <startpoint startx="350" starty="130" />
+       <endpoint endx="360" endy="220" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="350" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1613" text="1" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="60" usesdiagramusefillcolour="1" x="280" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="-" isinstance="0" xmi.id="1612" text="model" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="279" widgetaid="782" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="300" starty="390" />
+       <endpoint endx="360" endy="260" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="834" documentation="" type="402" showops="1" showpackage="0" name="ThunarVFS monitoring" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="430" showattsigs="601" usesdiagramusefillcolour="0" x="115" linecolour="#ff0000" y="105" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="835" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="185" linecolour="none" y="375" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="78" showstereotype="0" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="270" showattsigs="601" usesdiagramusefillcolour="1" x="345" linecolour="none" y="305" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="210" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="73" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="250" usesdiagramusefillcolour="1" x="595" linecolour="none" y="40" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="180" usefillcolor="1" isinstance="0" xmi.id="838" text="Provides asynchronous notifications to watched files. Primary backend will be a thread (or multiple threads), that periodically call stat() on the watched files.
+
+In addition, kqueue() and FAM can be used. dnotify is not thread-safe." font="helvetica,12,-1,5,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="1" widgetbid="835" widgetaid="78" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="230" starty="375" />
+       <endpoint endx="260" endy="155" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="73" widgetaid="78" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="275" starty="400" />
+       <endpoint endx="345" endy="410" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="73" widgetaid="835" xmi.id="1614" >
+      <linepath>
+       <startpoint startx="400" starty="155" />
+       <endpoint endx="480" endy="305" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="835" widgetaid="838" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="595" starty="130" />
+       <endpoint endx="545" endy="130" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="999" documentation="" type="402" showops="1" showpackage="0" name="Locationbar GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <interfacewidget usesdiagramfillcolour="0" width="160" usesdiagramusefillcolour="0" x="160" linecolour="#ff0000" y="175" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" isinstance="0" xmi.id="1001" showoperations="0" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="200" showattsigs="601" usesdiagramusefillcolour="0" x="140" linecolour="#ff0000" y="260" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="1002" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <packagewidget usesdiagramfillcolour="0" width="70" usesdiagramusefillcolour="0" x="175" linecolour="#7ca332" y="485" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="50" usefillcolor="1" isinstance="0" xmi.id="199" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="110" linecolour="#7ca332" y="390" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="1009" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="90" showattsigs="601" usesdiagramusefillcolour="0" x="235" linecolour="#7ca332" y="390" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="40" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="1010" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="450" usesdiagramusefillcolour="0" x="5" linecolour="#ff0000" y="30" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="100" usefillcolor="1" isinstance="0" xmi.id="1068" showoperations="1" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1001" widgetaid="1002" xmi.id="1004" >
+      <linepath>
+       <startpoint startx="240" starty="260" />
+       <endpoint endx="240" endy="225" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="1009" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="200" starty="485" />
+       <endpoint endx="170" endy="430" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" widgetbid="1010" widgetaid="199" roleBdoc="" documentation="" roleAdoc="" type="509" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="220" starty="485" />
+       <endpoint endx="280" endy="430" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="1009" widgetaid="1002" xmi.id="1011" >
+      <linepath>
+       <startpoint startx="210" starty="300" />
+       <endpoint endx="170" endy="390" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1010" widgetaid="1002" xmi.id="1012" >
+      <linepath>
+       <startpoint startx="270" starty="300" />
+       <endpoint endx="280" endy="390" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="280" linecolour="none" y="355" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1617" text="*" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1068" widgetaid="1001" xmi.id="1074" >
+      <linepath>
+       <startpoint startx="240" starty="175" />
+       <endpoint endx="230" endy="130" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="1128" documentation="" type="402" showops="1" showpackage="0" name="Navigator elements GUI" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,12,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <interfacewidget usesdiagramfillcolour="1" width="450" usesdiagramusefillcolour="1" x="45" linecolour="none" y="150" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="100" usefillcolor="1" isinstance="0" xmi.id="1068" showoperations="1" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="170" usesdiagramusefillcolour="1" x="45" linecolour="none" y="30" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1129" text="Implemented by all navigational GUI elements in Thunar!" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="1" width="160" usesdiagramusefillcolour="1" x="190" linecolour="none" y="345" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="1001" showoperations="1" showpackage="0" showscope="1" font="helvetica,12,-1,5,75,1,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="90" showattsigs="601" usesdiagramusefillcolour="0" x="655" linecolour="#7ca332" y="165" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#c1ff4f" height="70" usefillcolor="1" showpubliconly="0" showattributes="0" isinstance="0" xmi.id="186" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="helvetica,12,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="1068" widgetaid="1129" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="215" starty="60" />
+       <endpoint endx="270" endy="150" />
+       <point x="260" y="60" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1068" widgetaid="1001" xmi.id="1074" >
+      <linepath>
+       <startpoint startx="270" starty="345" />
+       <endpoint endx="270" endy="250" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="186" widgetaid="1068" xmi.id="1130" >
+      <linepath>
+       <startpoint startx="495" starty="200" />
+       <endpoint endx="655" endy="200" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="150" usesdiagramusefillcolour="1" x="515" linecolour="none" y="195" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1618" text="change_directory" font="helvetica,12,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="1252" documentation="" type="402" showops="1" showpackage="0" name="ThunarVFS volumes" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,11,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="230" showattsigs="601" usesdiagramusefillcolour="0" x="295" linecolour="#ff0000" y="100" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="1253" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,11,-1,5,75,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="325" linecolour="#ff0000" y="365" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="50" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="1254" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,11,-1,5,75,0,0,0,0,0" />
+     <enumwidget usesdiagramfillcolour="0" width="170" usesdiagramusefillcolour="0" x="35" linecolour="#ff0000" y="335" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="110" usefillcolor="1" isinstance="0" xmi.id="1263" showpackage="0" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+     <classwidget usesdiagramfillcolour="1" width="290" showattsigs="601" usesdiagramusefillcolour="1" x="265" linecolour="none" y="490" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="160" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="72" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="helvetica,11,-1,0,75,0,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="200" usesdiagramusefillcolour="0" x="680" linecolour="#ff0000" y="100" drawascircle="0" showopsigs="600" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" isinstance="0" xmi.id="1409" showoperations="1" showpackage="0" showscope="1" font="Helvetica,11,-1,5,75,1,0,0,0,0" />
+     <interfacewidget usesdiagramfillcolour="0" width="270" usesdiagramusefillcolour="0" x="635" linecolour="#ff0000" y="345" drawascircle="0" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="90" usefillcolor="1" isinstance="0" xmi.id="1410" showoperations="1" showpackage="0" showscope="1" font="Helvetica,11,-1,5,75,1,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1254" widgetaid="1253" xmi.id="1258" >
+      <linepath>
+       <startpoint startx="410" starty="160" />
+       <endpoint endx="410" endy="365" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="30" usesdiagramusefillcolour="1" x="415" linecolour="none" y="335" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1620" text="0..*" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="70" usesdiagramusefillcolour="1" x="335" linecolour="none" y="335" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1619" text="volumes" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1263" widgetaid="1254" xmi.id="1268" >
+      <linepath>
+       <startpoint startx="325" starty="390" />
+       <endpoint endx="205" endy="390" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="210" linecolour="none" y="355" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1622" text="1" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="50" usesdiagramusefillcolour="1" x="205" linecolour="none" y="395" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1621" text="kind" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="72" widgetaid="1254" xmi.id="1273" >
+      <linepath>
+       <startpoint startx="410" starty="415" />
+       <endpoint endx="410" endy="490" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="20" usesdiagramusefillcolour="1" x="410" linecolour="none" y="455" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1624" text="1" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="310" linecolour="none" y="455" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="710" fillcolour="none" height="30" usefillcolor="1" pretext="+" isinstance="0" xmi.id="1623" text="mount_point" font="Helvetica,11,-1,5,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1410" widgetaid="1254" xmi.id="1411" >
+      <linepath>
+       <startpoint startx="495" starty="390" />
+       <endpoint endx="635" endy="390" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1409" widgetaid="1253" xmi.id="1412" >
+      <linepath>
+       <startpoint startx="525" starty="130" />
+       <endpoint endx="680" endy="130" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="1479" documentation="" type="400" showops="1" showpackage="0" name="ThunarVFS volume manager requirements" localid="30000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,11,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <actorwidget usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="810" linecolour="none" y="15" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="1480" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <actorwidget usesdiagramfillcolour="1" width="150" usesdiagramusefillcolour="1" x="5" linecolour="none" y="65" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="70" usefillcolor="1" isinstance="0" xmi.id="1481" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="0" width="200" usesdiagramusefillcolour="0" x="370" linecolour="#ff0000" y="20" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" isinstance="0" xmi.id="1483" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="240" linecolour="none" y="60" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1485" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="0" width="140" usesdiagramusefillcolour="0" x="220" linecolour="#ff0000" y="160" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" isinstance="0" xmi.id="1486" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="180" usesdiagramusefillcolour="1" x="160" linecolour="none" y="260" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1487" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="140" usesdiagramusefillcolour="1" x="210" linecolour="none" y="510" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1488" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="260" usesdiagramusefillcolour="1" x="480" linecolour="none" y="540" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1489" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="220" usesdiagramusefillcolour="1" x="500" linecolour="none" y="470" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1490" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="150" usesdiagramusefillcolour="1" x="645" linecolour="none" y="100" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1491" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="140" usesdiagramusefillcolour="1" x="640" linecolour="none" y="170" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1492" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="120" usesdiagramusefillcolour="1" x="520" linecolour="none" y="400" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1493" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="80" usesdiagramusefillcolour="1" x="550" linecolour="none" y="330" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1494" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="80" usesdiagramusefillcolour="1" x="550" linecolour="none" y="230" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1495" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <usecasewidget usesdiagramfillcolour="1" width="90" usesdiagramusefillcolour="1" x="435" linecolour="none" y="130" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="60" usefillcolor="1" isinstance="0" xmi.id="1496" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <boxwidget usesdiagramfillcolour="1" width="680" usesdiagramusefillcolour="1" x="120" linecolour="none" y="15" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="590" usefillcolor="1" isinstance="0" xmi.id="1526" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     <floatingtext usesdiagramfillcolour="1" width="160" usesdiagramusefillcolour="1" x="120" linecolour="none" y="15" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="700" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1527" text="Volume manager" font="helvetica,15,-1,0,50,0,0,0,0,0" />
+     <notewidget usesdiagramfillcolour="1" width="190" usesdiagramusefillcolour="1" x="265" linecolour="none" y="655" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="1" fillcolour="none" height="50" usefillcolor="1" isinstance="0" xmi.id="1529" text="May require superuser permissions." font="helvetica,11,-1,0,50,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1483" widgetaid="1480" xmi.id="1484" >
+      <linepath>
+       <startpoint startx="810" starty="50" />
+       <endpoint endx="570" endy="50" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="1" widgetbid="1487" widgetaid="1481" xmi.id="1497" >
+      <linepath>
+       <startpoint startx="110" starty="135" />
+       <endpoint endx="220" endy="260" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="2" widgetbid="1485" widgetaid="1481" xmi.id="1498" >
+      <linepath>
+       <startpoint startx="155" starty="90" />
+       <endpoint endx="240" endy="100" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1486" widgetaid="1481" xmi.id="1499" >
+      <linepath>
+       <startpoint startx="155" starty="110" />
+       <endpoint endx="290" endy="160" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="1488" widgetaid="1481" xmi.id="1500" >
+      <linepath>
+       <startpoint startx="60" starty="135" />
+       <endpoint endx="280" endy="510" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="1490" widgetaid="1488" xmi.id="1501" >
+      <linepath>
+       <startpoint startx="350" starty="530" />
+       <endpoint endx="500" endy="500" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="380" linecolour="none" y="475" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1625" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1489" widgetaid="1488" xmi.id="1502" >
+      <linepath>
+       <startpoint startx="350" starty="550" />
+       <endpoint endx="480" endy="570" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="390" linecolour="none" y="565" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1626" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1496" widgetaid="1487" xmi.id="1507" >
+      <linepath>
+       <startpoint startx="280" starty="260" />
+       <endpoint endx="435" endy="160" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="380" linecolour="none" y="195" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1627" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="1495" widgetaid="1487" xmi.id="1508" >
+      <linepath>
+       <startpoint startx="340" starty="280" />
+       <endpoint endx="550" endy="260" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="460" linecolour="none" y="265" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1628" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1494" widgetaid="1487" xmi.id="1509" >
+      <linepath>
+       <startpoint startx="340" starty="300" />
+       <endpoint endx="550" endy="360" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="450" linecolour="none" y="345" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1629" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1493" widgetaid="1487" xmi.id="1510" >
+      <linepath>
+       <startpoint startx="250" starty="320" />
+       <endpoint endx="520" endy="430" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="410" linecolour="none" y="415" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1630" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" widgetbid="1491" widgetaid="1496" xmi.id="1511" >
+      <linepath>
+       <startpoint startx="525" starty="150" />
+       <endpoint endx="645" endy="130" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="520" linecolour="none" y="105" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1631" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="1494" widgetaid="1495" xmi.id="1632" >
+      <linepath>
+       <startpoint startx="590" starty="290" />
+       <endpoint endx="590" endy="330" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" widgetbid="1492" widgetaid="1496" xmi.id="1517" >
+      <linepath>
+       <startpoint startx="525" starty="170" />
+       <endpoint endx="640" endy="200" />
+      </linepath>
+      <floatingtext usesdiagramfillcolour="1" width="100" usesdiagramusefillcolour="1" x="520" linecolour="none" y="185" linewidth="none" usesdiagramlinewidth="1" posttext="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="30" usefillcolor="1" pretext="" isinstance="0" xmi.id="1635" text="&lt;&lt;includes>>" font="helvetica,11,-1,0,50,0,0,0,0,0" />
+     </assocwidget>
+     <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="3" indexb="1" widgetbid="1529" widgetaid="1485" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="240" starty="80" />
+       <endpoint endx="265" endy="670" />
+       <point x="100" y="80" />
+       <point x="100" y="670" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="2" widgetbid="1529" widgetaid="1486" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="220" starty="190" />
+       <endpoint endx="265" endy="690" />
+       <point x="80" y="190" />
+       <point x="80" y="690" />
+      </linepath>
+     </assocwidget>
+     <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" widgetbid="1529" widgetaid="1491" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" visibilityA="200" >
+      <linepath>
+       <startpoint startx="795" starty="130" />
+       <endpoint endx="455" endy="680" />
+       <point x="870" y="130" />
+       <point x="870" y="680" />
+      </linepath>
+     </assocwidget>
+    </associations>
+   </diagram>
+   <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="966" snapy="10" showatts="1" xmi.id="1724" documentation="" type="402" showops="1" showpackage="0" name="ThunarIconFactory" localid="900000" showstereotype="0" showscope="1" snapcsgrid="1" font="helvetica,11,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="796" >
+    <widgets>
+     <classwidget usesdiagramfillcolour="0" width="520" showattsigs="601" usesdiagramusefillcolour="0" x="130" linecolour="#ff0000" y="200" showopsigs="601" linewidth="none" usesdiagramlinewidth="1" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="1788" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,11,-1,5,75,0,0,0,0,0" />
+    </widgets>
+    <messages/>
+    <associations/>
+   </diagram>
+  </diagrams>
+  <listview>
+   <listitem open="1" type="800" label="Views" >
+    <listitem open="1" type="801" label="Logical View" >
+     <listitem open="1" type="813" id="1636" />
+     <listitem open="1" type="813" id="1811" />
+     <listitem open="1" type="813" id="251" />
+     <listitem open="1" type="813" id="85" />
+     <listitem open="1" type="813" id="279" />
+     <listitem open="1" type="813" id="257" />
+     <listitem open="1" type="813" id="343" />
+     <listitem open="1" type="813" id="335" />
+     <listitem open="1" type="813" id="336" />
+     <listitem open="0" type="813" id="70" >
+      <listitem open="0" type="814" id="686" />
+      <listitem open="0" type="814" id="743" />
+      <listitem open="0" type="815" id="692" />
+      <listitem open="0" type="815" id="745" />
+      <listitem open="0" type="815" id="746" />
+      <listitem open="0" type="815" id="747" />
+      <listitem open="0" type="815" id="748" />
+      <listitem open="0" type="815" id="749" />
+     </listitem>
+     <listitem open="0" type="813" id="71" >
+      <listitem open="0" type="815" id="761" />
+      <listitem open="0" type="815" id="764" />
+     </listitem>
+     <listitem open="1" type="813" id="1788" >
+      <listitem open="0" type="814" id="1810" />
+      <listitem open="0" type="815" id="1833" />
+     </listitem>
+     <listitem open="1" type="813" id="221" />
+     <listitem open="1" type="813" id="195" />
+     <listitem open="1" type="813" id="220" />
+     <listitem open="1" type="813" id="1002" />
+     <listitem open="1" type="813" id="535" />
+     <listitem open="0" type="813" id="264" >
+      <listitem open="0" type="814" id="265" />
+     </listitem>
+     <listitem open="0" type="813" id="269" >
+      <listitem open="0" type="815" id="270" />
+     </listitem>
+     <listitem open="1" type="813" id="327" />
+     <listitem open="0" type="813" id="240" >
+      <listitem open="0" type="814" id="946" />
+     </listitem>
+     <listitem open="1" type="813" id="89" />
+     <listitem open="1" type="813" id="87" />
+     <listitem open="1" type="813" id="202" />
+     <listitem open="1" type="813" id="334" />
+     <listitem open="1" type="813" id="224" />
+     <listitem open="1" type="813" id="1254" >
+      <listitem open="0" type="814" id="1255" />
+     </listitem>
+     <listitem open="1" type="813" id="1253" >
+      <listitem open="0" type="815" id="1342" />
+      <listitem open="0" type="815" id="1343" />
+     </listitem>
+     <listitem open="1" type="813" id="234" />
+     <listitem open="1" type="813" id="1637" />
+     <listitem open="1" type="817" id="1001" />
+     <listitem open="0" type="817" id="1068" >
+      <listitem open="0" type="815" id="1069" />
+      <listitem open="0" type="815" id="1070" />
+      <listitem open="0" type="815" id="1072" />
+     </listitem>
+     <listitem open="1" type="817" id="1410" >
+      <listitem open="0" type="815" id="1413" />
+      <listitem open="0" type="815" id="1414" />
+      <listitem open="0" type="815" id="1415" />
+     </listitem>
+     <listitem open="1" type="817" id="1409" >
+      <listitem open="0" type="815" id="1416" />
+     </listitem>
+     <listitem open="1" type="817" id="214" />
+     <listitem open="1" type="818" id="162" >
+      <listitem open="0" type="813" id="163" />
+     </listitem>
+     <listitem open="1" type="818" id="198" >
+      <listitem open="0" type="813" id="267" />
+      <listitem open="0" type="813" id="186" >
+       <listitem open="0" type="816" id="187" />
+      </listitem>
+     </listitem>
+     <listitem open="1" type="818" id="199" >
+      <listitem open="0" type="813" id="1010" />
+      <listitem open="0" type="813" id="1009" />
+      <listitem open="0" type="813" id="226" />
+      <listitem open="0" type="817" id="196" />
+     </listitem>
+     <listitem open="1" type="818" id="78" >
+      <listitem open="1" type="813" id="73" >
+       <listitem open="0" type="814" id="117" />
+       <listitem open="0" type="814" id="172" />
+       <listitem open="0" type="814" id="174" />
+       <listitem open="0" type="814" id="176" />
+       <listitem open="0" type="814" id="178" />
+       <listitem open="0" type="814" id="180" />
+       <listitem open="0" type="814" id="181" />
+       <listitem open="0" type="814" id="182" />
+       <listitem open="0" type="814" id="184" />
+       <listitem open="0" type="815" id="771" />
+      </listitem>
+      <listitem open="0" type="813" id="835" >
+       <listitem open="0" type="815" id="836" />
+      </listitem>
+      <listitem open="1" type="813" id="72" >
+       <listitem open="0" type="814" id="1187" />
+       <listitem open="0" type="814" id="102" />
+       <listitem open="0" type="815" id="114" />
+       <listitem open="0" type="815" id="115" />
+       <listitem open="0" type="815" id="169" />
+       <listitem open="0" type="815" id="170" />
+       <listitem open="0" type="815" id="889" />
+       <listitem open="0" type="815" id="890" />
+      </listitem>
+     </listitem>
+     <listitem open="0" type="830" label="Datatypes" >
+      <listitem open="1" type="829" id="744" />
+      <listitem open="1" type="829" id="770" />
+      <listitem open="1" type="829" id="769" />
+      <listitem open="1" type="829" id="767" />
+      <listitem open="1" type="829" id="768" />
+      <listitem open="1" type="829" id="422" />
+      <listitem open="1" type="829" id="64" />
+      <listitem open="1" type="829" id="63" />
+      <listitem open="1" type="829" id="185" />
+      <listitem open="1" type="829" id="66" />
+      <listitem open="1" type="829" id="65" />
+      <listitem open="1" type="829" id="175" />
+      <listitem open="1" type="829" id="183" />
+      <listitem open="1" type="829" id="61" />
+      <listitem open="1" type="829" id="67" />
+      <listitem open="1" type="829" id="177" />
+      <listitem open="1" type="829" id="68" />
+      <listitem open="1" type="829" id="69" />
+      <listitem open="1" type="829" id="179" />
+      <listitem open="1" type="829" id="173" />
+      <listitem open="1" type="829" id="1638" />
+     </listitem>
+     <listitem open="1" type="831" id="154" />
+     <listitem open="1" type="831" id="133" />
+     <listitem open="1" type="831" id="118" />
+     <listitem open="1" type="831" id="1188" />
+     <listitem open="1" type="831" id="1263" />
+    </listitem>
+    <listitem open="1" type="802" label="Use Case View" >
+     <listitem open="1" type="811" id="1481" />
+     <listitem open="1" type="811" id="1480" />
+     <listitem open="1" type="812" id="1488" />
+     <listitem open="1" type="812" id="1485" />
+     <listitem open="1" type="812" id="1489" />
+     <listitem open="1" type="812" id="1490" />
+     <listitem open="1" type="812" id="1495" />
+     <listitem open="1" type="812" id="1494" />
+     <listitem open="1" type="812" id="1491" />
+     <listitem open="1" type="812" id="1492" />
+     <listitem open="1" type="812" id="1493" />
+     <listitem open="1" type="812" id="1487" />
+     <listitem open="1" type="812" id="1496" />
+     <listitem open="1" type="812" id="1483" />
+     <listitem open="1" type="812" id="1486" />
+    </listitem>
+    <listitem open="1" type="821" label="Component View" >
+     <listitem open="1" type="822" id="426" />
+     <listitem open="1" type="822" id="479" />
+     <listitem open="1" type="822" id="425" />
+     <listitem open="1" type="822" id="429" />
+     <listitem open="1" type="822" id="428" />
+     <listitem open="1" type="822" id="432" />
+    </listitem>
+    <listitem open="1" type="827" label="Deployment View" />
+    <listitem open="1" type="836" label="Entity Relationship Model" />
+   </listitem>
+  </listview>
+  <codegeneration>
+   <codegenerator language="Cpp" >
+    <classifiercodedocument writeOutCode="true" package="" id="1637" parent_class="1637" fileExt=".cpp" fileName="class" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;class.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			class.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1636" parent_class="1636" fileExt=".cpp" fileName="gerror" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gerror.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gerror.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="70" parent_class="70" fileExt=".cpp" fileName="thunarfile" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarfile.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_11" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_12" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_13" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_14" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_15" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeoperation parent_id="692" tag="operation_692" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="745" tag="operation_745" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="746" tag="operation_746" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="747" tag="operation_747" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="748" tag="operation_748" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="749" tag="operation_749" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeaccessormethod accessType="0" parent_id="686" tag="hblock_tag_0" canDelete="false" classfield_id="686" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_18" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_19" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_20" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_21" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_22" canDelete="false" classfield_id="772" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_23" canDelete="false" classfield_id="772" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_24" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_25" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_26" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="686" tag="hblock_tag_1" canDelete="false" classfield_id="686" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="743" tag="hblock_tag_2" canDelete="false" classfield_id="743" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="743" tag="hblock_tag_3" canDelete="false" classfield_id="743" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfile.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="686" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="686" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="686" tag="hblock_tag_0" canDelete="false" classfield_id="686" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="686" tag="hblock_tag_1" canDelete="false" classfield_id="686" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="743" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="743" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="743" tag="hblock_tag_2" canDelete="false" classfield_id="743" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="743" tag="hblock_tag_3" canDelete="false" classfield_id="743" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="751" field_type="3" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="751" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_0" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_18" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_19" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_20" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_21" canDelete="false" writeOutText="false" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="687" field_type="4" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="687" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_11" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_12" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_13" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_14" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_15" canDelete="false" writeOutText="false" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="772" field_type="4" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="772" tag="" canDelete="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_22" canDelete="false" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_23" canDelete="false" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_24" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_25" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_26" canDelete="false" writeOutText="false" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="71" parent_class="71" fileExt=".cpp" fileName="thunarfolder" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarfolder.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_7" canDelete="false" writeOutText="false" classfield_id="751" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_8" canDelete="false" writeOutText="false" classfield_id="751" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_9" canDelete="false" classfield_id="751" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_10" canDelete="false" classfield_id="751" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_11" canDelete="false" classfield_id="751" role_id="0" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeoperation parent_id="761" tag="operation_761" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="764" tag="operation_764" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfolder.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="751" field_type="3" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="751" tag="" canDelete="false" indentLevel="1" role_id="0" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_7" canDelete="false" writeOutText="false" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_8" canDelete="false" writeOutText="false" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_9" canDelete="false" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_10" canDelete="false" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_11" canDelete="false" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="73" parent_class="73" fileExt=".cpp" fileName="thunarvfsinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsinfo.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="117" tag="hblock_tag_0" canDelete="false" classfield_id="117" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="117" tag="hblock_tag_1" canDelete="false" classfield_id="117" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="172" tag="hblock_tag_2" canDelete="false" classfield_id="172" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="172" tag="hblock_tag_3" canDelete="false" classfield_id="172" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="174" tag="hblock_tag_4" canDelete="false" classfield_id="174" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="174" tag="hblock_tag_5" canDelete="false" classfield_id="174" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="176" tag="hblock_tag_6" canDelete="false" classfield_id="176" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="176" tag="hblock_tag_7" canDelete="false" classfield_id="176" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="178" tag="hblock_tag_8" canDelete="false" classfield_id="178" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="178" tag="hblock_tag_9" canDelete="false" classfield_id="178" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="180" tag="hblock_tag_10" canDelete="false" classfield_id="180" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="180" tag="hblock_tag_11" canDelete="false" classfield_id="180" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="181" tag="hblock_tag_12" canDelete="false" classfield_id="181" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="181" tag="hblock_tag_13" canDelete="false" classfield_id="181" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="182" tag="hblock_tag_14" canDelete="false" classfield_id="182" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="182" tag="hblock_tag_15" canDelete="false" classfield_id="182" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="184" tag="hblock_tag_16" canDelete="false" classfield_id="184" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="184" tag="hblock_tag_17" canDelete="false" classfield_id="184" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_18" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_19" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_20" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_21" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_22" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_23" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_24" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_25" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_26" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_27" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeoperation parent_id="771" tag="operation_771" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsinfo.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="117" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="117" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="117" tag="hblock_tag_0" canDelete="false" classfield_id="117" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="117" tag="hblock_tag_1" canDelete="false" classfield_id="117" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="172" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="172" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="172" tag="hblock_tag_2" canDelete="false" classfield_id="172" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="172" tag="hblock_tag_3" canDelete="false" classfield_id="172" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="174" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="174" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="174" tag="hblock_tag_4" canDelete="false" classfield_id="174" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="174" tag="hblock_tag_5" canDelete="false" classfield_id="174" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="176" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="176" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="176" tag="hblock_tag_6" canDelete="false" classfield_id="176" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="176" tag="hblock_tag_7" canDelete="false" classfield_id="176" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="178" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="178" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="178" tag="hblock_tag_8" canDelete="false" classfield_id="178" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="178" tag="hblock_tag_9" canDelete="false" classfield_id="178" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="180" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="180" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="180" tag="hblock_tag_10" canDelete="false" classfield_id="180" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="180" tag="hblock_tag_11" canDelete="false" classfield_id="180" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="181" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="181" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="181" tag="hblock_tag_12" canDelete="false" classfield_id="181" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="181" tag="hblock_tag_13" canDelete="false" classfield_id="181" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="182" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="182" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="182" tag="hblock_tag_14" canDelete="false" classfield_id="182" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="182" tag="hblock_tag_15" canDelete="false" classfield_id="182" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="184" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="184" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="184" tag="hblock_tag_16" canDelete="false" classfield_id="184" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="184" tag="hblock_tag_17" canDelete="false" classfield_id="184" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="687" field_type="4" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="687" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_18" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_19" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_20" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_21" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_22" canDelete="false" writeOutText="false" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="772" field_type="4" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="772" tag="" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_23" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_24" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_25" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_26" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_27" canDelete="false" writeOutText="false" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="72" parent_class="72" fileExt=".cpp" fileName="thunarvfsuri" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsuri.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="1187" tag="hblock_tag_0" canDelete="false" classfield_id="1187" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="1187" tag="hblock_tag_1" canDelete="false" classfield_id="1187" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeoperation parent_id="114" tag="operation_114" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="115" tag="operation_115" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="169" tag="operation_169" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="170" tag="operation_170" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="889" tag="operation_889" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="890" tag="operation_890" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeaccessormethod accessType="0" parent_id="102" tag="hblock_tag_2" canDelete="false" classfield_id="102" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="102" tag="hblock_tag_3" canDelete="false" classfield_id="102" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsuri.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1187" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1187" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1187" tag="hblock_tag_0" canDelete="false" classfield_id="1187" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1187" tag="hblock_tag_1" canDelete="false" classfield_id="1187" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="102" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="102" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="102" tag="hblock_tag_2" canDelete="false" classfield_id="102" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="102" tag="hblock_tag_3" canDelete="false" classfield_id="102" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="835" parent_class="835" fileExt=".cpp" fileName="thunarvfsmonitor" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsmonitor.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="836" tag="operation_836" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmonitor.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="85" parent_class="85" fileExt=".cpp" fileName="thunardesktopfile" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunardesktopfile.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopfile.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="87" parent_class="87" fileExt=".cpp" fileName="thunartrashedfile" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunartrashedfile.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartrashedfile.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="89" parent_class="89" fileExt=".cpp" fileName="thunartrashfolder" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunartrashfolder.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartrashfolder.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="118" parent_class="118" fileExt=".cpp" fileName="thunarvfsfiletype" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsfiletype.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfiletype.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="133" parent_class="133" fileExt=".cpp" fileName="thunarvfsfilemode" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsfilemode.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfilemode.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="154" parent_class="154" fileExt=".cpp" fileName="thunarvfsfileflags" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsfileflags.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfileflags.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="exo" id="163" parent_class="163" fileExt=".cpp" fileName="exomimeinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;exomimeinfo.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			exomimeinfo.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is exo&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="195" parent_class="195" fileExt=".cpp" fileName="thunarlistmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarlistmodel.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlistmodel.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gobject" id="186" parent_class="186" fileExt=".cpp" fileName="gsignal" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gsignal.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gsignal.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gobject&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gobject" id="267" parent_class="267" fileExt=".cpp" fileName="gobject" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gobject.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gobject.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gobject&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="196" parent_class="196" fileExt=".cpp" fileName="gtktreemodel" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gtktreemodel.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtktreemodel.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="226" parent_class="226" fileExt=".cpp" fileName="gtktreeview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gtktreeview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtktreeview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="1009" parent_class="1009" fileExt=".cpp" fileName="gtkcontainer" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gtkcontainer.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkcontainer.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="1010" parent_class="1010" fileExt=".cpp" fileName="gtkbutton" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gtkbutton.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkbutton.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="202" parent_class="202" fileExt=".cpp" fileName="thunartreemodel" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunartreemodel.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreemodel.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="214" parent_class="214" fileExt=".cpp" fileName="thunarview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="220" parent_class="220" fileExt=".cpp" fileName="thunarlistview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarlistview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlistview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="221" parent_class="221" fileExt=".cpp" fileName="thunariconview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunariconview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunariconview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="224" parent_class="224" fileExt=".cpp" fileName="thunartreeview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunartreeview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreeview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="234" parent_class="234" fileExt=".cpp" fileName="thunarwindow" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarwindow.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarwindow.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="240" parent_class="240" fileExt=".cpp" fileName="thunarstatusbar" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarstatusbar.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="946" tag="hblock_tag_0" canDelete="false" classfield_id="946" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="946" tag="hblock_tag_1" canDelete="false" classfield_id="946" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarstatusbar.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="946" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="946" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="946" tag="hblock_tag_0" canDelete="false" classfield_id="946" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="946" tag="hblock_tag_1" canDelete="false" classfield_id="946" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="251" parent_class="251" fileExt=".cpp" fileName="thunarapplication" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarapplication.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarapplication.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="257" parent_class="257" fileExt=".cpp" fileName="thunardesktopview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunardesktopview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="264" parent_class="264" fileExt=".cpp" fileName="thunarpreferences" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarpreferences.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="265" tag="hblock_tag_0" canDelete="false" classfield_id="265" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="265" tag="hblock_tag_1" canDelete="false" classfield_id="265" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarpreferences.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="265" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="265" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="265" tag="hblock_tag_0" canDelete="false" classfield_id="265" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="265" tag="hblock_tag_1" canDelete="false" classfield_id="265" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="269" parent_class="269" fileExt=".cpp" fileName="thunarpreferencesdialog" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarpreferencesdialog.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="270" tag="operation_270" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarpreferencesdialog.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="279" parent_class="279" fileExt=".cpp" fileName="thunardesktopmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunardesktopmodel.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopmodel.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="327" parent_class="327" fileExt=".cpp" fileName="thunarsidepane" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarsidepane.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarsidepane.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="334" parent_class="334" fileExt=".cpp" fileName="thunartreepane" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunartreepane.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreepane.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="335" parent_class="335" fileExt=".cpp" fileName="thunarfavouritespane" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarfavouritespane.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritespane.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="336" parent_class="336" fileExt=".cpp" fileName="thunarfavouritesview" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarfavouritesview.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritesview.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="343" parent_class="343" fileExt=".cpp" fileName="thunarfavouritesmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarfavouritesmodel.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritesmodel.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="535" parent_class="535" fileExt=".cpp" fileName="thunarmimeaction" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarmimeaction.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarmimeaction.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1001" parent_class="1001" fileExt=".cpp" fileName="thunarlocationbar" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarlocationbar.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlocationbar.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1002" parent_class="1002" fileExt=".cpp" fileName="thunarlocationbuttons" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarlocationbuttons.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlocationbuttons.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1068" parent_class="1068" fileExt=".cpp" fileName="thunarnavigator" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarnavigator.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="1069" tag="operation_1069" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="1070" tag="operation_1070" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="1072" tag="operation_1072" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarnavigator.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1188" parent_class="1188" fileExt=".cpp" fileName="thunarvfsurischeme" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsurischeme.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsurischeme.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1253" parent_class="1253" fileExt=".cpp" fileName="thunarvfsvolumemanagerbsd" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsvolumemanagerbsd.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="1342" tag="operation_1342" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="1343" tag="operation_1343" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumemanagerbsd.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1254" parent_class="1254" fileExt=".cpp" fileName="thunarvfsvolumebsd" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsvolumebsd.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="1255" tag="hblock_tag_0" canDelete="false" classfield_id="1255" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="1255" tag="hblock_tag_1" canDelete="false" classfield_id="1255" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumebsd.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1255" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1255" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1255" tag="hblock_tag_0" canDelete="false" classfield_id="1255" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1255" tag="hblock_tag_1" canDelete="false" classfield_id="1255" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1263" parent_class="1263" fileExt=".cpp" fileName="thunarvfsvolumekind" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsvolumekind.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumekind.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1409" parent_class="1409" fileExt=".cpp" fileName="thunarvfsvolumemanager" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsvolumemanager.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="1416" tag="operation_1416" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumemanager.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1410" parent_class="1410" fileExt=".cpp" fileName="thunarvfsvolume" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunarvfsvolume.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeoperation parent_id="1413" tag="operation_1413" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="1414" tag="operation_1414" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+        <codeoperation parent_id="1415" tag="operation_1415" canDelete="false" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolume.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <codedocument writeOutCode="false" package="" id="Makefile_DOC" fileExt="" fileName="Makefile" >
+     <textblocks/>
+     <header>
+      <codecomment tag="" />
+     </header>
+    </codedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1788" parent_class="1788" fileExt=".cpp" fileName="thunariconfactory" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;thunariconfactory.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks>
+        <codeaccessormethod accessType="0" parent_id="1810" tag="hblock_tag_0" canDelete="false" classfield_id="1810" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeaccessormethod accessType="1" parent_id="1810" tag="hblock_tag_1" canDelete="false" classfield_id="1810" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeaccessormethod>
+        <codeoperation parent_id="1833" tag="operation_1833" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" />
+         </header>
+        </codeoperation>
+       </textblocks>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunariconfactory.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:18:01&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1810" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1810" tag="" canDelete="false" indentLevel="1" text="FIX ME;" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1810" tag="hblock_tag_0" canDelete="false" classfield_id="1810" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1810" tag="hblock_tag_1" canDelete="false" classfield_id="1810" >
+        <header>
+         <cppcodedocumentation tag="" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="1811" parent_class="1811" fileExt=".cpp" fileName="gtkicontheme" >
+     <textblocks>
+      <codeblockwithcomments tag="includes" text="#include &quot;gtkicontheme.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="constructionMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Constructors/Destructors" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+      <hierarchicalcodeblock tag="otherMethodsBlock" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" text="Methods" />
+       </header>
+       <textblocks/>
+      </hierarchicalcodeblock>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkicontheme.cpp - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.cpp&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:17:43&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1637" parent_class="1637" fileExt=".h" fileName="class" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef CLASS_H&amp;#010;#define CLASS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1637" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class class&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="class ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //CLASS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			class.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1636" parent_class="1636" fileExt=".h" fileName="gerror" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GERROR_H&amp;#010;#define GERROR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1636" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GError&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GError ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GERROR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gerror.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader70" parent_class="70" fileExt=".h" fileName="thunarfile" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARFILE_H&amp;#010;#define THUNARFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;gerror.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="70" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarFile&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="751" tag="tblock_0" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFolder ;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="687" tag="tblock_14" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text=" ThunarVfsInfo ;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarFile ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_0" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_22" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_23" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_24" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_25" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_15" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_16" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_17" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_18" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_19" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="692" tag="operation_692" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param uri &amp;#010;@param error " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="745" tag="operation_745" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="746" tag="operation_746" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="747" tag="operation_747" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="748" tag="operation_748" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="749" tag="operation_749" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="686" tag="tblock_2" canDelete="false" indentLevel="1" text=" string display_name;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="743" tag="tblock_3" canDelete="false" indentLevel="1" text=" ExoMimeInfo mime_info;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="772" tag="tblock_32" canDelete="false" indentLevel="1" role_id="0" text=" ThunarVfsInfo info;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="686" tag="hblock_tag_14" canDelete="false" indentLevel="1" classfield_id="686" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="686" tag="hblock_tag_15" canDelete="false" indentLevel="1" classfield_id="686" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="743" tag="hblock_tag_16" canDelete="false" indentLevel="1" classfield_id="743" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="743" tag="hblock_tag_17" canDelete="false" indentLevel="1" classfield_id="743" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_33" canDelete="false" indentLevel="1" classfield_id="772" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_34" canDelete="false" indentLevel="1" classfield_id="772" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_35" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_36" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_37" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfile.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="686" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="686" tag="tblock_2" canDelete="false" indentLevel="1" text=" string display_name;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="686" tag="hblock_tag_14" canDelete="false" indentLevel="1" classfield_id="686" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="686" tag="hblock_tag_15" canDelete="false" indentLevel="1" classfield_id="686" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="743" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="743" tag="tblock_3" canDelete="false" indentLevel="1" text=" ExoMimeInfo mime_info;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="743" tag="hblock_tag_16" canDelete="false" indentLevel="1" classfield_id="743" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="743" tag="hblock_tag_17" canDelete="false" indentLevel="1" classfield_id="743" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="751" field_type="3" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="751" tag="tblock_0" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFolder ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_0" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_22" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_23" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_24" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_25" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="687" field_type="4" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="687" tag="tblock_14" canDelete="false" writeOutText="false" indentLevel="1" role_id="0" text=" ThunarVfsInfo ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_15" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_16" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_17" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_18" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_19" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="772" field_type="4" initialValue="" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="772" tag="tblock_32" canDelete="false" indentLevel="1" role_id="0" text=" ThunarVfsInfo info;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_33" canDelete="false" indentLevel="1" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_34" canDelete="false" indentLevel="1" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_35" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_36" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_37" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader71" parent_class="71" fileExt=".h" fileName="thunarfolder" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARFOLDER_H&amp;#010;#define THUNARFOLDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &lt;vector>&amp;#010;#include &quot;thunarfile.h&quot;&amp;#010;#include &quot;gerror.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="71" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarFolder&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarFolder ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="761" tag="operation_761" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param file &amp;#010;@param error " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="764" tag="operation_764" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param uri &amp;#010;@param error " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="751" tag="tblock_0" canDelete="false" indentLevel="1" role_id="0" text=" vector filesVector;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_0" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_8" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_9" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_10" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_11" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARFOLDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfolder.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="751" field_type="3" initialValue=" new vector( )" role_id="1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="751" tag="tblock_0" canDelete="false" indentLevel="1" role_id="0" text=" vector filesVector;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="751" tag="hblock_tag_0" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="751" tag="hblock_tag_8" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="751" tag="hblock_tag_9" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="751" tag="hblock_tag_10" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="751" tag="hblock_tag_11" canDelete="false" indentLevel="1" classfield_id="751" role_id="0" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="cppheader73" parent_class="73" fileExt=".h" fileName="thunarvfsinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSINFO_H&amp;#010;#define THUNARVFSINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="73" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsInfo&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="117" tag="tblock_0" canDelete="false" indentLevel="1" text=" string target;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="172" tag="tblock_1" canDelete="false" indentLevel="1" text=" uid_t uid;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="174" tag="tblock_2" canDelete="false" indentLevel="1" text=" gid_t gid;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="176" tag="tblock_3" canDelete="false" indentLevel="1" text=" ThunarVfsFileSize size;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="178" tag="tblock_4" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime atime;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="180" tag="tblock_5" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime mtime;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="181" tag="tblock_6" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime ctime;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="182" tag="tblock_7" canDelete="false" indentLevel="1" text=" ThunarVfsFileInode inode;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="184" tag="tblock_8" canDelete="false" indentLevel="1" text=" ThunarVfsFileDevice device;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="687" tag="tblock_26" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFile ;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="772" tag="tblock_32" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFile ;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsInfo ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="117" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="117" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="117" tag="hblock_tag_11" canDelete="false" indentLevel="1" classfield_id="117" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="172" tag="hblock_tag_12" canDelete="false" indentLevel="1" classfield_id="172" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="172" tag="hblock_tag_13" canDelete="false" indentLevel="1" classfield_id="172" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="174" tag="hblock_tag_14" canDelete="false" indentLevel="1" classfield_id="174" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="174" tag="hblock_tag_15" canDelete="false" indentLevel="1" classfield_id="174" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="176" tag="hblock_tag_16" canDelete="false" indentLevel="1" classfield_id="176" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="176" tag="hblock_tag_17" canDelete="false" indentLevel="1" classfield_id="176" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="178" tag="hblock_tag_18" canDelete="false" indentLevel="1" classfield_id="178" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="178" tag="hblock_tag_19" canDelete="false" indentLevel="1" classfield_id="178" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="180" tag="hblock_tag_20" canDelete="false" indentLevel="1" classfield_id="180" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="180" tag="hblock_tag_21" canDelete="false" indentLevel="1" classfield_id="180" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="181" tag="hblock_tag_22" canDelete="false" indentLevel="1" classfield_id="181" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="181" tag="hblock_tag_23" canDelete="false" indentLevel="1" classfield_id="181" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="182" tag="hblock_tag_24" canDelete="false" indentLevel="1" classfield_id="182" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="182" tag="hblock_tag_25" canDelete="false" indentLevel="1" classfield_id="182" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="184" tag="hblock_tag_26" canDelete="false" indentLevel="1" classfield_id="184" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="184" tag="hblock_tag_27" canDelete="false" indentLevel="1" classfield_id="184" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_28" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_29" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_30" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_31" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_33" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_34" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_35" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_36" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_37" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="771" tag="operation_771" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsinfo.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="117" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="117" tag="tblock_0" canDelete="false" indentLevel="1" text=" string target;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="117" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="117" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="117" tag="hblock_tag_11" canDelete="false" indentLevel="1" classfield_id="117" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="172" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="172" tag="tblock_1" canDelete="false" indentLevel="1" text=" uid_t uid;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="172" tag="hblock_tag_12" canDelete="false" indentLevel="1" classfield_id="172" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="172" tag="hblock_tag_13" canDelete="false" indentLevel="1" classfield_id="172" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="174" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="174" tag="tblock_2" canDelete="false" indentLevel="1" text=" gid_t gid;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="174" tag="hblock_tag_14" canDelete="false" indentLevel="1" classfield_id="174" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="174" tag="hblock_tag_15" canDelete="false" indentLevel="1" classfield_id="174" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="176" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="176" tag="tblock_3" canDelete="false" indentLevel="1" text=" ThunarVfsFileSize size;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="176" tag="hblock_tag_16" canDelete="false" indentLevel="1" classfield_id="176" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="176" tag="hblock_tag_17" canDelete="false" indentLevel="1" classfield_id="176" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="178" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="178" tag="tblock_4" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime atime;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="178" tag="hblock_tag_18" canDelete="false" indentLevel="1" classfield_id="178" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="178" tag="hblock_tag_19" canDelete="false" indentLevel="1" classfield_id="178" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="180" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="180" tag="tblock_5" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime mtime;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="180" tag="hblock_tag_20" canDelete="false" indentLevel="1" classfield_id="180" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="180" tag="hblock_tag_21" canDelete="false" indentLevel="1" classfield_id="180" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="181" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="181" tag="tblock_6" canDelete="false" indentLevel="1" text=" ThunarVfsFileTime ctime;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="181" tag="hblock_tag_22" canDelete="false" indentLevel="1" classfield_id="181" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="181" tag="hblock_tag_23" canDelete="false" indentLevel="1" classfield_id="181" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="182" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="182" tag="tblock_7" canDelete="false" indentLevel="1" text=" ThunarVfsFileInode inode;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="182" tag="hblock_tag_24" canDelete="false" indentLevel="1" classfield_id="182" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="182" tag="hblock_tag_25" canDelete="false" indentLevel="1" classfield_id="182" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="184" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="184" tag="tblock_8" canDelete="false" indentLevel="1" text=" ThunarVfsFileDevice device;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="184" tag="hblock_tag_26" canDelete="false" indentLevel="1" classfield_id="184" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="184" tag="hblock_tag_27" canDelete="false" indentLevel="1" classfield_id="184" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="687" field_type="4" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="687" tag="tblock_26" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFile ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="687" tag="hblock_tag_27" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="687" tag="hblock_tag_28" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="687" tag="hblock_tag_29" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="687" tag="hblock_tag_30" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="687" tag="hblock_tag_31" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="687" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="772" field_type="4" initialValue="" role_id="0" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="772" tag="tblock_32" canDelete="false" writeOutText="false" indentLevel="1" role_id="1" text=" ThunarFile ;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="772" tag="hblock_tag_33" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="772" tag="hblock_tag_34" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="2" parent_id="772" tag="hblock_tag_35" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="3" parent_id="772" tag="hblock_tag_36" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="4" parent_id="772" tag="hblock_tag_37" canDelete="false" writeOutText="false" indentLevel="1" classfield_id="772" role_id="1" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="cppheader72" parent_class="72" fileExt=".h" fileName="thunarvfsuri" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSURI_H&amp;#010;#define THUNARVFSURI_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using thunar-vfs::ThunarVfsURI;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="72" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsURI&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsURI ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="114" tag="operation_114" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="115" tag="operation_115" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param name " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="169" tag="operation_169" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="170" tag="operation_170" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param uri " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="889" tag="operation_889" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="890" tag="operation_890" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="1187" tag="tblock_0" canDelete="false" indentLevel="1" text=" string host;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+              <ccfdeclarationcodeblock parent_id="102" tag="tblock_1" canDelete="false" indentLevel="1" text=" string path;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="1187" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1187" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="1187" tag="hblock_tag_2" canDelete="false" indentLevel="1" classfield_id="1187" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="0" parent_id="102" tag="hblock_tag_3" canDelete="false" indentLevel="1" classfield_id="102" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="102" tag="hblock_tag_4" canDelete="false" indentLevel="1" classfield_id="102" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSURI_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsuri.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1187" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1187" tag="tblock_0" canDelete="false" indentLevel="1" text=" string host;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1187" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1187" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1187" tag="hblock_tag_2" canDelete="false" indentLevel="1" classfield_id="1187" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+      <codeclassfield parent_id="102" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="102" tag="tblock_1" canDelete="false" indentLevel="1" text=" string path;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="102" tag="hblock_tag_3" canDelete="false" indentLevel="1" classfield_id="102" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="102" tag="hblock_tag_4" canDelete="false" indentLevel="1" classfield_id="102" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="thunar-vfs" id="cppheader835" parent_class="835" fileExt=".h" fileName="thunarvfsmonitor" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSMONITOR_H&amp;#010;#define THUNARVFSMONITOR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="835" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsMonitor&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsMonitor ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="836" tag="operation_836" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param uri " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSMONITOR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsmonitor.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is thunar-vfs&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader85" parent_class="85" fileExt=".h" fileName="thunardesktopfile" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARDESKTOPFILE_H&amp;#010;#define THUNARDESKTOPFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="85" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarDesktopFile&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarDesktopFile ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARDESKTOPFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopfile.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader87" parent_class="87" fileExt=".h" fileName="thunartrashedfile" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARTRASHEDFILE_H&amp;#010;#define THUNARTRASHEDFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="87" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarTrashedFile&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarTrashedFile ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARTRASHEDFILE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartrashedfile.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader89" parent_class="89" fileExt=".h" fileName="thunartrashfolder" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARTRASHFOLDER_H&amp;#010;#define THUNARTRASHFOLDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="89" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarTrashFolder&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarTrashFolder ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARTRASHFOLDER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartrashfolder.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader118" parent_class="118" fileExt=".h" fileName="thunarvfsfiletype" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSFILETYPE_H&amp;#010;#define THUNARVFSFILETYPE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="118" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsFileType&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsFileType ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSFILETYPE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfiletype.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader133" parent_class="133" fileExt=".h" fileName="thunarvfsfilemode" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSFILEMODE_H&amp;#010;#define THUNARVFSFILEMODE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="133" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsFileMode&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsFileMode ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSFILEMODE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfilemode.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader154" parent_class="154" fileExt=".h" fileName="thunarvfsfileflags" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSFILEFLAGS_H&amp;#010;#define THUNARVFSFILEFLAGS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="154" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsFileFlags&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsFileFlags ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSFILEFLAGS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsfileflags.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="exo" id="cppheader163" parent_class="163" fileExt=".h" fileName="exomimeinfo" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef EXOMIMEINFO_H&amp;#010;#define EXOMIMEINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="163" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ExoMimeInfo&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ExoMimeInfo ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //EXOMIMEINFO_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			exomimeinfo.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is exo&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader195" parent_class="195" fileExt=".h" fileName="thunarlistmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARLISTMODEL_H&amp;#010;#define THUNARLISTMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarListModel;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="195" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarListModel&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarListModel ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARLISTMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlistmodel.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gobject" id="cppheader186" parent_class="186" fileExt=".h" fileName="gsignal" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GSIGNAL_H&amp;#010;#define GSIGNAL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="186" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GSignal&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GSignal ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GSIGNAL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gsignal.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gobject&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gobject" id="cppheader267" parent_class="267" fileExt=".h" fileName="gobject" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GOBJECT_H&amp;#010;#define GOBJECT_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="267" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GObject&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GObject ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GOBJECT_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gobject.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gobject&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="cppheader196" parent_class="196" fileExt=".h" fileName="gtktreemodel" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GTKTREEMODEL_H&amp;#010;#define GTKTREEMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="196" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface GtkTreeModel&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GtkTreeModel ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GTKTREEMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtktreemodel.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="cppheader226" parent_class="226" fileExt=".h" fileName="gtktreeview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GTKTREEVIEW_H&amp;#010;#define GTKTREEVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="226" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GtkTreeView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GtkTreeView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GTKTREEVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtktreeview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="cppheader1009" parent_class="1009" fileExt=".h" fileName="gtkcontainer" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GTKCONTAINER_H&amp;#010;#define GTKCONTAINER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1009" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GtkContainer&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GtkContainer ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GTKCONTAINER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkcontainer.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="gtk" id="cppheader1010" parent_class="1010" fileExt=".h" fileName="gtkbutton" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GTKBUTTON_H&amp;#010;#define GTKBUTTON_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1010" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GtkButton&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GtkButton ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GTKBUTTON_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkbutton.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is gtk&amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader202" parent_class="202" fileExt=".h" fileName="thunartreemodel" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARTREEMODEL_H&amp;#010;#define THUNARTREEMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarTreeModel;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="202" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarTreeModel&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarTreeModel ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARTREEMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreemodel.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader214" parent_class="214" fileExt=".h" fileName="thunarview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVIEW_H&amp;#010;#define THUNARVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="214" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface ThunarView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader220" parent_class="220" fileExt=".h" fileName="thunarlistview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARLISTVIEW_H&amp;#010;#define THUNARLISTVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="220" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarListView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarListView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARLISTVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlistview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader221" parent_class="221" fileExt=".h" fileName="thunariconview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARICONVIEW_H&amp;#010;#define THUNARICONVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="221" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarIconView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarIconView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARICONVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunariconview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader224" parent_class="224" fileExt=".h" fileName="thunartreeview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARTREEVIEW_H&amp;#010;#define THUNARTREEVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarTreeView;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="224" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarTreeView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarTreeView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARTREEVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreeview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader234" parent_class="234" fileExt=".h" fileName="thunarwindow" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARWINDOW_H&amp;#010;#define THUNARWINDOW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="234" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarWindow&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarWindow ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARWINDOW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarwindow.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader240" parent_class="240" fileExt=".h" fileName="thunarstatusbar" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARSTATUSBAR_H&amp;#010;#define THUNARSTATUSBAR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="240" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarStatusBar&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarStatusBar ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="946" tag="tblock_0" canDelete="false" indentLevel="1" text=" string text;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="946" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="946" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="946" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="946" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARSTATUSBAR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarstatusbar.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="946" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="946" tag="tblock_0" canDelete="false" indentLevel="1" text=" string text;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="946" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="946" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="946" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="946" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader251" parent_class="251" fileExt=".h" fileName="thunarapplication" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARAPPLICATION_H&amp;#010;#define THUNARAPPLICATION_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="251" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarApplication&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarApplication ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARAPPLICATION_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarapplication.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader257" parent_class="257" fileExt=".h" fileName="thunardesktopview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARDESKTOPVIEW_H&amp;#010;#define THUNARDESKTOPVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="257" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarDesktopView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarDesktopView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARDESKTOPVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader264" parent_class="264" fileExt=".h" fileName="thunarpreferences" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARPREFERENCES_H&amp;#010;#define THUNARPREFERENCES_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarPreferences;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="264" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarPreferences&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarPreferences ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="265" tag="tblock_0" canDelete="false" indentLevel="1" text=" bool manage-desktop;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="265" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="265" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="265" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="265" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARPREFERENCES_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarpreferences.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="265" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="265" tag="tblock_0" canDelete="false" indentLevel="1" text=" bool manage-desktop;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="265" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="265" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="265" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="265" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader269" parent_class="269" fileExt=".h" fileName="thunarpreferencesdialog" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARPREFERENCESDIALOG_H&amp;#010;#define THUNARPREFERENCESDIALOG_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarwindow.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="269" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarPreferencesDialog&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarPreferencesDialog ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="270" tag="operation_270" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param window " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARPREFERENCESDIALOG_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarpreferencesdialog.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader279" parent_class="279" fileExt=".h" fileName="thunardesktopmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARDESKTOPMODEL_H&amp;#010;#define THUNARDESKTOPMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="279" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarDesktopModel&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarDesktopModel ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARDESKTOPMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunardesktopmodel.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader327" parent_class="327" fileExt=".h" fileName="thunarsidepane" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARSIDEPANE_H&amp;#010;#define THUNARSIDEPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="327" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="******************************* Abstract Class ****************************&amp;#010;ThunarSidePane does not have any pure virtual methods, but its author&amp;#010;  defined it as an abstract class, so you should not use it directly.&amp;#010;  Inherit from it instead and create only objects from the derived classes&amp;#010;*****************************************************************************" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarSidePane ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARSIDEPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarsidepane.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader334" parent_class="334" fileExt=".h" fileName="thunartreepane" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARTREEPANE_H&amp;#010;#define THUNARTREEPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="334" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarTreePane&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarTreePane ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARTREEPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunartreepane.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader335" parent_class="335" fileExt=".h" fileName="thunarfavouritespane" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARFAVOURITESPANE_H&amp;#010;#define THUNARFAVOURITESPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="335" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarFavouritesPane&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarFavouritesPane ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARFAVOURITESPANE_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritespane.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader336" parent_class="336" fileExt=".h" fileName="thunarfavouritesview" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARFAVOURITESVIEW_H&amp;#010;#define THUNARFAVOURITESVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarFavouritesView;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="336" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarFavouritesView&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarFavouritesView ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARFAVOURITESVIEW_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritesview.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader343" parent_class="343" fileExt=".h" fileName="thunarfavouritesmodel" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARFAVOURITESMODEL_H&amp;#010;#define THUNARFAVOURITESMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarFavouritesModel;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="343" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarFavouritesModel&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarFavouritesModel ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARFAVOURITESMODEL_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarfavouritesmodel.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader535" parent_class="535" fileExt=".h" fileName="thunarmimeaction" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARMIMEACTION_H&amp;#010;#define THUNARMIMEACTION_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="535" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarMimeAction&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarMimeAction ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARMIMEACTION_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarmimeaction.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1001" parent_class="1001" fileExt=".h" fileName="thunarlocationbar" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARLOCATIONBAR_H&amp;#010;#define THUNARLOCATIONBAR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="1001" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface ThunarLocationBar&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarLocationBar ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARLOCATIONBAR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlocationbar.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1002" parent_class="1002" fileExt=".h" fileName="thunarlocationbuttons" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARLOCATIONBUTTONS_H&amp;#010;#define THUNARLOCATIONBUTTONS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarLocationButtons;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1002" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarLocationButtons&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarLocationButtons ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARLOCATIONBUTTONS_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarlocationbuttons.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1068" parent_class="1068" fileExt=".h" fileName="thunarnavigator" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARNAVIGATOR_H&amp;#010;#define THUNARNAVIGATOR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarfile.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" text="using ::ThunarNavigator;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="1068" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface ThunarNavigator&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarNavigator ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="1069" tag="operation_1069" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="1070" tag="operation_1070" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param current_directory " />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="1072" tag="operation_1072" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param directory " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARNAVIGATOR_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarnavigator.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1188" parent_class="1188" fileExt=".h" fileName="thunarvfsurischeme" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSURISCHEME_H&amp;#010;#define THUNARVFSURISCHEME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1188" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsURIScheme&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsURIScheme ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSURISCHEME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsurischeme.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1253" parent_class="1253" fileExt=".h" fileName="thunarvfsvolumemanagerbsd" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSVOLUMEMANAGERBSD_H&amp;#010;#define THUNARVFSVOLUMEMANAGERBSD_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1253" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsVolumeManagerBSD&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsVolumeManagerBSD ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="1342" tag="operation_1342" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="1343" tag="operation_1343" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSVOLUMEMANAGERBSD_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumemanagerbsd.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1254" parent_class="1254" fileExt=".h" fileName="thunarvfsvolumebsd" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSVOLUMEBSD_H&amp;#010;#define THUNARVFSVOLUMEBSD_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1254" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsVolumeBSD&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsVolumeBSD ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="1255" tag="tblock_0" canDelete="false" indentLevel="1" text=" bool mount-status;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="1255" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1255" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="1255" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="1255" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSVOLUMEBSD_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumebsd.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1255" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1255" tag="tblock_0" canDelete="false" indentLevel="1" text=" bool mount-status;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1255" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1255" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1255" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="1255" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1263" parent_class="1263" fileExt=".h" fileName="thunarvfsvolumekind" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSVOLUMEKIND_H&amp;#010;#define THUNARVFSVOLUMEKIND_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1263" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarVfsVolumeKind&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsVolumeKind ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSVOLUMEKIND_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumekind.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1409" parent_class="1409" fileExt=".h" fileName="thunarvfsvolumemanager" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSVOLUMEMANAGER_H&amp;#010;#define THUNARVFSVOLUMEMANAGER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="1409" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface ThunarVfsVolumeManager&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsVolumeManager ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="1416" tag="operation_1416" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSVOLUMEMANAGER_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolumemanager.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1410" parent_class="1410" fileExt=".h" fileName="thunarvfsvolume" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARVFSVOLUME_H&amp;#010;#define THUNARVFSVOLUME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;thunarvfsvolumekind.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <cppheaderclassdeclarationblock parent_id="1410" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Interface ThunarVfsVolume&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarVfsVolume ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="1413" tag="operation_1413" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="1414" tag="operation_1414" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+                <codeoperation parent_id="1415" tag="operation_1415" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARVFSVOLUME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunarvfsvolume.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:14:17&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1788" parent_class="1788" fileExt=".h" fileName="thunariconfactory" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef THUNARICONFACTORY_H&amp;#010;#define THUNARICONFACTORY_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;#include &quot;gtkicontheme.h&quot;&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1788" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class ThunarIconFactory&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="ThunarIconFactory ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks>
+                <codeoperation parent_id="1833" tag="operation_1833" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="&amp;#010;@param name &amp;#010;@param size &amp;#010;@param attach_points &amp;#010;@param wants_default " />
+                 </header>
+                </codeoperation>
+               </textblocks>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks>
+              <ccfdeclarationcodeblock parent_id="1810" tag="tblock_0" canDelete="false" indentLevel="1" text=" GtkIconTheme icon_theme;" >
+               <header>
+                <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+               </header>
+              </ccfdeclarationcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks>
+                  <codeaccessormethod accessType="0" parent_id="1810" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1810" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                  <codeaccessormethod accessType="1" parent_id="1810" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="1810" >
+                   <header>
+                    <cppcodedocumentation tag="" indentLevel="1" />
+                   </header>
+                  </codeaccessormethod>
+                 </textblocks>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //THUNARICONFACTORY_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			thunariconfactory.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:18:01&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields>
+      <codeclassfield parent_id="1810" field_type="0" initialValue="" role_id="-1" writeOutMethods="true" listClassName="" >
+       <header>
+        <cppcodedocumentation tag="" />
+       </header>
+       <ccfdeclarationcodeblock parent_id="1810" tag="tblock_0" canDelete="false" indentLevel="1" text=" GtkIconTheme icon_theme;" >
+        <header>
+         <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+        </header>
+       </ccfdeclarationcodeblock>
+       <codeaccessormethod accessType="0" parent_id="1810" tag="hblock_tag_0" canDelete="false" indentLevel="1" classfield_id="1810" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+       <codeaccessormethod accessType="1" parent_id="1810" tag="hblock_tag_1" canDelete="false" indentLevel="1" classfield_id="1810" >
+        <header>
+         <cppcodedocumentation tag="" indentLevel="1" />
+        </header>
+       </codeaccessormethod>
+      </codeclassfield>
+     </classfields>
+    </classifiercodedocument>
+    <classifiercodedocument writeOutCode="true" package="" id="cppheader1811" parent_class="1811" fileExt=".h" fileName="gtkicontheme" >
+     <textblocks>
+      <codeblockwithcomments tag="hashDefBlock" text="#ifndef GTKICONTHEME_H&amp;#010;#define GTKICONTHEME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="includes" text="#include &lt;string>&amp;#010;" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <codeblockwithcomments tag="using" writeOutText="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+      <hierarchicalcodeblock tag="namespace" canDelete="false" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" text="Namespace" />
+       </header>
+       <textblocks>
+        <codeblockwithcomments tag="enums" writeOutText="false" >
+         <header>
+          <cppcodedocumentation tag="" writeOutText="false" />
+         </header>
+        </codeblockwithcomments>
+        <cppheaderclassdeclarationblock parent_id="1811" tag="classDeclarationBlock" canDelete="false" >
+         <header>
+          <cppcodedocumentation tag="" text="Class GtkIconTheme&amp;#010;" />
+         </header>
+         <textblocks>
+          <hierarchicalcodeblock tag="publicBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Public stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="publicFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="pubMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks>
+                <codeblockwithcomments tag="emptyconstructor" writeOutText="false" indentLevel="1" text="GtkIconTheme ( ) { }" >
+                 <header>
+                  <cppcodedocumentation tag="" indentLevel="1" text="Empty Constructor" />
+                 </header>
+                </codeblockwithcomments>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="pubStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="pubRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="protectedBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Protected stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="protectedFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="protMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="protStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="protRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+          <hierarchicalcodeblock tag="privateBlock" canDelete="false" >
+           <header>
+            <cppcodedocumentation tag="" text="Private stuff" />
+           </header>
+           <textblocks>
+            <hierarchicalcodeblock tag="privateFieldsDecl" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" text="Fields" />
+             </header>
+             <textblocks/>
+            </hierarchicalcodeblock>
+            <hierarchicalcodeblock tag="privMethodsBlock" canDelete="false" indentLevel="1" >
+             <header>
+              <cppcodedocumentation tag="" indentLevel="1" />
+             </header>
+             <textblocks>
+              <hierarchicalcodeblock tag="constructionMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Constructors" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="accessorMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Accessor Methods" />
+               </header>
+               <textblocks>
+                <hierarchicalcodeblock tag="privStaticAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+                <hierarchicalcodeblock tag="privRegularAccessorMethods" canDelete="false" indentLevel="1" >
+                 <header>
+                  <cppcodedocumentation tag="" writeOutText="false" indentLevel="1" />
+                 </header>
+                 <textblocks/>
+                </hierarchicalcodeblock>
+               </textblocks>
+              </hierarchicalcodeblock>
+              <hierarchicalcodeblock tag="operationMethods" canDelete="false" indentLevel="1" >
+               <header>
+                <cppcodedocumentation tag="" indentLevel="1" text="Operations" />
+               </header>
+               <textblocks/>
+              </hierarchicalcodeblock>
+             </textblocks>
+            </hierarchicalcodeblock>
+           </textblocks>
+          </hierarchicalcodeblock>
+         </textblocks>
+        </cppheaderclassdeclarationblock>
+       </textblocks>
+      </hierarchicalcodeblock>
+      <codeblockwithcomments tag="hashDefBlockEnd" text="#endif //GTKICONTHEME_H" >
+       <header>
+        <cppcodedocumentation tag="" writeOutText="false" />
+       </header>
+      </codeblockwithcomments>
+     </textblocks>
+     <header>
+      <codecomment tag="" text="/************************************************************************&amp;#010;  			gtkicontheme.h - Copyright bmeurer&amp;#010;&amp;#010;Here you can write a license for your code, some comments or any other&amp;#010;information you want to have in your generated code. To to this simply&amp;#010;configure the &quot;headings&quot; directory in uml to point to a directory&amp;#010;where you have your heading files.&amp;#010;&amp;#010;or you can just replace the contents of this file with your own.&amp;#010;If you want to do this, this file is located at&amp;#010;&amp;#010;/usr/local/share/apps/umbrello/headings/heading.h&amp;#010;&amp;#010;-->Code Generators searches for heading files based on the file extension&amp;#010;   i.e. it will look for a file name ending in &quot;.h&quot; to include in C++ header&amp;#010;   files, and for a file name ending in &quot;.java&quot; to include in all generated&amp;#010;   java code.&amp;#010;   If you name the file &quot;heading.&lt;extension>&quot;, Code Generator will always&amp;#010;   choose this file even if there are other files with the same extension in the&amp;#010;   directory. If you name the file something else, it must be the only one with that&amp;#010;   extension in the directory to guarantee that Code Generator will choose it.&amp;#010;&amp;#010;you can use variables in your heading files which are replaced at generation&amp;#010;time. possible variables are : author, date, time, filename and filepath.&amp;#010;just write %variable_name%&amp;#010;&amp;#010;This file was generated on Tue Jun 14 2005 at 22:17:43&amp;#010;The original location of this file is &amp;#010;**************************************************************************/&amp;#010;" />
+     </header>
+     <classfields/>
+    </classifiercodedocument>
+   </codegenerator>
+  </codegeneration>
+ </XMI.extensions>
+</XMI>

Added: desktop/trunk/thunar/branches/upstream/current/docs/papers/HackingOnThunar.odt
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/papers/HackingOnThunar.odt
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,6 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+EXTRA_DIST =								\
+	HackingOnThunar.odt
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/papers/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,428 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = docs/papers
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+EXTRA_DIST = \
+	HackingOnThunar.odt
+
+all: all-am
+
+.SUFFIXES:
+$(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  docs/papers/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/papers/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+installdirs:
+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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,7 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	thunar-vfs							\
+	thunarx
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = docs/reference
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	thunar-vfs							\
+	thunarx
+
+all: all-recursive
+
+.SUFFIXES:
+$(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  docs/reference/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/reference/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	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: ctags-recursive $(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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,68 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+AUTOMAKE_OPTIONS = 1.8
+
+# The name of the module.
+DOC_MODULE=thunar-vfs
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="EXO_DISABLE_DEPRECATED"
+
+# Extra options to pass to gtkdoc-scangobj
+SCANGOBJ_OPTIONS=
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=../../../thunar-vfs
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS=
+
+# Used for dependencies
+HFILE_GLOB=$(top_srcdir)/thunar-vfs/*.h
+CFILE_GLOB=$(top_srcdir)/thunar-vfs/*.c
+
+# Header files to ignore when scanning
+IGNORE_HFILES=								\
+	thunar-vfs-alias.h						\
+	thunar-vfs-marshal.h						\
+	thunar-vfs-volume-manager-bsd.h					\
+	thunar-vfs-volume-manager-impl.h				\
+	thunar-vfs-volume-manager-sysv.h
+
+# Extra files to add when scanning (relative to $srcdir)
+EXTRA_HFILES=
+
+# Images to copy into HTML directory
+HTML_IMAGES =
+
+# Extra SGML files that are included by DOC_MAIN_SGML_FILE
+content_files = 							\
+	version.xml
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES =	 							\
+	-I$(top_srcdir) 						\
+	-I$(top_builddir) 						\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)
+
+GTKDOC_LIBS =  								\
+	$(EXO_LIBS)							\
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+EXTRA_DIST +=								\
+	version.xml.in
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,637 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make
+subdir = docs/reference/thunar-vfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 = version.xml
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+AUTOMAKE_OPTIONS = 1.8
+
+# The name of the module.
+DOC_MODULE = thunar-vfs
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS = --deprecated-guards="EXO_DISABLE_DEPRECATED"
+
+# Extra options to pass to gtkdoc-scangobj
+SCANGOBJ_OPTIONS = 
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR = ../../../thunar-vfs
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS = 
+
+# Used for dependencies
+HFILE_GLOB = $(top_srcdir)/thunar-vfs/*.h
+CFILE_GLOB = $(top_srcdir)/thunar-vfs/*.c
+
+# Header files to ignore when scanning
+IGNORE_HFILES = \
+	thunar-vfs-alias.h						\
+	thunar-vfs-marshal.h						\
+	thunar-vfs-volume-manager-bsd.h					\
+	thunar-vfs-volume-manager-impl.h				\
+	thunar-vfs-volume-manager-sysv.h
+
+
+# Extra files to add when scanning (relative to $srcdir)
+EXTRA_HFILES = 
+
+# Images to copy into HTML directory
+HTML_IMAGES = 
+
+# Extra SGML files that are included by DOC_MAIN_SGML_FILE
+content_files = \
+	version.xml
+
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES = \
+	-I$(top_srcdir) 						\
+	-I$(top_builddir) 						\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)
+
+GTKDOC_LIBS = \
+	$(EXO_LIBS)							\
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+ at GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+ at GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+ at GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+ at GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+
+# Other files to distribute
+EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(DOC_MAIN_SGML_FILE) \
+	$(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt \
+	version.xml.in
+DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+	   $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+	$(DOC_MODULE).args 	 \
+	$(DOC_MODULE).hierarchy  \
+	$(DOC_MODULE).interfaces \
+	$(DOC_MODULE).prerequisites \
+	$(DOC_MODULE).signals
+
+CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(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  docs/reference/thunar-vfs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/reference/thunar-vfs/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
+version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	$(mkdir_p) $(distdir)/../../..
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local dist-hook distclean \
+	distclean-generic distclean-libtool distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-local mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-am uninstall-local
+
+
+ at ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+
+#### scan ####
+
+ at ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Scanning header files ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ at ENABLE_GTK_DOC_TRUE@	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+ at ENABLE_GTK_DOC_TRUE@	else \
+ at ENABLE_GTK_DOC_TRUE@	    cd $(srcdir) ; \
+ at ENABLE_GTK_DOC_TRUE@	    for i in $(SCANOBJ_FILES) ; do \
+ at ENABLE_GTK_DOC_TRUE@               test -f $$i || touch $$i ; \
+ at ENABLE_GTK_DOC_TRUE@	    done \
+ at ENABLE_GTK_DOC_TRUE@	fi
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && \
+ at ENABLE_GTK_DOC_TRUE@	  gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ at ENABLE_GTK_DOC_TRUE@	touch scan-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### templates ####
+
+ at ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Rebuilding template files ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch tmpl-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### xml ####
+
+ at ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml $(expand_content_files)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Building XML ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && \
+ at ENABLE_GTK_DOC_TRUE@	gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" $(MKDB_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch sgml-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### html ####
+
+ at ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Building HTML ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	rm -rf $(srcdir)/html 
+ at ENABLE_GTK_DOC_TRUE@	mkdir $(srcdir)/html
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ at ENABLE_GTK_DOC_TRUE@	test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+ at ENABLE_GTK_DOC_TRUE@	@echo '-- Fixing Crossreferences' 
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch html-build.stamp
+ at ENABLE_GTK_DOC_FALSE@all-local:
+
+##############
+
+clean-local:
+	rm -f *~ *.bak
+	rm -rf .libs
+
+maintainer-clean-local: clean
+	cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+install-data-local:
+	installfiles=`echo $(srcdir)/html/*`; \
+	if test "$$installfiles" = '$(srcdir)/html/*'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
+	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+ at ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+ at ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+ at ENABLE_GTK_DOC_FALSE@	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+ at ENABLE_GTK_DOC_FALSE@	@false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/tmpl
+	mkdir $(distdir)/xml
+	mkdir $(distdir)/html
+	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+	-cp $(srcdir)/xml/*.xml $(distdir)/xml
+	-cp $(srcdir)/html/* $(distdir)/html
+	if test -f $(srcdir)/$(DOC_MODULE).types; then \
+	  cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
+	fi
+
+.PHONY : dist-hook-local
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsGroup.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsGroup.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsGroup.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,140 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsGroup</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="prev" href="ThunarVfsUser.html" title="ThunarVfsUser">
+<link rel="next" href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsUser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="users-and-groups-handling.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsUserManager.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsGroup"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsGroup</span></h2>
+<p>ThunarVfsGroup &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsGroup.html#ThunarVfsGroup-struct">ThunarVfsGroup</a>;
+<a href="thunar-vfs-Basic-Types.html#ThunarVfsGroupId">ThunarVfsGroupId</a> <a href="ThunarVfsGroup.html#thunar-vfs-group-get-id">thunar_vfs_group_get_id</a>    (<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a> *group);
+const gchar* <a href="ThunarVfsGroup.html#thunar-vfs-group-get-name">thunar_vfs_group_get_name</a>      (<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a> *group);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2620285"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----ThunarVfsGroup
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2620302"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2620312"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2620317"></a><h3>
+<a name="ThunarVfsGroup-struct"></a>ThunarVfsGroup</h3>
+<a class="indexterm" name="id2620326"></a><pre class="programlisting">typedef struct _ThunarVfsGroup ThunarVfsGroup;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2620341"></a><h3>
+<a name="thunar-vfs-group-get-id"></a>thunar_vfs_group_get_id ()</h3>
+<a class="indexterm" name="id2620349"></a><pre class="programlisting"><a href="thunar-vfs-Basic-Types.html#ThunarVfsGroupId">ThunarVfsGroupId</a> thunar_vfs_group_get_id    (<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a> *group);</pre>
+<p>
+Returns the unique id of the given <em class="parameter"><code>group</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>group</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the unique id of <em class="parameter"><code>group</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2620421"></a><h3>
+<a name="thunar-vfs-group-get-name"></a>thunar_vfs_group_get_name ()</h3>
+<a class="indexterm" name="id2620429"></a><pre class="programlisting">const gchar* thunar_vfs_group_get_name      (<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a> *group);</pre>
+<p>
+Returns the name of the <em class="parameter"><code>group</code></em>. If the system is
+unable to determine the name of <em class="parameter"><code>group</code></em>, it'll
+return the group id as string.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>group</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the name of <em class="parameter"><code>group</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsUser.html"><b>&lt;&lt;&#160;ThunarVfsUser</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsUserManager.html"><b>ThunarVfsUserManager&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMimeDatabase.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMimeDatabase.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMimeDatabase.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,575 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsMimeDatabase</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="prev" href="thunar-vfs-ThunarVfsMimeInfo.html" title="ThunarVfsMimeInfo">
+<link rel="next" href="thunar-vfs-ThunarVfsMimeApplication.html" title="ThunarVfsMimeApplication">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-ThunarVfsMimeInfo.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="mime-types.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-ThunarVfsMimeApplication.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsMimeDatabase"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsMimeDatabase</span></h2>
+<p>ThunarVfsMimeDatabase &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsMimeDatabase.html#ThunarVfsMimeDatabase-struct">ThunarVfsMimeDatabase</a>;
+<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default">thunar_vfs_mime_database_get_default</a>
+                                            (void);
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info">thunar_vfs_mime_database_get_info</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *mime_type);
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-data">thunar_vfs_mime_database_get_info_for_data</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             gconstpointer data,
+                                             gsize length);
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-name">thunar_vfs_mime_database_get_info_for_name</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *name);
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-file">thunar_vfs_mime_database_get_info_for_file</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *path,
+                                             const gchar *name);
+GList*      <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-infos-for-info">thunar_vfs_mime_database_get_infos_for_info</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+GList*      <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-applications">thunar_vfs_mime_database_get_applications</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default-application">thunar_vfs_mime_database_get_default_application</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+gboolean    <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-set-default-application">thunar_vfs_mime_database_set_default_application</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GError **error);
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* <a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-add-application">thunar_vfs_mime_database_add_application</a>
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             const gchar *name,
+                                             const gchar *exec,
+                                             GError **error);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2609008"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----ThunarVfsMimeDatabase
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2609025"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2609034"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2609040"></a><h3>
+<a name="ThunarVfsMimeDatabase-struct"></a>ThunarVfsMimeDatabase</h3>
+<a class="indexterm" name="id2609048"></a><pre class="programlisting">typedef struct _ThunarVfsMimeDatabase ThunarVfsMimeDatabase;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609063"></a><h3>
+<a name="thunar-vfs-mime-database-get-default"></a>thunar_vfs_mime_database_get_default ()</h3>
+<a class="indexterm" name="id2609075"></a><pre class="programlisting"><a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a>* thunar_vfs_mime_database_get_default
+                                            (void);</pre>
+<p>
+Returns a reference on the shared <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>
+instance. The caller is responsible to call <code class="function">g_object_unref()</code>
+on the returned object when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the shared <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609204"></a><h3>
+<a name="thunar-vfs-mime-database-get-info"></a>thunar_vfs_mime_database_get_info ()</h3>
+<a class="indexterm" name="id2609216"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_database_get_info
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *mime_type);</pre>
+<p>
+Determines the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> which corresponds to <em class="parameter"><code>mime_type</code></em>
+in database. The caller is responsible to call <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref"><code class="function">thunar_vfs_mime_info_unref()</code></a>
+on the returned instance.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>mime_type</code></em>&#160;:</span></td>
+<td> the string representation of the mime type.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> corresponding to <em class="parameter"><code>mime_type</code></em> in <em class="parameter"><code>database</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609335"></a><h3>
+<a name="thunar-vfs-mime-database-get-info-for-data"></a>thunar_vfs_mime_database_get_info_for_data ()</h3>
+<a class="indexterm" name="id2609347"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_database_get_info_for_data
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             gconstpointer data,
+                                             gsize length);</pre>
+<p>
+Determines the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for <em class="parameter"><code>data</code></em> in <em class="parameter"><code>database</code></em>. The
+caller is responsible to call <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref"><code class="function">thunar_vfs_mime_info_unref()</code></a> on
+the returned instance.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>data</code></em>&#160;:</span></td>
+<td> the data to check.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>length</code></em>&#160;:</span></td>
+<td> the length of <em class="parameter"><code>data</code></em> in bytes.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> determined for <em class="parameter"><code>data</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609490"></a><h3>
+<a name="thunar-vfs-mime-database-get-info-for-name"></a>thunar_vfs_mime_database_get_info_for_name ()</h3>
+<a class="indexterm" name="id2609501"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_database_get_info_for_name
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *name);</pre>
+<p>
+Determines the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for the filename given
+in <em class="parameter"><code>name</code></em> from <em class="parameter"><code>database</code></em>. The caller is responsible to
+call <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref"><code class="function">thunar_vfs_mime_info_unref()</code></a> on the returned instance.
+</p>
+<p>
+The <em class="parameter"><code>name</code></em> must be a valid filename in UTF-8 encoding
+and it may not contained any slashes!</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> a filename (must be valid UTF-8!).
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for <em class="parameter"><code>name</code></em> in <em class="parameter"><code>database</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609703"></a><h3>
+<a name="thunar-vfs-mime-database-get-info-for-file"></a>thunar_vfs_mime_database_get_info_for_file ()</h3>
+<a class="indexterm" name="id2609715"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_database_get_info_for_file
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             const gchar *path,
+                                             const gchar *name);</pre>
+<p>
+Determines the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for <em class="parameter"><code>path</code></em> in <em class="parameter"><code>database</code></em>. The
+caller is responsible to free the returned instance using
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref"><code class="function">thunar_vfs_mime_info_unref()</code></a>.
+</p>
+<p>
+The <em class="parameter"><code>name</code></em> parameter is optional. If the caller already knows the
+basename of <em class="parameter"><code>path</code></em> in UTF-8 encoding, it should be specified here
+to speed up the lookup process.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the path to a file in the local filesystem (in the filesystem encoding).
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> the basename of <em class="parameter"><code>path</code></em> in UTF-8 encoding or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for <em class="parameter"><code>path</code></em> in <em class="parameter"><code>database</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2609949"></a><h3>
+<a name="thunar-vfs-mime-database-get-infos-for-info"></a>thunar_vfs_mime_database_get_infos_for_info ()</h3>
+<a class="indexterm" name="id2609961"></a><pre class="programlisting">GList*      thunar_vfs_mime_database_get_infos_for_info
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Returns a list of all <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>s,
+that are related to <em class="parameter"><code>info</code></em> in <em class="parameter"><code>database</code></em>. Currently
+this is the list of parent MIME-types for <em class="parameter"><code>info</code></em>,
+as defined in the Shared Mime Database.
+</p>
+<p>
+Note that the returned list will also include
+a reference <em class="parameter"><code>info</code></em> itself. In addition, this
+method also handles details specified by the
+Shared Mime Database Specification like the
+fact that every "text/xxxx" MIME-type is a
+subclass of "text/plain" and every MIME-type
+is a subclass of "application/octet-stream".
+</p>
+<p>
+The caller is responsible to free the returned
+list using #<a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-list-free"><code class="function">thunar_vfs_mime_info_list_free()</code></a>
+when done with it.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>s
+              related to <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2610178"></a><h3>
+<a name="thunar-vfs-mime-database-get-applications"></a>thunar_vfs_mime_database_get_applications ()</h3>
+<a class="indexterm" name="id2610189"></a><pre class="programlisting">GList*      thunar_vfs_mime_database_get_applications
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Looks up all <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>s in <em class="parameter"><code>database</code></em>, which
+claim to be able to open files whose MIME-type is represented by
+<em class="parameter"><code>info</code></em>.
+</p>
+<p>
+The caller is responsible to free the returned list using
+something like:
+</p>
+<div class="informalexample"><pre class="programlisting">
+g_list_foreach (list, (GFunc) thunar_vfs_mime_application_unref, NULL);
+g_list_free (list);
+</pre></div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>s, that
+              can handle <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2610316"></a><h3>
+<a name="thunar-vfs-mime-database-get-default-application"></a>thunar_vfs_mime_database_get_default_application ()</h3>
+<a class="indexterm" name="id2610328"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* thunar_vfs_mime_database_get_default_application
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Returns the default <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> to handle
+files of type <em class="parameter"><code>info</code></em> or <code class="literal">NULL</code> if no default application
+is set for <em class="parameter"><code>info</code></em>.
+</p>
+<p>
+The caller is responsible to free the returned instance
+using <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref"><code class="function">thunar_vfs_mime_application_unref()</code></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the default <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> for
+              <em class="parameter"><code>info</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2610471"></a><h3>
+<a name="thunar-vfs-mime-database-set-default-application"></a>thunar_vfs_mime_database_set_default_application ()</h3>
+<a class="indexterm" name="id2610483"></a><pre class="programlisting">gboolean    thunar_vfs_mime_database_set_default_application
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GError **error);</pre>
+<p>
+Sets <em class="parameter"><code>application</code></em> to be the default <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> to open files
+of type <em class="parameter"><code>info</code></em> in <em class="parameter"><code>database</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a valid <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> for <em class="parameter"><code>database</code></em>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if the operation was successfull, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2610727"></a><h3>
+<a name="thunar-vfs-mime-database-add-application"></a>thunar_vfs_mime_database_add_application ()</h3>
+<a class="indexterm" name="id2610739"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* thunar_vfs_mime_database_add_application
+                                            (<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</a> *database,
+                                             <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             const gchar *name,
+                                             const gchar *exec,
+                                             GError **error);</pre>
+<p>
+Adds a new <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> to the <em class="parameter"><code>database</code></em>, whose
+name is <em class="parameter"><code>name</code></em> and command is <em class="parameter"><code>exec</code></em>, and which can be used to
+open files of type <em class="parameter"><code>info</code></em>.
+</p>
+<p>
+The caller is responsible to free the returned object
+using <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref"><code class="function">thunar_vfs_mime_application_unref()</code></a> when no longer
+needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>database</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> the name for the application.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>exec</code></em>&#160;:</span></td>
+<td> the command for the application.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the newly created <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>
+              or <code class="literal">NULL</code> on error.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-ThunarVfsMimeInfo.html"><b>&lt;&lt;&#160;ThunarVfsMimeInfo</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-ThunarVfsMimeApplication.html"><b>ThunarVfsMimeApplication&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMonitor.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMonitor.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsMonitor.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,433 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsMonitor</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="prev" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="next" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="filesystem-monitoring.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="filesystem-monitoring.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="mime-types.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsMonitor"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsMonitor</span></h2>
+<p>ThunarVfsMonitor &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsMonitor.html#ThunarVfsMonitor-struct">ThunarVfsMonitor</a>;
+enum        <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</a>;
+            <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a>;
+void        (<a href="ThunarVfsMonitor.html#ThunarVfsMonitorCallback">*ThunarVfsMonitorCallback</a>)     (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a> *handle,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</a> event,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *handle_path,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *event_path,
+                                             gpointer user_data);
+<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a>* <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-get-default">thunar_vfs_monitor_get_default</a>
+                                            (void);
+<a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a>* <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-add-directory">thunar_vfs_monitor_add_directory</a>
+                                            (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</a> callback,
+                                             gpointer user_data);
+<a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a>* <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-add-file">thunar_vfs_monitor_add_file</a>
+                                            (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</a> callback,
+                                             gpointer user_data);
+void        <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-remove">thunar_vfs_monitor_remove</a>       (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a> *handle);
+void        <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-feed">thunar_vfs_monitor_feed</a>         (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</a> event,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+void        <a href="ThunarVfsMonitor.html#thunar-vfs-monitor-wait">thunar_vfs_monitor_wait</a>         (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2602377"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----ThunarVfsMonitor
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2602394"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2602404"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2602409"></a><h3>
+<a name="ThunarVfsMonitor-struct"></a>ThunarVfsMonitor</h3>
+<a class="indexterm" name="id2602418"></a><pre class="programlisting">typedef struct _ThunarVfsMonitor ThunarVfsMonitor;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2602433"></a><h3>
+<a name="ThunarVfsMonitorEvent"></a>enum ThunarVfsMonitorEvent</h3>
+<a class="indexterm" name="id2602441"></a><pre class="programlisting">typedef enum
+{
+  THUNAR_VFS_MONITOR_EVENT_CHANGED,
+  THUNAR_VFS_MONITOR_EVENT_CREATED,
+  THUNAR_VFS_MONITOR_EVENT_DELETED,
+} ThunarVfsMonitorEvent;
+</pre>
+<p>
+Describes an event that occurred on a <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MONITOR_EVENT_CHANGED</code></span></td>
+<td> a file or directory was changed.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MONITOR_EVENT_CREATED</code></span></td>
+<td> a file or directory was created.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MONITOR_EVENT_DELETED</code></span></td>
+<td> a file or directory was deleted.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2602586"></a><h3>
+<a name="ThunarVfsMonitorHandle"></a>ThunarVfsMonitorHandle</h3>
+<a class="indexterm" name="id2602595"></a><pre class="programlisting">typedef struct _ThunarVfsMonitorHandle ThunarVfsMonitorHandle;</pre>
+<p>
+A handle on a file system entity, which is currently watched
+by a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2602619"></a><h3>
+<a name="ThunarVfsMonitorCallback"></a>ThunarVfsMonitorCallback ()</h3>
+<a class="indexterm" name="id2602628"></a><pre class="programlisting">void        (*ThunarVfsMonitorCallback)     (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a> *handle,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</a> event,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *handle_path,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *event_path,
+                                             gpointer user_data);</pre>
+<p>
+The prototype for callback functions that will be called by a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>
+whenever one of its associated <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a>s notice a
+change.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>handle</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>event</code></em>&#160;:</span></td>
+<td> the event that occurred.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>handle_path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> that was specified when registering the <em class="parameter"><code>handle</code></em>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>event_path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> on which the <em class="parameter"><code>event</code></em> occurred.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user_data</code></em>&#160;:</span></td>
+<td> the user data that was specified when registering the <em class="parameter"><code>handle</code></em> with the <em class="parameter"><code>monitor</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2602902"></a><h3>
+<a name="thunar-vfs-monitor-get-default"></a>thunar_vfs_monitor_get_default ()</h3>
+<a class="indexterm" name="id2602912"></a><pre class="programlisting"><a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a>* thunar_vfs_monitor_get_default
+                                            (void);</pre>
+<p>
+Returns the shared <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a> instance. The caller
+is responsible to call <code class="function">g_object_unref()</code> on the returned
+object when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a reference to the shared <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>
+              instance.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2602970"></a><h3>
+<a name="thunar-vfs-monitor-add-directory"></a>thunar_vfs_monitor_add_directory ()</h3>
+<a class="indexterm" name="id2602982"></a><pre class="programlisting"><a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a>* thunar_vfs_monitor_add_directory
+                                            (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</a> callback,
+                                             gpointer user_data);</pre>
+<p>
+</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> of the directory that should be watched.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>callback</code></em>&#160;:</span></td>
+<td> the callback function to invoke.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user_data</code></em>&#160;:</span></td>
+<td> additional data to pass to <em class="parameter"><code>callback</code></em>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a> for the new watch.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2603121"></a><h3>
+<a name="thunar-vfs-monitor-add-file"></a>thunar_vfs_monitor_add_file ()</h3>
+<a class="indexterm" name="id2603129"></a><pre class="programlisting"><a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a>* thunar_vfs_monitor_add_file
+                                            (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</a> callback,
+                                             gpointer user_data);</pre>
+<p>
+</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> of the file that should be watched.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>callback</code></em>&#160;:</span></td>
+<td> the callback function to invoke.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user_data</code></em>&#160;:</span></td>
+<td> additional data to pass to <em class="parameter"><code>callback</code></em>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a> for the new watch.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2603335"></a><h3>
+<a name="thunar-vfs-monitor-remove"></a>thunar_vfs_monitor_remove ()</h3>
+<a class="indexterm" name="id2603344"></a><pre class="programlisting">void        thunar_vfs_monitor_remove       (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</a> *handle);</pre>
+<p>
+Removes <em class="parameter"><code>handle</code></em> from <em class="parameter"><code>monitor</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>handle</code></em>&#160;:</span></td>
+<td> a valid <a href="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"><span class="type">ThunarVfsMonitorHandle</span></a> for <em class="parameter"><code>monitor</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2603436"></a><h3>
+<a name="thunar-vfs-monitor-feed"></a>thunar_vfs_monitor_feed ()</h3>
+<a class="indexterm" name="id2603445"></a><pre class="programlisting">void        thunar_vfs_monitor_feed         (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor,
+                                             <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</a> event,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Explicitly injects the given <em class="parameter"><code>event</code></em> into <em class="parameter"><code>monitor</code></em>s event
+processing logic.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>event</code></em>&#160;:</span></td>
+<td> the <a href="ThunarVfsMonitor.html#ThunarVfsMonitorEvent"><span class="type">ThunarVfsMonitorEvent</span></a> that should be emulated.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> on which <em class="parameter"><code>event</code></em> took place.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2603564"></a><h3>
+<a name="thunar-vfs-monitor-wait"></a>thunar_vfs_monitor_wait ()</h3>
+<a class="indexterm" name="id2603573"></a><pre class="programlisting">void        thunar_vfs_monitor_wait         (<a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">ThunarVfsMonitor</a> *monitor);</pre>
+<p>
+Suspends the execution of the current thread until the
+<em class="parameter"><code>monitor</code></em> has processed all currently pending events. The
+calling thread must own a reference on the <em class="parameter"><code>monitor</code></em>!
+</p>
+<p>
+This method should never be called from the main thread
+or you'll lock up your application!!</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>monitor</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsMonitor.html" title="ThunarVfsMonitor"><span class="type">ThunarVfsMonitor</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="filesystem-monitoring.html"><b>&lt;&lt;&#160;Part&#160;III.&#160;Filesystem Monitoring</b></a></td>
+<td align="right"><a accesskey="n" href="mime-types.html"><b>Part&#160;IV.&#160;MIME Types&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUser.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUser.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUser.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,274 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsUser</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="prev" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="next" href="ThunarVfsGroup.html" title="ThunarVfsGroup">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="users-and-groups-handling.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="users-and-groups-handling.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsGroup.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsUser"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsUser</span></h2>
+<p>ThunarVfsUser &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsUser.html#ThunarVfsUser-struct">ThunarVfsUser</a>;
+GList*      <a href="ThunarVfsUser.html#thunar-vfs-user-get-groups">thunar_vfs_user_get_groups</a>      (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a>* <a href="ThunarVfsUser.html#thunar-vfs-user-get-primary-group">thunar_vfs_user_get_primary_group</a>
+                                            (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+<a href="thunar-vfs-Basic-Types.html#ThunarVfsUserId">ThunarVfsUserId</a> <a href="ThunarVfsUser.html#thunar-vfs-user-get-id">thunar_vfs_user_get_id</a>      (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+const gchar* <a href="ThunarVfsUser.html#thunar-vfs-user-get-name">thunar_vfs_user_get_name</a>       (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+const gchar* <a href="ThunarVfsUser.html#thunar-vfs-user-get-real-name">thunar_vfs_user_get_real_name</a>  (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+gboolean    <a href="ThunarVfsUser.html#thunar-vfs-user-is-me">thunar_vfs_user_is_me</a>           (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2618520"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----ThunarVfsUser
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2618537"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2618547"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2618552"></a><h3>
+<a name="ThunarVfsUser-struct"></a>ThunarVfsUser</h3>
+<a class="indexterm" name="id2618561"></a><pre class="programlisting">typedef struct _ThunarVfsUser ThunarVfsUser;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2618576"></a><h3>
+<a name="thunar-vfs-user-get-groups"></a>thunar_vfs_user_get_groups ()</h3>
+<a class="indexterm" name="id2618584"></a><pre class="programlisting">GList*      thunar_vfs_user_get_groups      (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Returns all <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a>s that <em class="parameter"><code>user</code></em>
+belongs to. The returned list and the <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a>s
+contained within the list are owned by <em class="parameter"><code>user</code></em> and must not be
+freed or altered by the caller.
+</p>
+<p>
+Note that if <em class="parameter"><code>user</code></em> has a primary group, this group will
+also be contained in the returned list.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the groups that <em class="parameter"><code>user</code></em> belongs to.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2618688"></a><h3>
+<a name="thunar-vfs-user-get-primary-group"></a>thunar_vfs_user_get_primary_group ()</h3>
+<a class="indexterm" name="id2618699"></a><pre class="programlisting"><a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a>* thunar_vfs_user_get_primary_group
+                                            (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Returns the primary group of <em class="parameter"><code>user</code></em> or <code class="literal">NULL</code> if <em class="parameter"><code>user</code></em>
+has no primary group.
+</p>
+<p>
+No reference is taken for the caller, so you must
+not call <code class="function">g_object_unref()</code> on the returned object.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the primary group of <em class="parameter"><code>user</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2618868"></a><h3>
+<a name="thunar-vfs-user-get-id"></a>thunar_vfs_user_get_id ()</h3>
+<a class="indexterm" name="id2618876"></a><pre class="programlisting"><a href="thunar-vfs-Basic-Types.html#ThunarVfsUserId">ThunarVfsUserId</a> thunar_vfs_user_get_id      (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Returns the unique id of <em class="parameter"><code>user</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the unique id of <em class="parameter"><code>user</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2618947"></a><h3>
+<a name="thunar-vfs-user-get-name"></a>thunar_vfs_user_get_name ()</h3>
+<a class="indexterm" name="id2618955"></a><pre class="programlisting">const gchar* thunar_vfs_user_get_name       (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Returns the name of <em class="parameter"><code>user</code></em>. If the system is
+unable to determine the account name of <em class="parameter"><code>user</code></em>,
+it'll return the user id as string.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the name of <em class="parameter"><code>user</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2619035"></a><h3>
+<a name="thunar-vfs-user-get-real-name"></a>thunar_vfs_user_get_real_name ()</h3>
+<a class="indexterm" name="id2619045"></a><pre class="programlisting">const gchar* thunar_vfs_user_get_real_name  (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Returns the real name of <em class="parameter"><code>user</code></em> or <code class="literal">NULL</code> if the
+real name for <em class="parameter"><code>user</code></em> is not known to the underlying
+system.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the real name for <em class="parameter"><code>user</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2619134"></a><h3>
+<a name="thunar-vfs-user-is-me"></a>thunar_vfs_user_is_me ()</h3>
+<a class="indexterm" name="id2619143"></a><pre class="programlisting">gboolean    thunar_vfs_user_is_me           (<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a> *user);</pre>
+<p>
+Checks whether the owner of the current process is
+described by <em class="parameter"><code>user</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>user</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>user</code></em> is the owner of the current
+              process, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="users-and-groups-handling.html"><b>&lt;&lt;&#160;Part&#160;V.&#160;Users and Groups Handling</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsGroup.html"><b>ThunarVfsGroup&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUserManager.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUserManager.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsUserManager.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,189 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsUserManager</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="prev" href="ThunarVfsGroup.html" title="ThunarVfsGroup">
+<link rel="next" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsGroup.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="users-and-groups-handling.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="volume-handling.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsUserManager"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsUserManager</span></h2>
+<p>ThunarVfsUserManager &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsUserManager.html#ThunarVfsUserManager-struct">ThunarVfsUserManager</a>;
+<a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a>* <a href="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-default">thunar_vfs_user_manager_get_default</a>
+                                            (void);
+<a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a>* <a href="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-group-by-id">thunar_vfs_user_manager_get_group_by_id</a>
+                                            (<a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a> *manager,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsGroupId">ThunarVfsGroupId</a> id);
+<a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a>* <a href="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-user-by-id">thunar_vfs_user_manager_get_user_by_id</a>
+                                            (<a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a> *manager,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsUserId">ThunarVfsUserId</a> id);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2621059"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----ThunarVfsUserManager
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2621076"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2621085"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2621091"></a><h3>
+<a name="ThunarVfsUserManager-struct"></a>ThunarVfsUserManager</h3>
+<a class="indexterm" name="id2621099"></a><pre class="programlisting">typedef struct _ThunarVfsUserManager ThunarVfsUserManager;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2621114"></a><h3>
+<a name="thunar-vfs-user-manager-get-default"></a>thunar_vfs_user_manager_get_default ()</h3>
+<a class="indexterm" name="id2621126"></a><pre class="programlisting"><a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a>* thunar_vfs_user_manager_get_default
+                                            (void);</pre>
+<p>
+Returns the default <a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager"><span class="type">ThunarVfsUserManager</span></a> instance, which is shared
+by all modules using the user module. Call <code class="function">g_object_unref()</code> on the
+returned object when you are done with it.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the default <a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager"><span class="type">ThunarVfsUserManager</span></a> instance.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2621185"></a><h3>
+<a name="thunar-vfs-user-manager-get-group-by-id"></a>thunar_vfs_user_manager_get_group_by_id ()</h3>
+<a class="indexterm" name="id2621196"></a><pre class="programlisting"><a href="ThunarVfsGroup.html" title="ThunarVfsGroup">ThunarVfsGroup</a>* thunar_vfs_user_manager_get_group_by_id
+                                            (<a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a> *manager,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsGroupId">ThunarVfsGroupId</a> id);</pre>
+<p>
+Looks up the <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a> corresponding to <em class="parameter"><code>id</code></em> in <em class="parameter"><code>manager</code></em>. Returns
+<code class="literal">NULL</code> if <em class="parameter"><code>manager</code></em> is unable to determine the <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a> for <em class="parameter"><code>id</code></em>,
+else a pointer to the corresponding <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a>. The caller is
+responsible for freeing the returned object using <code class="function">g_object_unref()</code>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager"><span class="type">ThunarVfsUserManager</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>id</code></em>&#160;:</span></td>
+<td> the group id.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="ThunarVfsGroup.html" title="ThunarVfsGroup"><span class="type">ThunarVfsGroup</span></a> corresponding to <em class="parameter"><code>id</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2621349"></a><h3>
+<a name="thunar-vfs-user-manager-get-user-by-id"></a>thunar_vfs_user_manager_get_user_by_id ()</h3>
+<a class="indexterm" name="id2621361"></a><pre class="programlisting"><a href="ThunarVfsUser.html" title="ThunarVfsUser">ThunarVfsUser</a>* thunar_vfs_user_manager_get_user_by_id
+                                            (<a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">ThunarVfsUserManager</a> *manager,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsUserId">ThunarVfsUserId</a> id);</pre>
+<p>
+Looks up the <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a> corresponding to <em class="parameter"><code>id</code></em> in <em class="parameter"><code>manager</code></em>. Returns
+<code class="literal">NULL</code> if <em class="parameter"><code>manager</code></em> is unable to determine the <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a> for <em class="parameter"><code>id</code></em>,
+else a pointer to the corresponding <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a>. The caller is
+responsible for freeing the returned object using <code class="function">g_object_unref()</code>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsUserManager.html" title="ThunarVfsUserManager"><span class="type">ThunarVfsUserManager</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>id</code></em>&#160;:</span></td>
+<td> the user id.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="ThunarVfsUser.html" title="ThunarVfsUser"><span class="type">ThunarVfsUser</span></a> corresponding to <em class="parameter"><code>id</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsGroup.html"><b>&lt;&lt;&#160;ThunarVfsGroup</b></a></td>
+<td align="right"><a accesskey="n" href="volume-handling.html"><b>Part&#160;VI.&#160;Volume Handling&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolume.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolume.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolume.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,540 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsVolume</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="prev" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="next" href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="volume-handling.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="volume-handling.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsVolumeManager.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsVolume"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsVolume</span></h2>
+<p>ThunarVfsVolume &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <a href="ThunarVfsVolume.html#ThunarVfsVolumeKind">ThunarVfsVolumeKind</a>;
+enum        <a href="ThunarVfsVolume.html#ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</a>;
+            <a href="ThunarVfsVolume.html#ThunarVfsVolumeIface">ThunarVfsVolumeIface</a>;
+            <a href="ThunarVfsVolume.html#ThunarVfsVolume-struct">ThunarVfsVolume</a>;
+<a href="ThunarVfsVolume.html#ThunarVfsVolumeKind">ThunarVfsVolumeKind</a> <a href="ThunarVfsVolume.html#thunar-vfs-volume-get-kind">thunar_vfs_volume_get_kind</a>
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+const gchar* <a href="ThunarVfsVolume.html#thunar-vfs-volume-get-name">thunar_vfs_volume_get_name</a>     (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+<a href="ThunarVfsVolume.html#ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</a> <a href="ThunarVfsVolume.html#thunar-vfs-volume-get-status">thunar_vfs_volume_get_status</a>
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="ThunarVfsVolume.html#thunar-vfs-volume-get-mount-point">thunar_vfs_volume_get_mount_point</a>
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+gboolean    <a href="ThunarVfsVolume.html#thunar-vfs-volume-is-mounted">thunar_vfs_volume_is_mounted</a>    (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+gboolean    <a href="ThunarVfsVolume.html#thunar-vfs-volume-is-present">thunar_vfs_volume_is_present</a>    (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+gboolean    <a href="ThunarVfsVolume.html#thunar-vfs-volume-is-removable">thunar_vfs_volume_is_removable</a>  (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+gboolean    <a href="ThunarVfsVolume.html#thunar-vfs-volume-get-free-space">thunar_vfs_volume_get_free_space</a>
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileSize">ThunarVfsFileSize</a> *free_space_return);
+const gchar* <a href="ThunarVfsVolume.html#thunar-vfs-volume-lookup-icon-name">thunar_vfs_volume_lookup_icon_name</a>
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume,
+                                             GtkIconTheme *icon_theme);
+void        <a href="ThunarVfsVolume.html#thunar-vfs-volume-changed">thunar_vfs_volume_changed</a>       (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622531"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GInterface
+   +----ThunarVfsVolume
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622548"></a><h2>Prerequisites</h2>
+<p>
+ThunarVfsVolume requires
+ GObject.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622563"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2622572"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2622578"></a><h3>
+<a name="ThunarVfsVolumeKind"></a>enum ThunarVfsVolumeKind</h3>
+<a class="indexterm" name="id2622586"></a><pre class="programlisting">typedef enum
+{
+  THUNAR_VFS_VOLUME_KIND_UNKNOWN,
+  THUNAR_VFS_VOLUME_KIND_CDROM,
+  THUNAR_VFS_VOLUME_KIND_DVD,
+  THUNAR_VFS_VOLUME_KIND_FLOPPY,
+  THUNAR_VFS_VOLUME_KIND_HARDDISK,
+  THUNAR_VFS_VOLUME_KIND_USBSTICK,
+} ThunarVfsVolumeKind;
+</pre>
+<p>
+Describes the type of a VFS volume.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_UNKNOWN</code></span></td>
+<td> Unknown volume.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_CDROM</code></span></td>
+<td> CD drives.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_DVD</code></span></td>
+<td> DVD drives.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_FLOPPY</code></span></td>
+<td> Floppy drives.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_HARDDISK</code></span></td>
+<td> Hard disk drives.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_KIND_USBSTICK</code></span></td>
+<td> USB sticks.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2622760"></a><h3>
+<a name="ThunarVfsVolumeStatus"></a>enum ThunarVfsVolumeStatus</h3>
+<a class="indexterm" name="id2622769"></a><pre class="programlisting">typedef enum /*&lt; flags &gt;*/
+{
+  THUNAR_VFS_VOLUME_STATUS_MOUNTED = 1 &lt;&lt; 0,
+  THUNAR_VFS_VOLUME_STATUS_PRESENT = 1 &lt;&lt; 1,
+} ThunarVfsVolumeStatus;
+</pre>
+<p>
+Describes the current status of a VFS volume.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_STATUS_MOUNTED</code></span></td>
+<td> Whether or not the media is currently mounted.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_VOLUME_STATUS_PRESENT</code></span></td>
+<td> Whether or not a medium is present.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2622823"></a><h3>
+<a name="ThunarVfsVolumeIface"></a>ThunarVfsVolumeIface</h3>
+<a class="indexterm" name="id2622832"></a><pre class="programlisting">typedef struct {
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolumeKind   (*get_kind)         (ThunarVfsVolume   *volume);
+  const gchar          *(*get_name)         (ThunarVfsVolume   *volume);
+  ThunarVfsVolumeStatus (*get_status)       (ThunarVfsVolume   *volume);
+  ThunarVfsPath        *(*get_mount_point)  (ThunarVfsVolume   *volume);
+  gboolean              (*get_free_space)   (ThunarVfsVolume   *volume,
+                                             ThunarVfsFileSize *free_space_return);
+  const gchar          *(*lookup_icon_name) (ThunarVfsVolume   *volume,
+                                             GtkIconTheme      *icon_theme);
+
+  /* signals */
+  void (*changed) (ThunarVfsVolume *volume);
+} ThunarVfsVolumeIface;
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2622845"></a><h3>
+<a name="ThunarVfsVolume-struct"></a>ThunarVfsVolume</h3>
+<a class="indexterm" name="id2622854"></a><pre class="programlisting">typedef struct _ThunarVfsVolume ThunarVfsVolume;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2622869"></a><h3>
+<a name="thunar-vfs-volume-get-kind"></a>thunar_vfs_volume_get_kind ()</h3>
+<a class="indexterm" name="id2622946"></a><pre class="programlisting"><a href="ThunarVfsVolume.html#ThunarVfsVolumeKind">ThunarVfsVolumeKind</a> thunar_vfs_volume_get_kind
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Returns the kind of drive/device representd by <em class="parameter"><code>volume</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the kind of <em class="parameter"><code>volume</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623017"></a><h3>
+<a name="thunar-vfs-volume-get-name"></a>thunar_vfs_volume_get_name ()</h3>
+<a class="indexterm" name="id2623026"></a><pre class="programlisting">const gchar* thunar_vfs_volume_get_name     (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Returns the name of the <em class="parameter"><code>volume</code></em>. This is usually the
+name of the device or the label of the medium, if a
+medium is present.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the name of <em class="parameter"><code>volume</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623098"></a><h3>
+<a name="thunar-vfs-volume-get-status"></a>thunar_vfs_volume_get_status ()</h3>
+<a class="indexterm" name="id2623107"></a><pre class="programlisting"><a href="ThunarVfsVolume.html#ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</a> thunar_vfs_volume_get_status
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Determines the current status of the <em class="parameter"><code>volume</code></em>, e.g. whether
+or not the <em class="parameter"><code>volume</code></em> is currently mounted, or whether a
+medium is present.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the status for <em class="parameter"><code>volume</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623185"></a><h3>
+<a name="thunar-vfs-volume-get-mount-point"></a>thunar_vfs_volume_get_mount_point ()</h3>
+<a class="indexterm" name="id2623196"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_volume_get_mount_point
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the path which identifies the path where
+              the volume will be mounted (or is already
+              mounted).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623257"></a><h3>
+<a name="thunar-vfs-volume-is-mounted"></a>thunar_vfs_volume_is_mounted ()</h3>
+<a class="indexterm" name="id2623266"></a><pre class="programlisting">gboolean    thunar_vfs_volume_is_mounted    (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Determines whether <em class="parameter"><code>volume</code></em> is currently mounted into the
+filesystem hierarchy.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>volume</code></em> is mounted, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623349"></a><h3>
+<a name="thunar-vfs-volume-is-present"></a>thunar_vfs_volume_is_present ()</h3>
+<a class="indexterm" name="id2623426"></a><pre class="programlisting">gboolean    thunar_vfs_volume_is_present    (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Determines whether a medium is currently inserted for
+<em class="parameter"><code>volume</code></em>, e.g. for a CD-ROM drive, this will be <code class="literal">TRUE</code>
+only if a disc is present in the slot.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>volume</code></em> is present, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623516"></a><h3>
+<a name="thunar-vfs-volume-is-removable"></a>thunar_vfs_volume_is_removable ()</h3>
+<a class="indexterm" name="id2623526"></a><pre class="programlisting">gboolean    thunar_vfs_volume_is_removable  (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Determines whether <em class="parameter"><code>volume</code></em> is a removable device, for example
+a CD-ROM or a floppy drive.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>volume</code></em> is a removable device, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623609"></a><h3>
+<a name="thunar-vfs-volume-get-free-space"></a>thunar_vfs_volume_get_free_space ()</h3>
+<a class="indexterm" name="id2623621"></a><pre class="programlisting">gboolean    thunar_vfs_volume_get_free_space
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume,
+                                             <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileSize">ThunarVfsFileSize</a> *free_space_return);</pre>
+<p>
+Tries to determine the number of available bytes on the specified
+<em class="parameter"><code>volume</code></em> and places the result to the memory pointed to by
+<em class="parameter"><code>free_space_return</code></em>. The returned amount of bytes represents the
+space available to the current user, which may be different from
+the total free amount.
+</p>
+<p>
+If <em class="parameter"><code>volume</code></em> is unable to determine the free space, <code class="literal">FALSE</code> will be
+returned and <em class="parameter"><code>free_space_return</code></em> won't be set.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>free_space_return</code></em>&#160;:</span></td>
+<td> location to store the free space to.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if the free amount was determined successfully,
+              else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623745"></a><h3>
+<a name="thunar-vfs-volume-lookup-icon-name"></a>thunar_vfs_volume_lookup_icon_name ()</h3>
+<a class="indexterm" name="id2623756"></a><pre class="programlisting">const gchar* thunar_vfs_volume_lookup_icon_name
+                                            (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume,
+                                             GtkIconTheme *icon_theme);</pre>
+<p>
+Tries to find a suitable icon for <em class="parameter"><code>volume</code></em> in the given <em class="parameter"><code>icon_theme</code></em> and
+returns its name. If no suitable icon is found in <em class="parameter"><code>icon_theme</code></em>, then
+a fallback icon name will be returned. This way you can always count
+on this method to return a valid string.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>icon_theme</code></em>&#160;:</span></td>
+<td> a <span class="type">GtkIconTheme</span> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the icon name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2623862"></a><h3>
+<a name="thunar-vfs-volume-changed"></a>thunar_vfs_volume_changed ()</h3>
+<a class="indexterm" name="id2623870"></a><pre class="programlisting">void        thunar_vfs_volume_changed       (<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a> *volume);</pre>
+<p>
+Emits the "changed" signal on <em class="parameter"><code>volume</code></em>. This function should
+only be used by implementations of the <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>
+interface.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>volume</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> instance.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="volume-handling.html"><b>&lt;&lt;&#160;Part&#160;VI.&#160;Volume Handling</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsVolumeManager.html"><b>ThunarVfsVolumeManager&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolumeManager.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolumeManager.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ThunarVfsVolumeManager.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,296 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsVolumeManager</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="prev" href="ThunarVfsVolume.html" title="ThunarVfsVolume">
+<link rel="next" href="ix01.html" title="Index">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsVolume.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="volume-handling.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ix01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarVfsVolumeManager"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsVolumeManager</span></h2>
+<p>ThunarVfsVolumeManager &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="ThunarVfsVolumeManager.html#ThunarVfsVolumeManagerIface">ThunarVfsVolumeManagerIface</a>;
+            <a href="ThunarVfsVolumeManager.html#ThunarVfsVolumeManager-struct">ThunarVfsVolumeManager</a>;
+<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a>* <a href="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-default">thunar_vfs_volume_manager_get_default</a>
+                                            (void);
+<a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a>* <a href="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volume-by-info">thunar_vfs_volume_manager_get_volume_by_info</a>
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);
+GList*      <a href="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volumes">thunar_vfs_volume_manager_get_volumes</a>
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager);
+void        <a href="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-added">thunar_vfs_volume_manager_volumes_added</a>
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             GList *volumes);
+void        <a href="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-removed">thunar_vfs_volume_manager_volumes_removed</a>
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             GList *volumes);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2625949"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GInterface
+   +----ThunarVfsVolumeManager
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2625968"></a><h2>Prerequisites</h2>
+<p>
+ThunarVfsVolumeManager requires
+ GObject.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2625984"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2625993"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2625998"></a><h3>
+<a name="ThunarVfsVolumeManagerIface"></a>ThunarVfsVolumeManagerIface</h3>
+<a class="indexterm" name="id2626007"></a><pre class="programlisting">typedef struct {
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolume *(*get_volume_by_info) (ThunarVfsVolumeManager *manager,
+                                          const ThunarVfsInfo    *info);
+  GList           *(*get_volumes)        (ThunarVfsVolumeManager *manager);
+
+  /* signals */
+  void (*volumes_added)   (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+  void (*volumes_removed) (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+} ThunarVfsVolumeManagerIface;
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626021"></a><h3>
+<a name="ThunarVfsVolumeManager-struct"></a>ThunarVfsVolumeManager</h3>
+<a class="indexterm" name="id2626029"></a><pre class="programlisting">typedef struct _ThunarVfsVolumeManager ThunarVfsVolumeManager;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626044"></a><h3>
+<a name="thunar-vfs-volume-manager-get-default"></a>thunar_vfs_volume_manager_get_default ()</h3>
+<a class="indexterm" name="id2626056"></a><pre class="programlisting"><a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a>* thunar_vfs_volume_manager_get_default
+                                            (void);</pre>
+<p>
+Returns the default, shared <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance
+for this system. This function automatically determines, which
+implementation of <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> should be used for
+the target system and returns an instance of that class, which
+is shared among all modules using the volume manager facility.
+</p>
+<p>
+Call <code class="function">g_object_unref()</code> on the returned object when you are
+done with it.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the shared <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626124"></a><h3>
+<a name="thunar-vfs-volume-manager-get-volume-by-info"></a>thunar_vfs_volume_manager_get_volume_by_info ()</h3>
+<a class="indexterm" name="id2626136"></a><pre class="programlisting"><a href="ThunarVfsVolume.html" title="ThunarVfsVolume">ThunarVfsVolume</a>* thunar_vfs_volume_manager_get_volume_by_info
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);</pre>
+<p>
+Tries to lookup the <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> on which <em class="parameter"><code>info</code></em> is
+located. If <em class="parameter"><code>manager</code></em> doesn't know a <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>
+for <em class="parameter"><code>info</code></em>, <code class="literal">NULL</code> will be returned.
+</p>
+<p>
+The returned <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a> (if any) is owned by
+<em class="parameter"><code>manager</code></em> and must not be freed by the caller.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>, on which <em class="parameter"><code>info</code></em> is
+              located or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626290"></a><h3>
+<a name="thunar-vfs-volume-manager-get-volumes"></a>thunar_vfs_volume_manager_get_volumes ()</h3>
+<a class="indexterm" name="id2626301"></a><pre class="programlisting">GList*      thunar_vfs_volume_manager_get_volumes
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager);</pre>
+<p>
+Returns all <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>s currently known for
+<em class="parameter"><code>manager</code></em>. The returned list is owned by <em class="parameter"><code>manager</code></em> and should
+therefore considered constant in the caller.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of volumes known for <em class="parameter"><code>manager</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626388"></a><h3>
+<a name="thunar-vfs-volume-manager-volumes-added"></a>thunar_vfs_volume_manager_volumes_added ()</h3>
+<a class="indexterm" name="id2626400"></a><pre class="programlisting">void        thunar_vfs_volume_manager_volumes_added
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             GList *volumes);</pre>
+<p>
+Emits the "volumes-added" signal on <em class="parameter"><code>manager</code></em> using the
+given <em class="parameter"><code>volumes</code></em>.
+</p>
+<p>
+This method should only be used by classes implementing
+the <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> interface.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volumes</code></em>&#160;:</span></td>
+<td> a list of <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>s.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2626568"></a><h3>
+<a name="thunar-vfs-volume-manager-volumes-removed"></a>thunar_vfs_volume_manager_volumes_removed ()</h3>
+<a class="indexterm" name="id2626580"></a><pre class="programlisting">void        thunar_vfs_volume_manager_volumes_removed
+                                            (<a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">ThunarVfsVolumeManager</a> *manager,
+                                             GList *volumes);</pre>
+<p>
+Emits the "volumes-removed" signal on <em class="parameter"><code>manager</code></em> using
+the given <em class="parameter"><code>volumes</code></em>.
+</p>
+<p>
+This method should only be used by classes implementing
+the <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> interface.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>manager</code></em>&#160;:</span></td>
+<td> a <a href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager"><span class="type">ThunarVfsVolumeManager</span></a> instance.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>volumes</code></em>&#160;:</span></td>
+<td> a list of <a href="ThunarVfsVolume.html" title="ThunarVfsVolume"><span class="type">ThunarVfsVolume</span></a>s.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsVolume.html"><b>&lt;&lt;&#160;ThunarVfsVolume</b></a></td>
+<td align="right"><a accesskey="n" href="ix01.html"><b>Index&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/filesystem-monitoring.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/filesystem-monitoring.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/filesystem-monitoring.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;III.&#160;Filesystem Monitoring</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="thunar-vfs-Utility-Functions.html" title="Utility Functions">
+<link rel="next" href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-Utility-Functions.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsMonitor.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="filesystem-monitoring"></a>Filesystem Monitoring</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-Utility-Functions.html"><b>&lt;&lt;&#160;Utility Functions</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsMonitor.html"><b>ThunarVfsMonitor&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/fundamentals.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/fundamentals.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/fundamentals.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;II.&#160;Fundamentals</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="next" href="thunar-vfs-Initialization-and-Shutdown.html" title="Initialization and Shutdown">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="introduction.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-Initialization-and-Shutdown.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="fundamentals"></a>Fundamentals</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="introduction.html"><b>&lt;&lt;&#160;Part&#160;I.&#160;Introduction</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-Initialization-and-Shutdown.html"><b>Initialization and Shutdown&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/home.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/home.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,116 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Thunar-VFS Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="next" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book" lang="en">
+<div class="titlepage">
+<div>
+<div><table class="navigation" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Thunar-VFS Reference Manual</p></th></tr></table></div>
+<div><div class="authorgroup"><div class="author">
+<h3 class="author">
+<span class="firstname">Benedikt</span> <span class="surname">Meurer</span>
+</h3>
+<div class="affiliation">
+<div class="address"><p><code class="email">&lt;<a href="mailto:benny at xfce.org">benny at xfce.org</a>&gt;</code></p></div>
+<span class="orgname">os-cillation<br></span><span class="orgdiv">System development<br></span><span class="jobtitle">Software developer<br></span>
+</div>
+</div></div></div>
+<div><p class="releaseinfo">Version 0.1.4pre-alpha-r18844
+</p></div>
+<div><p class="copyright">Copyright &#169; 2005 Benedikt Meurer</p></div>
+<div><div class="legalnotice">
+<a name="legalnotice"></a><p>
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.1 or
+        any later version published by the Free Software Foundation; with no
+        Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+        Texts. The complete license text is available from the <a href="http://www.gnu.org/" target="_top">Free Software Foundation</a>.
+      </p>
+</div></div>
+<div><p class="pubdate">September 2005</p></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="part"><a href="introduction.html">I. Introduction</a></span></dt>
+<dt><span class="part"><a href="fundamentals.html">II. Fundamentals</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-Initialization-and-Shutdown.html">Initialization and Shutdown</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-Basic-Types.html">Basic Types</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-ThunarVfsPath.html">ThunarVfsPath</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-ThunarVfsInfo.html">ThunarVfsInfo</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-Utility-Functions.html">Utility Functions</a></span><span class="refpurpose"> - </span>
+</dt>
+</dl></dd>
+<dt><span class="part"><a href="filesystem-monitoring.html">III. Filesystem Monitoring</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="ThunarVfsMonitor.html">ThunarVfsMonitor</a></span><span class="refpurpose"> - </span>
+</dt></dl></dd>
+<dt><span class="part"><a href="mime-types.html">IV. MIME Types</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-ThunarVfsMimeInfo.html">ThunarVfsMimeInfo</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsMimeDatabase.html">ThunarVfsMimeDatabase</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="thunar-vfs-ThunarVfsMimeApplication.html">ThunarVfsMimeApplication</a></span><span class="refpurpose"> - </span>
+</dt>
+</dl></dd>
+<dt><span class="part"><a href="users-and-groups-handling.html">V. Users and Groups Handling</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsUser.html">ThunarVfsUser</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsGroup.html">ThunarVfsGroup</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsUserManager.html">ThunarVfsUserManager</a></span><span class="refpurpose"> - </span>
+</dt>
+</dl></dd>
+<dt><span class="part"><a href="volume-handling.html">VI. Volume Handling</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsVolume.html">ThunarVfsVolume</a></span><span class="refpurpose"> - </span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarVfsVolumeManager.html">ThunarVfsVolumeManager</a></span><span class="refpurpose"> - </span>
+</dt>
+</dl></dd>
+<dt><span class="index"><a href="ix01.html">Index</a></span></dt>
+</dl>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"></td>
+<td align="right"><a accesskey="n" href="introduction.html"><b>Part&#160;I.&#160;Introduction&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/index.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,142 @@
+<ANCHOR id="thunar-vfs-Initialization-and-Shutdown" href="thunar-vfs/thunar-vfs-Initialization-and-Shutdown.html">
+<ANCHOR id="thunar-vfs-init" href="thunar-vfs/thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-init">
+<ANCHOR id="thunar-vfs-shutdown" href="thunar-vfs/thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-shutdown">
+<ANCHOR id="thunar-vfs-Basic-Types" href="thunar-vfs/thunar-vfs-Basic-Types.html">
+<ANCHOR id="ThunarVfsFileType" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileType">
+<ANCHOR id="ThunarVfsFileMode" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileMode">
+<ANCHOR id="ThunarVfsFileFlags" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileFlags">
+<ANCHOR id="ThunarVfsFileDevice" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileDevice">
+<ANCHOR id="ThunarVfsFileInode" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileInode">
+<ANCHOR id="ThunarVfsFileSize" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileSize">
+<ANCHOR id="ThunarVfsFileTime" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsFileTime">
+<ANCHOR id="ThunarVfsGroupId" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsGroupId">
+<ANCHOR id="ThunarVfsUserId" href="thunar-vfs/thunar-vfs-Basic-Types.html#ThunarVfsUserId">
+<ANCHOR id="thunar-vfs-ThunarVfsPath" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html">
+<ANCHOR id="ThunarVfsPath" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">
+<ANCHOR id="thunar-vfs-path-new" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-new">
+<ANCHOR id="thunar-vfs-path-get-for-home" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-home">
+<ANCHOR id="thunar-vfs-path-get-for-root" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-root">
+<ANCHOR id="thunar-vfs-path-ref" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-ref">
+<ANCHOR id="thunar-vfs-path-unref" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref">
+<ANCHOR id="thunar-vfs-path-hash" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-hash">
+<ANCHOR id="thunar-vfs-path-equal" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-equal">
+<ANCHOR id="thunar-vfs-path-is-home" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-home">
+<ANCHOR id="thunar-vfs-path-is-root" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-root">
+<ANCHOR id="thunar-vfs-path-relative" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-relative">
+<ANCHOR id="thunar-vfs-path-get-name" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-name">
+<ANCHOR id="thunar-vfs-path-get-parent" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-parent">
+<ANCHOR id="thunar-vfs-path-dup-string" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-string">
+<ANCHOR id="thunar-vfs-path-to-string" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-string">
+<ANCHOR id="thunar-vfs-path-dup-uri" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-uri">
+<ANCHOR id="thunar-vfs-path-to-uri" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-uri">
+<ANCHOR id="thunar-vfs-path-list-from-string" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-from-string">
+<ANCHOR id="thunar-vfs-path-list-to-string" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-to-string">
+<ANCHOR id="thunar-vfs-path-list-append" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-append">
+<ANCHOR id="thunar-vfs-path-list-prepend" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-prepend">
+<ANCHOR id="thunar-vfs-path-list-copy" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-copy">
+<ANCHOR id="thunar-vfs-path-list-free" href="thunar-vfs/thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-free">
+<ANCHOR id="thunar-vfs-ThunarVfsInfo" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html">
+<ANCHOR id="ThunarVfsInfo" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">
+<ANCHOR id="thunar-vfs-info-new-for-path" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-new-for-path">
+<ANCHOR id="thunar-vfs-info-ref" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-ref">
+<ANCHOR id="thunar-vfs-info-unref" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-unref">
+<ANCHOR id="thunar-vfs-info-execute" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-execute">
+<ANCHOR id="thunar-vfs-info-rename" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-rename">
+<ANCHOR id="thunar-vfs-info-matches" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-matches">
+<ANCHOR id="thunar-vfs-info-list-free" href="thunar-vfs/thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-list-free">
+<ANCHOR id="thunar-vfs-Utility-Functions" href="thunar-vfs/thunar-vfs-Utility-Functions.html">
+<ANCHOR id="thunar-vfs-humanize-size" href="thunar-vfs/thunar-vfs-Utility-Functions.html#thunar-vfs-humanize-size">
+<ANCHOR id="ThunarVfsMonitor" href="thunar-vfs/ThunarVfsMonitor.html">
+<ANCHOR id="ThunarVfsMonitor-struct" href="thunar-vfs/ThunarVfsMonitor.html#ThunarVfsMonitor-struct">
+<ANCHOR id="ThunarVfsMonitorEvent" href="thunar-vfs/ThunarVfsMonitor.html#ThunarVfsMonitorEvent">
+<ANCHOR id="ThunarVfsMonitorHandle" href="thunar-vfs/ThunarVfsMonitor.html#ThunarVfsMonitorHandle">
+<ANCHOR id="ThunarVfsMonitorCallback" href="thunar-vfs/ThunarVfsMonitor.html#ThunarVfsMonitorCallback">
+<ANCHOR id="thunar-vfs-monitor-get-default" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-get-default">
+<ANCHOR id="thunar-vfs-monitor-add-directory" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-add-directory">
+<ANCHOR id="thunar-vfs-monitor-add-file" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-add-file">
+<ANCHOR id="thunar-vfs-monitor-remove" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-remove">
+<ANCHOR id="thunar-vfs-monitor-feed" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-feed">
+<ANCHOR id="thunar-vfs-monitor-wait" href="thunar-vfs/ThunarVfsMonitor.html#thunar-vfs-monitor-wait">
+<ANCHOR id="thunar-vfs-ThunarVfsMimeInfo" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html">
+<ANCHOR id="ThunarVfsMimeInfo" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">
+<ANCHOR id="thunar-vfs-mime-info-new" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-new">
+<ANCHOR id="thunar-vfs-mime-info-ref" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-ref">
+<ANCHOR id="thunar-vfs-mime-info-unref" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref">
+<ANCHOR id="thunar-vfs-mime-info-get-comment" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-comment">
+<ANCHOR id="thunar-vfs-mime-info-get-name" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-name">
+<ANCHOR id="thunar-vfs-mime-info-get-media" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-media">
+<ANCHOR id="thunar-vfs-mime-info-get-subtype" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-subtype">
+<ANCHOR id="thunar-vfs-mime-info-hash" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-hash">
+<ANCHOR id="thunar-vfs-mime-info-equal" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-equal">
+<ANCHOR id="thunar-vfs-mime-info-lookup-icon-name" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-lookup-icon-name">
+<ANCHOR id="thunar-vfs-mime-info-list-free" href="thunar-vfs/thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-list-free">
+<ANCHOR id="ThunarVfsMimeDatabase" href="thunar-vfs/ThunarVfsMimeDatabase.html">
+<ANCHOR id="ThunarVfsMimeDatabase-struct" href="thunar-vfs/ThunarVfsMimeDatabase.html#ThunarVfsMimeDatabase-struct">
+<ANCHOR id="thunar-vfs-mime-database-get-default" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default">
+<ANCHOR id="thunar-vfs-mime-database-get-info" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info">
+<ANCHOR id="thunar-vfs-mime-database-get-info-for-data" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-data">
+<ANCHOR id="thunar-vfs-mime-database-get-info-for-name" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-name">
+<ANCHOR id="thunar-vfs-mime-database-get-info-for-file" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-file">
+<ANCHOR id="thunar-vfs-mime-database-get-infos-for-info" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-infos-for-info">
+<ANCHOR id="thunar-vfs-mime-database-get-applications" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-applications">
+<ANCHOR id="thunar-vfs-mime-database-get-default-application" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default-application">
+<ANCHOR id="thunar-vfs-mime-database-set-default-application" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-set-default-application">
+<ANCHOR id="thunar-vfs-mime-database-add-application" href="thunar-vfs/ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-add-application">
+<ANCHOR id="thunar-vfs-ThunarVfsMimeApplication" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html">
+<ANCHOR id="THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS">
+<ANCHOR id="ThunarVfsMimeApplicationError" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationError">
+<ANCHOR id="ThunarVfsMimeApplicationFlags" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationFlags">
+<ANCHOR id="ThunarVfsMimeApplication" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">
+<ANCHOR id="thunar-vfs-mime-application-new-from-desktop-id" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-desktop-id">
+<ANCHOR id="thunar-vfs-mime-application-new-from-file" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-file">
+<ANCHOR id="thunar-vfs-mime-application-ref" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-ref">
+<ANCHOR id="thunar-vfs-mime-application-unref" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref">
+<ANCHOR id="thunar-vfs-mime-application-get-command" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-command">
+<ANCHOR id="thunar-vfs-mime-application-get-desktop-id" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-desktop-id">
+<ANCHOR id="thunar-vfs-mime-application-get-flags" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-flags">
+<ANCHOR id="thunar-vfs-mime-application-get-name" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-name">
+<ANCHOR id="thunar-vfs-mime-application-exec" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec">
+<ANCHOR id="thunar-vfs-mime-application-exec-with-env" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec-with-env">
+<ANCHOR id="thunar-vfs-mime-application-lookup-icon-name" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-lookup-icon-name">
+<ANCHOR id="thunar-vfs-mime-application-hash" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-hash">
+<ANCHOR id="thunar-vfs-mime-application-equal" href="thunar-vfs/thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-equal">
+<ANCHOR id="ThunarVfsUser" href="thunar-vfs/ThunarVfsUser.html">
+<ANCHOR id="ThunarVfsUser-struct" href="thunar-vfs/ThunarVfsUser.html#ThunarVfsUser-struct">
+<ANCHOR id="thunar-vfs-user-get-groups" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-get-groups">
+<ANCHOR id="thunar-vfs-user-get-primary-group" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-get-primary-group">
+<ANCHOR id="thunar-vfs-user-get-id" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-get-id">
+<ANCHOR id="thunar-vfs-user-get-name" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-get-name">
+<ANCHOR id="thunar-vfs-user-get-real-name" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-get-real-name">
+<ANCHOR id="thunar-vfs-user-is-me" href="thunar-vfs/ThunarVfsUser.html#thunar-vfs-user-is-me">
+<ANCHOR id="ThunarVfsGroup" href="thunar-vfs/ThunarVfsGroup.html">
+<ANCHOR id="ThunarVfsGroup-struct" href="thunar-vfs/ThunarVfsGroup.html#ThunarVfsGroup-struct">
+<ANCHOR id="thunar-vfs-group-get-id" href="thunar-vfs/ThunarVfsGroup.html#thunar-vfs-group-get-id">
+<ANCHOR id="thunar-vfs-group-get-name" href="thunar-vfs/ThunarVfsGroup.html#thunar-vfs-group-get-name">
+<ANCHOR id="ThunarVfsUserManager" href="thunar-vfs/ThunarVfsUserManager.html">
+<ANCHOR id="ThunarVfsUserManager-struct" href="thunar-vfs/ThunarVfsUserManager.html#ThunarVfsUserManager-struct">
+<ANCHOR id="thunar-vfs-user-manager-get-default" href="thunar-vfs/ThunarVfsUserManager.html#thunar-vfs-user-manager-get-default">
+<ANCHOR id="thunar-vfs-user-manager-get-group-by-id" href="thunar-vfs/ThunarVfsUserManager.html#thunar-vfs-user-manager-get-group-by-id">
+<ANCHOR id="thunar-vfs-user-manager-get-user-by-id" href="thunar-vfs/ThunarVfsUserManager.html#thunar-vfs-user-manager-get-user-by-id">
+<ANCHOR id="ThunarVfsVolume" href="thunar-vfs/ThunarVfsVolume.html">
+<ANCHOR id="ThunarVfsVolumeKind" href="thunar-vfs/ThunarVfsVolume.html#ThunarVfsVolumeKind">
+<ANCHOR id="ThunarVfsVolumeStatus" href="thunar-vfs/ThunarVfsVolume.html#ThunarVfsVolumeStatus">
+<ANCHOR id="ThunarVfsVolumeIface" href="thunar-vfs/ThunarVfsVolume.html#ThunarVfsVolumeIface">
+<ANCHOR id="ThunarVfsVolume-struct" href="thunar-vfs/ThunarVfsVolume.html#ThunarVfsVolume-struct">
+<ANCHOR id="thunar-vfs-volume-get-kind" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-get-kind">
+<ANCHOR id="thunar-vfs-volume-get-name" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-get-name">
+<ANCHOR id="thunar-vfs-volume-get-status" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-get-status">
+<ANCHOR id="thunar-vfs-volume-get-mount-point" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-get-mount-point">
+<ANCHOR id="thunar-vfs-volume-is-mounted" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-is-mounted">
+<ANCHOR id="thunar-vfs-volume-is-present" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-is-present">
+<ANCHOR id="thunar-vfs-volume-is-removable" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-is-removable">
+<ANCHOR id="thunar-vfs-volume-get-free-space" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-get-free-space">
+<ANCHOR id="thunar-vfs-volume-lookup-icon-name" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-lookup-icon-name">
+<ANCHOR id="thunar-vfs-volume-changed" href="thunar-vfs/ThunarVfsVolume.html#thunar-vfs-volume-changed">
+<ANCHOR id="ThunarVfsVolumeManager" href="thunar-vfs/ThunarVfsVolumeManager.html">
+<ANCHOR id="ThunarVfsVolumeManagerIface" href="thunar-vfs/ThunarVfsVolumeManager.html#ThunarVfsVolumeManagerIface">
+<ANCHOR id="ThunarVfsVolumeManager-struct" href="thunar-vfs/ThunarVfsVolumeManager.html#ThunarVfsVolumeManager-struct">
+<ANCHOR id="thunar-vfs-volume-manager-get-default" href="thunar-vfs/ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-default">
+<ANCHOR id="thunar-vfs-volume-manager-get-volume-by-info" href="thunar-vfs/ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volume-by-info">
+<ANCHOR id="thunar-vfs-volume-manager-get-volumes" href="thunar-vfs/ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volumes">
+<ANCHOR id="thunar-vfs-volume-manager-volumes-added" href="thunar-vfs/ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-added">
+<ANCHOR id="thunar-vfs-volume-manager-volumes-removed" href="thunar-vfs/ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-removed">

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/introduction.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/introduction.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/introduction.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;I.&#160;Introduction</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="next" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="fundamentals.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="introduction"></a>Introduction</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="index.html"><b>&lt;&lt;&#160;Thunar-VFS Reference Manual</b></a></td>
+<td align="right"><a accesskey="n" href="fundamentals.html"><b>Part&#160;II.&#160;Fundamentals&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ix01.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ix01.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/ix01.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,295 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="ThunarVfsVolumeManager.html" title="ThunarVfsVolumeManager">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsVolumeManager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2625646"></a>Index</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>T</h3>
+<dl>
+<dt>ThunarVfsFileDevice, <a href="thunar-vfs-Basic-Types.html#id2590763">ThunarVfsFileDevice</a>
+</dt>
+<dt>ThunarVfsFileFlags, <a href="thunar-vfs-Basic-Types.html#id2590681">enum ThunarVfsFileFlags</a>
+</dt>
+<dt>ThunarVfsFileInode, <a href="thunar-vfs-Basic-Types.html#id2590790">ThunarVfsFileInode</a>
+</dt>
+<dt>ThunarVfsFileMode, <a href="thunar-vfs-Basic-Types.html#id2590438">enum ThunarVfsFileMode</a>
+</dt>
+<dt>ThunarVfsFileSize, <a href="thunar-vfs-Basic-Types.html#id2590817">ThunarVfsFileSize</a>
+</dt>
+<dt>ThunarVfsFileTime, <a href="thunar-vfs-Basic-Types.html#id2590843">ThunarVfsFileTime</a>
+</dt>
+<dt>ThunarVfsFileType, <a href="thunar-vfs-Basic-Types.html#id2542845">enum ThunarVfsFileType</a>
+</dt>
+<dt>ThunarVfsGroup, <a href="ThunarVfsGroup.html#id2620317">ThunarVfsGroup</a>
+</dt>
+<dt>ThunarVfsGroupId, <a href="thunar-vfs-Basic-Types.html#id2590938">ThunarVfsGroupId</a>
+</dt>
+<dt>ThunarVfsInfo, <a href="thunar-vfs-ThunarVfsInfo.html#id2599150">ThunarVfsInfo</a>
+</dt>
+<dt>ThunarVfsMimeApplication, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2613975">ThunarVfsMimeApplication</a>
+</dt>
+<dt>ThunarVfsMimeApplicationError, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2613838">enum ThunarVfsMimeApplicationError</a>
+</dt>
+<dt>ThunarVfsMimeApplicationFlags, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2613862">enum ThunarVfsMimeApplicationFlags</a>
+</dt>
+<dt>ThunarVfsMimeDatabase, <a href="ThunarVfsMimeDatabase.html#id2609040">ThunarVfsMimeDatabase</a>
+</dt>
+<dt>ThunarVfsMimeInfo, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2605566">ThunarVfsMimeInfo</a>
+</dt>
+<dt>ThunarVfsMonitor, <a href="ThunarVfsMonitor.html#id2602409">ThunarVfsMonitor</a>
+</dt>
+<dt>ThunarVfsMonitorCallback, <a href="ThunarVfsMonitor.html#id2602619">ThunarVfsMonitorCallback ()</a>
+</dt>
+<dt>ThunarVfsMonitorEvent, <a href="ThunarVfsMonitor.html#id2602433">enum ThunarVfsMonitorEvent</a>
+</dt>
+<dt>ThunarVfsMonitorHandle, <a href="ThunarVfsMonitor.html#id2602586">ThunarVfsMonitorHandle</a>
+</dt>
+<dt>ThunarVfsPath, <a href="thunar-vfs-ThunarVfsPath.html#id2592545">ThunarVfsPath</a>
+</dt>
+<dt>ThunarVfsUser, <a href="ThunarVfsUser.html#id2618552">ThunarVfsUser</a>
+</dt>
+<dt>ThunarVfsUserId, <a href="thunar-vfs-Basic-Types.html#id2590965">ThunarVfsUserId</a>
+</dt>
+<dt>ThunarVfsUserManager, <a href="ThunarVfsUserManager.html#id2621091">ThunarVfsUserManager</a>
+</dt>
+<dt>ThunarVfsVolume, <a href="ThunarVfsVolume.html#id2622845">ThunarVfsVolume</a>
+</dt>
+<dt>ThunarVfsVolumeIface, <a href="ThunarVfsVolume.html#id2622823">ThunarVfsVolumeIface</a>
+</dt>
+<dt>ThunarVfsVolumeKind, <a href="ThunarVfsVolume.html#id2622578">enum ThunarVfsVolumeKind</a>
+</dt>
+<dt>ThunarVfsVolumeManager, <a href="ThunarVfsVolumeManager.html#id2626021">ThunarVfsVolumeManager</a>
+</dt>
+<dt>ThunarVfsVolumeManagerIface, <a href="ThunarVfsVolumeManager.html#id2625998">ThunarVfsVolumeManagerIface</a>
+</dt>
+<dt>ThunarVfsVolumeStatus, <a href="ThunarVfsVolume.html#id2622760">enum ThunarVfsVolumeStatus</a>
+</dt>
+<dt>thunar_vfs_group_get_id, <a href="ThunarVfsGroup.html#id2620341">thunar_vfs_group_get_id ()</a>
+</dt>
+<dt>thunar_vfs_group_get_name, <a href="ThunarVfsGroup.html#id2620421">thunar_vfs_group_get_name ()</a>
+</dt>
+<dt>thunar_vfs_humanize_size, <a href="thunar-vfs-Utility-Functions.html#id2601602">thunar_vfs_humanize_size ()</a>
+</dt>
+<dt>thunar_vfs_info_execute, <a href="thunar-vfs-ThunarVfsInfo.html#id2599491">thunar_vfs_info_execute ()</a>
+</dt>
+<dt>thunar_vfs_info_list_free, <a href="thunar-vfs-ThunarVfsInfo.html#id2600070">thunar_vfs_info_list_free ()</a>
+</dt>
+<dt>thunar_vfs_info_matches, <a href="thunar-vfs-ThunarVfsInfo.html#id2599947">thunar_vfs_info_matches ()</a>
+</dt>
+<dt>thunar_vfs_info_new_for_path, <a href="thunar-vfs-ThunarVfsInfo.html#id2599184">thunar_vfs_info_new_for_path ()</a>
+</dt>
+<dt>thunar_vfs_info_ref, <a href="thunar-vfs-ThunarVfsInfo.html#id2599333">thunar_vfs_info_ref ()</a>
+</dt>
+<dt>thunar_vfs_info_rename, <a href="thunar-vfs-ThunarVfsInfo.html#id2599768">thunar_vfs_info_rename ()</a>
+</dt>
+<dt>thunar_vfs_info_unref, <a href="thunar-vfs-ThunarVfsInfo.html#id2599419">thunar_vfs_info_unref ()</a>
+</dt>
+<dt>thunar_vfs_init, <a href="thunar-vfs-Initialization-and-Shutdown.html#id2542680">thunar_vfs_init ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_equal, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2615713">thunar_vfs_mime_application_equal ()</a>
+</dt>
+<dt>THUNAR_VFS_MIME_APPLICATION_ERROR, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2613812">THUNAR_VFS_MIME_APPLICATION_ERROR</a>
+</dt>
+<dt>thunar_vfs_mime_application_exec, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614910">thunar_vfs_mime_application_exec ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_exec_with_env, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2615163">thunar_vfs_mime_application_exec_with_env ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_get_command, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614573">thunar_vfs_mime_application_get_command ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_get_desktop_id, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614659">thunar_vfs_mime_application_get_desktop_id ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_get_flags, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614743">thunar_vfs_mime_application_get_flags ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_get_name, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614826">thunar_vfs_mime_application_get_name ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_hash, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2615605">thunar_vfs_mime_application_hash ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_lookup_icon_name, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2615473">thunar_vfs_mime_application_lookup_icon_name ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_new_from_desktop_id, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2613997">thunar_vfs_mime_application_new_from_desktop_id ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_new_from_file, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614121">thunar_vfs_mime_application_new_from_file ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_ref, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614342">thunar_vfs_mime_application_ref ()</a>
+</dt>
+<dt>thunar_vfs_mime_application_unref, <a href="thunar-vfs-ThunarVfsMimeApplication.html#id2614498">thunar_vfs_mime_application_unref ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_add_application, <a href="ThunarVfsMimeDatabase.html#id2610727">thunar_vfs_mime_database_add_application ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_applications, <a href="ThunarVfsMimeDatabase.html#id2610178">thunar_vfs_mime_database_get_applications ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_default, <a href="ThunarVfsMimeDatabase.html#id2609063">thunar_vfs_mime_database_get_default ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_default_application, <a href="ThunarVfsMimeDatabase.html#id2610316">thunar_vfs_mime_database_get_default_application ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_info, <a href="ThunarVfsMimeDatabase.html#id2609204">thunar_vfs_mime_database_get_info ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_infos_for_info, <a href="ThunarVfsMimeDatabase.html#id2609949">thunar_vfs_mime_database_get_infos_for_info ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_info_for_data, <a href="ThunarVfsMimeDatabase.html#id2609335">thunar_vfs_mime_database_get_info_for_data ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_info_for_file, <a href="ThunarVfsMimeDatabase.html#id2609703">thunar_vfs_mime_database_get_info_for_file ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_get_info_for_name, <a href="ThunarVfsMimeDatabase.html#id2609490">thunar_vfs_mime_database_get_info_for_name ()</a>
+</dt>
+<dt>thunar_vfs_mime_database_set_default_application, <a href="ThunarVfsMimeDatabase.html#id2610471">thunar_vfs_mime_database_set_default_application ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_equal, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606560">thunar_vfs_mime_info_equal ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_get_comment, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606050">thunar_vfs_mime_info_get_comment ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_get_media, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606222">thunar_vfs_mime_info_get_media ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_get_name, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606140">thunar_vfs_mime_info_get_name ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_get_subtype, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606314">thunar_vfs_mime_info_get_subtype ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_hash, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606480">thunar_vfs_mime_info_hash ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_list_free, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606909">thunar_vfs_mime_info_list_free ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_lookup_icon_name, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2606686">thunar_vfs_mime_info_lookup_icon_name ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_new, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2605590">thunar_vfs_mime_info_new ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_ref, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2605891">thunar_vfs_mime_info_ref ()</a>
+</dt>
+<dt>thunar_vfs_mime_info_unref, <a href="thunar-vfs-ThunarVfsMimeInfo.html#id2605976">thunar_vfs_mime_info_unref ()</a>
+</dt>
+<dt>thunar_vfs_monitor_add_directory, <a href="ThunarVfsMonitor.html#id2602970">thunar_vfs_monitor_add_directory ()</a>
+</dt>
+<dt>thunar_vfs_monitor_add_file, <a href="ThunarVfsMonitor.html#id2603121">thunar_vfs_monitor_add_file ()</a>
+</dt>
+<dt>thunar_vfs_monitor_feed, <a href="ThunarVfsMonitor.html#id2603436">thunar_vfs_monitor_feed ()</a>
+</dt>
+<dt>thunar_vfs_monitor_get_default, <a href="ThunarVfsMonitor.html#id2602902">thunar_vfs_monitor_get_default ()</a>
+</dt>
+<dt>thunar_vfs_monitor_remove, <a href="ThunarVfsMonitor.html#id2603335">thunar_vfs_monitor_remove ()</a>
+</dt>
+<dt>thunar_vfs_monitor_wait, <a href="ThunarVfsMonitor.html#id2603564">thunar_vfs_monitor_wait ()</a>
+</dt>
+<dt>thunar_vfs_path_dup_string, <a href="thunar-vfs-ThunarVfsPath.html#id2593933">thunar_vfs_path_dup_string ()</a>
+</dt>
+<dt>thunar_vfs_path_dup_uri, <a href="thunar-vfs-ThunarVfsPath.html#id2594247">thunar_vfs_path_dup_uri ()</a>
+</dt>
+<dt>thunar_vfs_path_equal, <a href="thunar-vfs-ThunarVfsPath.html#id2593171">thunar_vfs_path_equal ()</a>
+</dt>
+<dt>thunar_vfs_path_get_for_home, <a href="thunar-vfs-ThunarVfsPath.html#id2592785">thunar_vfs_path_get_for_home ()</a>
+</dt>
+<dt>thunar_vfs_path_get_for_root, <a href="thunar-vfs-ThunarVfsPath.html#id2592857">thunar_vfs_path_get_for_root ()</a>
+</dt>
+<dt>thunar_vfs_path_get_name, <a href="thunar-vfs-ThunarVfsPath.html#id2593734">thunar_vfs_path_get_name ()</a>
+</dt>
+<dt>thunar_vfs_path_get_parent, <a href="thunar-vfs-ThunarVfsPath.html#id2593816">thunar_vfs_path_get_parent ()</a>
+</dt>
+<dt>thunar_vfs_path_hash, <a href="thunar-vfs-ThunarVfsPath.html#id2593090">thunar_vfs_path_hash ()</a>
+</dt>
+<dt>thunar_vfs_path_is_home, <a href="thunar-vfs-ThunarVfsPath.html#id2593292">thunar_vfs_path_is_home ()</a>
+</dt>
+<dt>thunar_vfs_path_is_root, <a href="thunar-vfs-ThunarVfsPath.html#id2593380">thunar_vfs_path_is_root ()</a>
+</dt>
+<dt>thunar_vfs_path_list_append, <a href="thunar-vfs-ThunarVfsPath.html#id2594923">thunar_vfs_path_list_append ()</a>
+</dt>
+<dt>thunar_vfs_path_list_copy, <a href="thunar-vfs-ThunarVfsPath.html#id2595162">thunar_vfs_path_list_copy ()</a>
+</dt>
+<dt>thunar_vfs_path_list_free, <a href="thunar-vfs-ThunarVfsPath.html#id2595320">thunar_vfs_path_list_free ()</a>
+</dt>
+<dt>thunar_vfs_path_list_from_string, <a href="thunar-vfs-ThunarVfsPath.html#id2594689">thunar_vfs_path_list_from_string ()</a>
+</dt>
+<dt>thunar_vfs_path_list_prepend, <a href="thunar-vfs-ThunarVfsPath.html#id2595042">thunar_vfs_path_list_prepend ()</a>
+</dt>
+<dt>thunar_vfs_path_list_to_string, <a href="thunar-vfs-ThunarVfsPath.html#id2594838">thunar_vfs_path_list_to_string ()</a>
+</dt>
+<dt>thunar_vfs_path_new, <a href="thunar-vfs-ThunarVfsPath.html#id2592568">thunar_vfs_path_new ()</a>
+</dt>
+<dt>thunar_vfs_path_ref, <a href="thunar-vfs-ThunarVfsPath.html#id2592930">thunar_vfs_path_ref ()</a>
+</dt>
+<dt>thunar_vfs_path_relative, <a href="thunar-vfs-ThunarVfsPath.html#id2593530">thunar_vfs_path_relative ()</a>
+</dt>
+<dt>thunar_vfs_path_to_string, <a href="thunar-vfs-ThunarVfsPath.html#id2594032">thunar_vfs_path_to_string ()</a>
+</dt>
+<dt>thunar_vfs_path_to_uri, <a href="thunar-vfs-ThunarVfsPath.html#id2594411">thunar_vfs_path_to_uri ()</a>
+</dt>
+<dt>thunar_vfs_path_unref, <a href="thunar-vfs-ThunarVfsPath.html#id2593016">thunar_vfs_path_unref ()</a>
+</dt>
+<dt>thunar_vfs_shutdown, <a href="thunar-vfs-Initialization-and-Shutdown.html#id2542712">thunar_vfs_shutdown ()</a>
+</dt>
+<dt>thunar_vfs_user_get_groups, <a href="ThunarVfsUser.html#id2618576">thunar_vfs_user_get_groups ()</a>
+</dt>
+<dt>thunar_vfs_user_get_id, <a href="ThunarVfsUser.html#id2618868">thunar_vfs_user_get_id ()</a>
+</dt>
+<dt>thunar_vfs_user_get_name, <a href="ThunarVfsUser.html#id2618947">thunar_vfs_user_get_name ()</a>
+</dt>
+<dt>thunar_vfs_user_get_primary_group, <a href="ThunarVfsUser.html#id2618688">thunar_vfs_user_get_primary_group ()</a>
+</dt>
+<dt>thunar_vfs_user_get_real_name, <a href="ThunarVfsUser.html#id2619035">thunar_vfs_user_get_real_name ()</a>
+</dt>
+<dt>thunar_vfs_user_is_me, <a href="ThunarVfsUser.html#id2619134">thunar_vfs_user_is_me ()</a>
+</dt>
+<dt>thunar_vfs_user_manager_get_default, <a href="ThunarVfsUserManager.html#id2621114">thunar_vfs_user_manager_get_default ()</a>
+</dt>
+<dt>thunar_vfs_user_manager_get_group_by_id, <a href="ThunarVfsUserManager.html#id2621185">thunar_vfs_user_manager_get_group_by_id ()</a>
+</dt>
+<dt>thunar_vfs_user_manager_get_user_by_id, <a href="ThunarVfsUserManager.html#id2621349">thunar_vfs_user_manager_get_user_by_id ()</a>
+</dt>
+<dt>thunar_vfs_volume_changed, <a href="ThunarVfsVolume.html#id2623862">thunar_vfs_volume_changed ()</a>
+</dt>
+<dt>thunar_vfs_volume_get_free_space, <a href="ThunarVfsVolume.html#id2623609">thunar_vfs_volume_get_free_space ()</a>
+</dt>
+<dt>thunar_vfs_volume_get_kind, <a href="ThunarVfsVolume.html#id2622869">thunar_vfs_volume_get_kind ()</a>
+</dt>
+<dt>thunar_vfs_volume_get_mount_point, <a href="ThunarVfsVolume.html#id2623185">thunar_vfs_volume_get_mount_point ()</a>
+</dt>
+<dt>thunar_vfs_volume_get_name, <a href="ThunarVfsVolume.html#id2623017">thunar_vfs_volume_get_name ()</a>
+</dt>
+<dt>thunar_vfs_volume_get_status, <a href="ThunarVfsVolume.html#id2623098">thunar_vfs_volume_get_status ()</a>
+</dt>
+<dt>thunar_vfs_volume_is_mounted, <a href="ThunarVfsVolume.html#id2623257">thunar_vfs_volume_is_mounted ()</a>
+</dt>
+<dt>thunar_vfs_volume_is_present, <a href="ThunarVfsVolume.html#id2623349">thunar_vfs_volume_is_present ()</a>
+</dt>
+<dt>thunar_vfs_volume_is_removable, <a href="ThunarVfsVolume.html#id2623516">thunar_vfs_volume_is_removable ()</a>
+</dt>
+<dt>thunar_vfs_volume_lookup_icon_name, <a href="ThunarVfsVolume.html#id2623745">thunar_vfs_volume_lookup_icon_name ()</a>
+</dt>
+<dt>thunar_vfs_volume_manager_get_default, <a href="ThunarVfsVolumeManager.html#id2626044">thunar_vfs_volume_manager_get_default ()</a>
+</dt>
+<dt>thunar_vfs_volume_manager_get_volumes, <a href="ThunarVfsVolumeManager.html#id2626290">thunar_vfs_volume_manager_get_volumes ()</a>
+</dt>
+<dt>thunar_vfs_volume_manager_get_volume_by_info, <a href="ThunarVfsVolumeManager.html#id2626124">thunar_vfs_volume_manager_get_volume_by_info ()</a>
+</dt>
+<dt>thunar_vfs_volume_manager_volumes_added, <a href="ThunarVfsVolumeManager.html#id2626388">thunar_vfs_volume_manager_volumes_added ()</a>
+</dt>
+<dt>thunar_vfs_volume_manager_volumes_removed, <a href="ThunarVfsVolumeManager.html#id2626568">thunar_vfs_volume_manager_volumes_removed ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsVolumeManager.html"><b>&lt;&lt;&#160;ThunarVfsVolumeManager</b></a></td>
+<td align="right"></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/left.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/left.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/mime-types.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/mime-types.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/mime-types.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;IV.&#160;MIME Types</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="ThunarVfsMonitor.html" title="ThunarVfsMonitor">
+<link rel="next" href="thunar-vfs-ThunarVfsMimeInfo.html" title="ThunarVfsMimeInfo">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsMonitor.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-ThunarVfsMimeInfo.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="mime-types"></a>MIME Types</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsMonitor.html"><b>&lt;&lt;&#160;ThunarVfsMonitor</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-ThunarVfsMimeInfo.html"><b>ThunarVfsMimeInfo&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/right.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/right.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/style.css
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/style.css	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/style.css	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,66 @@
+.synopsis, .classsynopsis 
+{
+  background: #eeeeee;
+  border: solid 1px #aaaaaa;
+  padding: 0.5em;
+}
+.programlisting 
+{
+  background: #eeeeff;
+  border: solid 1px #aaaaff;
+  padding: 0.5em;
+}
+.variablelist 
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+table.navigation 
+{
+  background: #ffeeee;
+  border: solid 1px #ffaaaa;
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+.navigation a 
+{
+  color: #770000;
+}
+.navigation a:visited 
+{
+  color: #550000;
+}
+.navigation .title 
+{
+  font-size: 200%;
+}
+div.refnamediv 
+{
+  margin-top: 2em;
+}
+div.gallery-float 
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img 
+{
+  border-style: none;
+}
+div.gallery-spacer 
+{
+  clear: both;
+}
+a
+{
+  text-decoration: none;
+}
+a:hover
+{
+  text-decoration: underline;
+  color: #FF0000;
+}

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Basic-Types.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Basic-Types.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Basic-Types.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,388 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Basic Types</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="prev" href="thunar-vfs-Initialization-and-Shutdown.html" title="Initialization and Shutdown">
+<link rel="next" href="thunar-vfs-ThunarVfsPath.html" title="ThunarVfsPath">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-Initialization-and-Shutdown.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-ThunarVfsPath.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-Basic-Types"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Basic Types</span></h2>
+<p>Basic Types &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileType">ThunarVfsFileType</a>;
+enum        <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileMode">ThunarVfsFileMode</a>;
+enum        <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileFlags">ThunarVfsFileFlags</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileDevice">ThunarVfsFileDevice</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileInode">ThunarVfsFileInode</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileSize">ThunarVfsFileSize</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsFileTime">ThunarVfsFileTime</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsGroupId">ThunarVfsGroupId</a>;
+typedef     <a href="thunar-vfs-Basic-Types.html#ThunarVfsUserId">ThunarVfsUserId</a>;
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2542830"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2542840"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2542845"></a><h3>
+<a name="ThunarVfsFileType"></a>enum ThunarVfsFileType</h3>
+<a class="indexterm" name="id2542854"></a><pre class="programlisting">typedef enum {
+  THUNAR_VFS_FILE_TYPE_SOCKET     = 0140000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_SYMLINK    = 0120000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_REGULAR    = 0100000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_BLOCKDEV   = 0060000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_DIRECTORY  = 0040000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_CHARDEV    = 0020000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_FIFO       = 0010000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_UNKNOWN    = 0000000 &gt;&gt; 12,
+} ThunarVfsFileType;
+</pre>
+<p>
+Describes the type of a file.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_SOCKET</code></span></td>
+<td> A unix domain socket.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_SYMLINK</code></span></td>
+<td> A broken symlink, for which the target does
+                                 not exist (if the target would exist, the
+                                 <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a> object would have the type
+                                 of the target).
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_REGULAR</code></span></td>
+<td> A regular file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_BLOCKDEV</code></span></td>
+<td> A block device node.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_DIRECTORY</code></span></td>
+<td> A directory node.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_CHARDEV</code></span></td>
+<td> A character device node.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_FIFO</code></span></td>
+<td> A named FIFO.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_TYPE_UNKNOWN</code></span></td>
+<td>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590438"></a><h3>
+<a name="ThunarVfsFileMode"></a>enum ThunarVfsFileMode</h3>
+<a class="indexterm" name="id2590446"></a><pre class="programlisting">typedef enum { /*&lt; flags &gt;*/
+  THUNAR_VFS_FILE_MODE_SUID       = 04000,
+  THUNAR_VFS_FILE_MODE_SGID       = 02000,
+  THUNAR_VFS_FILE_MODE_STICKY     = 01000,
+  THUNAR_VFS_FILE_MODE_USR_ALL    = 00700,
+  THUNAR_VFS_FILE_MODE_USR_READ   = 00400,
+  THUNAR_VFS_FILE_MODE_USR_WRITE  = 00200,
+  THUNAR_VFS_FILE_MODE_USR_EXEC   = 00100,
+  THUNAR_VFS_FILE_MODE_GRP_ALL    = 00070,
+  THUNAR_VFS_FILE_MODE_GRP_READ   = 00040,
+  THUNAR_VFS_FILE_MODE_GRP_WRITE  = 00020,
+  THUNAR_VFS_FILE_MODE_GRP_EXEC   = 00010,
+  THUNAR_VFS_FILE_MODE_OTH_ALL    = 00007,
+  THUNAR_VFS_FILE_MODE_OTH_READ   = 00004,
+  THUNAR_VFS_FILE_MODE_OTH_WRITE  = 00002,
+  THUNAR_VFS_FILE_MODE_OTH_EXEC   = 00001,
+} ThunarVfsFileMode;
+</pre>
+<p>
+Special flags and permissions of a filesystem entity.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_SUID</code></span></td>
+<td> SUID bit.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_SGID</code></span></td>
+<td> SGID bit.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_STICKY</code></span></td>
+<td> Sticky bit.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_USR_ALL</code></span></td>
+<td> Owner can do everything.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_USR_READ</code></span></td>
+<td> Owner can read the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_USR_WRITE</code></span></td>
+<td> Owner can write the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_USR_EXEC</code></span></td>
+<td> Owner can execute the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_GRP_ALL</code></span></td>
+<td> Owner group can do everything.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_GRP_READ</code></span></td>
+<td> Owner group can read the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_GRP_WRITE</code></span></td>
+<td> Owner group can write the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_GRP_EXEC</code></span></td>
+<td> Owner group can execute the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_OTH_ALL</code></span></td>
+<td> Others can do everything.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_OTH_READ</code></span></td>
+<td> Others can read the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_OTH_WRITE</code></span></td>
+<td> Others can write the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_MODE_OTH_EXEC</code></span></td>
+<td> Others can execute the file.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590681"></a><h3>
+<a name="ThunarVfsFileFlags"></a>enum ThunarVfsFileFlags</h3>
+<a class="indexterm" name="id2590690"></a><pre class="programlisting">typedef enum { /*&lt; flags &gt;*/
+  THUNAR_VFS_FILE_FLAGS_NONE       = 0,
+  THUNAR_VFS_FILE_FLAGS_SYMLINK    = 1L &lt;&lt; 0,
+  THUNAR_VFS_FILE_FLAGS_EXECUTABLE = 1L &lt;&lt; 1,
+} ThunarVfsFileFlags;
+</pre>
+<p>
+Flags providing additional information about the
+file system entity.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_FLAGS_NONE</code></span></td>
+<td> No additional information available.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_FLAGS_SYMLINK</code></span></td>
+<td> The file is a symlink. Whether or not
+                                    the info fields refer to the symlink
+                                    itself or the linked file, depends on 
+                                    whether the symlink is broken or not.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_FILE_FLAGS_EXECUTABLE</code></span></td>
+<td> The file can most probably be executed
+                                    by #<a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-execute"><code class="function">thunar_vfs_info_execute()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590763"></a><h3>
+<a name="ThunarVfsFileDevice"></a>ThunarVfsFileDevice</h3>
+<a class="indexterm" name="id2590772"></a><pre class="programlisting">typedef dev_t ThunarVfsFileDevice;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590790"></a><h3>
+<a name="ThunarVfsFileInode"></a>ThunarVfsFileInode</h3>
+<a class="indexterm" name="id2590798"></a><pre class="programlisting">typedef ino_t ThunarVfsFileInode;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590817"></a><h3>
+<a name="ThunarVfsFileSize"></a>ThunarVfsFileSize</h3>
+<a class="indexterm" name="id2590825"></a><pre class="programlisting">typedef off_t ThunarVfsFileSize;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590843"></a><h3>
+<a name="ThunarVfsFileTime"></a>ThunarVfsFileTime</h3>
+<a class="indexterm" name="id2590852"></a><pre class="programlisting">typedef time_t ThunarVfsFileTime;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590938"></a><h3>
+<a name="ThunarVfsGroupId"></a>ThunarVfsGroupId</h3>
+<a class="indexterm" name="id2590947"></a><pre class="programlisting">typedef gid_t ThunarVfsGroupId;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2590965"></a><h3>
+<a name="ThunarVfsUserId"></a>ThunarVfsUserId</h3>
+<a class="indexterm" name="id2590973"></a><pre class="programlisting">typedef uid_t ThunarVfsUserId;
+</pre>
+<p>
+</p>
+<p>
+
+</p>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-Initialization-and-Shutdown.html"><b>&lt;&lt;&#160;Initialization and Shutdown</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-ThunarVfsPath.html"><b>ThunarVfsPath&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Initialization-and-Shutdown.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Initialization-and-Shutdown.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Initialization-and-Shutdown.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,84 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Initialization and Shutdown</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="prev" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="next" href="thunar-vfs-Basic-Types.html" title="Basic Types">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="fundamentals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-Basic-Types.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-Initialization-and-Shutdown"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Initialization and Shutdown</span></h2>
+<p>Initialization and Shutdown &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+void        <a href="thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-init">thunar_vfs_init</a>                 (void);
+void        <a href="thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-shutdown">thunar_vfs_shutdown</a>             (void);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2542665"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2542675"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2542680"></a><h3>
+<a name="thunar-vfs-init"></a>thunar_vfs_init ()</h3>
+<a class="indexterm" name="id2542689"></a><pre class="programlisting">void        thunar_vfs_init                 (void);</pre>
+<p>
+Initializes the ThunarVFS library.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2542712"></a><h3>
+<a name="thunar-vfs-shutdown"></a>thunar_vfs_shutdown ()</h3>
+<a class="indexterm" name="id2542721"></a><pre class="programlisting">void        thunar_vfs_shutdown             (void);</pre>
+<p>
+Shuts down the ThunarVFS library.</p>
+<p>
+
+</p>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="fundamentals.html"><b>&lt;&lt;&#160;Part&#160;II.&#160;Fundamentals</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-Basic-Types.html"><b>Basic Types&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsInfo.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsInfo.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsInfo.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,395 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsInfo</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="prev" href="thunar-vfs-ThunarVfsPath.html" title="ThunarVfsPath">
+<link rel="next" href="thunar-vfs-Utility-Functions.html" title="Utility Functions">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-ThunarVfsPath.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-Utility-Functions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-ThunarVfsInfo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsInfo</span></h2>
+<p>ThunarVfsInfo &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a>;
+<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a>* <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-new-for-path">thunar_vfs_info_new_for_path</a> (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             GError **error);
+<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a>* <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-ref">thunar_vfs_info_ref</a>          (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);
+void        <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-unref">thunar_vfs_info_unref</a>           (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);
+gboolean    <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-execute">thunar_vfs_info_execute</a>         (const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             GError **error);
+gboolean    <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-rename">thunar_vfs_info_rename</a>          (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info,
+                                             const gchar *name,
+                                             GError **error);
+gboolean    <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-matches">thunar_vfs_info_matches</a>         (const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *a,
+                                             const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *b);
+void        <a href="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-list-free">thunar_vfs_info_list_free</a>       (GList *info_list);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2599136"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2599145"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2599150"></a><h3>
+<a name="ThunarVfsInfo"></a>ThunarVfsInfo</h3>
+<a class="indexterm" name="id2599159"></a><pre class="programlisting">typedef struct {
+  /* File type */
+  ThunarVfsFileType type;
+
+  /* File permissions and special mode flags */
+  ThunarVfsFileMode mode;
+
+  /* File flags */
+  ThunarVfsFileFlags flags;
+
+  /* Owner's user id */
+  ThunarVfsUserId uid;
+
+  /* Owner's group id */
+  ThunarVfsGroupId gid;
+
+  /* Size in bytes */
+  ThunarVfsFileSize size;
+
+  /* time of last access */
+  ThunarVfsFileTime atime;
+
+  /* time of last modification */
+  ThunarVfsFileTime mtime;
+
+  /* time of last status change */
+  ThunarVfsFileTime ctime;
+
+  /* inode id */
+  ThunarVfsFileInode inode;
+
+  /* device id */
+  ThunarVfsFileDevice device;
+
+  /* file's mime type */
+  ThunarVfsMimeInfo *mime_info;
+
+  /* file's absolute path */
+  ThunarVfsPath *path;
+
+  /* file's custom icon (path or themed icon name) */
+  gchar *custom_icon;
+
+  /* file's display name (UTF-8) */
+  gchar *display_name;
+} ThunarVfsInfo;
+</pre>
+<p>
+The <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a> structure provides information about a file system
+entity.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599184"></a><h3>
+<a name="thunar-vfs-info-new-for-path"></a>thunar_vfs_info_new_for_path ()</h3>
+<a class="indexterm" name="id2599192"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a>* thunar_vfs_info_new_for_path (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             GError **error);</pre>
+<p>
+Queries the <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a> for the given <em class="parameter"><code>path</code></em>. Returns the
+<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a> if the operation is successfull, else <code class="literal">NULL</code>.
+In the latter case, <em class="parameter"><code>error</code></em> will be set to point to a <span class="type">GError</span>
+describing the cause of the failure.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> of the file whose info should be queried.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a> for <em class="parameter"><code>path</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599333"></a><h3>
+<a name="thunar-vfs-info-ref"></a>thunar_vfs_info_ref ()</h3>
+<a class="indexterm" name="id2599341"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a>* thunar_vfs_info_ref          (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);</pre>
+<p>
+Increments the reference count on <em class="parameter"><code>info</code></em> by 1 and
+returns a pointer to <em class="parameter"><code>info</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a pointer to <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599419"></a><h3>
+<a name="thunar-vfs-info-unref"></a>thunar_vfs_info_unref ()</h3>
+<a class="indexterm" name="id2599428"></a><pre class="programlisting">void        thunar_vfs_info_unref           (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info);</pre>
+<p>
+Decrements the reference count on <em class="parameter"><code>info</code></em> by 1 and if
+the reference count drops to zero as a result of this
+operation, the <em class="parameter"><code>info</code></em> will be freed completely.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599491"></a><h3>
+<a name="thunar-vfs-info-execute"></a>thunar_vfs_info_execute ()</h3>
+<a class="indexterm" name="id2599499"></a><pre class="programlisting">gboolean    thunar_vfs_info_execute         (const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             GError **error);</pre>
+<p>
+Executes the file referred to by <em class="parameter"><code>info</code></em>, given <em class="parameter"><code>path_list</code></em> as parameters,
+on the specified <em class="parameter"><code>screen</code></em>. <em class="parameter"><code>info</code></em> may refer to either a regular,
+executable file, or a <code class="filename">.desktop</code> file, whose
+type is <code class="literal">Application</code>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>screen</code></em>&#160;:</span></td>
+<td> a <span class="type">GdkScreen</span> or <code class="literal">NULL</code> to use the default <span class="type">GdkScreen</span>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> the list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s to give as parameters
+             to the file referred to by <em class="parameter"><code>info</code></em> on execution.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> on success, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599768"></a><h3>
+<a name="thunar-vfs-info-rename"></a>thunar_vfs_info_rename ()</h3>
+<a class="indexterm" name="id2599777"></a><pre class="programlisting">gboolean    thunar_vfs_info_rename          (<a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *info,
+                                             const gchar *name,
+                                             GError **error);</pre>
+<p>
+Tries to rename the file referred to by <em class="parameter"><code>info</code></em> to the
+new <em class="parameter"><code>name</code></em>.
+</p>
+<p>
+The rename operation is smart in that it checks the
+type of <em class="parameter"><code>info</code></em> first, and if <em class="parameter"><code>info</code></em> refers to a
+<code class="filename">.desktop</code> file, the file name
+won't be touched, but instead the <code class="literal">Name</code>
+field of the <code class="filename">.desktop</code> will be
+changed to <em class="parameter"><code>name</code></em>. Else, if <em class="parameter"><code>info</code></em> refers to a regular
+file or directory, the file will be given a new
+name.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> the new file name in UTF-8 encoding.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> on success, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599947"></a><h3>
+<a name="thunar-vfs-info-matches"></a>thunar_vfs_info_matches ()</h3>
+<a class="indexterm" name="id2599956"></a><pre class="programlisting">gboolean    thunar_vfs_info_matches         (const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *a,
+                                             const <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo">ThunarVfsInfo</a> *b);</pre>
+<p>
+Checks whether <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> refer to the same file
+and share the same properties.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>a</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>b</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> match.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2600070"></a><h3>
+<a name="thunar-vfs-info-list-free"></a>thunar_vfs_info_list_free ()</h3>
+<a class="indexterm" name="id2600078"></a><pre class="programlisting">void        thunar_vfs_info_list_free       (GList *info_list);</pre>
+<p>
+Unrefs all <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>s in <em class="parameter"><code>info_list</code></em> and
+frees the list itself.
+</p>
+<p>
+This method always returns <code class="literal">NULL</code> for the convenience of
+being able to do:
+</p>
+<div class="informalexample"><pre class="programlisting">
+info_list = thunar_vfs_info_list_free (info_list);
+</pre></div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>info_list</code></em>&#160;:</span></td>
+<td> a list <a href="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"><span class="type">ThunarVfsInfo</span></a>s.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-ThunarVfsPath.html"><b>&lt;&lt;&#160;ThunarVfsPath</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-Utility-Functions.html"><b>Utility Functions&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeApplication.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeApplication.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeApplication.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,649 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsMimeApplication</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="prev" href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">
+<link rel="next" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsMimeDatabase.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="mime-types.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="users-and-groups-handling.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-ThunarVfsMimeApplication"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsMimeApplication</span></h2>
+<p>ThunarVfsMimeApplication &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+#define     <a href="thunar-vfs-ThunarVfsMimeApplication.html#THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS">THUNAR_VFS_MIME_APPLICATION_ERROR</a>
+enum        <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationError">ThunarVfsMimeApplicationError</a>;
+enum        <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</a>;
+            <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>;
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-desktop-id">thunar_vfs_mime_application_new_from_desktop_id</a>
+                                            (const gchar *desktop_id);
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-file">thunar_vfs_mime_application_new_from_file</a>
+                                            (const gchar *path,
+                                             const gchar *desktop_id);
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-ref">thunar_vfs_mime_application_ref</a>
+                                            (<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+void        <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref">thunar_vfs_mime_application_unref</a>
+                                            (<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-command">thunar_vfs_mime_application_get_command</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-desktop-id">thunar_vfs_mime_application_get_desktop_id</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</a> <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-flags">thunar_vfs_mime_application_get_flags</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-name">thunar_vfs_mime_application_get_name</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);
+gboolean    <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec">thunar_vfs_mime_application_exec</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             GError **error);
+gboolean    <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec-with-env">thunar_vfs_mime_application_exec_with_env</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             gchar **envp,
+                                             GError **error);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-lookup-icon-name">thunar_vfs_mime_application_lookup_icon_name</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GtkIconTheme *icon_theme);
+guint       <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-hash">thunar_vfs_mime_application_hash</a>
+                                            (gconstpointer application);
+gboolean    <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-equal">thunar_vfs_mime_application_equal</a>
+                                            (gconstpointer a,
+                                             gconstpointer b);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2613797"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2613806"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2613812"></a><h3>
+<a name="THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS"></a>THUNAR_VFS_MIME_APPLICATION_ERROR</h3>
+<a class="indexterm" name="id2613824"></a><pre class="programlisting">#define THUNAR_VFS_MIME_APPLICATION_ERROR (thunar_vfs_mime_application_error_quark ())
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2613838"></a><h3>
+<a name="ThunarVfsMimeApplicationError"></a>enum ThunarVfsMimeApplicationError</h3>
+<a class="indexterm" name="id2613848"></a><pre class="programlisting">typedef enum
+{
+  THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY,
+} ThunarVfsMimeApplicationError;
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2613862"></a><h3>
+<a name="ThunarVfsMimeApplicationFlags"></a>enum ThunarVfsMimeApplicationFlags</h3>
+<a class="indexterm" name="id2613872"></a><pre class="programlisting">typedef enum /*&lt; flags &gt;*/
+{
+  THUNAR_VFS_MIME_APPLICATION_HIDDEN                  = (1 &lt;&lt; 0L),
+  THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL       = (1 &lt;&lt; 1L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY = (1 &lt;&lt; 2L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI          = (1 &lt;&lt; 3L),
+} ThunarVfsMimeApplicationFlags;
+</pre>
+<p>
+Various flags associated with a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MIME_APPLICATION_HIDDEN</code></span></td>
+<td> the application should not be displayed in the menu system.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL</code></span></td>
+<td> the application must be run in a terminal.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY</code></span></td>
+<td> the application supports startup notification.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><code class="literal">THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI</code></span></td>
+<td> the application supports opening multiple documents at once (<code class="literal">F</code> or <code class="literal">U</code>).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2613975"></a><h3>
+<a name="ThunarVfsMimeApplication"></a>ThunarVfsMimeApplication</h3>
+<a class="indexterm" name="id2613984"></a><pre class="programlisting">typedef struct _ThunarVfsMimeApplication ThunarVfsMimeApplication;</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2613997"></a><h3>
+<a name="thunar-vfs-mime-application-new-from-desktop-id"></a>thunar_vfs_mime_application_new_from_desktop_id ()</h3>
+<a class="indexterm" name="id2614009"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* thunar_vfs_mime_application_new_from_desktop_id
+                                            (const gchar *desktop_id);</pre>
+<p>
+Generates a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> instance for the application
+referenced by <em class="parameter"><code>desktop_id</code></em>. Returns <code class="literal">NULL</code> if <em class="parameter"><code>desktop_id</code></em> is not valid.
+</p>
+<p>
+The caller is responsible to free the returned instance using
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref"><code class="function">thunar_vfs_mime_application_unref()</code></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>desktop_id</code></em>&#160;:</span></td>
+<td> the id of an application's .desktop file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> for <em class="parameter"><code>desktop_id</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614121"></a><h3>
+<a name="thunar-vfs-mime-application-new-from-file"></a>thunar_vfs_mime_application_new_from_file ()</h3>
+<a class="indexterm" name="id2614133"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* thunar_vfs_mime_application_new_from_file
+                                            (const gchar *path,
+                                             const gchar *desktop_id);</pre>
+<p>
+Generates a new <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> for the application
+described by <em class="parameter"><code>path</code></em> and <em class="parameter"><code>desktop_id</code></em>.
+</p>
+<p>
+The caller is responsible to free the returned instance using
+<a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref"><code class="function">thunar_vfs_mime_application_unref()</code></a>.
+</p>
+<p>
+You should really seldomly use this function and always
+prefer <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-desktop-id"><code class="function">thunar_vfs_mime_application_new_from_desktop_id()</code></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> the absolute path to the desktop file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>desktop_id</code></em>&#160;:</span></td>
+<td> the desktop-id of the file.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a> for <em class="parameter"><code>desktop_id</code></em>
+              or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614342"></a><h3>
+<a name="thunar-vfs-mime-application-ref"></a>thunar_vfs_mime_application_ref ()</h3>
+<a class="indexterm" name="id2614352"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a>* thunar_vfs_mime_application_ref
+                                            (<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Increases the reference count on <em class="parameter"><code>application</code></em> by one
+and returns the reference to <em class="parameter"><code>application</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a reference to <em class="parameter"><code>application</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614498"></a><h3>
+<a name="thunar-vfs-mime-application-unref"></a>thunar_vfs_mime_application_unref ()</h3>
+<a class="indexterm" name="id2614509"></a><pre class="programlisting">void        thunar_vfs_mime_application_unref
+                                            (<a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Decreases the reference count on <em class="parameter"><code>application</code></em> and frees
+the <em class="parameter"><code>application</code></em> object once the reference count drops
+to zero.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614573"></a><h3>
+<a name="thunar-vfs-mime-application-get-command"></a>thunar_vfs_mime_application_get_command ()</h3>
+<a class="indexterm" name="id2614585"></a><pre class="programlisting">const gchar* thunar_vfs_mime_application_get_command
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Returns the command line to run <em class="parameter"><code>application</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the command to run <em class="parameter"><code>application</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614659"></a><h3>
+<a name="thunar-vfs-mime-application-get-desktop-id"></a>thunar_vfs_mime_application_get_desktop_id ()</h3>
+<a class="indexterm" name="id2614670"></a><pre class="programlisting">const gchar* thunar_vfs_mime_application_get_desktop_id
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Returns the desktop-id of <em class="parameter"><code>application</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the desktop-id of <em class="parameter"><code>application</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614743"></a><h3>
+<a name="thunar-vfs-mime-application-get-flags"></a>thunar_vfs_mime_application_get_flags ()</h3>
+<a class="indexterm" name="id2614755"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</a> thunar_vfs_mime_application_get_flags
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Returns the flags for <em class="parameter"><code>application</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the flags for <em class="parameter"><code>application</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614826"></a><h3>
+<a name="thunar-vfs-mime-application-get-name"></a>thunar_vfs_mime_application_get_name ()</h3>
+<a class="indexterm" name="id2614838"></a><pre class="programlisting">const gchar* thunar_vfs_mime_application_get_name
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application);</pre>
+<p>
+Returns the generic name of <em class="parameter"><code>application</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the generic name of <em class="parameter"><code>application</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2614910"></a><h3>
+<a name="thunar-vfs-mime-application-exec"></a>thunar_vfs_mime_application_exec ()</h3>
+<a class="indexterm" name="id2614922"></a><pre class="programlisting">gboolean    thunar_vfs_mime_application_exec
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             GError **error);</pre>
+<p>
+Wrapper to <a href="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec-with-env"><code class="function">thunar_vfs_mime_application_exec_with_env()</code></a>, which
+simply passes a <code class="literal">NULL</code> pointer for the environment variables.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>screen</code></em>&#160;:</span></td>
+<td> a <span class="type">GdkScreen</span> or <code class="literal">NULL</code> to use the default screen.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s to open.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if the execution succeed, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2615163"></a><h3>
+<a name="thunar-vfs-mime-application-exec-with-env"></a>thunar_vfs_mime_application_exec_with_env ()</h3>
+<a class="indexterm" name="id2615175"></a><pre class="programlisting">gboolean    thunar_vfs_mime_application_exec_with_env
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GdkScreen *screen,
+                                             GList *path_list,
+                                             gchar **envp,
+                                             GError **error);</pre>
+<p>
+Executes <em class="parameter"><code>application</code></em> on <em class="parameter"><code>screen</code></em> using the given <em class="parameter"><code>path_list</code></em>. If
+<em class="parameter"><code>path_list</code></em> contains more than one <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> and <em class="parameter"><code>application</code></em>
+doesn't support opening multiple documents at once, one
+instance of <em class="parameter"><code>application</code></em> will be spawned for every <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>
+given in <em class="parameter"><code>path_list</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>screen</code></em>&#160;:</span></td>
+<td> a <span class="type">GdkScreen</span> or <code class="literal">NULL</code> to use the default screen.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s to open.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>envp</code></em>&#160;:</span></td>
+<td> child's environment or <code class="literal">NULL</code> to inherit parent's.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if the execution succeed, else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2615473"></a><h3>
+<a name="thunar-vfs-mime-application-lookup-icon-name"></a>thunar_vfs_mime_application_lookup_icon_name ()</h3>
+<a class="indexterm" name="id2615484"></a><pre class="programlisting">const gchar* thunar_vfs_mime_application_lookup_icon_name
+                                            (const <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication">ThunarVfsMimeApplication</a> *application,
+                                             GtkIconTheme *icon_theme);</pre>
+<p>
+Looks up the icon name for <em class="parameter"><code>application</code></em> in
+<em class="parameter"><code>icon_theme</code></em>. Returns <code class="literal">NULL</code> if no suitable
+icon is present in <em class="parameter"><code>icon_theme</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>icon_theme</code></em>&#160;:</span></td>
+<td> a <span class="type">GtkIconTheme</span>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the icon name for <em class="parameter"><code>application</code></em> or
+              <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2615605"></a><h3>
+<a name="thunar-vfs-mime-application-hash"></a>thunar_vfs_mime_application_hash ()</h3>
+<a class="indexterm" name="id2615617"></a><pre class="programlisting">guint       thunar_vfs_mime_application_hash
+                                            (gconstpointer application);</pre>
+<p>
+Converts <em class="parameter"><code>application</code></em> to a hash value. It can be passed
+to <code class="function">g_hash_table_new()</code> as the <em class="parameter"><code>hash_func</code></em> parameter,
+when using <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>s as keys
+in a <span class="type">GHashTable</span>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>application</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a hash value corresponding to the key.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2615713"></a><h3>
+<a name="thunar-vfs-mime-application-equal"></a>thunar_vfs_mime_application_equal ()</h3>
+<a class="indexterm" name="id2615724"></a><pre class="programlisting">gboolean    thunar_vfs_mime_application_equal
+                                            (gconstpointer a,
+                                             gconstpointer b);</pre>
+<p>
+Checks whether <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> refer to the same application.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>a</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>b</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"><span class="type">ThunarVfsMimeApplication</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> are equal.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsMimeDatabase.html"><b>&lt;&lt;&#160;ThunarVfsMimeDatabase</b></a></td>
+<td align="right"><a accesskey="n" href="users-and-groups-handling.html"><b>Part&#160;V.&#160;Users and Groups Handling&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeInfo.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeInfo.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsMimeInfo.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,455 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsMimeInfo</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="prev" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="next" href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="mime-types.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="mime-types.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsMimeDatabase.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-ThunarVfsMimeInfo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsMimeInfo</span></h2>
+<p>ThunarVfsMimeInfo &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>;
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-new">thunar_vfs_mime_info_new</a> (const gchar *name,
+                                             gssize len);
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-ref">thunar_vfs_mime_info_ref</a> (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+void        <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref">thunar_vfs_mime_info_unref</a>      (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-comment">thunar_vfs_mime_info_get_comment</a>
+                                            (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-name">thunar_vfs_mime_info_get_name</a>  (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+gchar*      <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-media">thunar_vfs_mime_info_get_media</a>  (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+gchar*      <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-subtype">thunar_vfs_mime_info_get_subtype</a>
+                                            (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);
+guint       <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-hash">thunar_vfs_mime_info_hash</a>       (gconstpointer info);
+gboolean    <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-equal">thunar_vfs_mime_info_equal</a>      (gconstpointer a,
+                                             gconstpointer b);
+const gchar* <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-lookup-icon-name">thunar_vfs_mime_info_lookup_icon_name</a>
+                                            (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             GtkIconTheme *icon_theme);
+void        <a href="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-list-free">thunar_vfs_mime_info_list_free</a>  (GList *info_list);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2605552"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2605561"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2605566"></a><h3>
+<a name="ThunarVfsMimeInfo"></a>ThunarVfsMimeInfo</h3>
+<a class="indexterm" name="id2605575"></a><pre class="programlisting">typedef struct {
+} ThunarVfsMimeInfo;
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2605590"></a><h3>
+<a name="thunar-vfs-mime-info-new"></a>thunar_vfs_mime_info_new ()</h3>
+<a class="indexterm" name="id2605598"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_info_new (const gchar *name,
+                                             gssize len);</pre>
+<p>
+Allocates a new <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> object with an
+initial reference count of one and sets it to the
+given <em class="parameter"><code>name</code></em>.
+</p>
+<p>
+Note that no checking is performed on the given <em class="parameter"><code>name</code></em>.
+You should not normally use this function, but use
+<a href="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info"><code class="function">thunar_vfs_mime_database_get_info()</code></a> instead.
+</p>
+<p>
+In addition, if you allocate <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>s
+using this function, you cannot mix them with the objects
+allocated in a <a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a>, because the
+<a href="ThunarVfsMimeDatabase.html" title="ThunarVfsMimeDatabase"><span class="type">ThunarVfsMimeDatabase</span></a> and associated functions assume
+that <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> objects are unique.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> the mime type name.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>len</code></em>&#160;:</span></td>
+<td> the length of <em class="parameter"><code>name</code></em> or <code class="literal">-1</code> if zero-terminated.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the newly allocated <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2605891"></a><h3>
+<a name="thunar-vfs-mime-info-ref"></a>thunar_vfs_mime_info_ref ()</h3>
+<a class="indexterm" name="id2605899"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a>* thunar_vfs_mime_info_ref (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Increments the reference count on <em class="parameter"><code>info</code></em> and returns
+the reference to <em class="parameter"><code>info</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a reference to <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2605976"></a><h3>
+<a name="thunar-vfs-mime-info-unref"></a>thunar_vfs_mime_info_unref ()</h3>
+<a class="indexterm" name="id2605985"></a><pre class="programlisting">void        thunar_vfs_mime_info_unref      (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Decrements the reference count on <em class="parameter"><code>info</code></em> and releases
+the resources allocated for <em class="parameter"><code>info</code></em> once the reference
+count drops to zero.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606050"></a><h3>
+<a name="thunar-vfs-mime-info-get-comment"></a>thunar_vfs_mime_info_get_comment ()</h3>
+<a class="indexterm" name="id2606061"></a><pre class="programlisting">const gchar* thunar_vfs_mime_info_get_comment
+                                            (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Determines the description for the given <em class="parameter"><code>info</code></em>.
+</p>
+<p>
+Note that this method MUST NOT be called from threads other than
+the main thread, because it's not thread-safe!</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the comment associated with the <em class="parameter"><code>info</code></em> or the empty string
+              if no comment was provided.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606140"></a><h3>
+<a name="thunar-vfs-mime-info-get-name"></a>thunar_vfs_mime_info_get_name ()</h3>
+<a class="indexterm" name="id2606150"></a><pre class="programlisting">const gchar* thunar_vfs_mime_info_get_name  (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Returns the full qualified name of the MIME type
+described by the <em class="parameter"><code>info</code></em> object.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the name of <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606222"></a><h3>
+<a name="thunar-vfs-mime-info-get-media"></a>thunar_vfs_mime_info_get_media ()</h3>
+<a class="indexterm" name="id2606232"></a><pre class="programlisting">gchar*      thunar_vfs_mime_info_get_media  (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Returns the media portion of the MIME type, e.g. if your
+<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a> instance refers to "text/plain", invoking
+this method will return "text".
+</p>
+<p>
+The caller is responsible to free the returned string
+using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the media portion of the MIME type.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606314"></a><h3>
+<a name="thunar-vfs-mime-info-get-subtype"></a>thunar_vfs_mime_info_get_subtype ()</h3>
+<a class="indexterm" name="id2606326"></a><pre class="programlisting">gchar*      thunar_vfs_mime_info_get_subtype
+                                            (const <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info);</pre>
+<p>
+Returns the subtype portion of the MIME type, e.g. if <em class="parameter"><code>info</code></em>
+refers to "application/octect-stream", this method will
+return "octect-stream".
+</p>
+<p>
+The caller is responsible to free the returned string
+using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the subtype portion of <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606480"></a><h3>
+<a name="thunar-vfs-mime-info-hash"></a>thunar_vfs_mime_info_hash ()</h3>
+<a class="indexterm" name="id2606488"></a><pre class="programlisting">guint       thunar_vfs_mime_info_hash       (gconstpointer info);</pre>
+<p>
+Calculates a hash value for <em class="parameter"><code>info</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a hash value for <em class="parameter"><code>info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606560"></a><h3>
+<a name="thunar-vfs-mime-info-equal"></a>thunar_vfs_mime_info_equal ()</h3>
+<a class="indexterm" name="id2606568"></a><pre class="programlisting">gboolean    thunar_vfs_mime_info_equal      (gconstpointer a,
+                                             gconstpointer b);</pre>
+<p>
+Compares <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> and returns <code class="literal">TRUE</code> if both
+are equal.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>a</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>b</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> are equal.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606686"></a><h3>
+<a name="thunar-vfs-mime-info-lookup-icon-name"></a>thunar_vfs_mime_info_lookup_icon_name ()</h3>
+<a class="indexterm" name="id2606698"></a><pre class="programlisting">const gchar* thunar_vfs_mime_info_lookup_icon_name
+                                            (<a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo">ThunarVfsMimeInfo</a> *info,
+                                             GtkIconTheme *icon_theme);</pre>
+<p>
+Tries to determine the name of a suitable icon for <em class="parameter"><code>info</code></em>
+in <em class="parameter"><code>icon_theme</code></em>. The returned icon name can then be used
+in calls to <code class="function">gtk_icon_theme_lookup_icon()</code> or
+<code class="function">gtk_icon_theme_load_icon()</code>.
+</p>
+<p>
+The returned icon name is owned by <em class="parameter"><code>info</code></em> and MUST NOT be freed
+by the caller.
+</p>
+<p>
+Note that this method MUST NOT be called from threads other than
+the main thread, because it's not thread-safe!</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>info</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>icon_theme</code></em>&#160;:</span></td>
+<td> the <span class="type">GtkIconTheme</span> on which to perform the lookup.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a suitable icon name for <em class="parameter"><code>info</code></em> in <em class="parameter"><code>icon_theme</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2606909"></a><h3>
+<a name="thunar-vfs-mime-info-list-free"></a>thunar_vfs_mime_info_list_free ()</h3>
+<a class="indexterm" name="id2606919"></a><pre class="programlisting">void        thunar_vfs_mime_info_list_free  (GList *info_list);</pre>
+<p>
+Frees the list and all <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>s
+contained within the list.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>info_list</code></em>&#160;:</span></td>
+<td> a <span class="type">GList</span> of <a href="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"><span class="type">ThunarVfsMimeInfo</span></a>s
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="mime-types.html"><b>&lt;&lt;&#160;Part&#160;IV.&#160;MIME Types</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsMimeDatabase.html"><b>ThunarVfsMimeDatabase&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsPath.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsPath.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-ThunarVfsPath.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,883 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarVfsPath</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="prev" href="thunar-vfs-Basic-Types.html" title="Basic Types">
+<link rel="next" href="thunar-vfs-ThunarVfsInfo.html" title="ThunarVfsInfo">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-Basic-Types.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="thunar-vfs-ThunarVfsInfo.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-ThunarVfsPath"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarVfsPath</span></h2>
+<p>ThunarVfsPath &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>;
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-new">thunar_vfs_path_new</a>          (const gchar *identifier,
+                                             GError **error);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-home">thunar_vfs_path_get_for_home</a> (void);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-root">thunar_vfs_path_get_for_root</a> (void);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-ref">thunar_vfs_path_ref</a>          (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+void        <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref">thunar_vfs_path_unref</a>           (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+guint       <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-hash">thunar_vfs_path_hash</a>            (gconstpointer path_ptr);
+gboolean    <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-equal">thunar_vfs_path_equal</a>           (gconstpointer path_ptr_a,
+                                             gconstpointer path_ptr_b);
+gboolean    <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-home">thunar_vfs_path_is_home</a>         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+gboolean    <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-root">thunar_vfs_path_is_root</a>         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-relative">thunar_vfs_path_relative</a>     (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *parent,
+                                             const gchar *name);
+const gchar* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-name">thunar_vfs_path_get_name</a>       (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-parent">thunar_vfs_path_get_parent</a>   (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+gchar*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-string">thunar_vfs_path_dup_string</a>      (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+gssize      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-string">thunar_vfs_path_to_string</a>       (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             gchar *buffer,
+                                             gsize bufsize,
+                                             GError **error);
+gchar*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-uri">thunar_vfs_path_dup_uri</a>         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+gssize      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-uri">thunar_vfs_path_to_uri</a>          (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             gchar *buffer,
+                                             gsize bufsize,
+                                             GError **error);
+GList*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-from-string">thunar_vfs_path_list_from_string</a>
+                                            (const gchar *uri_string,
+                                             GError **error);
+gchar*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-to-string">thunar_vfs_path_list_to_string</a>  (GList *path_list);
+GList*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-append">thunar_vfs_path_list_append</a>     (GList *path_list,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+GList*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-prepend">thunar_vfs_path_list_prepend</a>    (GList *path_list,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);
+GList*      <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-copy">thunar_vfs_path_list_copy</a>       (GList *path_list);
+void        <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-free">thunar_vfs_path_list_free</a>       (GList *path_list);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592530"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592539"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2592545"></a><h3>
+<a name="ThunarVfsPath"></a>ThunarVfsPath</h3>
+<a class="indexterm" name="id2592553"></a><pre class="programlisting">typedef struct {
+} ThunarVfsPath;
+</pre>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2592568"></a><h3>
+<a name="thunar-vfs-path-new"></a>thunar_vfs_path_new ()</h3>
+<a class="indexterm" name="id2592577"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_new          (const gchar *identifier,
+                                             GError **error);</pre>
+<p>
+Returns a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> that represents the given
+<em class="parameter"><code>identifier</code></em> or <code class="literal">NULL</code> on error. In the latter case
+<em class="parameter"><code>error</code></em> will be set to point to an <span class="type">GError</span> describing
+the problem.
+</p>
+<p>
+The caller is responsible to free the returned
+object using <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref"><code class="function">thunar_vfs_path_unref()</code></a> when no
+longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>identifier</code></em>&#160;:</span></td>
+<td> an URI identifier or an absolute path.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> for <em class="parameter"><code>identifier</code></em>
+              or <code class="literal">NULL</code> on error.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2592785"></a><h3>
+<a name="thunar-vfs-path-get-for-home"></a>thunar_vfs_path_get_for_home ()</h3>
+<a class="indexterm" name="id2592793"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_get_for_home (void);</pre>
+<p>
+Returns the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> that represents
+the current users home directory.
+</p>
+<p>
+The caller is responsible to free the
+returned object using <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref"><code class="function">thunar_vfs_path_unref()</code></a>
+when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> for the 
+              current users home directory.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2592857"></a><h3>
+<a name="thunar-vfs-path-get-for-root"></a>thunar_vfs_path_get_for_root ()</h3>
+<a class="indexterm" name="id2592866"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_get_for_root (void);</pre>
+<p>
+Returns the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> that represents the
+file systems root directory.
+</p>
+<p>
+The caller is responsible to free the returned
+object using <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref"><code class="function">thunar_vfs_path_unref()</code></a> when no
+longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> for the file
+              systems root directory.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2592930"></a><h3>
+<a name="thunar-vfs-path-ref"></a>thunar_vfs_path_ref ()</h3>
+<a class="indexterm" name="id2592938"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_ref          (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Increments the reference count on <em class="parameter"><code>path</code></em>
+and returns a reference to <em class="parameter"><code>path</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a reference to <em class="parameter"><code>path</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593016"></a><h3>
+<a name="thunar-vfs-path-unref"></a>thunar_vfs_path_unref ()</h3>
+<a class="indexterm" name="id2593025"></a><pre class="programlisting">void        thunar_vfs_path_unref           (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Decreases the reference count on <em class="parameter"><code>path</code></em> and
+frees the resources allocated for <em class="parameter"><code>path</code></em>
+once the reference count drops to zero.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593090"></a><h3>
+<a name="thunar-vfs-path-hash"></a>thunar_vfs_path_hash ()</h3>
+<a class="indexterm" name="id2593098"></a><pre class="programlisting">guint       thunar_vfs_path_hash            (gconstpointer path_ptr);</pre>
+<p>
+Generates a hash value for the given <em class="parameter"><code>path_ptr</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_ptr</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the hash value for <em class="parameter"><code>path_ptr</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593171"></a><h3>
+<a name="thunar-vfs-path-equal"></a>thunar_vfs_path_equal ()</h3>
+<a class="indexterm" name="id2593179"></a><pre class="programlisting">gboolean    thunar_vfs_path_equal           (gconstpointer path_ptr_a,
+                                             gconstpointer path_ptr_b);</pre>
+<p>
+Checks whether <em class="parameter"><code>path_ptr_a</code></em> and <em class="parameter"><code>path_ptr_b</code></em> refer
+to the same local path.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_ptr_a</code></em>&#160;:</span></td>
+<td> first <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_ptr_b</code></em>&#160;:</span></td>
+<td> second <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>path_ptr_a</code></em> and <em class="parameter"><code>path_ptr_b</code></em>
+              are equal.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593292"></a><h3>
+<a name="thunar-vfs-path-is-home"></a>thunar_vfs_path_is_home ()</h3>
+<a class="indexterm" name="id2593301"></a><pre class="programlisting">gboolean    thunar_vfs_path_is_home         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Checks whether <em class="parameter"><code>path</code></em> refers to the users home
+directory.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>path</code></em> refers to the users
+              home directory.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593380"></a><h3>
+<a name="thunar-vfs-path-is-root"></a>thunar_vfs_path_is_root ()</h3>
+<a class="indexterm" name="id2593388"></a><pre class="programlisting">gboolean    thunar_vfs_path_is_root         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Checks whether path refers to the root directory.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>path</code></em> refers to the root
+              directory.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593530"></a><h3>
+<a name="thunar-vfs-path-relative"></a>thunar_vfs_path_relative ()</h3>
+<a class="indexterm" name="id2593539"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_relative     (<a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *parent,
+                                             const gchar *name);</pre>
+<p>
+Returns a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> for the file <em class="parameter"><code>name</code></em> relative to
+<em class="parameter"><code>parent</code></em>. <em class="parameter"><code>name</code></em> must be a valid filename in the local file
+system encoding and it may not contain any slashes.
+</p>
+<p>
+The caller is responsible to free the returned object
+using <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref"><code class="function">thunar_vfs_path_unref()</code></a> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>parent</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>name</code></em>&#160;:</span></td>
+<td> a valid filename in the local file system encoding.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the path to <em class="parameter"><code>name</code></em> relative to <em class="parameter"><code>parent</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593734"></a><h3>
+<a name="thunar-vfs-path-get-name"></a>thunar_vfs_path_get_name ()</h3>
+<a class="indexterm" name="id2593742"></a><pre class="programlisting">const gchar* thunar_vfs_path_get_name       (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Returns the base name of the <em class="parameter"><code>path</code></em> in the local
+file system encoding.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the base name of <em class="parameter"><code>path</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593816"></a><h3>
+<a name="thunar-vfs-path-get-parent"></a>thunar_vfs_path_get_parent ()</h3>
+<a class="indexterm" name="id2593825"></a><pre class="programlisting"><a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a>* thunar_vfs_path_get_parent   (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Returns the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a> that refers to the parent
+directory of <em class="parameter"><code>path</code></em> or <code class="literal">NULL</code> if <em class="parameter"><code>path</code></em> refers to the
+root file system node.
+</p>
+<p>
+No additional reference is taken on the parent, so
+you'll need to call <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-ref"><code class="function">thunar_vfs_path_ref()</code></a> yourself
+if you need to keep a reference.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the parent of <em class="parameter"><code>path</code></em> or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593933"></a><h3>
+<a name="thunar-vfs-path-dup-string"></a>thunar_vfs_path_dup_string ()</h3>
+<a class="indexterm" name="id2593942"></a><pre class="programlisting">gchar*      thunar_vfs_path_dup_string      (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Like <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-string"><code class="function">thunar_vfs_path_to_string()</code></a>, this function transform
+the <em class="parameter"><code>path</code></em> to its string representation, but unlike
+<a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-string"><code class="function">thunar_vfs_path_to_string()</code></a>, this function automatically
+allocates the required amount of memory from the heap.
+The returned string must be freed by the caller when
+no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the string representation of <em class="parameter"><code>path</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594032"></a><h3>
+<a name="thunar-vfs-path-to-string"></a>thunar_vfs_path_to_string ()</h3>
+<a class="indexterm" name="id2594040"></a><pre class="programlisting">gssize      thunar_vfs_path_to_string       (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             gchar *buffer,
+                                             gsize bufsize,
+                                             GError **error);</pre>
+<p>
+Stores the <em class="parameter"><code>path</code></em> into the string pointed to by <em class="parameter"><code>buffer</code></em>,
+so it can be used for system path operations. Returns
+the number of bytes stored to <em class="parameter"><code>buffer</code></em> or a negative
+value if <em class="parameter"><code>bufsize</code></em> is too small to store the whole <em class="parameter"><code>path</code></em>.
+In the latter case <em class="parameter"><code>error</code></em> will be set to point to an
+error describing the problem.
+</p>
+<p>
+If <em class="parameter"><code>buffer</code></em> is allocated on the stack, it is suggested
+to use <span class="type">THUNAR_VFS_PATH_MAXSTRLEN</span> for the buffer size
+in most cases. The stack should never be used in recursive
+functions; use <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-string"><code class="function">thunar_vfs_path_dup_string()</code></a> instead there.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>buffer</code></em>&#160;:</span></td>
+<td> the buffer to store the path string to.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>bufsize</code></em>&#160;:</span></td>
+<td> the size of <em class="parameter"><code>buffer</code></em> in bytes.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the number of bytes (including the null
+              byte) stored to <em class="parameter"><code>buffer</code></em> or a negative
+              value if <em class="parameter"><code>buffer</code></em> cannot hold the whole
+              <em class="parameter"><code>path</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594247"></a><h3>
+<a name="thunar-vfs-path-dup-uri"></a>thunar_vfs_path_dup_uri ()</h3>
+<a class="indexterm" name="id2594256"></a><pre class="programlisting">gchar*      thunar_vfs_path_dup_uri         (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Similar to <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-uri"><code class="function">thunar_vfs_path_to_uri()</code></a>, but automatically
+allocates memory on the heap instead of using a user
+supplied buffer for the URI.
+</p>
+<p>
+The caller is responsible to free the returned string
+using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the escaped URI for <em class="parameter"><code>path</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594411"></a><h3>
+<a name="thunar-vfs-path-to-uri"></a>thunar_vfs_path_to_uri ()</h3>
+<a class="indexterm" name="id2594420"></a><pre class="programlisting">gssize      thunar_vfs_path_to_uri          (const <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path,
+                                             gchar *buffer,
+                                             gsize bufsize,
+                                             GError **error);</pre>
+<p>
+Escapes <em class="parameter"><code>path</code></em> according to the rules of the file URI
+specification and stores the escaped URI to <em class="parameter"><code>buffer</code></em>.
+Returns the number of bytes stored to <em class="parameter"><code>buffer</code></em> or a
+negative value if <em class="parameter"><code>bufsize</code></em> is too small to store the
+escaped URI. In the latter case <em class="parameter"><code>error</code></em> will be set to
+point to an <span class="type">GError</span> describing the problem.
+</p>
+<p>
+When using the stack for <em class="parameter"><code>buffer</code></em>, it is suggested to
+use <span class="type">THUNAR_VFS_PATH_MAXURILEN</span> for the buffer size in
+most cases. The stack should never be used in recursive
+functions; use <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-uri"><code class="function">thunar_vfs_path_dup_uri()</code></a> instead there.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>buffer</code></em>&#160;:</span></td>
+<td> the buffer to store the URI string to.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>bufsize</code></em>&#160;:</span></td>
+<td> the size of <em class="parameter"><code>buffer</code></em> in bytes.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the number of bytes (including the null
+              byte) stored to <em class="parameter"><code>buffer</code></em> or a negative
+              value if <em class="parameter"><code>buffer</code></em> cannot hold the URI.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594689"></a><h3>
+<a name="thunar-vfs-path-list-from-string"></a>thunar_vfs_path_list_from_string ()</h3>
+<a class="indexterm" name="id2594700"></a><pre class="programlisting">GList*      thunar_vfs_path_list_from_string
+                                            (const gchar *uri_string,
+                                             GError **error);</pre>
+<p>
+Splits an URI list conforming to the text/uri-list
+mime type defined in RFC 2483 into individual URIs,
+discarding any comments and whitespace.
+</p>
+<p>
+If all URIs were successfully parsed into <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>
+objects, the list of parsed URIs will be returned, and
+you'll need to call <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-free"><code class="function">thunar_vfs_path_list_free()</code></a> to
+release the list resources. Else if the parsing fails
+at some point, <code class="literal">NULL</code> will be returned and <em class="parameter"><code>error</code></em> will
+be set to describe the cause.
+</p>
+<p>
+Note, that if <em class="parameter"><code>string</code></em> contains no URIs, this function
+will also return <code class="literal">NULL</code>, but <em class="parameter"><code>error</code></em> won't be set. So
+take care when checking for an error condition!</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>uri_string</code></em>&#160;:</span></td>
+<td> a string representation of an URI list.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>error</code></em>&#160;:</span></td>
+<td> return location for errors.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>'s or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594838"></a><h3>
+<a name="thunar-vfs-path-list-to-string"></a>thunar_vfs_path_list_to_string ()</h3>
+<a class="indexterm" name="id2594848"></a><pre class="programlisting">gchar*      thunar_vfs_path_list_to_string  (GList *path_list);</pre>
+<p>
+Free the returned value using <code class="function">g_free()</code> when you
+are done with it.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the string representation of <em class="parameter"><code>path_list</code></em> conforming to the
+              text/uri-list mime type defined in RFC 2483.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594923"></a><h3>
+<a name="thunar-vfs-path-list-append"></a>thunar_vfs_path_list_append ()</h3>
+<a class="indexterm" name="id2594932"></a><pre class="programlisting">GList*      thunar_vfs_path_list_append     (GList *path_list,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Appends <em class="parameter"><code>path</code></em> to the <em class="parameter"><code>path_list</code></em> while taking
+an additional reference for <em class="parameter"><code>path</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> pointer to the extended <em class="parameter"><code>path_list</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2595042"></a><h3>
+<a name="thunar-vfs-path-list-prepend"></a>thunar_vfs_path_list_prepend ()</h3>
+<a class="indexterm" name="id2595050"></a><pre class="programlisting">GList*      thunar_vfs_path_list_prepend    (GList *path_list,
+                                             <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath">ThunarVfsPath</a> *path);</pre>
+<p>
+Similar to <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-append"><code class="function">thunar_vfs_path_list_append()</code></a>, but
+prepends the <em class="parameter"><code>path</code></em> to the <em class="parameter"><code>path_list</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path</code></em>&#160;:</span></td>
+<td> a <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> pointer to the extended <em class="parameter"><code>path_list</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2595162"></a><h3>
+<a name="thunar-vfs-path-list-copy"></a>thunar_vfs_path_list_copy ()</h3>
+<a class="indexterm" name="id2595171"></a><pre class="programlisting">GList*      thunar_vfs_path_list_copy       (GList *path_list);</pre>
+<p>
+Takes a deep copy of <em class="parameter"><code>path_list</code></em> and returns the
+result. The caller is responsible to free the
+returned list using <a href="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-free"><code class="function">thunar_vfs_path_list_free()</code></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a deep copy of <em class="parameter"><code>path_list</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2595320"></a><h3>
+<a name="thunar-vfs-path-list-free"></a>thunar_vfs_path_list_free ()</h3>
+<a class="indexterm" name="id2595329"></a><pre class="programlisting">void        thunar_vfs_path_list_free       (GList *path_list);</pre>
+<p>
+Frees the <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s in <em class="parameter"><code>path_list</code></em> and
+the <em class="parameter"><code>path_list</code></em> itself.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>path_list</code></em>&#160;:</span></td>
+<td> a list of <a href="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"><span class="type">ThunarVfsPath</span></a>s.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-Basic-Types.html"><b>&lt;&lt;&#160;Basic Types</b></a></td>
+<td align="right"><a accesskey="n" href="thunar-vfs-ThunarVfsInfo.html"><b>ThunarVfsInfo&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Utility-Functions.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Utility-Functions.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs-Utility-Functions.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,107 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Utility Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="prev" href="thunar-vfs-ThunarVfsInfo.html" title="ThunarVfsInfo">
+<link rel="next" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-ThunarVfsInfo.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="filesystem-monitoring.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunar-vfs-Utility-Functions"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Utility Functions</span></h2>
+<p>Utility Functions &#8212; </p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+gchar*      <a href="thunar-vfs-Utility-Functions.html#thunar-vfs-humanize-size">thunar_vfs_humanize_size</a>        (<a href="thunar-vfs-Basic-Types.html#ThunarVfsFileSize">ThunarVfsFileSize</a> size,
+                                             gchar *buffer,
+                                             gsize buflen);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2601587"></a><h2>Description</h2>
+<p>
+
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2601596"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2601602"></a><h3>
+<a name="thunar-vfs-humanize-size"></a>thunar_vfs_humanize_size ()</h3>
+<a class="indexterm" name="id2601610"></a><pre class="programlisting">gchar*      thunar_vfs_humanize_size        (<a href="thunar-vfs-Basic-Types.html#ThunarVfsFileSize">ThunarVfsFileSize</a> size,
+                                             gchar *buffer,
+                                             gsize buflen);</pre>
+<p>
+The caller is responsible to free the returned string using <code class="function">g_free()</code>
+if you pass <code class="literal">NULL</code> for <em class="parameter"><code>buffer</code></em>. Else the returned string will be a
+pointer to <em class="parameter"><code>buffer</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>size</code></em>&#160;:</span></td>
+<td> size in bytes.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>buffer</code></em>&#160;:</span></td>
+<td> destination buffer or <code class="literal">NULL</code> to dynamically allocate a buffer.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>buflen</code></em>&#160;:</span></td>
+<td> length of <em class="parameter"><code>buffer</code></em> in bytes.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a string containing a human readable description of <em class="parameter"><code>size</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-ThunarVfsInfo.html"><b>&lt;&lt;&#160;ThunarVfsInfo</b></a></td>
+<td align="right"><a accesskey="n" href="filesystem-monitoring.html"><b>Part&#160;III.&#160;Filesystem Monitoring&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs.devhelp
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs.devhelp	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/thunar-vfs.devhelp	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<book xmlns="http://www.devhelp.net/book" title="Thunar-VFS Reference Manual" link="index.html" author="Benedikt Meurer" name="thunar-vfs">
+  <chapters>
+    <sub name="Introduction" link="introduction.html"/>
+    <sub name="Fundamentals" link="fundamentals.html">
+      <sub name="Initialization and Shutdown" link="thunar-vfs-Initialization-and-Shutdown.html"/>
+      <sub name="Basic Types" link="thunar-vfs-Basic-Types.html"/>
+      <sub name="ThunarVfsPath" link="thunar-vfs-ThunarVfsPath.html"/>
+      <sub name="ThunarVfsInfo" link="thunar-vfs-ThunarVfsInfo.html"/>
+      <sub name="Utility Functions" link="thunar-vfs-Utility-Functions.html"/>
+    </sub>
+    <sub name="Filesystem Monitoring" link="filesystem-monitoring.html">
+      <sub name="ThunarVfsMonitor" link="ThunarVfsMonitor.html"/>
+    </sub>
+    <sub name="MIME Types" link="mime-types.html">
+      <sub name="ThunarVfsMimeInfo" link="thunar-vfs-ThunarVfsMimeInfo.html"/>
+      <sub name="ThunarVfsMimeDatabase" link="ThunarVfsMimeDatabase.html"/>
+      <sub name="ThunarVfsMimeApplication" link="thunar-vfs-ThunarVfsMimeApplication.html"/>
+    </sub>
+    <sub name="Users and Groups Handling" link="users-and-groups-handling.html">
+      <sub name="ThunarVfsUser" link="ThunarVfsUser.html"/>
+      <sub name="ThunarVfsGroup" link="ThunarVfsGroup.html"/>
+      <sub name="ThunarVfsUserManager" link="ThunarVfsUserManager.html"/>
+    </sub>
+    <sub name="Volume Handling" link="volume-handling.html">
+      <sub name="ThunarVfsVolume" link="ThunarVfsVolume.html"/>
+      <sub name="ThunarVfsVolumeManager" link="ThunarVfsVolumeManager.html"/>
+    </sub>
+    <sub name="Index" link="ix01.html"/>
+  </chapters>
+  <functions>
+    <function name="thunar_vfs_init ()" link="thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-init"/>
+    <function name="thunar_vfs_shutdown ()" link="thunar-vfs-Initialization-and-Shutdown.html#thunar-vfs-shutdown"/>
+    <function name="enum ThunarVfsFileType" link="thunar-vfs-Basic-Types.html#ThunarVfsFileType"/>
+    <function name="enum ThunarVfsFileMode" link="thunar-vfs-Basic-Types.html#ThunarVfsFileMode"/>
+    <function name="enum ThunarVfsFileFlags" link="thunar-vfs-Basic-Types.html#ThunarVfsFileFlags"/>
+    <function name="ThunarVfsFileDevice" link="thunar-vfs-Basic-Types.html#ThunarVfsFileDevice"/>
+    <function name="ThunarVfsFileInode" link="thunar-vfs-Basic-Types.html#ThunarVfsFileInode"/>
+    <function name="ThunarVfsFileSize" link="thunar-vfs-Basic-Types.html#ThunarVfsFileSize"/>
+    <function name="ThunarVfsFileTime" link="thunar-vfs-Basic-Types.html#ThunarVfsFileTime"/>
+    <function name="ThunarVfsGroupId" link="thunar-vfs-Basic-Types.html#ThunarVfsGroupId"/>
+    <function name="ThunarVfsUserId" link="thunar-vfs-Basic-Types.html#ThunarVfsUserId"/>
+    <function name="ThunarVfsPath" link="thunar-vfs-ThunarVfsPath.html#ThunarVfsPath"/>
+    <function name="thunar_vfs_path_new ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-new"/>
+    <function name="thunar_vfs_path_get_for_home ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-home"/>
+    <function name="thunar_vfs_path_get_for_root ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-for-root"/>
+    <function name="thunar_vfs_path_ref ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-ref"/>
+    <function name="thunar_vfs_path_unref ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-unref"/>
+    <function name="thunar_vfs_path_hash ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-hash"/>
+    <function name="thunar_vfs_path_equal ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-equal"/>
+    <function name="thunar_vfs_path_is_home ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-home"/>
+    <function name="thunar_vfs_path_is_root ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-is-root"/>
+    <function name="thunar_vfs_path_relative ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-relative"/>
+    <function name="thunar_vfs_path_get_name ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-name"/>
+    <function name="thunar_vfs_path_get_parent ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-get-parent"/>
+    <function name="thunar_vfs_path_dup_string ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-string"/>
+    <function name="thunar_vfs_path_to_string ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-string"/>
+    <function name="thunar_vfs_path_dup_uri ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-dup-uri"/>
+    <function name="thunar_vfs_path_to_uri ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-to-uri"/>
+    <function name="thunar_vfs_path_list_from_string ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-from-string"/>
+    <function name="thunar_vfs_path_list_to_string ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-to-string"/>
+    <function name="thunar_vfs_path_list_append ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-append"/>
+    <function name="thunar_vfs_path_list_prepend ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-prepend"/>
+    <function name="thunar_vfs_path_list_copy ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-copy"/>
+    <function name="thunar_vfs_path_list_free ()" link="thunar-vfs-ThunarVfsPath.html#thunar-vfs-path-list-free"/>
+    <function name="ThunarVfsInfo" link="thunar-vfs-ThunarVfsInfo.html#ThunarVfsInfo"/>
+    <function name="thunar_vfs_info_new_for_path ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-new-for-path"/>
+    <function name="thunar_vfs_info_ref ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-ref"/>
+    <function name="thunar_vfs_info_unref ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-unref"/>
+    <function name="thunar_vfs_info_execute ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-execute"/>
+    <function name="thunar_vfs_info_rename ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-rename"/>
+    <function name="thunar_vfs_info_matches ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-matches"/>
+    <function name="thunar_vfs_info_list_free ()" link="thunar-vfs-ThunarVfsInfo.html#thunar-vfs-info-list-free"/>
+    <function name="thunar_vfs_humanize_size ()" link="thunar-vfs-Utility-Functions.html#thunar-vfs-humanize-size"/>
+    <function name="ThunarVfsMonitor" link="ThunarVfsMonitor.html#ThunarVfsMonitor-struct"/>
+    <function name="enum ThunarVfsMonitorEvent" link="ThunarVfsMonitor.html#ThunarVfsMonitorEvent"/>
+    <function name="ThunarVfsMonitorHandle" link="ThunarVfsMonitor.html#ThunarVfsMonitorHandle"/>
+    <function name="ThunarVfsMonitorCallback ()" link="ThunarVfsMonitor.html#ThunarVfsMonitorCallback"/>
+    <function name="thunar_vfs_monitor_get_default ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-get-default"/>
+    <function name="thunar_vfs_monitor_add_directory ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-add-directory"/>
+    <function name="thunar_vfs_monitor_add_file ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-add-file"/>
+    <function name="thunar_vfs_monitor_remove ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-remove"/>
+    <function name="thunar_vfs_monitor_feed ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-feed"/>
+    <function name="thunar_vfs_monitor_wait ()" link="ThunarVfsMonitor.html#thunar-vfs-monitor-wait"/>
+    <function name="ThunarVfsMimeInfo" link="thunar-vfs-ThunarVfsMimeInfo.html#ThunarVfsMimeInfo"/>
+    <function name="thunar_vfs_mime_info_new ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-new"/>
+    <function name="thunar_vfs_mime_info_ref ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-ref"/>
+    <function name="thunar_vfs_mime_info_unref ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-unref"/>
+    <function name="thunar_vfs_mime_info_get_comment ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-comment"/>
+    <function name="thunar_vfs_mime_info_get_name ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-name"/>
+    <function name="thunar_vfs_mime_info_get_media ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-media"/>
+    <function name="thunar_vfs_mime_info_get_subtype ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-get-subtype"/>
+    <function name="thunar_vfs_mime_info_hash ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-hash"/>
+    <function name="thunar_vfs_mime_info_equal ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-equal"/>
+    <function name="thunar_vfs_mime_info_lookup_icon_name ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-lookup-icon-name"/>
+    <function name="thunar_vfs_mime_info_list_free ()" link="thunar-vfs-ThunarVfsMimeInfo.html#thunar-vfs-mime-info-list-free"/>
+    <function name="ThunarVfsMimeDatabase" link="ThunarVfsMimeDatabase.html#ThunarVfsMimeDatabase-struct"/>
+    <function name="thunar_vfs_mime_database_get_default ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default"/>
+    <function name="thunar_vfs_mime_database_get_info ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info"/>
+    <function name="thunar_vfs_mime_database_get_info_for_data ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-data"/>
+    <function name="thunar_vfs_mime_database_get_info_for_name ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-name"/>
+    <function name="thunar_vfs_mime_database_get_info_for_file ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-info-for-file"/>
+    <function name="thunar_vfs_mime_database_get_infos_for_info ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-infos-for-info"/>
+    <function name="thunar_vfs_mime_database_get_applications ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-applications"/>
+    <function name="thunar_vfs_mime_database_get_default_application ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-get-default-application"/>
+    <function name="thunar_vfs_mime_database_set_default_application ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-set-default-application"/>
+    <function name="thunar_vfs_mime_database_add_application ()" link="ThunarVfsMimeDatabase.html#thunar-vfs-mime-database-add-application"/>
+    <function name="THUNAR_VFS_MIME_APPLICATION_ERROR" link="thunar-vfs-ThunarVfsMimeApplication.html#THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS"/>
+    <function name="enum ThunarVfsMimeApplicationError" link="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationError"/>
+    <function name="enum ThunarVfsMimeApplicationFlags" link="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplicationFlags"/>
+    <function name="ThunarVfsMimeApplication" link="thunar-vfs-ThunarVfsMimeApplication.html#ThunarVfsMimeApplication"/>
+    <function name="thunar_vfs_mime_application_new_from_desktop_id ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-desktop-id"/>
+    <function name="thunar_vfs_mime_application_new_from_file ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-new-from-file"/>
+    <function name="thunar_vfs_mime_application_ref ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-ref"/>
+    <function name="thunar_vfs_mime_application_unref ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-unref"/>
+    <function name="thunar_vfs_mime_application_get_command ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-command"/>
+    <function name="thunar_vfs_mime_application_get_desktop_id ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-desktop-id"/>
+    <function name="thunar_vfs_mime_application_get_flags ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-flags"/>
+    <function name="thunar_vfs_mime_application_get_name ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-get-name"/>
+    <function name="thunar_vfs_mime_application_exec ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec"/>
+    <function name="thunar_vfs_mime_application_exec_with_env ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-exec-with-env"/>
+    <function name="thunar_vfs_mime_application_lookup_icon_name ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-lookup-icon-name"/>
+    <function name="thunar_vfs_mime_application_hash ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-hash"/>
+    <function name="thunar_vfs_mime_application_equal ()" link="thunar-vfs-ThunarVfsMimeApplication.html#thunar-vfs-mime-application-equal"/>
+    <function name="ThunarVfsUser" link="ThunarVfsUser.html#ThunarVfsUser-struct"/>
+    <function name="thunar_vfs_user_get_groups ()" link="ThunarVfsUser.html#thunar-vfs-user-get-groups"/>
+    <function name="thunar_vfs_user_get_primary_group ()" link="ThunarVfsUser.html#thunar-vfs-user-get-primary-group"/>
+    <function name="thunar_vfs_user_get_id ()" link="ThunarVfsUser.html#thunar-vfs-user-get-id"/>
+    <function name="thunar_vfs_user_get_name ()" link="ThunarVfsUser.html#thunar-vfs-user-get-name"/>
+    <function name="thunar_vfs_user_get_real_name ()" link="ThunarVfsUser.html#thunar-vfs-user-get-real-name"/>
+    <function name="thunar_vfs_user_is_me ()" link="ThunarVfsUser.html#thunar-vfs-user-is-me"/>
+    <function name="ThunarVfsGroup" link="ThunarVfsGroup.html#ThunarVfsGroup-struct"/>
+    <function name="thunar_vfs_group_get_id ()" link="ThunarVfsGroup.html#thunar-vfs-group-get-id"/>
+    <function name="thunar_vfs_group_get_name ()" link="ThunarVfsGroup.html#thunar-vfs-group-get-name"/>
+    <function name="ThunarVfsUserManager" link="ThunarVfsUserManager.html#ThunarVfsUserManager-struct"/>
+    <function name="thunar_vfs_user_manager_get_default ()" link="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-default"/>
+    <function name="thunar_vfs_user_manager_get_group_by_id ()" link="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-group-by-id"/>
+    <function name="thunar_vfs_user_manager_get_user_by_id ()" link="ThunarVfsUserManager.html#thunar-vfs-user-manager-get-user-by-id"/>
+    <function name="enum ThunarVfsVolumeKind" link="ThunarVfsVolume.html#ThunarVfsVolumeKind"/>
+    <function name="enum ThunarVfsVolumeStatus" link="ThunarVfsVolume.html#ThunarVfsVolumeStatus"/>
+    <function name="ThunarVfsVolumeIface" link="ThunarVfsVolume.html#ThunarVfsVolumeIface"/>
+    <function name="ThunarVfsVolume" link="ThunarVfsVolume.html#ThunarVfsVolume-struct"/>
+    <function name="thunar_vfs_volume_get_kind ()" link="ThunarVfsVolume.html#thunar-vfs-volume-get-kind"/>
+    <function name="thunar_vfs_volume_get_name ()" link="ThunarVfsVolume.html#thunar-vfs-volume-get-name"/>
+    <function name="thunar_vfs_volume_get_status ()" link="ThunarVfsVolume.html#thunar-vfs-volume-get-status"/>
+    <function name="thunar_vfs_volume_get_mount_point ()" link="ThunarVfsVolume.html#thunar-vfs-volume-get-mount-point"/>
+    <function name="thunar_vfs_volume_is_mounted ()" link="ThunarVfsVolume.html#thunar-vfs-volume-is-mounted"/>
+    <function name="thunar_vfs_volume_is_present ()" link="ThunarVfsVolume.html#thunar-vfs-volume-is-present"/>
+    <function name="thunar_vfs_volume_is_removable ()" link="ThunarVfsVolume.html#thunar-vfs-volume-is-removable"/>
+    <function name="thunar_vfs_volume_get_free_space ()" link="ThunarVfsVolume.html#thunar-vfs-volume-get-free-space"/>
+    <function name="thunar_vfs_volume_lookup_icon_name ()" link="ThunarVfsVolume.html#thunar-vfs-volume-lookup-icon-name"/>
+    <function name="thunar_vfs_volume_changed ()" link="ThunarVfsVolume.html#thunar-vfs-volume-changed"/>
+    <function name="ThunarVfsVolumeManagerIface" link="ThunarVfsVolumeManager.html#ThunarVfsVolumeManagerIface"/>
+    <function name="ThunarVfsVolumeManager" link="ThunarVfsVolumeManager.html#ThunarVfsVolumeManager-struct"/>
+    <function name="thunar_vfs_volume_manager_get_default ()" link="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-default"/>
+    <function name="thunar_vfs_volume_manager_get_volume_by_info ()" link="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volume-by-info"/>
+    <function name="thunar_vfs_volume_manager_get_volumes ()" link="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-get-volumes"/>
+    <function name="thunar_vfs_volume_manager_volumes_added ()" link="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-added"/>
+    <function name="thunar_vfs_volume_manager_volumes_removed ()" link="ThunarVfsVolumeManager.html#thunar-vfs-volume-manager-volumes-removed"/>
+  </functions>
+</book>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/up.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/up.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/users-and-groups-handling.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/users-and-groups-handling.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/users-and-groups-handling.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;V.&#160;Users and Groups Handling</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="thunar-vfs-ThunarVfsMimeApplication.html" title="ThunarVfsMimeApplication">
+<link rel="next" href="ThunarVfsUser.html" title="ThunarVfsUser">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunar-vfs-ThunarVfsMimeApplication.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsUser.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="users-and-groups-handling"></a>Users and Groups Handling</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunar-vfs-ThunarVfsMimeApplication.html"><b>&lt;&lt;&#160;ThunarVfsMimeApplication</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsUser.html"><b>ThunarVfsUser&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/volume-handling.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/volume-handling.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/html/volume-handling.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;VI.&#160;Volume Handling</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="up" href="index.html" title="Thunar-VFS Reference Manual">
+<link rel="prev" href="ThunarVfsUserManager.html" title="ThunarVfsUserManager">
+<link rel="next" href="ThunarVfsVolume.html" title="ThunarVfsVolume">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="introduction.html" title="Part&#160;I.&#160;Introduction">
+<link rel="part" href="fundamentals.html" title="Part&#160;II.&#160;Fundamentals">
+<link rel="part" href="filesystem-monitoring.html" title="Part&#160;III.&#160;Filesystem Monitoring">
+<link rel="part" href="mime-types.html" title="Part&#160;IV.&#160;MIME Types">
+<link rel="part" href="users-and-groups-handling.html" title="Part&#160;V.&#160;Users and Groups Handling">
+<link rel="part" href="volume-handling.html" title="Part&#160;VI.&#160;Volume Handling">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarVfsUserManager.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar-VFS Reference Manual</th>
+<td><a accesskey="n" href="ThunarVfsVolume.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="volume-handling"></a>Volume Handling</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarVfsUserManager.html"><b>&lt;&lt;&#160;ThunarVfsUserManager</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarVfsVolume.html"><b>ThunarVfsVolume&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-docs.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-docs.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-docs.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY thunar-vfs-group SYSTEM "xml/thunar-vfs-group.xml">
+<!ENTITY thunar-vfs-info SYSTEM "xml/thunar-vfs-info.xml">
+<!ENTITY thunar-vfs-init-shutdown SYSTEM "xml/thunar-vfs-init-shutdown.xml">
+<!ENTITY thunar-vfs-interactive-job SYSTEM "xml/thunar-vfs-interactive-job.xml">
+<!ENTITY thunar-vfs-job SYSTEM "xml/thunar-vfs-job.xml">
+<!ENTITY thunar-vfs-mime-application SYSTEM "xml/thunar-vfs-mime-application.xml">
+<!ENTITY thunar-vfs-mime-database SYSTEM "xml/thunar-vfs-mime-database.xml">
+<!ENTITY thunar-vfs-mime-info SYSTEM "xml/thunar-vfs-mime-info.xml">
+<!ENTITY thunar-vfs-monitor SYSTEM "xml/thunar-vfs-monitor.xml">
+<!ENTITY thunar-vfs-operations SYSTEM "xml/thunar-vfs-operations.xml">
+<!ENTITY thunar-vfs-types SYSTEM "xml/thunar-vfs-types.xml">
+<!ENTITY thunar-vfs-path SYSTEM "xml/thunar-vfs-path.xml">
+<!ENTITY thunar-vfs-user SYSTEM "xml/thunar-vfs-user.xml">
+<!ENTITY thunar-vfs-user-manager SYSTEM "xml/thunar-vfs-user-manager.xml">
+<!ENTITY thunar-vfs-util SYSTEM "xml/thunar-vfs-util.xml">
+<!ENTITY thunar-vfs-volume SYSTEM "xml/thunar-vfs-volume.xml">
+<!ENTITY thunar-vfs-volume-manager SYSTEM "xml/thunar-vfs-volume-manager.xml">
+
+<!ENTITY version SYSTEM "version.xml">
+<!ENTITY date "September 2005">
+]>
+
+<book id="index">
+  <bookinfo>
+    <title>Thunar-VFS Reference Manual</title>
+    <releaseinfo>Version &version;</releaseinfo>
+    <pubdate>&date;</pubdate>
+
+    <copyright>
+      <year>2005</year>
+      <holder>Benedikt Meurer</holder>
+    </copyright>
+
+    <legalnotice id="legalnotice">
+      <para>
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.1 or
+        any later version published by the Free Software Foundation; with no
+        Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+        Texts. The complete license text is available from the <ulink
+        type="http" url="http://www.gnu.org/">Free Software Foundation</ulink>.
+      </para>
+    </legalnotice>
+
+    <authorgroup>
+      <author>
+        <firstname>Benedikt</firstname>
+        <surname>Meurer</surname>
+        <affiliation>
+          <address><email>benny at xfce.org</email></address>
+          <orgname>os-cillation</orgname>
+          <orgdiv>System development</orgdiv>
+          <jobtitle>Software developer</jobtitle>
+        </affiliation>
+      </author>
+    </authorgroup>
+  </bookinfo>
+
+  <part id="introduction">
+    <title>Introduction</title>
+  </part>
+
+  <part id="fundamentals">
+    <title>Fundamentals</title>
+    &thunar-vfs-init-shutdown;
+    &thunar-vfs-types;
+    &thunar-vfs-path;
+    &thunar-vfs-info;
+    &thunar-vfs-util;
+  </part>
+
+  <part id="filesystem-monitoring">
+    <title>Filesystem Monitoring</title>
+    &thunar-vfs-monitor;
+  </part>
+
+  <part id="mime-types">
+    <title>MIME Types</title>
+    &thunar-vfs-mime-info;
+    &thunar-vfs-mime-database;
+    &thunar-vfs-mime-application;
+  </part>
+
+  <part id="users-and-groups-handling">
+    <title>Users and Groups Handling</title>
+    &thunar-vfs-user;
+    &thunar-vfs-group;
+    &thunar-vfs-user-manager;
+  </part>
+
+  <part id="volume-handling">
+    <title>Volume Handling</title>
+    &thunar-vfs-volume;
+    &thunar-vfs-volume-manager;
+  </part>
+
+  <index>
+    <title>Index</title>
+  </index>
+</book>
+
+<!--
+  vi:set ts=2 sw=2 et ai syntax=docbkxml:
+-->

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-overrides.txt
===================================================================

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-sections.txt
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-sections.txt	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs-sections.txt	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,390 @@
+<INCLUDE>thunar-vfs/thunar-vfs.h</INCLUDE>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-group</FILE>
+<TITLE>ThunarVfsGroup</TITLE>
+ThunarVfsGroup
+thunar_vfs_group_get_id
+thunar_vfs_group_get_name
+<SUBSECTION Standard>
+ThunarVfsGroupClass
+THUNAR_VFS_TYPE_GROUP
+THUNAR_VFS_GROUP
+THUNAR_VFS_GROUP_CLASS
+THUNAR_VFS_IS_GROUP
+THUNAR_VFS_IS_GROUP_CLASS
+THUNAR_VFS_GROUP_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_group_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-info</FILE>
+<TITLE>ThunarVfsInfo</TITLE>
+ThunarVfsInfo
+thunar_vfs_info_new_for_path
+thunar_vfs_info_ref
+thunar_vfs_info_unref
+thunar_vfs_info_execute
+thunar_vfs_info_rename
+thunar_vfs_info_matches
+thunar_vfs_info_list_free
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_INFO
+<SUBSECTION Private>
+thunar_vfs_info_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-init-shutdown</FILE>
+<TITLE>Initialization and Shutdown</TITLE>
+thunar_vfs_init
+thunar_vfs_shutdown
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-interactive-job</FILE>
+<TITLE>ThunarVfsInteractiveJob</TITLE>
+ThunarVfsInteractiveJobResponse
+ThunarVfsInteractiveJob
+<SUBSECTION Standard>
+ThunarVfsInteractiveJobClass
+THUNAR_VFS_TYPE_VFS_INTERACTIVE_JOB_RESPONSE
+THUNAR_VFS_TYPE_INTERACTIVE_JOB
+THUNAR_VFS_INTERACTIVE_JOB
+THUNAR_VFS_IS_INTERACTIVE_JOB
+THUNAR_VFS_IS_INTERACTIVE_JOB_CLASS
+THUNAR_VFS_INTERACTIVE_JOB_CLASS
+THUNAR_VFS_INTERACTIVE_JOB_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_interactive_job_response_get_type
+thunar_vfs_interactive_job_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-job</FILE>
+<TITLE>ThunarVfsJob</TITLE>
+ThunarVfsJob
+thunar_vfs_job_launch
+thunar_vfs_job_cancel
+thunar_vfs_job_cancelled
+thunar_vfs_job_emit_valist
+thunar_vfs_job_emit
+thunar_vfs_job_error
+<SUBSECTION Standard>
+ThunarVfsJobClass
+THUNAR_VFS_TYPE_JOB
+THUNAR_VFS_JOB
+THUNAR_VFS_JOB_CLASS
+THUNAR_VFS_IS_JOB
+THUNAR_VFS_IS_JOB_CLASS
+THUNAR_VFS_JOB_GET_CLASS
+<SUBSECTION Private>
+ThunarVfsJobPrivate
+thunar_vfs_job_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-mime-application</FILE>
+<TITLE>ThunarVfsMimeApplication</TITLE>
+THUNAR_VFS_MIME_APPLICATION_ERROR
+ThunarVfsMimeApplicationError
+ThunarVfsMimeApplicationFlags
+ThunarVfsMimeApplication
+thunar_vfs_mime_application_new_from_desktop_id
+thunar_vfs_mime_application_new_from_file
+thunar_vfs_mime_application_ref
+thunar_vfs_mime_application_unref
+thunar_vfs_mime_application_get_command
+thunar_vfs_mime_application_get_desktop_id
+thunar_vfs_mime_application_get_flags
+thunar_vfs_mime_application_get_name
+thunar_vfs_mime_application_exec
+thunar_vfs_mime_application_exec_with_env
+thunar_vfs_mime_application_lookup_icon_name
+thunar_vfs_mime_application_hash
+thunar_vfs_mime_application_equal
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_MIME_APPLICATION
+THUNAR_VFS_TYPE_VFS_MIME_APPLICATION_ERROR
+THUNAR_VFS_TYPE_VFS_MIME_APPLICATION_FLAGS
+<SUBSECTION Private>
+thunar_vfs_mime_application_get_type
+thunar_vfs_mime_application_error_quark
+thunar_vfs_mime_application_error_get_type
+thunar_vfs_mime_application_flags_get_type
+</SECTION>
+
+
+<SECTION>
+<FILE>thunar-vfs-mime-database</FILE>
+<TITLE>ThunarVfsMimeDatabase</TITLE>
+ThunarVfsMimeDatabase
+thunar_vfs_mime_database_get_default
+thunar_vfs_mime_database_get_info
+thunar_vfs_mime_database_get_info_for_data
+thunar_vfs_mime_database_get_info_for_name
+thunar_vfs_mime_database_get_info_for_file
+thunar_vfs_mime_database_get_infos_for_info
+thunar_vfs_mime_database_get_applications
+thunar_vfs_mime_database_get_default_application
+thunar_vfs_mime_database_set_default_application
+thunar_vfs_mime_database_add_application
+<SUBSECTION Standard>
+ThunarVfsMimeDatabaseClass
+THUNAR_VFS_TYPE_MIME_DATABASE
+THUNAR_VFS_MIME_DATABASE
+THUNAR_VFS_MIME_DATABASE_CLASS
+THUNAR_VFS_IS_MIME_DATABASE
+THUNAR_VFS_IS_MIME_DATABASE_CLASS
+THUNAR_VFS_MIME_DATABASE_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_mime_database_get_type
+</SECTION>
+
+
+<SECTION>
+<FILE>thunar-vfs-mime-info</FILE>
+<TITLE>ThunarVfsMimeInfo</TITLE>
+ThunarVfsMimeInfo
+thunar_vfs_mime_info_new
+thunar_vfs_mime_info_ref
+thunar_vfs_mime_info_unref
+thunar_vfs_mime_info_get_comment
+thunar_vfs_mime_info_get_name
+thunar_vfs_mime_info_get_media
+thunar_vfs_mime_info_get_subtype
+thunar_vfs_mime_info_hash
+thunar_vfs_mime_info_equal
+thunar_vfs_mime_info_lookup_icon_name
+thunar_vfs_mime_info_list_free
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_MIME_INFO
+<SUBSECTION Private>
+thunar_vfs_mime_info_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-monitor</FILE>
+<TITLE>ThunarVfsMonitor</TITLE>
+ThunarVfsMonitor
+ThunarVfsMonitorEvent
+ThunarVfsMonitorHandle
+ThunarVfsMonitorCallback
+thunar_vfs_monitor_get_default
+thunar_vfs_monitor_add_directory
+thunar_vfs_monitor_add_file
+thunar_vfs_monitor_remove
+thunar_vfs_monitor_feed
+thunar_vfs_monitor_wait
+<SUBSECTION Standard>
+ThunarVfsMonitorClass
+THUNAR_VFS_TYPE_VFS_MONITOR_EVENT
+THUNAR_VFS_TYPE_MONITOR
+THUNAR_VFS_MONITOR
+THUNAR_VFS_MONITOR_CLASS
+THUNAR_VFS_IS_MONITOR
+THUNAR_VFS_IS_MONITOR_CLASS
+THUNAR_VFS_MONITOR_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_monitor_event_get_type
+thunar_vfs_monitor_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-operations</FILE>
+<TITLE>Operations</TITLE>
+thunar_vfs_listdir
+thunar_vfs_copy_file
+thunar_vfs_copy_files
+thunar_vfs_link_file
+thunar_vfs_link_files
+thunar_vfs_move_file
+thunar_vfs_move_files
+thunar_vfs_unlink_file
+thunar_vfs_unlink_files
+thunar_vfs_make_directory
+thunar_vfs_make_directories
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-types</FILE>
+<TITLE>Basic Types</TITLE>
+ThunarVfsFileType
+ThunarVfsFileMode
+ThunarVfsFileFlags
+ThunarVfsFileDevice
+ThunarVfsFileInode
+ThunarVfsFileSize
+ThunarVfsFileTime
+ThunarVfsGroupId
+ThunarVfsUserId
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_VFS_FILE_TYPE
+THUNAR_VFS_TYPE_VFS_FILE_MODE
+THUNAR_VFS_TYPE_VFS_FILE_FLAGS
+<SUBSECTION Private>
+thunar_vfs_file_type_get_type
+thunar_vfs_file_mode_get_type
+thunar_vfs_file_flags_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-path</FILE>
+<TITLE>ThunarVfsPath</TITLE>
+ThunarVfsPath
+thunar_vfs_path_new
+thunar_vfs_path_get_for_home
+thunar_vfs_path_get_for_root
+thunar_vfs_path_ref
+thunar_vfs_path_unref
+thunar_vfs_path_hash
+thunar_vfs_path_equal
+thunar_vfs_path_is_home
+thunar_vfs_path_is_root
+thunar_vfs_path_relative
+thunar_vfs_path_get_name
+thunar_vfs_path_get_parent
+thunar_vfs_path_dup_string
+thunar_vfs_path_to_string
+thunar_vfs_path_dup_uri
+thunar_vfs_path_to_uri
+thunar_vfs_path_list_from_string
+thunar_vfs_path_list_to_string
+thunar_vfs_path_list_append
+thunar_vfs_path_list_prepend
+thunar_vfs_path_list_copy
+thunar_vfs_path_list_free
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_PATH
+<SUBSECTION Private>
+thunar_vfs_path_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-user</FILE>
+<TITLE>ThunarVfsUser</TITLE>
+ThunarVfsUser
+thunar_vfs_user_get_groups
+thunar_vfs_user_get_primary_group
+thunar_vfs_user_get_id
+thunar_vfs_user_get_name
+thunar_vfs_user_get_real_name
+thunar_vfs_user_is_me
+<SUBSECTION Standard>
+ThunarVfsUserClass
+THUNAR_VFS_TYPE_USER
+THUNAR_VFS_USER
+THUNAR_VFS_USER_CLASS
+THUNAR_VFS_IS_USER
+THUNAR_VFS_IS_USER_CLASS
+THUNAR_VFS_USER_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_user_get_type
+</SECTION>
+
+
+<SECTION>
+<FILE>thunar-vfs-user-manager</FILE>
+<TITLE>ThunarVfsUserManager</TITLE>
+ThunarVfsUserManager
+thunar_vfs_user_manager_get_default
+thunar_vfs_user_manager_get_group_by_id
+thunar_vfs_user_manager_get_user_by_id
+<SUBSECTION Standard>
+ThunarVfsUserManagerClass
+THUNAR_VFS_TYPE_USER_MANAGER
+THUNAR_VFS_USER_MANAGER
+THUNAR_VFS_USER_MANAGER_CLASS
+THUNAR_VFS_IS_USER_MANAGER
+THUNAR_VFS_IS_USER_MANAGER_CLASS
+THUNAR_VFS_USER_MANAGER_GET_CLASS
+<SUBSECTION Private>
+thunar_vfs_user_manager_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-util</FILE>
+<TITLE>Utility Functions</TITLE>
+thunar_vfs_humanize_size
+</SECTION>
+
+
+
+<SECTION>
+<FILE>thunar-vfs-volume</FILE>
+<TITLE>ThunarVfsVolume</TITLE>
+ThunarVfsVolumeKind
+ThunarVfsVolumeStatus
+ThunarVfsVolumeIface
+ThunarVfsVolume
+thunar_vfs_volume_get_kind
+thunar_vfs_volume_get_name
+thunar_vfs_volume_get_status
+thunar_vfs_volume_get_mount_point
+thunar_vfs_volume_is_mounted
+thunar_vfs_volume_is_present
+thunar_vfs_volume_is_removable
+thunar_vfs_volume_get_free_space
+thunar_vfs_volume_lookup_icon_name
+thunar_vfs_volume_changed
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_VFS_VOLUME_KIND
+THUNAR_VFS_TYPE_VFS_VOLUME_STATUS
+THUNAR_VFS_TYPE_VOLUME
+THUNAR_VFS_VOLUME
+THUNAR_VFS_IS_VOLUME
+THUNAR_VFS_VOLUME_GET_IFACE
+<SUBSECTION Private>
+thunar_vfs_volume_kind_get_type
+thunar_vfs_volume_status_get_type
+thunar_vfs_volume_get_type
+</SECTION>
+
+
+<SECTION>
+<FILE>thunar-vfs-volume-manager</FILE>
+<TITLE>ThunarVfsVolumeManager</TITLE>
+ThunarVfsVolumeManagerIface
+ThunarVfsVolumeManager
+thunar_vfs_volume_manager_get_default
+thunar_vfs_volume_manager_get_volume_by_info
+thunar_vfs_volume_manager_get_volumes
+thunar_vfs_volume_manager_volumes_added
+thunar_vfs_volume_manager_volumes_removed
+<SUBSECTION Standard>
+THUNAR_VFS_TYPE_VOLUME_MANAGER
+THUNAR_VFS_VOLUME_MANAGER
+THUNAR_VFS_IS_VOLUME_MANAGER
+THUNAR_VFS_VOLUME_MANAGER_GET_IFACE
+<SUBSECTION Private>
+thunar_vfs_volume_manager_get_type
+</SECTION>
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs.types
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs.types	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/thunar-vfs.types	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,16 @@
+#include <thunar-vfs/thunar-vfs.h>
+
+thunar_vfs_group_get_type
+thunar_vfs_info_get_type
+thunar_vfs_interactive_job_get_type
+thunar_vfs_job_get_type
+thunar_vfs_mime_application_get_type
+thunar_vfs_mime_database_get_type
+thunar_vfs_mime_info_get_type
+thunar_vfs_monitor_get_type
+thunar_vfs_path_get_type
+thunar_vfs_user_get_type
+thunar_vfs_user_manager_get_type
+thunar_vfs_volume_get_type
+thunar_vfs_volume_manager_get_type
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-group.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-group.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-group.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsGroup
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsGroup ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_group_get_id ##### -->
+<para>
+
+</para>
+
+ at group: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_group_get_name ##### -->
+<para>
+
+</para>
+
+ at group: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-info.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-info.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-info.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,110 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsInfo
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsInfo ##### -->
+<para>
+
+</para>
+
+ at type: 
+ at mode: 
+ at flags: 
+ at uid: 
+ at gid: 
+ at size: 
+ at atime: 
+ at mtime: 
+ at ctime: 
+ at inode: 
+ at device: 
+ at mime_info: 
+ at path: 
+ at custom_icon: 
+ at display_name: 
+
+<!-- ##### FUNCTION thunar_vfs_info_new_for_path ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_ref ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_unref ##### -->
+<para>
+
+</para>
+
+ at info: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_execute ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at screen: 
+ at path_list: 
+ at error: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uris: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_rename ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at name: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_matches ##### -->
+<para>
+
+</para>
+
+ at a: 
+ at b: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_info_list_free ##### -->
+<para>
+
+</para>
+
+ at info_list: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-init-shutdown.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-init-shutdown.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-init-shutdown.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,33 @@
+<!-- ##### SECTION Title ##### -->
+Initialization and Shutdown
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION thunar_vfs_init ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION thunar_vfs_shutdown ##### -->
+<para>
+
+</para>
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-interactive-job.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-interactive-job.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-interactive-job.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,69 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsInteractiveJob
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM ThunarVfsInteractiveJobResponse ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES: 
+ at THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL: 
+ at THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO: 
+ at THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL: 
+
+<!-- ##### STRUCT ThunarVfsInteractiveJob ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL ThunarVfsInteractiveJob::ask ##### -->
+<para>
+
+</para>
+
+ at thunarvfsinteractivejob: the object which received the signal.
+ at arg1: 
+ at arg2: 
+ at Returns: 
+
+<!-- ##### SIGNAL ThunarVfsInteractiveJob::info-message ##### -->
+<para>
+
+</para>
+
+ at thunarvfsinteractivejob: the object which received the signal.
+ at arg1: 
+
+<!-- ##### SIGNAL ThunarVfsInteractiveJob::new-files ##### -->
+<para>
+
+</para>
+
+ at thunarvfsinteractivejob: the object which received the signal.
+ at arg1: 
+
+<!-- ##### SIGNAL ThunarVfsInteractiveJob::percent ##### -->
+<para>
+
+</para>
+
+ at thunarvfsinteractivejob: the object which received the signal.
+ at arg1: 
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-job.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-job.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-job.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,97 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsJob
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsJob ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL ThunarVfsJob::error ##### -->
+<para>
+
+</para>
+
+ at thunarvfsjob: the object which received the signal.
+ at arg1: 
+
+<!-- ##### SIGNAL ThunarVfsJob::finished ##### -->
+<para>
+
+</para>
+
+ at thunarvfsjob: the object which received the signal.
+
+<!-- ##### FUNCTION thunar_vfs_job_launch ##### -->
+<para>
+
+</para>
+
+ at job: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_job_cancel ##### -->
+<para>
+
+</para>
+
+ at job: 
+
+
+<!-- ##### FUNCTION thunar_vfs_job_cancelled ##### -->
+<para>
+
+</para>
+
+ at job: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_job_emit_valist ##### -->
+<para>
+
+</para>
+
+ at job: 
+ at signal_id: 
+ at signal_detail: 
+ at var_args: 
+
+
+<!-- ##### FUNCTION thunar_vfs_job_emit ##### -->
+<para>
+
+</para>
+
+ at job: 
+ at signal_id: 
+ at signal_detail: 
+ at Varargs: 
+
+
+<!-- ##### FUNCTION thunar_vfs_job_error ##### -->
+<para>
+
+</para>
+
+ at job: 
+ at error: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-application.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-application.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-application.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,179 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsMimeApplication
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO THUNAR_VFS_MIME_APPLICATION_ERROR ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### ENUM ThunarVfsMimeApplicationError ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY: 
+
+<!-- ##### ENUM ThunarVfsMimeApplicationFlags ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_MIME_APPLICATION_HIDDEN: 
+ at THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL: 
+ at THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY: 
+ at THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI: 
+
+<!-- ##### STRUCT ThunarVfsMimeApplication ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_new_from_desktop_id ##### -->
+<para>
+
+</para>
+
+ at desktop_id: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_new_from_file ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at desktop_id: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_ref ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_unref ##### -->
+<para>
+
+</para>
+
+ at application: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_get_command ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_get_desktop_id ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_get_flags ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_get_name ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_exec ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at screen: 
+ at path_list: 
+ at error: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uris: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_exec_with_env ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at screen: 
+ at path_list: 
+ at envp: 
+ at error: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uris: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_lookup_icon_name ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at icon_theme: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_hash ##### -->
+<para>
+
+</para>
+
+ at application: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_application_equal ##### -->
+<para>
+
+</para>
+
+ at a: 
+ at b: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-database.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-database.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-database.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,130 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsMimeDatabase
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsMimeDatabase ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_info ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at mime_type: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_info_for_data ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at data: 
+ at length: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_info_for_name ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at name: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_info_for_file ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at path: 
+ at name: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_infos_for_info ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_applications ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_get_default_application ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_set_default_application ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at info: 
+ at application: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_database_add_application ##### -->
+<para>
+
+</para>
+
+ at database: 
+ at info: 
+ at name: 
+ at exec: 
+ at error: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-info.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-info.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-mime-info.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,125 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsMimeInfo
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsMimeInfo ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_new ##### -->
+<para>
+
+</para>
+
+ at name: 
+ at len: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_ref ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_unref ##### -->
+<para>
+
+</para>
+
+ at info: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_get_comment ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_get_name ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_get_media ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_get_subtype ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_hash ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_equal ##### -->
+<para>
+
+</para>
+
+ at a: 
+ at b: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_lookup_icon_name ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at icon_theme: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_mime_info_list_free ##### -->
+<para>
+
+</para>
+
+ at info_list: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-monitor.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-monitor.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-monitor.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,121 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsMonitor
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsMonitor ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM ThunarVfsMonitorEvent ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_MONITOR_EVENT_CHANGED: 
+ at THUNAR_VFS_MONITOR_EVENT_CREATED: 
+ at THUNAR_VFS_MONITOR_EVENT_DELETED: 
+
+<!-- ##### STRUCT ThunarVfsMonitorHandle ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### USER_FUNCTION ThunarVfsMonitorCallback ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+ at handle: 
+ at event: 
+ at handle_path: 
+ at event_path: 
+ at user_data: 
+<!-- # Unused Parameters # -->
+ at handle_uri: 
+ at event_uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_add_directory ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+ at path: 
+ at callback: 
+ at user_data: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_add_file ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+ at path: 
+ at callback: 
+ at user_data: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_remove ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+ at handle: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_feed ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+ at event: 
+ at path: 
+<!-- # Unused Parameters # -->
+ at uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_monitor_wait ##### -->
+<para>
+
+</para>
+
+ at monitor: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-operations.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-operations.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-operations.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,137 @@
+<!-- ##### SECTION Title ##### -->
+Operations
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION thunar_vfs_listdir ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at error: 
+ at Returns: 
+<!-- # Unused Parameters # -->
+ at uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_copy_file ##### -->
+<para>
+
+</para>
+
+ at source_path: 
+ at target_path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_copy_files ##### -->
+<para>
+
+</para>
+
+ at source_path_list: 
+ at target_path_list: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_link_file ##### -->
+<para>
+
+</para>
+
+ at source_path: 
+ at target_path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_link_files ##### -->
+<para>
+
+</para>
+
+ at source_path_list: 
+ at target_path_list: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_move_file ##### -->
+<para>
+
+</para>
+
+ at source_path: 
+ at target_path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_move_files ##### -->
+<para>
+
+</para>
+
+ at source_path_list: 
+ at target_path_list: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_unlink_file ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_unlink_files ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_make_directory ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_make_directories ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at error: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-path.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-path.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-path.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,231 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsPath
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsPath ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_path_new ##### -->
+<para>
+
+</para>
+
+ at identifier: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_get_for_home ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_get_for_root ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_ref ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_unref ##### -->
+<para>
+
+</para>
+
+ at path: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_hash ##### -->
+<para>
+
+</para>
+
+ at path_ptr: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_equal ##### -->
+<para>
+
+</para>
+
+ at path_ptr_a: 
+ at path_ptr_b: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_is_home ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_is_root ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_relative ##### -->
+<para>
+
+</para>
+
+ at parent: 
+ at name: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_get_name ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_get_parent ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_dup_string ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_to_string ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at buffer: 
+ at bufsize: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_dup_uri ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_to_uri ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at buffer: 
+ at bufsize: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_from_string ##### -->
+<para>
+
+</para>
+
+ at uri_string: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_to_string ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_append ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_prepend ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_copy ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_path_list_free ##### -->
+<para>
+
+</para>
+
+ at path_list: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb-factory.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb-factory.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb-factory.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,97 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsThumbFactory
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsThumbFactory ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsThumbFactory:size ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_new ##### -->
+<para>
+
+</para>
+
+ at size: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_lookup_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_can_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mime_info: 
+ at mtime: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_has_failed_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_generate_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mime_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_store_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at pixbuf: 
+ at uri: 
+ at mtime: 
+ at error: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-thumb.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+<!-- ##### SECTION Title ##### -->
+Thumbnail Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM ThunarVfsThumbSize ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_THUMB_SIZE_NORMAL: 
+ at THUNAR_VFS_THUMB_SIZE_LARGE: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_path_for_uri ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at size: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_thumb_path_is_valid ##### -->
+<para>
+
+</para>
+
+ at thumb_path: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-info.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-info.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-info.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,60 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsTrashInfo
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsTrashInfo ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_copy ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_free ##### -->
+<para>
+
+</para>
+
+ at info: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_get_path ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_get_deletion_date ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-manager.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-manager.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash-manager.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,68 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsTrashManager
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsTrashManager ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsTrashManager:empty ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_is_empty ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_get_trashes ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_resolve_uri ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at uri: 
+ at path: 
+ at error: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-trash.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,88 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsTrash
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsTrash ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsTrash:files ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_id ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_files ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_info ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_info_path ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_uri ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_path ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-types.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-types.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-types.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,99 @@
+<!-- ##### SECTION Title ##### -->
+Basic Types
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM ThunarVfsFileType ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_FILE_TYPE_SOCKET: 
+ at THUNAR_VFS_FILE_TYPE_SYMLINK: 
+ at THUNAR_VFS_FILE_TYPE_REGULAR: 
+ at THUNAR_VFS_FILE_TYPE_BLOCKDEV: 
+ at THUNAR_VFS_FILE_TYPE_DIRECTORY: 
+ at THUNAR_VFS_FILE_TYPE_CHARDEV: 
+ at THUNAR_VFS_FILE_TYPE_FIFO: 
+ at THUNAR_VFS_FILE_TYPE_UNKNOWN: 
+
+<!-- ##### ENUM ThunarVfsFileMode ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_FILE_MODE_SUID: 
+ at THUNAR_VFS_FILE_MODE_SGID: 
+ at THUNAR_VFS_FILE_MODE_STICKY: 
+ at THUNAR_VFS_FILE_MODE_USR_ALL: 
+ at THUNAR_VFS_FILE_MODE_USR_READ: 
+ at THUNAR_VFS_FILE_MODE_USR_WRITE: 
+ at THUNAR_VFS_FILE_MODE_USR_EXEC: 
+ at THUNAR_VFS_FILE_MODE_GRP_ALL: 
+ at THUNAR_VFS_FILE_MODE_GRP_READ: 
+ at THUNAR_VFS_FILE_MODE_GRP_WRITE: 
+ at THUNAR_VFS_FILE_MODE_GRP_EXEC: 
+ at THUNAR_VFS_FILE_MODE_OTH_ALL: 
+ at THUNAR_VFS_FILE_MODE_OTH_READ: 
+ at THUNAR_VFS_FILE_MODE_OTH_WRITE: 
+ at THUNAR_VFS_FILE_MODE_OTH_EXEC: 
+
+<!-- ##### ENUM ThunarVfsFileFlags ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_FILE_FLAGS_NONE: 
+ at THUNAR_VFS_FILE_FLAGS_SYMLINK: 
+ at THUNAR_VFS_FILE_FLAGS_EXECUTABLE: 
+
+<!-- ##### TYPEDEF ThunarVfsFileDevice ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ThunarVfsFileInode ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ThunarVfsFileSize ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ThunarVfsFileTime ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ThunarVfsGroupId ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ThunarVfsUserId ##### -->
+<para>
+
+</para>
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-unused.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-unused.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-unused.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,584 @@
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb-factory.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb-factory.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb-factory.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb-factory.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb-factory.sgml:Title ##### -->
+ThunarVfsThumbFactory
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-thumb.sgml:Title ##### -->
+Thumbnail Functions
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-info.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-info.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-info.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-info.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-info.sgml:Title ##### -->
+ThunarVfsTrashInfo
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-manager.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-manager.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-manager.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-manager.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash-manager.sgml:Title ##### -->
+ThunarVfsTrashManager
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-trash.sgml:Title ##### -->
+ThunarVfsTrash
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-uri.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-uri.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-uri.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-uri.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/thunar-vfs-uri.sgml:Title ##### -->
+ThunarVfsURI
+
+
+<!-- ##### STRUCT ThunarVfsThumbFactory ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsThumbFactory:size ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM ThunarVfsThumbSize ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_THUMB_SIZE_NORMAL: 
+ at THUNAR_VFS_THUMB_SIZE_LARGE: 
+
+<!-- ##### STRUCT ThunarVfsTrash ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsTrash:files ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT ThunarVfsTrashInfo ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT ThunarVfsTrashManager ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG ThunarVfsTrashManager:empty ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT ThunarVfsURI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM ThunarVfsURIScheme ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_URI_SCHEME_COMPUTER: 
+ at THUNAR_VFS_URI_SCHEME_FILE: 
+ at THUNAR_VFS_URI_SCHEME_TRASH: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_can_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mime_info: 
+ at mtime: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_generate_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mime_info: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_has_failed_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_lookup_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_new ##### -->
+<para>
+
+</para>
+
+ at size: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_factory_store_thumbnail ##### -->
+<para>
+
+</para>
+
+ at factory: 
+ at pixbuf: 
+ at uri: 
+ at mtime: 
+ at error: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_path_for_uri ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at size: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_thumb_path_is_valid ##### -->
+<para>
+
+</para>
+
+ at thumb_path: 
+ at uri: 
+ at mtime: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_files ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_id ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_info ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_info_path ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_path ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_get_uri ##### -->
+<para>
+
+</para>
+
+ at trash: 
+ at file: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_copy ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_free ##### -->
+<para>
+
+</para>
+
+ at info: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_get_deletion_date ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_info_get_path ##### -->
+<para>
+
+</para>
+
+ at info: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_get_trashes ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_is_empty ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_trash_manager_resolve_uri ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at uri: 
+ at path: 
+ at error: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_equal ##### -->
+<para>
+
+</para>
+
+ at a: 
+ at b: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_display_name ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_md5sum ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_name ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_path ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_scheme ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_hash ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_is_home ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_is_root ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### MACRO thunar_vfs_uri_list_append ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at uri: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_copy ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_free ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_from_string ##### -->
+<para>
+
+</para>
+
+ at string: 
+ at error: 
+ at Returns: 
+
+<!-- ##### MACRO thunar_vfs_uri_list_prepend ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at uri: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_to_string ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_new ##### -->
+<para>
+
+</para>
+
+ at identifier: 
+ at error: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_new_for_path ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_parent ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_ref ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_relative ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at name: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_to_string ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_unref ##### -->
+<para>
+
+</para>
+
+ at uri: 
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-uri.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-uri.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-uri.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,234 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsURI
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsURI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM ThunarVfsURIScheme ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_URI_SCHEME_COMPUTER: 
+ at THUNAR_VFS_URI_SCHEME_FILE: 
+ at THUNAR_VFS_URI_SCHEME_TRASH: 
+
+<!-- ##### FUNCTION thunar_vfs_uri_new ##### -->
+<para>
+
+</para>
+
+ at identifier: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_new_for_path ##### -->
+<para>
+
+</para>
+
+ at path: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_ref ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_unref ##### -->
+<para>
+
+</para>
+
+ at uri: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_is_home ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_is_root ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_display_name ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_md5sum ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_name ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_path ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_get_scheme ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_parent ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_relative ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at name: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_to_string ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_hash ##### -->
+<para>
+
+</para>
+
+ at uri: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_equal ##### -->
+<para>
+
+</para>
+
+ at a: 
+ at b: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_from_string ##### -->
+<para>
+
+</para>
+
+ at string: 
+ at error: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_to_string ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_copy ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_uri_list_free ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+
+
+<!-- ##### MACRO thunar_vfs_uri_list_append ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at uri: 
+
+
+<!-- ##### MACRO thunar_vfs_uri_list_prepend ##### -->
+<para>
+
+</para>
+
+ at uri_list: 
+ at uri: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user-manager.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user-manager.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user-manager.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,53 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsUserManager
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsUserManager ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_user_manager_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_manager_get_group_by_id ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at id: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_manager_get_user_by_id ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at id: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-user.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,79 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsUser
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsUser ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_user_get_groups ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_get_primary_group ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_get_id ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_get_name ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_get_real_name ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_user_is_me ##### -->
+<para>
+
+</para>
+
+ at user: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-util.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-util.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-util.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,30 @@
+<!-- ##### SECTION Title ##### -->
+Utility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION thunar_vfs_humanize_size ##### -->
+<para>
+
+</para>
+
+ at size: 
+ at buffer: 
+ at buflen: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume-manager.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume-manager.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume-manager.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,81 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsVolumeManager
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT ThunarVfsVolumeManagerIface ##### -->
+<para>
+
+</para>
+
+ at __parent__: 
+ at get_volume_by_info: 
+ at get_volumes: 
+ at volumes_added: 
+ at volumes_removed: 
+
+<!-- ##### STRUCT ThunarVfsVolumeManager ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_manager_get_default ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_manager_get_volume_by_info ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_manager_get_volumes ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_manager_volumes_added ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at volumes: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_manager_volumes_removed ##### -->
+<para>
+
+</para>
+
+ at manager: 
+ at volumes: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/tmpl/thunar-vfs-volume.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,150 @@
+<!-- ##### SECTION Title ##### -->
+ThunarVfsVolume
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM ThunarVfsVolumeKind ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_VOLUME_KIND_UNKNOWN: 
+ at THUNAR_VFS_VOLUME_KIND_CDROM: 
+ at THUNAR_VFS_VOLUME_KIND_DVD: 
+ at THUNAR_VFS_VOLUME_KIND_FLOPPY: 
+ at THUNAR_VFS_VOLUME_KIND_HARDDISK: 
+ at THUNAR_VFS_VOLUME_KIND_USBSTICK: 
+
+<!-- ##### ENUM ThunarVfsVolumeStatus ##### -->
+<para>
+
+</para>
+
+ at THUNAR_VFS_VOLUME_STATUS_MOUNTED: 
+ at THUNAR_VFS_VOLUME_STATUS_PRESENT: 
+
+<!-- ##### STRUCT ThunarVfsVolumeIface ##### -->
+<para>
+
+</para>
+
+ at __parent__: 
+ at get_kind: 
+ at get_name: 
+ at get_status: 
+ at get_mount_point: 
+ at get_free_space: 
+ at lookup_icon_name: 
+ at changed: 
+
+<!-- ##### STRUCT ThunarVfsVolume ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_get_kind ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_get_name ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_get_status ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_get_mount_point ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_is_mounted ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_is_present ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_is_removable ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_get_free_space ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at free_space_return: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_lookup_icon_name ##### -->
+<para>
+
+</para>
+
+ at volume: 
+ at icon_theme: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunar_vfs_volume_changed ##### -->
+<para>
+
+</para>
+
+ at volume: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1 @@
+0.1.4pre-alpha-r18850

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/version.xml.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1 @@
+ at PACKAGE_VERSION@

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-group.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-group.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-group.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,95 @@
+<refentry id="ThunarVfsGroup">
+<refmeta>
+<refentrytitle>ThunarVfsGroup</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsGroup</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsGroup-struct">ThunarVfsGroup</link>;
+<link linkend="ThunarVfsGroupId">ThunarVfsGroupId</link> <link linkend="thunar-vfs-group-get-id">thunar_vfs_group_get_id</link>    (<link linkend="ThunarVfsGroup">ThunarVfsGroup</link> *group);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-group-get-name">thunar_vfs_group_get_name</link>      (<link linkend="ThunarVfsGroup">ThunarVfsGroup</link> *group);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsGroup
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsGroup-struct"/>ThunarVfsGroup</title>
+<indexterm><primary>ThunarVfsGroup</primary></indexterm><programlisting>typedef struct _ThunarVfsGroup ThunarVfsGroup;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-group-get-id"/>thunar_vfs_group_get_id ()</title>
+<indexterm><primary>thunar_vfs_group_get_id</primary></indexterm><programlisting><link linkend="ThunarVfsGroupId">ThunarVfsGroupId</link> thunar_vfs_group_get_id    (<link linkend="ThunarVfsGroup">ThunarVfsGroup</link> *group);</programlisting>
+<para>
+Returns the unique id of the given <parameter>group</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>group</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the unique id of <parameter>group</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-group-get-name"/>thunar_vfs_group_get_name ()</title>
+<indexterm><primary>thunar_vfs_group_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_group_get_name      (<link linkend="ThunarVfsGroup">ThunarVfsGroup</link> *group);</programlisting>
+<para>
+Returns the name of the <parameter>group</parameter>. If the system is
+unable to determine the name of <parameter>group</parameter>, it'll
+return the group id as string.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>group</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the name of <parameter>group</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-info.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-info.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-info.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,269 @@
+<refentry id="thunar-vfs-ThunarVfsInfo">
+<refmeta>
+<refentrytitle>ThunarVfsInfo</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsInfo</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsInfo">ThunarVfsInfo</link>;
+<link linkend="ThunarVfsInfo">ThunarVfsInfo</link>* <link linkend="thunar-vfs-info-new-for-path">thunar_vfs_info_new_for_path</link> (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsInfo">ThunarVfsInfo</link>* <link linkend="thunar-vfs-info-ref">thunar_vfs_info_ref</link>          (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-info-unref">thunar_vfs_info_unref</link>           (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-info-execute">thunar_vfs_info_execute</link>         (const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-info-rename">thunar_vfs_info_rename</link>          (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info,
+                                             const <link linkend="gchar">gchar</link> *name,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-info-matches">thunar_vfs_info_matches</link>         (const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *a,
+                                             const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *b);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-info-list-free">thunar_vfs_info_list_free</link>       (<link linkend="GList">GList</link> *info_list);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsInfo"/>ThunarVfsInfo</title>
+<indexterm><primary>ThunarVfsInfo</primary></indexterm><programlisting>typedef struct {
+  /* File type */
+  ThunarVfsFileType type;
+
+  /* File permissions and special mode flags */
+  ThunarVfsFileMode mode;
+
+  /* File flags */
+  ThunarVfsFileFlags flags;
+
+  /* Owner's user id */
+  ThunarVfsUserId uid;
+
+  /* Owner's group id */
+  ThunarVfsGroupId gid;
+
+  /* Size in bytes */
+  ThunarVfsFileSize size;
+
+  /* time of last access */
+  ThunarVfsFileTime atime;
+
+  /* time of last modification */
+  ThunarVfsFileTime mtime;
+
+  /* time of last status change */
+  ThunarVfsFileTime ctime;
+
+  /* inode id */
+  ThunarVfsFileInode inode;
+
+  /* device id */
+  ThunarVfsFileDevice device;
+
+  /* file's mime type */
+  ThunarVfsMimeInfo *mime_info;
+
+  /* file's absolute path */
+  ThunarVfsPath *path;
+
+  /* file's custom icon (path or themed icon name) */
+  gchar *custom_icon;
+
+  /* file's display name (UTF-8) */
+  gchar *display_name;
+} ThunarVfsInfo;
+</programlisting>
+<para>
+The <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link> structure provides information about a file system
+entity.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-new-for-path"/>thunar_vfs_info_new_for_path ()</title>
+<indexterm><primary>thunar_vfs_info_new_for_path</primary></indexterm><programlisting><link linkend="ThunarVfsInfo">ThunarVfsInfo</link>* thunar_vfs_info_new_for_path (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Queries the <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link> for the given <parameter>path</parameter>. Returns the
+<link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link> if the operation is successfull, else <literal>NULL</literal>.
+In the latter case, <parameter>error</parameter> will be set to point to a <link linkend="GError"><type>GError</type></link>
+describing the cause of the failure.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> of the file whose info should be queried.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link> for <parameter>path</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-ref"/>thunar_vfs_info_ref ()</title>
+<indexterm><primary>thunar_vfs_info_ref</primary></indexterm><programlisting><link linkend="ThunarVfsInfo">ThunarVfsInfo</link>* thunar_vfs_info_ref          (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);</programlisting>
+<para>
+Increments the reference count on <parameter>info</parameter> by 1 and
+returns a pointer to <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a pointer to <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-unref"/>thunar_vfs_info_unref ()</title>
+<indexterm><primary>thunar_vfs_info_unref</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_info_unref           (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);</programlisting>
+<para>
+Decrements the reference count on <parameter>info</parameter> by 1 and if
+the reference count drops to zero as a result of this
+operation, the <parameter>info</parameter> will be freed completely.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-execute"/>thunar_vfs_info_execute ()</title>
+<indexterm><primary>thunar_vfs_info_execute</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_info_execute         (const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Executes the file referred to by <parameter>info</parameter>, given <parameter>path_list</parameter> as parameters,
+on the specified <parameter>screen</parameter>. <parameter>info</parameter> may refer to either a regular,
+executable file, or a <filename>.desktop</filename> file, whose
+type is <literal>Application</literal>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GdkScreen"><type>GdkScreen</type></link> or <literal>NULL</literal> to use the default <link linkend="GdkScreen"><type>GdkScreen</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> the list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s to give as parameters
+             to the file referred to by <parameter>info</parameter> on execution.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> on success, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-rename"/>thunar_vfs_info_rename ()</title>
+<indexterm><primary>thunar_vfs_info_rename</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_info_rename          (<link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info,
+                                             const <link linkend="gchar">gchar</link> *name,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Tries to rename the file referred to by <parameter>info</parameter> to the
+new <parameter>name</parameter>.
+</para>
+<para>
+The rename operation is smart in that it checks the
+type of <parameter>info</parameter> first, and if <parameter>info</parameter> refers to a
+<filename>.desktop</filename> file, the file name
+won't be touched, but instead the <literal>Name</literal>
+field of the <filename>.desktop</filename> will be
+changed to <parameter>name</parameter>. Else, if <parameter>info</parameter> refers to a regular
+file or directory, the file will be given a new
+name.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> the new file name in UTF-8 encoding.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> on success, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-matches"/>thunar_vfs_info_matches ()</title>
+<indexterm><primary>thunar_vfs_info_matches</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_info_matches         (const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *a,
+                                             const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *b);</programlisting>
+<para>
+Checks whether <parameter>a</parameter> and <parameter>b</parameter> refer to the same file
+and share the same properties.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>a</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>b</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>a</parameter> and <parameter>b</parameter> match.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-info-list-free"/>thunar_vfs_info_list_free ()</title>
+<indexterm><primary>thunar_vfs_info_list_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_info_list_free       (<link linkend="GList">GList</link> *info_list);</programlisting>
+<para>
+Unrefs all <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link><!---->s in <parameter>info_list</parameter> and
+frees the list itself.
+</para>
+<para>
+This method always returns <literal>NULL</literal> for the convenience of
+being able to do:
+<informalexample><programlisting>
+info_list = thunar_vfs_info_list_free (info_list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-init-shutdown.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-init-shutdown.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-init-shutdown.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,63 @@
+<refentry id="thunar-vfs-Initialization-and-Shutdown">
+<refmeta>
+<refentrytitle>Initialization and Shutdown</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Initialization and Shutdown</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+<link linkend="void">void</link>        <link linkend="thunar-vfs-init">thunar_vfs_init</link>                 (void);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-shutdown">thunar_vfs_shutdown</link>             (void);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="thunar-vfs-init"/>thunar_vfs_init ()</title>
+<indexterm><primary>thunar_vfs_init</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_init                 (void);</programlisting>
+<para>
+Initializes the ThunarVFS library.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-shutdown"/>thunar_vfs_shutdown ()</title>
+<indexterm><primary>thunar_vfs_shutdown</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_shutdown             (void);</programlisting>
+<para>
+Shuts down the ThunarVFS library.</para>
+<para>
+
+</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-interactive-job.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-interactive-job.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-interactive-job.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,189 @@
+<refentry id="ThunarVfsInteractiveJob">
+<refmeta>
+<refentrytitle>ThunarVfsInteractiveJob</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsInteractiveJob</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <link linkend="ThunarVfsInteractiveJobResponse">ThunarVfsInteractiveJobResponse</link>;
+            <link linkend="ThunarVfsInteractiveJob-struct">ThunarVfsInteractiveJob</link>;
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="ThunarVfsJob">ThunarVfsJob</link>
+         +----ThunarVfsInteractiveJob
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+<refsect1>
+<title>Signal Prototypes</title>
+<synopsis>
+
+&quot;<link linkend="ThunarVfsInteractiveJob-ask">ask</link>&quot;       <link linkend="ThunarVfsInteractiveJobResponse">ThunarVfsInteractiveJobResponse</link>user_function      (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gchar">gchar</link> *message,
+                                            <link linkend="ThunarVfsInteractiveJobResponse">ThunarVfsInteractiveJobResponse</link> choices,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+&quot;<link linkend="ThunarVfsInteractiveJob-info-message">info-message</link>&quot;
+            <link linkend="void">void</link>        user_function      (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gchar">gchar</link> *message,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+&quot;<link linkend="ThunarVfsInteractiveJob-new-files">new-files</link>&quot; <link linkend="void">void</link>        user_function      (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> path_list,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+&quot;<link linkend="ThunarVfsInteractiveJob-percent">percent</link>&quot;   <link linkend="void">void</link>        user_function      (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gdouble">gdouble</link> percent,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+</synopsis>
+</refsect1>
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsInteractiveJobResponse"/>enum ThunarVfsInteractiveJobResponse</title>
+<indexterm><primary>ThunarVfsInteractiveJobResponse</primary></indexterm><programlisting>typedef enum /*&lt; flags &gt;*/
+{
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES     = 1 &lt;&lt; 0,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL = 1 &lt;&lt; 1,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO      = 1 &lt;&lt; 2,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL  = 1 &lt;&lt; 3,
+} ThunarVfsInteractiveJobResponse;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsInteractiveJob-struct"/>ThunarVfsInteractiveJob</title>
+<indexterm><primary>ThunarVfsInteractiveJob</primary></indexterm><programlisting>typedef struct _ThunarVfsInteractiveJob ThunarVfsInteractiveJob;</programlisting>
+<para>
+
+</para></refsect2>
+
+</refsect1>
+
+<refsect1>
+<title>Signals</title>
+<refsect2><title><anchor id="ThunarVfsInteractiveJob-ask"/>The &quot;ask&quot; signal</title>
+<programlisting><link linkend="ThunarVfsInteractiveJobResponse">ThunarVfsInteractiveJobResponse</link>user_function                  (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gchar">gchar</link> *message,
+                                            <link linkend="ThunarVfsInteractiveJobResponse">ThunarVfsInteractiveJobResponse</link> choices,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+The <parameter>message</parameter> is garantied to contain valid UTF-8.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>message</parameter>&nbsp;:</term>
+<listitem><simpara> question to display to the user.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>choices</parameter>&nbsp;:</term>
+<listitem><simpara> a combination of <link linkend="ThunarVfsInteractiveJobResponse"><type>ThunarVfsInteractiveJobResponse</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the selected choice.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2><refsect2><title><anchor id="ThunarVfsInteractiveJob-info-message"/>The &quot;info-message&quot; signal</title>
+<programlisting><link linkend="void">void</link>        user_function                  (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gchar">gchar</link> *message,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+This signal is emitted to display information about the
+<parameter>job</parameter>. Examples of messages are "Preparing..." or
+"Cleaning up...".
+</para>
+<para>
+The <parameter>message</parameter> is garantied to contain valid UTF-8, so
+it can be displayed by <link linkend="GtkWidget"><type>GtkWidget</type></link><!---->s out of the
+box.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>message</parameter>&nbsp;:</term>
+<listitem><simpara> information to be displayed about <parameter>job</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+</variablelist></refsect2><refsect2><title><anchor id="ThunarVfsInteractiveJob-new-files"/>The &quot;new-files&quot; signal</title>
+<programlisting><link linkend="void">void</link>        user_function                  (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> path_list,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+This signal is emitted by the <parameter>job</parameter> right before the <parameter>job</parameter> is terminated
+and informs the application about the list of created files in <parameter>path_list</parameter>.
+<parameter>path_list</parameter> contains only the toplevel path items, that were specified by
+the application on creation of the <parameter>job</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s that were created by <parameter>job</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+</variablelist></refsect2><refsect2><title><anchor id="ThunarVfsInteractiveJob-percent"/>The &quot;percent&quot; signal</title>
+<programlisting><link linkend="void">void</link>        user_function                  (<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link> *job,
+                                            <link linkend="gdouble">gdouble</link> percent,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+This signal is emitted to present the state
+of the overall progress.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>percent</parameter>&nbsp;:</term>
+<listitem><simpara> the percentage of completeness.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+</refsect1>
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-job.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-job.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-job.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,240 @@
+<refentry id="ThunarVfsJob">
+<refmeta>
+<refentrytitle>ThunarVfsJob</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsJob</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsJob-struct">ThunarVfsJob</link>;
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-job-launch">thunar_vfs_job_launch</link>         (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-job-cancel">thunar_vfs_job_cancel</link>           (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-job-cancelled">thunar_vfs_job_cancelled</link>        (const <link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-job-emit-valist">thunar_vfs_job_emit_valist</link>      (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="guint">guint</link> signal_id,
+                                             <link linkend="GQuark">GQuark</link> signal_detail,
+                                             <link linkend="va-list">va_list</link> var_args);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-job-emit">thunar_vfs_job_emit</link>             (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="guint">guint</link> signal_id,
+                                             <link linkend="GQuark">GQuark</link> signal_detail,
+                                             ...);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-job-error">thunar_vfs_job_error</link>            (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="GError">GError</link> *error);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsJob
+         +----<link linkend="ThunarVfsInteractiveJob">ThunarVfsInteractiveJob</link>
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+<refsect1>
+<title>Signal Prototypes</title>
+<synopsis>
+
+&quot;<link linkend="ThunarVfsJob-error">error</link>&quot;     <link linkend="void">void</link>        user_function      (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> error,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+&quot;<link linkend="ThunarVfsJob-finished">finished</link>&quot;  <link linkend="void">void</link>        user_function      (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> user_data);
+</synopsis>
+</refsect1>
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsJob-struct"/>ThunarVfsJob</title>
+<indexterm><primary>ThunarVfsJob</primary></indexterm><programlisting>typedef struct _ThunarVfsJob ThunarVfsJob;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-launch"/>thunar_vfs_job_launch ()</title>
+<indexterm><primary>thunar_vfs_job_launch</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_job_launch         (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);</programlisting>
+<para>
+This functions schedules <parameter>job</parameter> to be run as soon
+as possible, in a separate thread.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a pointer to <parameter>job</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-cancel"/>thunar_vfs_job_cancel ()</title>
+<indexterm><primary>thunar_vfs_job_cancel</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_job_cancel           (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);</programlisting>
+<para>
+Attempts to cancel the operation currently
+performed by <parameter>job</parameter>. Even after the cancellation
+of <parameter>job</parameter>, it may still emit signals, so you
+must take care of disconnecting all handlers
+appropriately if you cannot handle signals
+after cancellation.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-cancelled"/>thunar_vfs_job_cancelled ()</title>
+<indexterm><primary>thunar_vfs_job_cancelled</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_job_cancelled        (const <link linkend="ThunarVfsJob">ThunarVfsJob</link> *job);</programlisting>
+<para>
+Checks whether <parameter>job</parameter> was previously cancelled
+by a call to <link linkend="thunar-vfs-job-cancel"><function>thunar_vfs_job_cancel()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>job</parameter> is cancelled.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-emit-valist"/>thunar_vfs_job_emit_valist ()</title>
+<indexterm><primary>thunar_vfs_job_emit_valist</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_job_emit_valist      (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="guint">guint</link> signal_id,
+                                             <link linkend="GQuark">GQuark</link> signal_detail,
+                                             <link linkend="va-list">va_list</link> var_args);</programlisting>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>signal_id</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>signal_detail</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>var_args</parameter>&nbsp;:</term>
+<listitem><simpara>
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-emit"/>thunar_vfs_job_emit ()</title>
+<indexterm><primary>thunar_vfs_job_emit</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_job_emit             (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="guint">guint</link> signal_id,
+                                             <link linkend="GQuark">GQuark</link> signal_detail,
+                                             ...);</programlisting>
+<para>
+Convenience wrapper for <link linkend="thunar-vfs-job-emit-valist"><function>thunar_vfs_job_emit_valist()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>signal_id</parameter>&nbsp;:</term>
+<listitem><simpara> the id of the signal to emit on qjob.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>signal_detail</parameter>&nbsp;:</term>
+<listitem><simpara> the signal detail.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>...</parameter>&nbsp;:</term>
+<listitem><simpara> a list of parameters to be passed to the signal.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-job-error"/>thunar_vfs_job_error ()</title>
+<indexterm><primary>thunar_vfs_job_error</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_job_error            (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                             <link linkend="GError">GError</link> *error);</programlisting>
+<para>
+Emits the ::error signal on <parameter>job</parameter> with the given <parameter>error</parameter>. Whether
+or not the <parameter>job</parameter> continues after emitting the error depends on
+the particular implementation of <parameter>job</parameter>, but most jobs will
+terminate instantly after emitting an error.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GError"><type>GError</type></link> describing the error cause.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+<refsect1>
+<title>Signals</title>
+<refsect2><title><anchor id="ThunarVfsJob-error"/>The &quot;error&quot; signal</title>
+<programlisting><link linkend="void">void</link>        user_function                  (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> error,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+Emitted whenever an error occurs while executing the
+<parameter>job</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GError"><type>GError</type></link> describing the cause.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+</variablelist></refsect2><refsect2><title><anchor id="ThunarVfsJob-finished"/>The &quot;finished&quot; signal</title>
+<programlisting><link linkend="void">void</link>        user_function                  (<link linkend="ThunarVfsJob">ThunarVfsJob</link> *job,
+                                            <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+This signal will be automatically emitted once the
+<parameter>job</parameter> finishes its execution, no matter whether <parameter>job</parameter>
+completed successfully or was cancelled by the
+user.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>job</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara>user data set when the signal handler was connected.</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+</refsect1>
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-application.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-application.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-application.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,408 @@
+<refentry id="thunar-vfs-ThunarVfsMimeApplication">
+<refmeta>
+<refentrytitle>ThunarVfsMimeApplication</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsMimeApplication</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+#define     <link linkend="THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS">THUNAR_VFS_MIME_APPLICATION_ERROR</link>
+enum        <link linkend="ThunarVfsMimeApplicationError">ThunarVfsMimeApplicationError</link>;
+enum        <link linkend="ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</link>;
+            <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>;
+<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* <link linkend="thunar-vfs-mime-application-new-from-desktop-id">thunar_vfs_mime_application_new_from_desktop_id</link>
+                                            (const <link linkend="gchar">gchar</link> *desktop_id);
+<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* <link linkend="thunar-vfs-mime-application-new-from-file">thunar_vfs_mime_application_new_from_file</link>
+                                            (const <link linkend="gchar">gchar</link> *path,
+                                             const <link linkend="gchar">gchar</link> *desktop_id);
+<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* <link linkend="thunar-vfs-mime-application-ref">thunar_vfs_mime_application_ref</link>
+                                            (<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-mime-application-unref">thunar_vfs_mime_application_unref</link>
+                                            (<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-application-get-command">thunar_vfs_mime_application_get_command</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-application-get-desktop-id">thunar_vfs_mime_application_get_desktop_id</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+<link linkend="ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</link> <link linkend="thunar-vfs-mime-application-get-flags">thunar_vfs_mime_application_get_flags</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-application-get-name">thunar_vfs_mime_application_get_name</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-mime-application-exec">thunar_vfs_mime_application_exec</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-mime-application-exec-with-env">thunar_vfs_mime_application_exec_with_env</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="gchar">gchar</link> **envp,
+                                             <link linkend="GError">GError</link> **error);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-application-lookup-icon-name">thunar_vfs_mime_application_lookup_icon_name</link>
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);
+<link linkend="guint">guint</link>       <link linkend="thunar-vfs-mime-application-hash">thunar_vfs_mime_application_hash</link>
+                                            (<link linkend="gconstpointer">gconstpointer</link> application);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-mime-application-equal">thunar_vfs_mime_application_equal</link>
+                                            (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="THUNAR-VFS-MIME-APPLICATION-ERROR:CAPS"/>THUNAR_VFS_MIME_APPLICATION_ERROR</title>
+<indexterm><primary>THUNAR_VFS_MIME_APPLICATION_ERROR</primary></indexterm><programlisting>#define THUNAR_VFS_MIME_APPLICATION_ERROR (thunar_vfs_mime_application_error_quark ())
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMimeApplicationError"/>enum ThunarVfsMimeApplicationError</title>
+<indexterm><primary>ThunarVfsMimeApplicationError</primary></indexterm><programlisting>typedef enum
+{
+  THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY,
+} ThunarVfsMimeApplicationError;
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMimeApplicationFlags"/>enum ThunarVfsMimeApplicationFlags</title>
+<indexterm><primary>ThunarVfsMimeApplicationFlags</primary></indexterm><programlisting>typedef enum /*&lt; flags &gt;*/
+{
+  THUNAR_VFS_MIME_APPLICATION_HIDDEN                  = (1 &lt;&lt; 0L),
+  THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL       = (1 &lt;&lt; 1L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY = (1 &lt;&lt; 2L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI          = (1 &lt;&lt; 3L),
+} ThunarVfsMimeApplicationFlags;
+</programlisting>
+<para>
+Various flags associated with a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_MIME_APPLICATION_HIDDEN</literal></term>
+<listitem><simpara> the application should not be displayed in the menu system.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL</literal></term>
+<listitem><simpara> the application must be run in a terminal.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY</literal></term>
+<listitem><simpara> the application supports startup notification.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI</literal></term>
+<listitem><simpara> the application supports opening multiple documents at once (<literal>F</literal> or <literal>U</literal>).
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMimeApplication"/>ThunarVfsMimeApplication</title>
+<indexterm><primary>ThunarVfsMimeApplication</primary></indexterm><programlisting>typedef struct _ThunarVfsMimeApplication ThunarVfsMimeApplication;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-new-from-desktop-id"/>thunar_vfs_mime_application_new_from_desktop_id ()</title>
+<indexterm><primary>thunar_vfs_mime_application_new_from_desktop_id</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* thunar_vfs_mime_application_new_from_desktop_id
+                                            (const <link linkend="gchar">gchar</link> *desktop_id);</programlisting>
+<para>
+Generates a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> instance for the application
+referenced by <parameter>desktop_id</parameter>. Returns <literal>NULL</literal> if <parameter>desktop_id</parameter> is not valid.
+</para>
+<para>
+The caller is responsible to free the returned instance using
+<link linkend="thunar-vfs-mime-application-unref"><function>thunar_vfs_mime_application_unref()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>desktop_id</parameter>&nbsp;:</term>
+<listitem><simpara> the id of an application's .desktop file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> for <parameter>desktop_id</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-new-from-file"/>thunar_vfs_mime_application_new_from_file ()</title>
+<indexterm><primary>thunar_vfs_mime_application_new_from_file</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* thunar_vfs_mime_application_new_from_file
+                                            (const <link linkend="gchar">gchar</link> *path,
+                                             const <link linkend="gchar">gchar</link> *desktop_id);</programlisting>
+<para>
+Generates a new <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> for the application
+described by <parameter>path</parameter> and <parameter>desktop_id</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned instance using
+<link linkend="thunar-vfs-mime-application-unref"><function>thunar_vfs_mime_application_unref()</function></link>.
+</para>
+<para>
+You should really seldomly use this function and always
+prefer <link linkend="thunar-vfs-mime-application-new-from-desktop-id"><function>thunar_vfs_mime_application_new_from_desktop_id()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the absolute path to the desktop file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desktop_id</parameter>&nbsp;:</term>
+<listitem><simpara> the desktop-id of the file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> for <parameter>desktop_id</parameter>
+              or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-ref"/>thunar_vfs_mime_application_ref ()</title>
+<indexterm><primary>thunar_vfs_mime_application_ref</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* thunar_vfs_mime_application_ref
+                                            (<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Increases the reference count on <parameter>application</parameter> by one
+and returns the reference to <parameter>application</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a reference to <parameter>application</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-unref"/>thunar_vfs_mime_application_unref ()</title>
+<indexterm><primary>thunar_vfs_mime_application_unref</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_mime_application_unref
+                                            (<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Decreases the reference count on <parameter>application</parameter> and frees
+the <parameter>application</parameter> object once the reference count drops
+to zero.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-get-command"/>thunar_vfs_mime_application_get_command ()</title>
+<indexterm><primary>thunar_vfs_mime_application_get_command</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_application_get_command
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Returns the command line to run <parameter>application</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the command to run <parameter>application</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-get-desktop-id"/>thunar_vfs_mime_application_get_desktop_id ()</title>
+<indexterm><primary>thunar_vfs_mime_application_get_desktop_id</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_application_get_desktop_id
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Returns the desktop-id of <parameter>application</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the desktop-id of <parameter>application</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-get-flags"/>thunar_vfs_mime_application_get_flags ()</title>
+<indexterm><primary>thunar_vfs_mime_application_get_flags</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplicationFlags">ThunarVfsMimeApplicationFlags</link> thunar_vfs_mime_application_get_flags
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Returns the flags for <parameter>application</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the flags for <parameter>application</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-get-name"/>thunar_vfs_mime_application_get_name ()</title>
+<indexterm><primary>thunar_vfs_mime_application_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_application_get_name
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application);</programlisting>
+<para>
+Returns the generic name of <parameter>application</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the generic name of <parameter>application</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-exec"/>thunar_vfs_mime_application_exec ()</title>
+<indexterm><primary>thunar_vfs_mime_application_exec</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_mime_application_exec
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Wrapper to <link linkend="thunar-vfs-mime-application-exec-with-env"><function>thunar_vfs_mime_application_exec_with_env()</function></link>, which
+simply passes a <literal>NULL</literal> pointer for the environment variables.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GdkScreen"><type>GdkScreen</type></link> or <literal>NULL</literal> to use the default screen.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s to open.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if the execution succeed, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-exec-with-env"/>thunar_vfs_mime_application_exec_with_env ()</title>
+<indexterm><primary>thunar_vfs_mime_application_exec_with_env</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_mime_application_exec_with_env
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GdkScreen">GdkScreen</link> *screen,
+                                             <link linkend="GList">GList</link> *path_list,
+                                             <link linkend="gchar">gchar</link> **envp,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Executes <parameter>application</parameter> on <parameter>screen</parameter> using the given <parameter>path_list</parameter>. If
+<parameter>path_list</parameter> contains more than one <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> and <parameter>application</parameter>
+doesn't support opening multiple documents at once, one
+instance of <parameter>application</parameter> will be spawned for every <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>
+given in <parameter>path_list</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GdkScreen"><type>GdkScreen</type></link> or <literal>NULL</literal> to use the default screen.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s to open.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>envp</parameter>&nbsp;:</term>
+<listitem><simpara> child's environment or <literal>NULL</literal> to inherit parent's.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if the execution succeed, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-lookup-icon-name"/>thunar_vfs_mime_application_lookup_icon_name ()</title>
+<indexterm><primary>thunar_vfs_mime_application_lookup_icon_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_application_lookup_icon_name
+                                            (const <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);</programlisting>
+<para>
+Looks up the icon name for <parameter>application</parameter> in
+<parameter>icon_theme</parameter>. Returns <literal>NULL</literal> if no suitable
+icon is present in <parameter>icon_theme</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>icon_theme</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GtkIconTheme"><type>GtkIconTheme</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the icon name for <parameter>application</parameter> or
+              <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-hash"/>thunar_vfs_mime_application_hash ()</title>
+<indexterm><primary>thunar_vfs_mime_application_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>       thunar_vfs_mime_application_hash
+                                            (<link linkend="gconstpointer">gconstpointer</link> application);</programlisting>
+<para>
+Converts <parameter>application</parameter> to a hash value. It can be passed
+to <link linkend="g-hash-table-new"><function>g_hash_table_new()</function></link> as the <parameter>hash_func</parameter> parameter,
+when using <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link><!---->s as keys
+in a <link linkend="GHashTable"><type>GHashTable</type></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a hash value corresponding to the key.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-application-equal"/>thunar_vfs_mime_application_equal ()</title>
+<indexterm><primary>thunar_vfs_mime_application_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_mime_application_equal
+                                            (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);</programlisting>
+<para>
+Checks whether <parameter>a</parameter> and <parameter>b</parameter> refer to the same application.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>a</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>b</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>a</parameter> and <parameter>b</parameter> are equal.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-database.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-database.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-database.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,374 @@
+<refentry id="ThunarVfsMimeDatabase">
+<refmeta>
+<refentrytitle>ThunarVfsMimeDatabase</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsMimeDatabase</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsMimeDatabase-struct">ThunarVfsMimeDatabase</link>;
+<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link>* <link linkend="thunar-vfs-mime-database-get-default">thunar_vfs_mime_database_get_default</link>
+                                            (void);
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-database-get-info">thunar_vfs_mime_database_get_info</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *mime_type);
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-database-get-info-for-data">thunar_vfs_mime_database_get_info_for_data</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="gconstpointer">gconstpointer</link> data,
+                                             <link linkend="gsize">gsize</link> length);
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-database-get-info-for-name">thunar_vfs_mime_database_get_info_for_name</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *name);
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-database-get-info-for-file">thunar_vfs_mime_database_get_info_for_file</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *path,
+                                             const <link linkend="gchar">gchar</link> *name);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-mime-database-get-infos-for-info">thunar_vfs_mime_database_get_infos_for_info</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-mime-database-get-applications">thunar_vfs_mime_database_get_applications</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* <link linkend="thunar-vfs-mime-database-get-default-application">thunar_vfs_mime_database_get_default_application</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-mime-database-set-default-application">thunar_vfs_mime_database_set_default_application</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* <link linkend="thunar-vfs-mime-database-add-application">thunar_vfs_mime_database_add_application</link>
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             const <link linkend="gchar">gchar</link> *name,
+                                             const <link linkend="gchar">gchar</link> *exec,
+                                             <link linkend="GError">GError</link> **error);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsMimeDatabase
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsMimeDatabase-struct"/>ThunarVfsMimeDatabase</title>
+<indexterm><primary>ThunarVfsMimeDatabase</primary></indexterm><programlisting>typedef struct _ThunarVfsMimeDatabase ThunarVfsMimeDatabase;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-default"/>thunar_vfs_mime_database_get_default ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_default</primary></indexterm><programlisting><link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link>* thunar_vfs_mime_database_get_default
+                                            (void);</programlisting>
+<para>
+Returns a reference on the shared <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>
+instance. The caller is responsible to call <link linkend="g-object-unref"><function>g_object_unref()</function></link>
+on the returned object when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the shared <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-info"/>thunar_vfs_mime_database_get_info ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_info</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_database_get_info
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *mime_type);</programlisting>
+<para>
+Determines the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> which corresponds to <parameter>mime_type</parameter>
+in database. The caller is responsible to call <link linkend="thunar-vfs-mime-info-unref"><function>thunar_vfs_mime_info_unref()</function></link>
+on the returned instance.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mime_type</parameter>&nbsp;:</term>
+<listitem><simpara> the string representation of the mime type.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> corresponding to <parameter>mime_type</parameter> in <parameter>database</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-info-for-data"/>thunar_vfs_mime_database_get_info_for_data ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_info_for_data</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_database_get_info_for_data
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="gconstpointer">gconstpointer</link> data,
+                                             <link linkend="gsize">gsize</link> length);</programlisting>
+<para>
+Determines the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for <parameter>data</parameter> in <parameter>database</parameter>. The
+caller is responsible to call <link linkend="thunar-vfs-mime-info-unref"><function>thunar_vfs_mime_info_unref()</function></link> on
+the returned instance.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&nbsp;:</term>
+<listitem><simpara> the data to check.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&nbsp;:</term>
+<listitem><simpara> the length of <parameter>data</parameter> in bytes.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> determined for <parameter>data</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-info-for-name"/>thunar_vfs_mime_database_get_info_for_name ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_info_for_name</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_database_get_info_for_name
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Determines the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for the filename given
+in <parameter>name</parameter> from <parameter>database</parameter>. The caller is responsible to
+call <link linkend="thunar-vfs-mime-info-unref"><function>thunar_vfs_mime_info_unref()</function></link> on the returned instance.
+</para>
+<para>
+The <parameter>name</parameter> must be a valid filename in UTF-8 encoding
+and it may not contained any slashes!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> a filename (must be valid UTF-8!).
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for <parameter>name</parameter> in <parameter>database</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-info-for-file"/>thunar_vfs_mime_database_get_info_for_file ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_info_for_file</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_database_get_info_for_file
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             const <link linkend="gchar">gchar</link> *path,
+                                             const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Determines the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for <parameter>path</parameter> in <parameter>database</parameter>. The
+caller is responsible to free the returned instance using
+<link linkend="thunar-vfs-mime-info-unref"><function>thunar_vfs_mime_info_unref()</function></link>.
+</para>
+<para>
+The <parameter>name</parameter> parameter is optional. If the caller already knows the
+basename of <parameter>path</parameter> in UTF-8 encoding, it should be specified here
+to speed up the lookup process.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the path to a file in the local filesystem (in the filesystem encoding).
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> the basename of <parameter>path</parameter> in UTF-8 encoding or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for <parameter>path</parameter> in <parameter>database</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-infos-for-info"/>thunar_vfs_mime_database_get_infos_for_info ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_infos_for_info</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_mime_database_get_infos_for_info
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Returns a list of all <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link><!---->s,
+that are related to <parameter>info</parameter> in <parameter>database</parameter>. Currently
+this is the list of parent MIME-types for <parameter>info</parameter>,
+as defined in the Shared Mime Database.
+</para>
+<para>
+Note that the returned list will also include
+a reference <parameter>info</parameter> itself. In addition, this
+method also handles details specified by the
+Shared Mime Database Specification like the
+fact that every "text/xxxx" MIME-type is a
+subclass of "text/plain" and every MIME-type
+is a subclass of "application/octet-stream".
+</para>
+<para>
+The caller is responsible to free the returned
+list using #<link linkend="thunar-vfs-mime-info-list-free"><function>thunar_vfs_mime_info_list_free()</function></link>
+when done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link><!---->s
+              related to <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-applications"/>thunar_vfs_mime_database_get_applications ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_applications</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_mime_database_get_applications
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Looks up all <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link><!---->s in <parameter>database</parameter>, which
+claim to be able to open files whose MIME-type is represented by
+<parameter>info</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned list using
+something like:
+<informalexample><programlisting>
+g_list_foreach (list, (GFunc) thunar_vfs_mime_application_unref, NULL);
+g_list_free (list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link><!---->s, that
+              can handle <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-get-default-application"/>thunar_vfs_mime_database_get_default_application ()</title>
+<indexterm><primary>thunar_vfs_mime_database_get_default_application</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* thunar_vfs_mime_database_get_default_application
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Returns the default <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> to handle
+files of type <parameter>info</parameter> or <literal>NULL</literal> if no default application
+is set for <parameter>info</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned instance
+using <link linkend="thunar-vfs-mime-application-unref"><function>thunar_vfs_mime_application_unref()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the default <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> for
+              <parameter>info</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-set-default-application"/>thunar_vfs_mime_database_set_default_application ()</title>
+<indexterm><primary>thunar_vfs_mime_database_set_default_application</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_mime_database_set_default_application
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             <link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link> *application,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Sets <parameter>application</parameter> to be the default <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> to open files
+of type <parameter>info</parameter> in <parameter>database</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a valid <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for <parameter>database</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>application</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if the operation was successfull, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-database-add-application"/>thunar_vfs_mime_database_add_application ()</title>
+<indexterm><primary>thunar_vfs_mime_database_add_application</primary></indexterm><programlisting><link linkend="ThunarVfsMimeApplication">ThunarVfsMimeApplication</link>* thunar_vfs_mime_database_add_application
+                                            (<link linkend="ThunarVfsMimeDatabase">ThunarVfsMimeDatabase</link> *database,
+                                             <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             const <link linkend="gchar">gchar</link> *name,
+                                             const <link linkend="gchar">gchar</link> *exec,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Adds a new <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link> to the <parameter>database</parameter>, whose
+name is <parameter>name</parameter> and command is <parameter>exec</parameter>, and which can be used to
+open files of type <parameter>info</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned object
+using <link linkend="thunar-vfs-mime-application-unref"><function>thunar_vfs_mime_application_unref()</function></link> when no longer
+needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>database</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> the name for the application.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>exec</parameter>&nbsp;:</term>
+<listitem><simpara> the command for the application.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly created <link linkend="ThunarVfsMimeApplication"><type>ThunarVfsMimeApplication</type></link>
+              or <literal>NULL</literal> on error.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-info.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-info.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-mime-info.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,286 @@
+<refentry id="thunar-vfs-ThunarVfsMimeInfo">
+<refmeta>
+<refentrytitle>ThunarVfsMimeInfo</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsMimeInfo</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>;
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-info-new">thunar_vfs_mime_info_new</link> (const <link linkend="gchar">gchar</link> *name,
+                                             <link linkend="gssize">gssize</link> len);
+<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* <link linkend="thunar-vfs-mime-info-ref">thunar_vfs_mime_info_ref</link> (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-mime-info-unref">thunar_vfs_mime_info_unref</link>      (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-info-get-comment">thunar_vfs_mime_info_get_comment</link>
+                                            (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-info-get-name">thunar_vfs_mime_info_get_name</link>  (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-mime-info-get-media">thunar_vfs_mime_info_get_media</link>  (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-mime-info-get-subtype">thunar_vfs_mime_info_get_subtype</link>
+                                            (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);
+<link linkend="guint">guint</link>       <link linkend="thunar-vfs-mime-info-hash">thunar_vfs_mime_info_hash</link>       (<link linkend="gconstpointer">gconstpointer</link> info);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-mime-info-equal">thunar_vfs_mime_info_equal</link>      (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-mime-info-lookup-icon-name">thunar_vfs_mime_info_lookup_icon_name</link>
+                                            (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-mime-info-list-free">thunar_vfs_mime_info_list_free</link>  (<link linkend="GList">GList</link> *info_list);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsMimeInfo"/>ThunarVfsMimeInfo</title>
+<indexterm><primary>ThunarVfsMimeInfo</primary></indexterm><programlisting>typedef struct {
+} ThunarVfsMimeInfo;
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-new"/>thunar_vfs_mime_info_new ()</title>
+<indexterm><primary>thunar_vfs_mime_info_new</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_info_new (const <link linkend="gchar">gchar</link> *name,
+                                             <link linkend="gssize">gssize</link> len);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> object with an
+initial reference count of one and sets it to the
+given <parameter>name</parameter>.
+</para>
+<para>
+Note that no checking is performed on the given <parameter>name</parameter>.
+You should not normally use this function, but use
+<link linkend="thunar-vfs-mime-database-get-info"><function>thunar_vfs_mime_database_get_info()</function></link> instead.
+</para>
+<para>
+In addition, if you allocate <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link><!---->s
+using this function, you cannot mix them with the objects
+allocated in a <link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link>, because the
+<link linkend="ThunarVfsMimeDatabase"><type>ThunarVfsMimeDatabase</type></link> and associated functions assume
+that <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> objects are unique.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> the mime type name.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>len</parameter>&nbsp;:</term>
+<listitem><simpara> the length of <parameter>name</parameter> or <literal>-1</literal> if zero-terminated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-ref"/>thunar_vfs_mime_info_ref ()</title>
+<indexterm><primary>thunar_vfs_mime_info_ref</primary></indexterm><programlisting><link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link>* thunar_vfs_mime_info_ref (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Increments the reference count on <parameter>info</parameter> and returns
+the reference to <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a reference to <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-unref"/>thunar_vfs_mime_info_unref ()</title>
+<indexterm><primary>thunar_vfs_mime_info_unref</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_mime_info_unref      (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Decrements the reference count on <parameter>info</parameter> and releases
+the resources allocated for <parameter>info</parameter> once the reference
+count drops to zero.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-get-comment"/>thunar_vfs_mime_info_get_comment ()</title>
+<indexterm><primary>thunar_vfs_mime_info_get_comment</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_info_get_comment
+                                            (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Determines the description for the given <parameter>info</parameter>.
+</para>
+<para>
+Note that this method MUST NOT be called from threads other than
+the main thread, because it's not thread-safe!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the comment associated with the <parameter>info</parameter> or the empty string
+              if no comment was provided.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-get-name"/>thunar_vfs_mime_info_get_name ()</title>
+<indexterm><primary>thunar_vfs_mime_info_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_info_get_name  (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Returns the full qualified name of the MIME type
+described by the <parameter>info</parameter> object.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the name of <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-get-media"/>thunar_vfs_mime_info_get_media ()</title>
+<indexterm><primary>thunar_vfs_mime_info_get_media</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_mime_info_get_media  (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Returns the media portion of the MIME type, e.g. if your
+<link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> instance refers to "text/plain", invoking
+this method will return "text".
+</para>
+<para>
+The caller is responsible to free the returned string
+using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the media portion of the MIME type.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-get-subtype"/>thunar_vfs_mime_info_get_subtype ()</title>
+<indexterm><primary>thunar_vfs_mime_info_get_subtype</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_mime_info_get_subtype
+                                            (const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info);</programlisting>
+<para>
+Returns the subtype portion of the MIME type, e.g. if <parameter>info</parameter>
+refers to "application/octect-stream", this method will
+return "octect-stream".
+</para>
+<para>
+The caller is responsible to free the returned string
+using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the subtype portion of <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-hash"/>thunar_vfs_mime_info_hash ()</title>
+<indexterm><primary>thunar_vfs_mime_info_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>       thunar_vfs_mime_info_hash       (<link linkend="gconstpointer">gconstpointer</link> info);</programlisting>
+<para>
+Calculates a hash value for <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a hash value for <parameter>info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-equal"/>thunar_vfs_mime_info_equal ()</title>
+<indexterm><primary>thunar_vfs_mime_info_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_mime_info_equal      (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);</programlisting>
+<para>
+Compares <parameter>a</parameter> and <parameter>b</parameter> and returns <literal>TRUE</literal> if both
+are equal.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>a</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>b</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>a</parameter> and <parameter>b</parameter> are equal.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-lookup-icon-name"/>thunar_vfs_mime_info_lookup_icon_name ()</title>
+<indexterm><primary>thunar_vfs_mime_info_lookup_icon_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_mime_info_lookup_icon_name
+                                            (<link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *info,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);</programlisting>
+<para>
+Tries to determine the name of a suitable icon for <parameter>info</parameter>
+in <parameter>icon_theme</parameter>. The returned icon name can then be used
+in calls to <link linkend="gtk-icon-theme-lookup-icon"><function>gtk_icon_theme_lookup_icon()</function></link> or
+<link linkend="gtk-icon-theme-load-icon"><function>gtk_icon_theme_load_icon()</function></link>.
+</para>
+<para>
+The returned icon name is owned by <parameter>info</parameter> and MUST NOT be freed
+by the caller.
+</para>
+<para>
+Note that this method MUST NOT be called from threads other than
+the main thread, because it's not thread-safe!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>icon_theme</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="GtkIconTheme"><type>GtkIconTheme</type></link> on which to perform the lookup.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a suitable icon name for <parameter>info</parameter> in <parameter>icon_theme</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-mime-info-list-free"/>thunar_vfs_mime_info_list_free ()</title>
+<indexterm><primary>thunar_vfs_mime_info_list_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_mime_info_list_free  (<link linkend="GList">GList</link> *info_list);</programlisting>
+<para>
+Frees the list and all <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link><!---->s
+contained within the list.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info_list</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link><!---->s
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-monitor.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-monitor.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-monitor.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,286 @@
+<refentry id="ThunarVfsMonitor">
+<refmeta>
+<refentrytitle>ThunarVfsMonitor</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsMonitor</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsMonitor-struct">ThunarVfsMonitor</link>;
+enum        <link linkend="ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</link>;
+            <link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link>;
+<link linkend="void">void</link>        (<link linkend="ThunarVfsMonitorCallback">*ThunarVfsMonitorCallback</link>)     (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link> *handle,
+                                             <link linkend="ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</link> event,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *handle_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *event_path,
+                                             <link linkend="gpointer">gpointer</link> user_data);
+<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link>* <link linkend="thunar-vfs-monitor-get-default">thunar_vfs_monitor_get_default</link>
+                                            (void);
+<link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link>* <link linkend="thunar-vfs-monitor-add-directory">thunar_vfs_monitor_add_directory</link>
+                                            (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</link> callback,
+                                             <link linkend="gpointer">gpointer</link> user_data);
+<link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link>* <link linkend="thunar-vfs-monitor-add-file">thunar_vfs_monitor_add_file</link>
+                                            (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</link> callback,
+                                             <link linkend="gpointer">gpointer</link> user_data);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-monitor-remove">thunar_vfs_monitor_remove</link>       (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link> *handle);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-monitor-feed">thunar_vfs_monitor_feed</link>         (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</link> event,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-monitor-wait">thunar_vfs_monitor_wait</link>         (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsMonitor
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsMonitor-struct"/>ThunarVfsMonitor</title>
+<indexterm><primary>ThunarVfsMonitor</primary></indexterm><programlisting>typedef struct _ThunarVfsMonitor ThunarVfsMonitor;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMonitorEvent"/>enum ThunarVfsMonitorEvent</title>
+<indexterm><primary>ThunarVfsMonitorEvent</primary></indexterm><programlisting>typedef enum
+{
+  THUNAR_VFS_MONITOR_EVENT_CHANGED,
+  THUNAR_VFS_MONITOR_EVENT_CREATED,
+  THUNAR_VFS_MONITOR_EVENT_DELETED,
+} ThunarVfsMonitorEvent;
+</programlisting>
+<para>
+Describes an event that occurred on a <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link>.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_MONITOR_EVENT_CHANGED</literal></term>
+<listitem><simpara> a file or directory was changed.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_MONITOR_EVENT_CREATED</literal></term>
+<listitem><simpara> a file or directory was created.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_MONITOR_EVENT_DELETED</literal></term>
+<listitem><simpara> a file or directory was deleted.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMonitorHandle"/>ThunarVfsMonitorHandle</title>
+<indexterm><primary>ThunarVfsMonitorHandle</primary></indexterm><programlisting>typedef struct _ThunarVfsMonitorHandle ThunarVfsMonitorHandle;</programlisting>
+<para>
+A handle on a file system entity, which is currently watched
+by a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsMonitorCallback"/>ThunarVfsMonitorCallback ()</title>
+<indexterm><primary>ThunarVfsMonitorCallback</primary></indexterm><programlisting><link linkend="void">void</link>        (*ThunarVfsMonitorCallback)     (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link> *handle,
+                                             <link linkend="ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</link> event,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *handle_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *event_path,
+                                             <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+The prototype for callback functions that will be called by a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>
+whenever one of its associated <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link><!---->s notice a
+change.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>handle</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>event</parameter>&nbsp;:</term>
+<listitem><simpara> the event that occurred.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>handle_path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> that was specified when registering the <parameter>handle</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>event_path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> on which the <parameter>event</parameter> occurred.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara> the user data that was specified when registering the <parameter>handle</parameter> with the <parameter>monitor</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-get-default"/>thunar_vfs_monitor_get_default ()</title>
+<indexterm><primary>thunar_vfs_monitor_get_default</primary></indexterm><programlisting><link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link>* thunar_vfs_monitor_get_default
+                                            (void);</programlisting>
+<para>
+Returns the shared <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link> instance. The caller
+is responsible to call <link linkend="g-object-unref"><function>g_object_unref()</function></link> on the returned
+object when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a reference to the shared <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>
+              instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-add-directory"/>thunar_vfs_monitor_add_directory ()</title>
+<indexterm><primary>thunar_vfs_monitor_add_directory</primary></indexterm><programlisting><link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link>* thunar_vfs_monitor_add_directory
+                                            (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</link> callback,
+                                             <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> of the directory that should be watched.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>callback</parameter>&nbsp;:</term>
+<listitem><simpara> the callback function to invoke.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara> additional data to pass to <parameter>callback</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link> for the new watch.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-add-file"/>thunar_vfs_monitor_add_file ()</title>
+<indexterm><primary>thunar_vfs_monitor_add_file</primary></indexterm><programlisting><link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link>* thunar_vfs_monitor_add_file
+                                            (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="ThunarVfsMonitorCallback">ThunarVfsMonitorCallback</link> callback,
+                                             <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> of the file that should be watched.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>callback</parameter>&nbsp;:</term>
+<listitem><simpara> the callback function to invoke.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&nbsp;:</term>
+<listitem><simpara> additional data to pass to <parameter>callback</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link> for the new watch.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-remove"/>thunar_vfs_monitor_remove ()</title>
+<indexterm><primary>thunar_vfs_monitor_remove</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_monitor_remove       (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorHandle">ThunarVfsMonitorHandle</link> *handle);</programlisting>
+<para>
+Removes <parameter>handle</parameter> from <parameter>monitor</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>handle</parameter>&nbsp;:</term>
+<listitem><simpara> a valid <link linkend="ThunarVfsMonitorHandle"><type>ThunarVfsMonitorHandle</type></link> for <parameter>monitor</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-feed"/>thunar_vfs_monitor_feed ()</title>
+<indexterm><primary>thunar_vfs_monitor_feed</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_monitor_feed         (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor,
+                                             <link linkend="ThunarVfsMonitorEvent">ThunarVfsMonitorEvent</link> event,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Explicitly injects the given <parameter>event</parameter> into <parameter>monitor</parameter><!---->s event
+processing logic.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>event</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsMonitorEvent"><type>ThunarVfsMonitorEvent</type></link> that should be emulated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> on which <parameter>event</parameter> took place.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-monitor-wait"/>thunar_vfs_monitor_wait ()</title>
+<indexterm><primary>thunar_vfs_monitor_wait</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_monitor_wait         (<link linkend="ThunarVfsMonitor">ThunarVfsMonitor</link> *monitor);</programlisting>
+<para>
+Suspends the execution of the current thread until the
+<parameter>monitor</parameter> has processed all currently pending events. The
+calling thread must own a reference on the <parameter>monitor</parameter>!
+</para>
+<para>
+This method should never be called from the main thread
+or you'll lock up your application!!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>monitor</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsMonitor"><type>ThunarVfsMonitor</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-operations.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-operations.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-operations.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,401 @@
+<refentry id="thunar-vfs-Operations">
+<refmeta>
+<refentrytitle>Operations</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Operations</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-listdir">thunar_vfs_listdir</link>            (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-copy-file">thunar_vfs_copy_file</link>          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-copy-files">thunar_vfs_copy_files</link>         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-link-file">thunar_vfs_link_file</link>          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-link-files">thunar_vfs_link_files</link>         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-move-file">thunar_vfs_move_file</link>          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-move-files">thunar_vfs_move_files</link>         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-unlink-file">thunar_vfs_unlink_file</link>        (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-unlink-files">thunar_vfs_unlink_files</link>       (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-make-directory">thunar_vfs_make_directory</link>     (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsJob">ThunarVfsJob</link>* <link linkend="thunar-vfs-make-directories">thunar_vfs_make_directories</link>   (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="thunar-vfs-listdir"/>thunar_vfs_listdir ()</title>
+<indexterm><primary>thunar_vfs_listdir</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_listdir            (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Generates a <link linkend="ThunarVfsListdirJob"><type>ThunarVfsListdirJob</type></link>, which can be used to list the
+contents of a directory (as specified by <parameter>path</parameter>). If the creation
+of the job failes for some reason, <literal>NULL</literal> will be returned and
+<parameter>error</parameter> will be set to point to a <link linkend="GError"><type>GError</type></link> describing the cause.
+Else the newly allocated <link linkend="ThunarVfsListdirJob"><type>ThunarVfsListdirJob</type></link> will be returned
+and the caller is responsible to call <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</para>
+<para>
+Note, that the returned job is launched right away, so you
+don't need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> for the folder that should be listed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsListdirJob"><type>ThunarVfsListdirJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-copy-file"/>thunar_vfs_copy_file ()</title>
+<indexterm><primary>thunar_vfs_copy_file</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_copy_file          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsTransferJob"><type>ThunarVfsTransferJob</type></link>, which copies the file
+from <parameter>source_path</parameter> to <parameter>target_path</parameter>. That said, the file or directory
+located at <parameter>source_path</parameter> will be placed at <parameter>target_path</parameter>, NOT INTO
+<parameter>target_path</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned job using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path</parameter>&nbsp;:</term>
+<listitem><simpara> the source <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path</parameter>&nbsp;:</term>
+<listitem><simpara> the target <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsTransferJob"><type>ThunarVfsTransferJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-copy-files"/>thunar_vfs_copy_files ()</title>
+<indexterm><primary>thunar_vfs_copy_files</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_copy_files         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Similar to <link linkend="thunar-vfs-copy-file"><function>thunar_vfs_copy_file()</function></link>, but takes a bunch of files. The
+<parameter>source_path_list</parameter> and <parameter>target_path_list</parameter> must be of the same size.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it. The caller is responsible
+to free the returned object using <link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer
+needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path_list</parameter>&nbsp;:</term>
+<listitem><simpara> the list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s that should be copied.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path_list</parameter>&nbsp;:</term>
+<listitem><simpara> the list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s for the targets.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsTransferJob"><type>ThunarVfsTransferJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-link-file"/>thunar_vfs_link_file ()</title>
+<indexterm><primary>thunar_vfs_link_file</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_link_file          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsLinkJob"><type>ThunarVfsLinkJob</type></link>, which creates a symbolic
+link from <parameter>source_path</parameter> to <parameter>target_path</parameter>.
+</para>
+<para>
+If <parameter>source_path</parameter> and <parameter>target_path</parameter> refer to the same file,
+a new unique target filename will be choosen automatically.
+</para>
+<para>
+The caller is responsible to free the returned job using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path</parameter>&nbsp;:</term>
+<listitem><simpara> the source <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path</parameter>&nbsp;:</term>
+<listitem><simpara> the target <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsLinkJob"><type>ThunarVfsLinkJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-link-files"/>thunar_vfs_link_files ()</title>
+<indexterm><primary>thunar_vfs_link_files</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_link_files         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Like <link linkend="thunar-vfs-link-file"><function>thunar_vfs_link_file()</function></link>, but works on path lists, rather than
+a single path.
+</para>
+<para>
+The caller is responsible to free the returned job using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path_list</parameter>&nbsp;:</term>
+<listitem><simpara> list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s to the source files.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path_list</parameter>&nbsp;:</term>
+<listitem><simpara> list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s to the target files.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsLinkJob"><type>ThunarVfsLinkJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-move-file"/>thunar_vfs_move_file ()</title>
+<indexterm><primary>thunar_vfs_move_file</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_move_file          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *source_path,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *target_path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsTransferJob"><type>ThunarVfsTransferJob</type></link>, which moves the file
+from <parameter>source_path</parameter> to <parameter>target_path</parameter>. That said, the file or directory
+located at <parameter>source_path</parameter> will be placed at <parameter>target_path</parameter>, NOT INTO
+<parameter>target_path</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned job using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path</parameter>&nbsp;:</term>
+<listitem><simpara> the source <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path</parameter>&nbsp;:</term>
+<listitem><simpara> the target <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsTransferJob"><type>ThunarVfsTransferJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-move-files"/>thunar_vfs_move_files ()</title>
+<indexterm><primary>thunar_vfs_move_files</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_move_files         (<link linkend="GList">GList</link> *source_path_list,
+                                             <link linkend="GList">GList</link> *target_path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>source_path_list</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>target_path_list</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-unlink-file"/>thunar_vfs_unlink_file ()</title>
+<indexterm><primary>thunar_vfs_unlink_file</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_unlink_file        (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Simple wrapper to <link linkend="thunar-vfs-unlink-files"><function>thunar_vfs_unlink_files()</function></link>, which takes
+only a single path.
+</para>
+<para>
+Note, that the returned job is launched right away, so you
+don't need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it. The caller
+is responsible to free the returned object using <link linkend="g-object-unref"><function>g_object_unref()</function></link>
+when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>, that should be unlinked.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsUnlinkJob"><type>ThunarVfsUnlinkJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-unlink-files"/>thunar_vfs_unlink_files ()</title>
+<indexterm><primary>thunar_vfs_unlink_files</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_unlink_files       (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Generates a <link linkend="ThunarVfsInteractiveJob"><type>ThunarVfsInteractiveJob</type></link>, which can be used to unlink
+all files referenced by the <parameter>path_list</parameter>. If the creation of the job
+failes for some reason, <literal>NULL</literal> will be returned and <parameter>error</parameter> will
+be set to point to a <link linkend="GError"><type>GError</type></link> describing the cause. Else, the
+newly allocated <link linkend="ThunarVfsUnlinkJob"><type>ThunarVfsUnlinkJob</type></link> will be returned, and the
+caller is responsible to call <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</para>
+<para>
+Note, that the returned job is launched right away, so you
+don't need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s, that should be unlinked.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsUnlinkJob"><type>ThunarVfsUnlinkJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-make-directory"/>thunar_vfs_make_directory ()</title>
+<indexterm><primary>thunar_vfs_make_directory</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_make_directory     (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Generates a <link linkend="ThunarVfsMkdirJob"><type>ThunarVfsMkdirJob</type></link>, which can be used to
+asynchronously create a new directory at the given <parameter>path</parameter>. If
+the creation of the job fails for some reason, <literal>NULL</literal> will be
+returned and <parameter>error</parameter> will be set to point to a <link linkend="GError"><type>GError</type></link>
+describing the cause of the problem. Else the newly allocated
+<link linkend="ThunarVfsMkdirJob"><type>ThunarVfsMkdirJob</type></link> will be returned, and the caller is responsible
+to call <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</para>
+<para>
+Note, that the returned job is launched right away, so you
+don't need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> to the directory to create.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsMkdirJob"><type>ThunarVfsMkdirJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-make-directories"/>thunar_vfs_make_directories ()</title>
+<indexterm><primary>thunar_vfs_make_directories</primary></indexterm><programlisting><link linkend="ThunarVfsJob">ThunarVfsJob</link>* thunar_vfs_make_directories   (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Similar to <link linkend="thunar-vfs-make-directory"><function>thunar_vfs_make_directory()</function></link>, but allows the creation
+of multiple directories using a single <link linkend="ThunarVfsJob"><type>ThunarVfsJob</type></link>.
+</para>
+<para>
+The caller is responsible to free the returned job using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+Note, that the returned job is launched right away, so you don't
+need to call <link linkend="thunar-vfs-job-launch"><function>thunar_vfs_job_launch()</function></link> on it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!--->s that contain the paths
+             to the directories which should be created.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsMkdirJob"><type>ThunarVfsMkdirJob</type></link> or <literal>NULL</literal>
+              if an error occurs while creating the job.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-path.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-path.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-path.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,543 @@
+<refentry id="thunar-vfs-ThunarVfsPath">
+<refmeta>
+<refentrytitle>ThunarVfsPath</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsPath</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsPath">ThunarVfsPath</link>;
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-new">thunar_vfs_path_new</link>          (const <link linkend="gchar">gchar</link> *identifier,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-get-for-home">thunar_vfs_path_get_for_home</link> (void);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-get-for-root">thunar_vfs_path_get_for_root</link> (void);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-ref">thunar_vfs_path_ref</link>          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-path-unref">thunar_vfs_path_unref</link>           (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="guint">guint</link>       <link linkend="thunar-vfs-path-hash">thunar_vfs_path_hash</link>            (<link linkend="gconstpointer">gconstpointer</link> path_ptr);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-path-equal">thunar_vfs_path_equal</link>           (<link linkend="gconstpointer">gconstpointer</link> path_ptr_a,
+                                             <link linkend="gconstpointer">gconstpointer</link> path_ptr_b);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-path-is-home">thunar_vfs_path_is_home</link>         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-path-is-root">thunar_vfs_path_is_root</link>         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-relative">thunar_vfs_path_relative</link>     (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *parent,
+                                             const <link linkend="gchar">gchar</link> *name);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-path-get-name">thunar_vfs_path_get_name</link>       (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-path-get-parent">thunar_vfs_path_get_parent</link>   (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-path-dup-string">thunar_vfs_path_dup_string</link>      (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="gssize">gssize</link>      <link linkend="thunar-vfs-path-to-string">thunar_vfs_path_to_string</link>       (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> bufsize,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-path-dup-uri">thunar_vfs_path_dup_uri</link>         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="gssize">gssize</link>      <link linkend="thunar-vfs-path-to-uri">thunar_vfs_path_to_uri</link>          (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> bufsize,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-path-list-from-string">thunar_vfs_path_list_from_string</link>
+                                            (const <link linkend="gchar">gchar</link> *uri_string,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-path-list-to-string">thunar_vfs_path_list_to_string</link>  (<link linkend="GList">GList</link> *path_list);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-path-list-append">thunar_vfs_path_list_append</link>     (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-path-list-prepend">thunar_vfs_path_list_prepend</link>    (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-path-list-copy">thunar_vfs_path_list_copy</link>       (<link linkend="GList">GList</link> *path_list);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-path-list-free">thunar_vfs_path_list_free</link>       (<link linkend="GList">GList</link> *path_list);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsPath"/>ThunarVfsPath</title>
+<indexterm><primary>ThunarVfsPath</primary></indexterm><programlisting>typedef struct {
+} ThunarVfsPath;
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-new"/>thunar_vfs_path_new ()</title>
+<indexterm><primary>thunar_vfs_path_new</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_new          (const <link linkend="gchar">gchar</link> *identifier,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Returns a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> that represents the given
+<parameter>identifier</parameter> or <literal>NULL</literal> on error. In the latter case
+<parameter>error</parameter> will be set to point to an <link linkend="GError"><type>GError</type></link> describing
+the problem.
+</para>
+<para>
+The caller is responsible to free the returned
+object using <link linkend="thunar-vfs-path-unref"><function>thunar_vfs_path_unref()</function></link> when no
+longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>identifier</parameter>&nbsp;:</term>
+<listitem><simpara> an URI identifier or an absolute path.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> for <parameter>identifier</parameter>
+              or <literal>NULL</literal> on error.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-get-for-home"/>thunar_vfs_path_get_for_home ()</title>
+<indexterm><primary>thunar_vfs_path_get_for_home</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_get_for_home (void);</programlisting>
+<para>
+Returns the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> that represents
+the current users home directory.
+</para>
+<para>
+The caller is responsible to free the
+returned object using <link linkend="thunar-vfs-path-unref"><function>thunar_vfs_path_unref()</function></link>
+when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> for the 
+              current users home directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-get-for-root"/>thunar_vfs_path_get_for_root ()</title>
+<indexterm><primary>thunar_vfs_path_get_for_root</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_get_for_root (void);</programlisting>
+<para>
+Returns the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> that represents the
+file systems root directory.
+</para>
+<para>
+The caller is responsible to free the returned
+object using <link linkend="thunar-vfs-path-unref"><function>thunar_vfs_path_unref()</function></link> when no
+longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> for the file
+              systems root directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-ref"/>thunar_vfs_path_ref ()</title>
+<indexterm><primary>thunar_vfs_path_ref</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_ref          (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Increments the reference count on <parameter>path</parameter>
+and returns a reference to <parameter>path</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a reference to <parameter>path</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-unref"/>thunar_vfs_path_unref ()</title>
+<indexterm><primary>thunar_vfs_path_unref</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_path_unref           (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Decreases the reference count on <parameter>path</parameter> and
+frees the resources allocated for <parameter>path</parameter>
+once the reference count drops to zero.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-hash"/>thunar_vfs_path_hash ()</title>
+<indexterm><primary>thunar_vfs_path_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>       thunar_vfs_path_hash            (<link linkend="gconstpointer">gconstpointer</link> path_ptr);</programlisting>
+<para>
+Generates a hash value for the given <parameter>path_ptr</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_ptr</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the hash value for <parameter>path_ptr</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-equal"/>thunar_vfs_path_equal ()</title>
+<indexterm><primary>thunar_vfs_path_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_path_equal           (<link linkend="gconstpointer">gconstpointer</link> path_ptr_a,
+                                             <link linkend="gconstpointer">gconstpointer</link> path_ptr_b);</programlisting>
+<para>
+Checks whether <parameter>path_ptr_a</parameter> and <parameter>path_ptr_b</parameter> refer
+to the same local path.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_ptr_a</parameter>&nbsp;:</term>
+<listitem><simpara> first <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path_ptr_b</parameter>&nbsp;:</term>
+<listitem><simpara> second <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>path_ptr_a</parameter> and <parameter>path_ptr_b</parameter>
+              are equal.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-is-home"/>thunar_vfs_path_is_home ()</title>
+<indexterm><primary>thunar_vfs_path_is_home</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_path_is_home         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Checks whether <parameter>path</parameter> refers to the users home
+directory.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>path</parameter> refers to the users
+              home directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-is-root"/>thunar_vfs_path_is_root ()</title>
+<indexterm><primary>thunar_vfs_path_is_root</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_path_is_root         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Checks whether path refers to the root directory.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>path</parameter> refers to the root
+              directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-relative"/>thunar_vfs_path_relative ()</title>
+<indexterm><primary>thunar_vfs_path_relative</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_relative     (<link linkend="ThunarVfsPath">ThunarVfsPath</link> *parent,
+                                             const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Returns a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> for the file <parameter>name</parameter> relative to
+<parameter>parent</parameter>. <parameter>name</parameter> must be a valid filename in the local file
+system encoding and it may not contain any slashes.
+</para>
+<para>
+The caller is responsible to free the returned object
+using <link linkend="thunar-vfs-path-unref"><function>thunar_vfs_path_unref()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>parent</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> a valid filename in the local file system encoding.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the path to <parameter>name</parameter> relative to <parameter>parent</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-get-name"/>thunar_vfs_path_get_name ()</title>
+<indexterm><primary>thunar_vfs_path_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_path_get_name       (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Returns the base name of the <parameter>path</parameter> in the local
+file system encoding.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the base name of <parameter>path</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-get-parent"/>thunar_vfs_path_get_parent ()</title>
+<indexterm><primary>thunar_vfs_path_get_parent</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_path_get_parent   (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Returns the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link> that refers to the parent
+directory of <parameter>path</parameter> or <literal>NULL</literal> if <parameter>path</parameter> refers to the
+root file system node.
+</para>
+<para>
+No additional reference is taken on the parent, so
+you'll need to call <link linkend="thunar-vfs-path-ref"><function>thunar_vfs_path_ref()</function></link> yourself
+if you need to keep a reference.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the parent of <parameter>path</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-dup-string"/>thunar_vfs_path_dup_string ()</title>
+<indexterm><primary>thunar_vfs_path_dup_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_path_dup_string      (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Like <link linkend="thunar-vfs-path-to-string"><function>thunar_vfs_path_to_string()</function></link>, this function transform
+the <parameter>path</parameter> to its string representation, but unlike
+<link linkend="thunar-vfs-path-to-string"><function>thunar_vfs_path_to_string()</function></link>, this function automatically
+allocates the required amount of memory from the heap.
+The returned string must be freed by the caller when
+no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the string representation of <parameter>path</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-to-string"/>thunar_vfs_path_to_string ()</title>
+<indexterm><primary>thunar_vfs_path_to_string</primary></indexterm><programlisting><link linkend="gssize">gssize</link>      thunar_vfs_path_to_string       (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> bufsize,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Stores the <parameter>path</parameter> into the string pointed to by <parameter>buffer</parameter>,
+so it can be used for system path operations. Returns
+the number of bytes stored to <parameter>buffer</parameter> or a negative
+value if <parameter>bufsize</parameter> is too small to store the whole <parameter>path</parameter>.
+In the latter case <parameter>error</parameter> will be set to point to an
+error describing the problem.
+</para>
+<para>
+If <parameter>buffer</parameter> is allocated on the stack, it is suggested
+to use <link linkend="THUNAR-VFS-PATH-MAXSTRLEN:CAPS"><type>THUNAR_VFS_PATH_MAXSTRLEN</type></link> for the buffer size
+in most cases. The stack should never be used in recursive
+functions; use <link linkend="thunar-vfs-path-dup-string"><function>thunar_vfs_path_dup_string()</function></link> instead there.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buffer</parameter>&nbsp;:</term>
+<listitem><simpara> the buffer to store the path string to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>bufsize</parameter>&nbsp;:</term>
+<listitem><simpara> the size of <parameter>buffer</parameter> in bytes.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the number of bytes (including the null
+              byte) stored to <parameter>buffer</parameter> or a negative
+              value if <parameter>buffer</parameter> cannot hold the whole
+              <parameter>path</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-dup-uri"/>thunar_vfs_path_dup_uri ()</title>
+<indexterm><primary>thunar_vfs_path_dup_uri</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_path_dup_uri         (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Similar to <link linkend="thunar-vfs-path-to-uri"><function>thunar_vfs_path_to_uri()</function></link>, but automatically
+allocates memory on the heap instead of using a user
+supplied buffer for the URI.
+</para>
+<para>
+The caller is responsible to free the returned string
+using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the escaped URI for <parameter>path</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-to-uri"/>thunar_vfs_path_to_uri ()</title>
+<indexterm><primary>thunar_vfs_path_to_uri</primary></indexterm><programlisting><link linkend="gssize">gssize</link>      thunar_vfs_path_to_uri          (const <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> bufsize,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Escapes <parameter>path</parameter> according to the rules of the file URI
+specification and stores the escaped URI to <parameter>buffer</parameter>.
+Returns the number of bytes stored to <parameter>buffer</parameter> or a
+negative value if <parameter>bufsize</parameter> is too small to store the
+escaped URI. In the latter case <parameter>error</parameter> will be set to
+point to an <link linkend="GError"><type>GError</type></link> describing the problem.
+</para>
+<para>
+When using the stack for <parameter>buffer</parameter>, it is suggested to
+use <link linkend="THUNAR-VFS-PATH-MAXURILEN:CAPS"><type>THUNAR_VFS_PATH_MAXURILEN</type></link> for the buffer size in
+most cases. The stack should never be used in recursive
+functions; use <link linkend="thunar-vfs-path-dup-uri"><function>thunar_vfs_path_dup_uri()</function></link> instead there.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buffer</parameter>&nbsp;:</term>
+<listitem><simpara> the buffer to store the URI string to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>bufsize</parameter>&nbsp;:</term>
+<listitem><simpara> the size of <parameter>buffer</parameter> in bytes.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the number of bytes (including the null
+              byte) stored to <parameter>buffer</parameter> or a negative
+              value if <parameter>buffer</parameter> cannot hold the URI.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-from-string"/>thunar_vfs_path_list_from_string ()</title>
+<indexterm><primary>thunar_vfs_path_list_from_string</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_path_list_from_string
+                                            (const <link linkend="gchar">gchar</link> *uri_string,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Splits an URI list conforming to the text/uri-list
+mime type defined in RFC 2483 into individual URIs,
+discarding any comments and whitespace.
+</para>
+<para>
+If all URIs were successfully parsed into <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>
+objects, the list of parsed URIs will be returned, and
+you'll need to call <link linkend="thunar-vfs-path-list-free"><function>thunar_vfs_path_list_free()</function></link> to
+release the list resources. Else if the parsing fails
+at some point, <literal>NULL</literal> will be returned and <parameter>error</parameter> will
+be set to describe the cause.
+</para>
+<para>
+Note, that if <parameter>string</parameter> contains no URIs, this function
+will also return <literal>NULL</literal>, but <parameter>error</parameter> won't be set. So
+take care when checking for an error condition!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_string</parameter>&nbsp;:</term>
+<listitem><simpara> a string representation of an URI list.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>'s or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-to-string"/>thunar_vfs_path_list_to_string ()</title>
+<indexterm><primary>thunar_vfs_path_list_to_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_path_list_to_string  (<link linkend="GList">GList</link> *path_list);</programlisting>
+<para>
+Free the returned value using <link linkend="g-free"><function>g_free()</function></link> when you
+are done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the string representation of <parameter>path_list</parameter> conforming to the
+              text/uri-list mime type defined in RFC 2483.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-append"/>thunar_vfs_path_list_append ()</title>
+<indexterm><primary>thunar_vfs_path_list_append</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_path_list_append     (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Appends <parameter>path</parameter> to the <parameter>path_list</parameter> while taking
+an additional reference for <parameter>path</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> pointer to the extended <parameter>path_list</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-prepend"/>thunar_vfs_path_list_prepend ()</title>
+<indexterm><primary>thunar_vfs_path_list_prepend</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_path_list_prepend    (<link linkend="GList">GList</link> *path_list,
+                                             <link linkend="ThunarVfsPath">ThunarVfsPath</link> *path);</programlisting>
+<para>
+Similar to <link linkend="thunar-vfs-path-list-append"><function>thunar_vfs_path_list_append()</function></link>, but
+prepends the <parameter>path</parameter> to the <parameter>path_list</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> pointer to the extended <parameter>path_list</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-copy"/>thunar_vfs_path_list_copy ()</title>
+<indexterm><primary>thunar_vfs_path_list_copy</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_path_list_copy       (<link linkend="GList">GList</link> *path_list);</programlisting>
+<para>
+Takes a deep copy of <parameter>path_list</parameter> and returns the
+result. The caller is responsible to free the
+returned list using <link linkend="thunar-vfs-path-list-free"><function>thunar_vfs_path_list_free()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a deep copy of <parameter>path_list</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-path-list-free"/>thunar_vfs_path_list_free ()</title>
+<indexterm><primary>thunar_vfs_path_list_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_path_list_free       (<link linkend="GList">GList</link> *path_list);</programlisting>
+<para>
+Frees the <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s in <parameter>path_list</parameter> and
+the <parameter>path_list</parameter> itself.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsPath"><type>ThunarVfsPath</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb-factory.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb-factory.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb-factory.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,276 @@
+<refentry id="ThunarVfsThumbFactory">
+<refmeta>
+<refentrytitle>ThunarVfsThumbFactory</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsThumbFactory</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsThumbFactory-struct">ThunarVfsThumbFactory</link>;
+<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link>* <link linkend="thunar-vfs-thumb-factory-new">thunar_vfs_thumb_factory_new</link>
+                                            (<link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link> size);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-thumb-factory-lookup-thumbnail">thunar_vfs_thumb_factory_lookup_thumbnail</link>
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-thumb-factory-can-thumbnail">thunar_vfs_thumb_factory_can_thumbnail</link>
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *mime_info,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-thumb-factory-has-failed-thumbnail">thunar_vfs_thumb_factory_has_failed_thumbnail</link>
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);
+<link linkend="GdkPixbuf">GdkPixbuf</link>*  <link linkend="thunar-vfs-thumb-factory-generate-thumbnail">thunar_vfs_thumb_factory_generate_thumbnail</link>
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *mime_info);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-thumb-factory-store-thumbnail">thunar_vfs_thumb_factory_store_thumbnail</link>
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="GdkPixbuf">GdkPixbuf</link> *pixbuf,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime,
+                                             <link linkend="GError">GError</link> **error);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsThumbFactory
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+<refsect1>
+<title>Properties</title>
+<synopsis>
+
+  &quot;<link linkend="ThunarVfsThumbFactory--size">size</link>&quot;                 <link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link>    : Read / Write / Construct Only
+</synopsis>
+</refsect1>
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsThumbFactory-struct"/>ThunarVfsThumbFactory</title>
+<indexterm><primary>ThunarVfsThumbFactory</primary></indexterm><programlisting>typedef struct _ThunarVfsThumbFactory ThunarVfsThumbFactory;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-new"/>thunar_vfs_thumb_factory_new ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_new</primary></indexterm><programlisting><link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link>* thunar_vfs_thumb_factory_new
+                                            (<link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link> size);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>, that is able to
+load and store thumbnails in the given <parameter>size</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
+<listitem><simpara> the desired <link linkend="ThunarVfsThumbSize"><type>ThunarVfsThumbSize</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-lookup-thumbnail"/>thunar_vfs_thumb_factory_lookup_thumbnail ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_lookup_thumbnail</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_thumb_factory_lookup_thumbnail
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);</programlisting>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>factory</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mtime</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara>
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-can-thumbnail"/>thunar_vfs_thumb_factory_can_thumbnail ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_can_thumbnail</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_thumb_factory_can_thumbnail
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *mime_info,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);</programlisting>
+<para>
+Checks if <parameter>factory</parameter> can generate a thumbnail for
+the file specified by <parameter>uri</parameter>, which is of type
+<parameter>mime_info</parameter>.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>factory</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to a file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mime_info</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> of the file referred to by <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mtime</parameter>&nbsp;:</term>
+<listitem><simpara> the modification time of the file referred to by <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>factory</parameter> can generate a thumbnail for <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-has-failed-thumbnail"/>thunar_vfs_thumb_factory_has_failed_thumbnail ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_has_failed_thumbnail</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_thumb_factory_has_failed_thumbnail
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);</programlisting>
+<para>
+Checks whether we know that <parameter>factory</parameter> won't be able to generate
+a thumbnail for the file referred to by <parameter>uri</parameter>, whose modification
+time is <parameter>mtime</parameter>.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>factory</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to a file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mtime</parameter>&nbsp;:</term>
+<listitem><simpara> the modification time of the file referred to by <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>factory</parameter> knows that it cannot generate
+              a thumbnail for <parameter>uri</parameter>, else <literal>TRUE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-generate-thumbnail"/>thunar_vfs_thumb_factory_generate_thumbnail ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_generate_thumbnail</primary></indexterm><programlisting><link linkend="GdkPixbuf">GdkPixbuf</link>*  thunar_vfs_thumb_factory_generate_thumbnail
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="ThunarVfsMimeInfo">ThunarVfsMimeInfo</link> *mime_info);</programlisting>
+<para>
+Tries to generate a thumbnail for the file referred to by <parameter>uri</parameter> in
+<parameter>factory</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned <link linkend="GdkPixbuf"><type>GdkPixbuf</type></link> using
+<link linkend="g-object-unref"><function>g_object_unref()</function></link> when no longer needed.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>factory</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to the file for which a thumbnail
+             should be generated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mime_info</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsMimeInfo"><type>ThunarVfsMimeInfo</type></link> for the file referred to by <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the thumbnail for the <parameter>uri</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-factory-store-thumbnail"/>thunar_vfs_thumb_factory_store_thumbnail ()</title>
+<indexterm><primary>thunar_vfs_thumb_factory_store_thumbnail</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_thumb_factory_store_thumbnail
+                                            (<link linkend="ThunarVfsThumbFactory">ThunarVfsThumbFactory</link> *factory,
+                                             const <link linkend="GdkPixbuf">GdkPixbuf</link> *pixbuf,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Stores <parameter>pixbuf</parameter> as thumbnail for <parameter>uri</parameter> in the right place, according
+to the size set for <parameter>factory</parameter>.
+</para>
+<para>
+If you specify <literal>NULL</literal> for <parameter>pixbuf</parameter>, the <parameter>factory</parameter> will remember that
+the thumbnail generation for <parameter>uri</parameter> failed.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>factory</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pixbuf</parameter>&nbsp;:</term>
+<listitem><simpara> the thumbnail <link linkend="GdkPixbuf"><type>GdkPixbuf</type></link> to store or <literal>NULL</literal>
+           to remember the thumbnail for <parameter>uri</parameter> as failed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> of the original file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mtime</parameter>&nbsp;:</term>
+<listitem><simpara> the last known modification time of the original file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if the thumbnail was stored successfully,
+              else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+<refsect1>
+<title>Properties</title>
+<refsect2><title><anchor id="ThunarVfsThumbFactory--size"/>The &quot;<literal>size</literal>&quot; property</title>
+<programlisting>  &quot;size&quot;                 <link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link>    : Read / Write / Construct Only</programlisting>
+<para>The desired thumbnail size.</para><para>Default value: THUNAR_VFS_THUMB_SIZE_NORMAL</para>
+</refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-thumb.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,131 @@
+<refentry id="thunar-vfs-Thumbnail-Functions">
+<refmeta>
+<refentrytitle>Thumbnail Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Thumbnail Functions</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link>;
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-thumb-path-for-uri">thunar_vfs_thumb_path_for_uri</link>   (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link> size);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-thumb-path-is-valid">thunar_vfs_thumb_path_is_valid</link>  (const <link linkend="gchar">gchar</link> *thumb_path,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsThumbSize"/>enum ThunarVfsThumbSize</title>
+<indexterm><primary>ThunarVfsThumbSize</primary></indexterm><programlisting>typedef enum
+{
+  THUNAR_VFS_THUMB_SIZE_NORMAL,
+  THUNAR_VFS_THUMB_SIZE_LARGE,
+} ThunarVfsThumbSize;
+</programlisting>
+<para>
+The desired size of thumbnails loaded by a <link linkend="ThunarVfsThumbFactory"><type>ThunarVfsThumbFactory</type></link>.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_THUMB_SIZE_NORMAL</literal></term>
+<listitem><simpara> thumbnails at size 128x128.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_THUMB_SIZE_LARGE</literal></term>
+<listitem><simpara> thumbnails at size 256x256.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-path-for-uri"/>thunar_vfs_thumb_path_for_uri ()</title>
+<indexterm><primary>thunar_vfs_thumb_path_for_uri</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_thumb_path_for_uri   (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsThumbSize">ThunarVfsThumbSize</link> size);</programlisting>
+<para>
+Returns the absolute path to the thumbnail location
+for the file described by <parameter>uri</parameter>, at the given <parameter>size</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to the original file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
+<listitem><simpara> the desired <link linkend="ThunarVfsThumbSize"><type>ThunarVfsThumbSize</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the absolute path to the thumbnail
+              location for <parameter>uri</parameter> at <parameter>size</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-thumb-path-is-valid"/>thunar_vfs_thumb_path_is_valid ()</title>
+<indexterm><primary>thunar_vfs_thumb_path_is_valid</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_thumb_path_is_valid  (const <link linkend="gchar">gchar</link> *thumb_path,
+                                             const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link> mtime);</programlisting>
+<para>
+Checks whether the file located at <parameter>thumb_path</parameter> contains a
+valid thumbnail for the file described by <parameter>uri</parameter>.
+</para>
+<para>
+The usage of this method is thread-safe.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>thumb_path</parameter>&nbsp;:</term>
+<listitem><simpara> the absolute path to a thumbnail file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to the original file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mtime</parameter>&nbsp;:</term>
+<listitem><simpara> the modification time of the original file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>thumb_path</parameter> is a valid thumbnail for
+              the file referred to by <parameter>uri</parameter>, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-info.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-info.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-info.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,116 @@
+<refentry id="thunar-vfs-ThunarVfsTrashInfo">
+<refmeta>
+<refentrytitle>ThunarVfsTrashInfo</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsTrashInfo</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link>;
+<link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link>* <link linkend="thunar-vfs-trash-info-copy">thunar_vfs_trash_info_copy</link>
+                                            (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-trash-info-free">thunar_vfs_trash_info_free</link>      (<link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-trash-info-get-path">thunar_vfs_trash_info_get_path</link> (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-trash-info-get-deletion-date">thunar_vfs_trash_info_get_deletion_date</link>
+                                            (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsTrashInfo"/>ThunarVfsTrashInfo</title>
+<indexterm><primary>ThunarVfsTrashInfo</primary></indexterm><programlisting>typedef struct _ThunarVfsTrashInfo ThunarVfsTrashInfo;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-info-copy"/>thunar_vfs_trash_info_copy ()</title>
+<indexterm><primary>thunar_vfs_trash_info_copy</primary></indexterm><programlisting><link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link>* thunar_vfs_trash_info_copy
+                                            (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);</programlisting>
+<para>
+Creates a new <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link> as a copy of <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-info-free"/>thunar_vfs_trash_info_free ()</title>
+<indexterm><primary>thunar_vfs_trash_info_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_trash_info_free      (<link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);</programlisting>
+<para>
+Frees the resources allocated to <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-info-get-path"/>thunar_vfs_trash_info_get_path ()</title>
+<indexterm><primary>thunar_vfs_trash_info_get_path</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_trash_info_get_path (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);</programlisting>
+<para>
+Returns the original path stored with <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the original path.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-info-get-deletion-date"/>thunar_vfs_trash_info_get_deletion_date ()</title>
+<indexterm><primary>thunar_vfs_trash_info_get_deletion_date</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_trash_info_get_deletion_date
+                                            (const <link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link> *info);</programlisting>
+<para>
+Returns the deletion date of <parameter>info</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashInfo"><type>ThunarVfsTrashInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the deletion date.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-manager.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-manager.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash-manager.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,197 @@
+<refentry id="ThunarVfsTrashManager">
+<refmeta>
+<refentrytitle>ThunarVfsTrashManager</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsTrashManager</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsTrashManager-struct">ThunarVfsTrashManager</link>;
+<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link>* <link linkend="thunar-vfs-trash-manager-get-default">thunar_vfs_trash_manager_get_default</link>
+                                            (void);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-trash-manager-is-empty">thunar_vfs_trash_manager_is_empty</link>
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-trash-manager-get-trashes">thunar_vfs_trash_manager_get_trashes</link>
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager);
+<link linkend="ThunarVfsTrash">ThunarVfsTrash</link>* <link linkend="thunar-vfs-trash-manager-resolve-uri">thunar_vfs_trash_manager_resolve_uri</link>
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager,
+                                             <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="gchar">gchar</link> **path,
+                                             <link linkend="GError">GError</link> **error);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsTrashManager
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+<refsect1>
+<title>Properties</title>
+<synopsis>
+
+  &quot;<link linkend="ThunarVfsTrashManager--empty">empty</link>&quot;                <link linkend="gboolean">gboolean</link>              : Read
+</synopsis>
+</refsect1>
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsTrashManager-struct"/>ThunarVfsTrashManager</title>
+<indexterm><primary>ThunarVfsTrashManager</primary></indexterm><programlisting>typedef struct _ThunarVfsTrashManager ThunarVfsTrashManager;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-manager-get-default"/>thunar_vfs_trash_manager_get_default ()</title>
+<indexterm><primary>thunar_vfs_trash_manager_get_default</primary></indexterm><programlisting><link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link>* thunar_vfs_trash_manager_get_default
+                                            (void);</programlisting>
+<para>
+Returns the default trash manager instance, which is shared by all
+modules using the trash implementation. You'll need to call
+#<link linkend="g-object-unref"><function>g_object_unref()</function></link> on the returned object when you're done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the default trash manager.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-manager-is-empty"/>thunar_vfs_trash_manager_is_empty ()</title>
+<indexterm><primary>thunar_vfs_trash_manager_is_empty</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_trash_manager_is_empty
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager);</programlisting>
+<para>
+Determines whether all trashes handled by <parameter>manager</parameter> are
+empty. Returns <literal>FALSE</literal> if atleast one trash contains
+files, else <literal>TRUE</literal>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashManager"><type>ThunarVfsTrashManager</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>manager</parameter> has no files, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-manager-get-trashes"/>thunar_vfs_trash_manager_get_trashes ()</title>
+<indexterm><primary>thunar_vfs_trash_manager_get_trashes</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_trash_manager_get_trashes
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager);</programlisting>
+<para>
+Returns all trashes currently known to the <parameter>manager</parameter>.
+</para>
+<para>
+The returned list must be freed when no longer needed,
+which can be done like this:
+<informalexample><programlisting>
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrashManager"><type>ThunarVfsTrashManager</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of currently known trashes.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-manager-resolve-uri"/>thunar_vfs_trash_manager_resolve_uri ()</title>
+<indexterm><primary>thunar_vfs_trash_manager_resolve_uri</primary></indexterm><programlisting><link linkend="ThunarVfsTrash">ThunarVfsTrash</link>* thunar_vfs_trash_manager_resolve_uri
+                                            (<link linkend="ThunarVfsTrashManager">ThunarVfsTrashManager</link> *manager,
+                                             <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             <link linkend="gchar">gchar</link> **path,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Parses the given <parameter>uri</parameter> and determines the trash referenced by
+the <parameter>uri</parameter> and the relative path of the file within the trash.
+</para>
+<para>
+Returns the <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link> referenced by <parameter>uri</parameter> or <literal>NULL</literal> on
+error, in which case <parameter>error</parameter> will point to a description
+of the exact cause.
+</para>
+<para>
+For example, the URI 'trash:///0-bar/foo' referes to the
+file 'foo' in 'bar' within the first trash, which is usually
+the "home trash". So a reference to the "home trash" will
+be returned and <parameter>path</parameter> will be set to 'bar/foo'.
+</para>
+<para>
+It is a bug to pass the root trash URI 'trash:///' to
+this function.
+</para>
+<para>
+You'll need to call #<link linkend="g-object-unref"><function>g_object_unref()</function></link> on the returned
+object when you are done with it. In addition if you
+did not specify <literal>NULL</literal> for <parameter>path</parameter>, you'll also have to
+#<link linkend="g-free"><function>g_free()</function></link> the returned path.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara>  a <link linkend="ThunarVfsTrashManager"><type>ThunarVfsTrashManager</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> to resolve.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> location to store the relative path to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link> or <literal>NULL</literal> on error.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+<refsect1>
+<title>Properties</title>
+<refsect2><title><anchor id="ThunarVfsTrashManager--empty"/>The &quot;<literal>empty</literal>&quot; property</title>
+<programlisting>  &quot;empty&quot;                <link linkend="gboolean">gboolean</link>              : Read</programlisting>
+<para>
+<literal>TRUE</literal> if all trashes handled by the given trash manager are
+empty, else <literal>FALSE</literal>.</para>
+<para>
+
+</para><para>Default value: TRUE</para>
+</refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-trash.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,227 @@
+<refentry id="ThunarVfsTrash">
+<refmeta>
+<refentrytitle>ThunarVfsTrash</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsTrash</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsTrash-struct">ThunarVfsTrash</link>;
+<link linkend="gint">gint</link>        <link linkend="thunar-vfs-trash-get-id">thunar_vfs_trash_get_id</link>         (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-trash-get-files">thunar_vfs_trash_get_files</link>      (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash);
+<link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link>* <link linkend="thunar-vfs-trash-get-info">thunar_vfs_trash_get_info</link>
+                                            (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-trash-get-info-path">thunar_vfs_trash_get_info_path</link>  (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-trash-get-uri">thunar_vfs_trash_get_uri</link>      (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-trash-get-path">thunar_vfs_trash_get_path</link>       (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="GtkObject">GtkObject</link>
+         +----ThunarVfsTrash
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+<refsect1>
+<title>Properties</title>
+<synopsis>
+
+  &quot;<link linkend="ThunarVfsTrash--files">files</link>&quot;                <link linkend="gpointer">gpointer</link>              : Read
+</synopsis>
+</refsect1>
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsTrash-struct"/>ThunarVfsTrash</title>
+<indexterm><primary>ThunarVfsTrash</primary></indexterm><programlisting>typedef struct _ThunarVfsTrash ThunarVfsTrash;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-id"/>thunar_vfs_trash_get_id ()</title>
+<indexterm><primary>thunar_vfs_trash_get_id</primary></indexterm><programlisting><link linkend="gint">gint</link>        thunar_vfs_trash_get_id         (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash);</programlisting>
+<para>
+Returns the unique id of the <parameter>trash</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the unique id of <parameter>trash</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-files"/>thunar_vfs_trash_get_files ()</title>
+<indexterm><primary>thunar_vfs_trash_get_files</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_trash_get_files      (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash);</programlisting>
+<para>
+Returns the list of files stored within <parameter>trash</parameter>. The returned
+list contains only the basename of each file relative to the
+<parameter>trash</parameter><!---->s files/ subdirectory.
+</para>
+<para>
+The returned list and the string contained within the list
+are owned by <parameter>trash</parameter> and must not be freed by the caller.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of files stored within <parameter>trash</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-info"/>thunar_vfs_trash_get_info ()</title>
+<indexterm><primary>thunar_vfs_trash_get_info</primary></indexterm><programlisting><link linkend="ThunarVfsTrashInfo">ThunarVfsTrashInfo</link>* thunar_vfs_trash_get_info
+                                            (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);</programlisting>
+<para>
+Determines the trash info for the given <parameter>file</parameter> in <parameter>trash</parameter>. The trash
+info currently contains the original path and deletion date of the
+<parameter>file</parameter>.
+</para>
+<para>
+This function may return <literal>NULL</literal> if there's no trash info associated
+with <parameter>file</parameter>, even tho the file is listed as being stored within
+<parameter>trash</parameter>.
+</para>
+<para>
+The caller is responsible for freeing the returned trash info
+object using the #<link linkend="thunar-vfs-trash-info-free"><function>thunar_vfs_trash_info_free()</function></link> function.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>file</parameter>&nbsp;:</term>
+<listitem><simpara> the basename of the trashed file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the trash info for <parameter>file</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-info-path"/>thunar_vfs_trash_get_info_path ()</title>
+<indexterm><primary>thunar_vfs_trash_get_info_path</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_trash_get_info_path  (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);</programlisting>
+<para>
+Determines the absolute path to the trash info file
+for <parameter>file</parameter>, which includes various informations
+stored when trashing the file.
+</para>
+<para>
+This function should be rarely needed.
+</para>
+<para>
+The caller is responsible to free the returned
+string using #<link linkend="g-free"><function>g_free()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>file</parameter>&nbsp;:</term>
+<listitem><simpara> the basename of the trashed file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the absolute path to the trash info
+              file for <parameter>file</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-uri"/>thunar_vfs_trash_get_uri ()</title>
+<indexterm><primary>thunar_vfs_trash_get_uri</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_trash_get_uri      (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);</programlisting>
+<para>
+Generates a 'trash://' URI that refers to the <parameter>file</parameter> in <parameter>trash</parameter>.
+</para>
+<para>
+You'll need to call #<link linkend="thunar-vfs-uri-unref"><function>thunar_vfs_uri_unref()</function></link> on the returned
+object when you are done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>file</parameter>&nbsp;:</term>
+<listitem><simpara> the basename of the trashed file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the generated <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-trash-get-path"/>thunar_vfs_trash_get_path ()</title>
+<indexterm><primary>thunar_vfs_trash_get_path</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_trash_get_path       (<link linkend="ThunarVfsTrash">ThunarVfsTrash</link> *trash,
+                                             const <link linkend="gchar">gchar</link> *file);</programlisting>
+<para>
+Returns the real absolute path to the <parameter>file</parameter> in <parameter>trash</parameter>. Call
+#<link linkend="g-free"><function>g_free()</function></link> on the returned path if you are done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>trash</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsTrash"><type>ThunarVfsTrash</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>file</parameter>&nbsp;:</term>
+<listitem><simpara> the basename of the trashed file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the absolute path to <parameter>file</parameter> in <parameter>trash</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+<refsect1>
+<title>Properties</title>
+<refsect2><title><anchor id="ThunarVfsTrash--files"/>The &quot;<literal>files</literal>&quot; property</title>
+<programlisting>  &quot;files&quot;                <link linkend="gpointer">gpointer</link>              : Read</programlisting>
+<para>
+The list of files stored within this trash. The list contains
+only the basename of each file relative to the files/ subdirectory.</para>
+<para>
+
+</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-types.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-types.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-types.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,308 @@
+<refentry id="thunar-vfs-Basic-Types">
+<refmeta>
+<refentrytitle>Basic Types</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Basic Types</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <link linkend="ThunarVfsFileType">ThunarVfsFileType</link>;
+enum        <link linkend="ThunarVfsFileMode">ThunarVfsFileMode</link>;
+enum        <link linkend="ThunarVfsFileFlags">ThunarVfsFileFlags</link>;
+typedef     <link linkend="ThunarVfsFileDevice">ThunarVfsFileDevice</link>;
+typedef     <link linkend="ThunarVfsFileInode">ThunarVfsFileInode</link>;
+typedef     <link linkend="ThunarVfsFileSize">ThunarVfsFileSize</link>;
+typedef     <link linkend="ThunarVfsFileTime">ThunarVfsFileTime</link>;
+typedef     <link linkend="ThunarVfsGroupId">ThunarVfsGroupId</link>;
+typedef     <link linkend="ThunarVfsUserId">ThunarVfsUserId</link>;
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsFileType"/>enum ThunarVfsFileType</title>
+<indexterm><primary>ThunarVfsFileType</primary></indexterm><programlisting>typedef enum {
+  THUNAR_VFS_FILE_TYPE_SOCKET     = 0140000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_SYMLINK    = 0120000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_REGULAR    = 0100000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_BLOCKDEV   = 0060000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_DIRECTORY  = 0040000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_CHARDEV    = 0020000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_FIFO       = 0010000 &gt;&gt; 12,
+  THUNAR_VFS_FILE_TYPE_UNKNOWN    = 0000000 &gt;&gt; 12,
+} ThunarVfsFileType;
+</programlisting>
+<para>
+Describes the type of a file.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_SOCKET</literal></term>
+<listitem><simpara> A unix domain socket.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_SYMLINK</literal></term>
+<listitem><simpara> A broken symlink, for which the target does
+                                 not exist (if the target would exist, the
+                                 <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link> object would have the type
+                                 of the target).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_REGULAR</literal></term>
+<listitem><simpara> A regular file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_BLOCKDEV</literal></term>
+<listitem><simpara> A block device node.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_DIRECTORY</literal></term>
+<listitem><simpara> A directory node.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_CHARDEV</literal></term>
+<listitem><simpara> A character device node.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_FIFO</literal></term>
+<listitem><simpara> A named FIFO.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_TYPE_UNKNOWN</literal></term>
+<listitem><simpara>
+
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileMode"/>enum ThunarVfsFileMode</title>
+<indexterm><primary>ThunarVfsFileMode</primary></indexterm><programlisting>typedef enum { /*&lt; flags &gt;*/
+  THUNAR_VFS_FILE_MODE_SUID       = 04000,
+  THUNAR_VFS_FILE_MODE_SGID       = 02000,
+  THUNAR_VFS_FILE_MODE_STICKY     = 01000,
+  THUNAR_VFS_FILE_MODE_USR_ALL    = 00700,
+  THUNAR_VFS_FILE_MODE_USR_READ   = 00400,
+  THUNAR_VFS_FILE_MODE_USR_WRITE  = 00200,
+  THUNAR_VFS_FILE_MODE_USR_EXEC   = 00100,
+  THUNAR_VFS_FILE_MODE_GRP_ALL    = 00070,
+  THUNAR_VFS_FILE_MODE_GRP_READ   = 00040,
+  THUNAR_VFS_FILE_MODE_GRP_WRITE  = 00020,
+  THUNAR_VFS_FILE_MODE_GRP_EXEC   = 00010,
+  THUNAR_VFS_FILE_MODE_OTH_ALL    = 00007,
+  THUNAR_VFS_FILE_MODE_OTH_READ   = 00004,
+  THUNAR_VFS_FILE_MODE_OTH_WRITE  = 00002,
+  THUNAR_VFS_FILE_MODE_OTH_EXEC   = 00001,
+} ThunarVfsFileMode;
+</programlisting>
+<para>
+Special flags and permissions of a filesystem entity.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_SUID</literal></term>
+<listitem><simpara> SUID bit.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_SGID</literal></term>
+<listitem><simpara> SGID bit.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_STICKY</literal></term>
+<listitem><simpara> Sticky bit.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_USR_ALL</literal></term>
+<listitem><simpara> Owner can do everything.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_USR_READ</literal></term>
+<listitem><simpara> Owner can read the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_USR_WRITE</literal></term>
+<listitem><simpara> Owner can write the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_USR_EXEC</literal></term>
+<listitem><simpara> Owner can execute the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_GRP_ALL</literal></term>
+<listitem><simpara> Owner group can do everything.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_GRP_READ</literal></term>
+<listitem><simpara> Owner group can read the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_GRP_WRITE</literal></term>
+<listitem><simpara> Owner group can write the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_GRP_EXEC</literal></term>
+<listitem><simpara> Owner group can execute the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_OTH_ALL</literal></term>
+<listitem><simpara> Others can do everything.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_OTH_READ</literal></term>
+<listitem><simpara> Others can read the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_OTH_WRITE</literal></term>
+<listitem><simpara> Others can write the file.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_MODE_OTH_EXEC</literal></term>
+<listitem><simpara> Others can execute the file.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileFlags"/>enum ThunarVfsFileFlags</title>
+<indexterm><primary>ThunarVfsFileFlags</primary></indexterm><programlisting>typedef enum { /*&lt; flags &gt;*/
+  THUNAR_VFS_FILE_FLAGS_NONE       = 0,
+  THUNAR_VFS_FILE_FLAGS_SYMLINK    = 1L &lt;&lt; 0,
+  THUNAR_VFS_FILE_FLAGS_EXECUTABLE = 1L &lt;&lt; 1,
+} ThunarVfsFileFlags;
+</programlisting>
+<para>
+Flags providing additional information about the
+file system entity.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_FLAGS_NONE</literal></term>
+<listitem><simpara> No additional information available.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_FLAGS_SYMLINK</literal></term>
+<listitem><simpara> The file is a symlink. Whether or not
+                                    the info fields refer to the symlink
+                                    itself or the linked file, depends on 
+                                    whether the symlink is broken or not.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_FILE_FLAGS_EXECUTABLE</literal></term>
+<listitem><simpara> The file can most probably be executed
+                                    by #<link linkend="thunar-vfs-info-execute"><function>thunar_vfs_info_execute()</function></link>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileDevice"/>ThunarVfsFileDevice</title>
+<indexterm><primary>ThunarVfsFileDevice</primary></indexterm><programlisting>typedef dev_t ThunarVfsFileDevice;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileInode"/>ThunarVfsFileInode</title>
+<indexterm><primary>ThunarVfsFileInode</primary></indexterm><programlisting>typedef ino_t ThunarVfsFileInode;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileSize"/>ThunarVfsFileSize</title>
+<indexterm><primary>ThunarVfsFileSize</primary></indexterm><programlisting>typedef off_t ThunarVfsFileSize;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsFileTime"/>ThunarVfsFileTime</title>
+<indexterm><primary>ThunarVfsFileTime</primary></indexterm><programlisting>typedef time_t ThunarVfsFileTime;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsGroupId"/>ThunarVfsGroupId</title>
+<indexterm><primary>ThunarVfsGroupId</primary></indexterm><programlisting>typedef gid_t ThunarVfsGroupId;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsUserId"/>ThunarVfsUserId</title>
+<indexterm><primary>ThunarVfsUserId</primary></indexterm><programlisting>typedef uid_t ThunarVfsUserId;
+</programlisting>
+<para>
+</para>
+<para>
+
+</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-uri.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-uri.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-uri.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,487 @@
+<refentry id="thunar-vfs-ThunarVfsURI">
+<refmeta>
+<refentrytitle>ThunarVfsURI</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsURI</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsURI">ThunarVfsURI</link>;
+enum        <link linkend="ThunarVfsURIScheme">ThunarVfsURIScheme</link>;
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-uri-new">thunar_vfs_uri_new</link>            (const <link linkend="gchar">gchar</link> *identifier,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-uri-new-for-path">thunar_vfs_uri_new_for_path</link>   (const <link linkend="gchar">gchar</link> *path);
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-uri-ref">thunar_vfs_uri_ref</link>            (<link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-uri-unref">thunar_vfs_uri_unref</link>            (<link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-uri-is-home">thunar_vfs_uri_is_home</link>          (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-uri-is-root">thunar_vfs_uri_is_root</link>          (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-uri-get-display-name">thunar_vfs_uri_get_display_name</link> (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-uri-get-md5sum">thunar_vfs_uri_get_md5sum</link>       (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-uri-get-name">thunar_vfs_uri_get_name</link>        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-uri-get-path">thunar_vfs_uri_get_path</link>        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="ThunarVfsURIScheme">ThunarVfsURIScheme</link> <link linkend="thunar-vfs-uri-get-scheme">thunar_vfs_uri_get_scheme</link>
+                                            (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-uri-parent">thunar_vfs_uri_parent</link>         (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="ThunarVfsURI">ThunarVfsURI</link>* <link linkend="thunar-vfs-uri-relative">thunar_vfs_uri_relative</link>       (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-uri-to-string">thunar_vfs_uri_to_string</link>        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);
+<link linkend="guint">guint</link>       <link linkend="thunar-vfs-uri-hash">thunar_vfs_uri_hash</link>             (<link linkend="gconstpointer">gconstpointer</link> uri);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-uri-equal">thunar_vfs_uri_equal</link>            (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-uri-list-from-string">thunar_vfs_uri_list_from_string</link> (const <link linkend="gchar">gchar</link> *string,
+                                             <link linkend="GError">GError</link> **error);
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-uri-list-to-string">thunar_vfs_uri_list_to_string</link>   (<link linkend="GList">GList</link> *uri_list);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-uri-list-copy">thunar_vfs_uri_list_copy</link>        (<link linkend="GList">GList</link> *uri_list);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-uri-list-free">thunar_vfs_uri_list_free</link>        (<link linkend="GList">GList</link> *uri_list);
+#define     <link linkend="thunar-vfs-uri-list-append">thunar_vfs_uri_list_append</link>      (uri_list, uri)
+#define     <link linkend="thunar-vfs-uri-list-prepend">thunar_vfs_uri_list_prepend</link>     (uri_list, uri)
+
+
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsURI"/>ThunarVfsURI</title>
+<indexterm><primary>ThunarVfsURI</primary></indexterm><programlisting>typedef struct _ThunarVfsURI ThunarVfsURI;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsURIScheme"/>enum ThunarVfsURIScheme</title>
+<indexterm><primary>ThunarVfsURIScheme</primary></indexterm><programlisting>typedef enum
+{
+  THUNAR_VFS_URI_SCHEME_COMPUTER,
+  THUNAR_VFS_URI_SCHEME_FILE,
+  THUNAR_VFS_URI_SCHEME_TRASH,
+} ThunarVfsURIScheme;
+</programlisting>
+<para>
+Currently supported URI types for <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_URI_SCHEME_COMPUTER</literal></term>
+<listitem><simpara> 'computer://' uris
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_URI_SCHEME_FILE</literal></term>
+<listitem><simpara> 'file://' uris
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_URI_SCHEME_TRASH</literal></term>
+<listitem><simpara> 'trash://' uris
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-new"/>thunar_vfs_uri_new ()</title>
+<indexterm><primary>thunar_vfs_uri_new</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_uri_new            (const <link linkend="gchar">gchar</link> *identifier,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Parses the URI given in <parameter>identifier</parameter> and returns a
+corresponding <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> object or <literal>NULL</literal> if
+<parameter>identifier</parameter> is not a valid URI.
+</para>
+<para>
+As a special case, <parameter>identifier</parameter> may also include an
+absolute path, in which case the 'file://' scheme is
+assumed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>identifier</parameter>&nbsp;:</term>
+<listitem><simpara> the resource identifier encoded as string.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> or <literal>NULL</literal> on error.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-new-for-path"/>thunar_vfs_uri_new_for_path ()</title>
+<indexterm><primary>thunar_vfs_uri_new_for_path</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_uri_new_for_path   (const <link linkend="gchar">gchar</link> *path);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance that refers to the local file
+identified by <parameter>path</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>path</parameter>&nbsp;:</term>
+<listitem><simpara> an absolute path referring to a file accessible via the local
+         file system implementation.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-ref"/>thunar_vfs_uri_ref ()</title>
+<indexterm><primary>thunar_vfs_uri_ref</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_uri_ref            (<link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Increments the reference count on <parameter>uri</parameter> by 1 and
+returns <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> pointer to <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-unref"/>thunar_vfs_uri_unref ()</title>
+<indexterm><primary>thunar_vfs_uri_unref</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_uri_unref            (<link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Decreases the reference count on <parameter>uri</parameter> by 1. If the
+reference count drops to 0, the resources allocated
+for <parameter>uri</parameter> will be freed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-is-home"/>thunar_vfs_uri_is_home ()</title>
+<indexterm><primary>thunar_vfs_uri_is_home</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_uri_is_home          (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Checks whether <parameter>uri</parameter> refers to the home directory
+of the current user.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>uri</parameter> refers to the home directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-is-root"/>thunar_vfs_uri_is_root ()</title>
+<indexterm><primary>thunar_vfs_uri_is_root</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_uri_is_root          (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Checks whether <parameter>uri</parameter> refers to the root of the file system
+scheme described by <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>uri</parameter> is a root element, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-get-display-name"/>thunar_vfs_uri_get_display_name ()</title>
+<indexterm><primary>thunar_vfs_uri_get_display_name</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_uri_get_display_name (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns a displayable version of the <parameter>uri</parameter>'s base
+name in UTF-8 encoding, which is suitable for
+display in the user interface.
+</para>
+<para>
+The returned string must be freed using <link linkend="g-free"><function>g_free()</function></link>
+when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a displayable version of the <parameter>uri</parameter>'s base name.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-get-md5sum"/>thunar_vfs_uri_get_md5sum ()</title>
+<indexterm><primary>thunar_vfs_uri_get_md5sum</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_uri_get_md5sum       (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Calculates the MD5 digest of the full string
+representation of <parameter>uri</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the MD5 digest of the <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-get-name"/>thunar_vfs_uri_get_name ()</title>
+<indexterm><primary>thunar_vfs_uri_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_uri_get_name        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns the basename of <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the basename of <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-get-path"/>thunar_vfs_uri_get_path ()</title>
+<indexterm><primary>thunar_vfs_uri_get_path</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_uri_get_path        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns the path component of the given <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the path component of <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-get-scheme"/>thunar_vfs_uri_get_scheme ()</title>
+<indexterm><primary>thunar_vfs_uri_get_scheme</primary></indexterm><programlisting><link linkend="ThunarVfsURIScheme">ThunarVfsURIScheme</link> thunar_vfs_uri_get_scheme
+                                            (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns the <link linkend="ThunarVfsURIScheme"><type>ThunarVfsURIScheme</type></link> of <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the scheme of <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-parent"/>thunar_vfs_uri_parent ()</title>
+<indexterm><primary>thunar_vfs_uri_parent</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_uri_parent         (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> object that refers to the parent 
+folder of <parameter>uri</parameter> or <literal>NULL</literal> if <parameter>uri</parameter> has no parent.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> object referring to the parent folder
+              or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-relative"/>thunar_vfs_uri_relative ()</title>
+<indexterm><primary>thunar_vfs_uri_relative</primary></indexterm><programlisting><link linkend="ThunarVfsURI">ThunarVfsURI</link>* thunar_vfs_uri_relative       (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri,
+                                             const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&nbsp;:</term>
+<listitem><simpara> the relative name.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> 
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-to-string"/>thunar_vfs_uri_to_string ()</title>
+<indexterm><primary>thunar_vfs_uri_to_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_uri_to_string        (const <link linkend="ThunarVfsURI">ThunarVfsURI</link> *uri);</programlisting>
+<para>
+Returns the string representation of <parameter>uri</parameter> (encoded
+as specified on the file URI specification). The
+caller is responsible for freeing the returned
+string using <link linkend="g-free"><function>g_free()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the string representation of <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-hash"/>thunar_vfs_uri_hash ()</title>
+<indexterm><primary>thunar_vfs_uri_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>       thunar_vfs_uri_hash             (<link linkend="gconstpointer">gconstpointer</link> uri);</programlisting>
+<para>
+Calculates a hash value for the given <parameter>uri</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a hash value for <parameter>uri</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-equal"/>thunar_vfs_uri_equal ()</title>
+<indexterm><primary>thunar_vfs_uri_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_uri_equal            (<link linkend="gconstpointer">gconstpointer</link> a,
+                                             <link linkend="gconstpointer">gconstpointer</link> b);</programlisting>
+<para>
+Checks whether the two URIs <parameter>a</parameter> and <parameter>b</parameter> refer to the same
+resource.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>a</parameter>&nbsp;:</term>
+<listitem><simpara> first <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>b</parameter>&nbsp;:</term>
+<listitem><simpara> second <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>a</parameter> equals <parameter>b</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-from-string"/>thunar_vfs_uri_list_from_string ()</title>
+<indexterm><primary>thunar_vfs_uri_list_from_string</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_uri_list_from_string (const <link linkend="gchar">gchar</link> *string,
+                                             <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Splits an URI list conforming to the text/uri-list
+mime type defined in RFC 2483 into individual URIs,
+discarding any comments and whitespace.
+</para>
+<para>
+If all URIs were successfully parsed into <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>
+objects, the list of parsed URIs will be returned, and
+you'll need to call <link linkend="thunar-vfs-uri-list-free"><function>thunar_vfs_uri_list_free()</function></link> to
+release the list resources. Else if the parsing fails
+at some point, <literal>NULL</literal> will be returned and <parameter>error</parameter> will
+be set to describe the cause.
+</para>
+<para>
+Note, that if <parameter>string</parameter> contains no URIs, this function
+will also return <literal>NULL</literal>, but <parameter>error</parameter> won't be set. So
+take care when checking for an error condition!</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>string</parameter>&nbsp;:</term>
+<listitem><simpara> string representation of an URI list.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&nbsp;:</term>
+<listitem><simpara> return location for errors.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link>'s or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-to-string"/>thunar_vfs_uri_list_to_string ()</title>
+<indexterm><primary>thunar_vfs_uri_list_to_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_uri_list_to_string   (<link linkend="GList">GList</link> *uri_list);</programlisting>
+<para>
+Free the returned value using <link linkend="g-free"><function>g_free()</function></link> when you
+are done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the string representation of <parameter>uri_list</parameter> conforming to the
+              text/uri-list mime type defined in RFC 2483.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-copy"/>thunar_vfs_uri_list_copy ()</title>
+<indexterm><primary>thunar_vfs_uri_list_copy</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_uri_list_copy        (<link linkend="GList">GList</link> *uri_list);</programlisting>
+<para>
+Takes a deep copy of the <parameter>uri_list</parameter> and returns it.
+The deep copy also includes taking additional
+references on the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link><!---->s contained
+within the <parameter>uri_list</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a duplicate of <parameter>uri_list</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-free"/>thunar_vfs_uri_list_free ()</title>
+<indexterm><primary>thunar_vfs_uri_list_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_uri_list_free        (<link linkend="GList">GList</link> *uri_list);</programlisting>
+<para>
+Frees the <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link><!---->s contained in <parameter>uri_list</parameter> and
+the <parameter>uri_list</parameter> itself.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_list</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsURI"><type>ThunarVfsURI</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-append"/>thunar_vfs_uri_list_append()</title>
+<indexterm><primary>thunar_vfs_uri_list_append</primary></indexterm><programlisting>#define     thunar_vfs_uri_list_append(uri_list, uri)</programlisting>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_list</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara>
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-uri-list-prepend"/>thunar_vfs_uri_list_prepend()</title>
+<indexterm><primary>thunar_vfs_uri_list_prepend</primary></indexterm><programlisting>#define     thunar_vfs_uri_list_prepend(uri_list, uri)</programlisting>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>uri_list</parameter>&nbsp;:</term>
+<listitem><simpara>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>uri</parameter>&nbsp;:</term>
+<listitem><simpara>
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user-manager.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user-manager.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user-manager.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,129 @@
+<refentry id="ThunarVfsUserManager">
+<refmeta>
+<refentrytitle>ThunarVfsUserManager</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsUserManager</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsUserManager-struct">ThunarVfsUserManager</link>;
+<link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link>* <link linkend="thunar-vfs-user-manager-get-default">thunar_vfs_user_manager_get_default</link>
+                                            (void);
+<link linkend="ThunarVfsGroup">ThunarVfsGroup</link>* <link linkend="thunar-vfs-user-manager-get-group-by-id">thunar_vfs_user_manager_get_group_by_id</link>
+                                            (<link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link> *manager,
+                                             <link linkend="ThunarVfsGroupId">ThunarVfsGroupId</link> id);
+<link linkend="ThunarVfsUser">ThunarVfsUser</link>* <link linkend="thunar-vfs-user-manager-get-user-by-id">thunar_vfs_user_manager_get_user_by_id</link>
+                                            (<link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link> *manager,
+                                             <link linkend="ThunarVfsUserId">ThunarVfsUserId</link> id);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsUserManager
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsUserManager-struct"/>ThunarVfsUserManager</title>
+<indexterm><primary>ThunarVfsUserManager</primary></indexterm><programlisting>typedef struct _ThunarVfsUserManager ThunarVfsUserManager;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-manager-get-default"/>thunar_vfs_user_manager_get_default ()</title>
+<indexterm><primary>thunar_vfs_user_manager_get_default</primary></indexterm><programlisting><link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link>* thunar_vfs_user_manager_get_default
+                                            (void);</programlisting>
+<para>
+Returns the default <link linkend="ThunarVfsUserManager"><type>ThunarVfsUserManager</type></link> instance, which is shared
+by all modules using the user module. Call <link linkend="g-object-unref"><function>g_object_unref()</function></link> on the
+returned object when you are done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the default <link linkend="ThunarVfsUserManager"><type>ThunarVfsUserManager</type></link> instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-manager-get-group-by-id"/>thunar_vfs_user_manager_get_group_by_id ()</title>
+<indexterm><primary>thunar_vfs_user_manager_get_group_by_id</primary></indexterm><programlisting><link linkend="ThunarVfsGroup">ThunarVfsGroup</link>* thunar_vfs_user_manager_get_group_by_id
+                                            (<link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link> *manager,
+                                             <link linkend="ThunarVfsGroupId">ThunarVfsGroupId</link> id);</programlisting>
+<para>
+Looks up the <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link> corresponding to <parameter>id</parameter> in <parameter>manager</parameter>. Returns
+<literal>NULL</literal> if <parameter>manager</parameter> is unable to determine the <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link> for <parameter>id</parameter>,
+else a pointer to the corresponding <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link>. The caller is
+responsible for freeing the returned object using <link linkend="g-object-unref"><function>g_object_unref()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUserManager"><type>ThunarVfsUserManager</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>id</parameter>&nbsp;:</term>
+<listitem><simpara> the group id.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link> corresponding to <parameter>id</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-manager-get-user-by-id"/>thunar_vfs_user_manager_get_user_by_id ()</title>
+<indexterm><primary>thunar_vfs_user_manager_get_user_by_id</primary></indexterm><programlisting><link linkend="ThunarVfsUser">ThunarVfsUser</link>* thunar_vfs_user_manager_get_user_by_id
+                                            (<link linkend="ThunarVfsUserManager">ThunarVfsUserManager</link> *manager,
+                                             <link linkend="ThunarVfsUserId">ThunarVfsUserId</link> id);</programlisting>
+<para>
+Looks up the <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link> corresponding to <parameter>id</parameter> in <parameter>manager</parameter>. Returns
+<literal>NULL</literal> if <parameter>manager</parameter> is unable to determine the <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link> for <parameter>id</parameter>,
+else a pointer to the corresponding <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>. The caller is
+responsible for freeing the returned object using <link linkend="g-object-unref"><function>g_object_unref()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUserManager"><type>ThunarVfsUserManager</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>id</parameter>&nbsp;:</term>
+<listitem><simpara> the user id.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link> corresponding to <parameter>id</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-user.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,173 @@
+<refentry id="ThunarVfsUser">
+<refmeta>
+<refentrytitle>ThunarVfsUser</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsUser</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsUser-struct">ThunarVfsUser</link>;
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-user-get-groups">thunar_vfs_user_get_groups</link>      (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+<link linkend="ThunarVfsGroup">ThunarVfsGroup</link>* <link linkend="thunar-vfs-user-get-primary-group">thunar_vfs_user_get_primary_group</link>
+                                            (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+<link linkend="ThunarVfsUserId">ThunarVfsUserId</link> <link linkend="thunar-vfs-user-get-id">thunar_vfs_user_get_id</link>      (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-user-get-name">thunar_vfs_user_get_name</link>       (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-user-get-real-name">thunar_vfs_user_get_real_name</link>  (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-user-is-me">thunar_vfs_user_is_me</link>           (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----ThunarVfsUser
+</synopsis>
+
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsUser-struct"/>ThunarVfsUser</title>
+<indexterm><primary>ThunarVfsUser</primary></indexterm><programlisting>typedef struct _ThunarVfsUser ThunarVfsUser;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-get-groups"/>thunar_vfs_user_get_groups ()</title>
+<indexterm><primary>thunar_vfs_user_get_groups</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_user_get_groups      (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Returns all <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link><!---->s that <parameter>user</parameter>
+belongs to. The returned list and the <link linkend="ThunarVfsGroup"><type>ThunarVfsGroup</type></link><!---->s
+contained within the list are owned by <parameter>user</parameter> and must not be
+freed or altered by the caller.
+</para>
+<para>
+Note that if <parameter>user</parameter> has a primary group, this group will
+also be contained in the returned list.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the groups that <parameter>user</parameter> belongs to.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-get-primary-group"/>thunar_vfs_user_get_primary_group ()</title>
+<indexterm><primary>thunar_vfs_user_get_primary_group</primary></indexterm><programlisting><link linkend="ThunarVfsGroup">ThunarVfsGroup</link>* thunar_vfs_user_get_primary_group
+                                            (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Returns the primary group of <parameter>user</parameter> or <literal>NULL</literal> if <parameter>user</parameter>
+has no primary group.
+</para>
+<para>
+No reference is taken for the caller, so you must
+not call <link linkend="g-object-unref"><function>g_object_unref()</function></link> on the returned object.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the primary group of <parameter>user</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-get-id"/>thunar_vfs_user_get_id ()</title>
+<indexterm><primary>thunar_vfs_user_get_id</primary></indexterm><programlisting><link linkend="ThunarVfsUserId">ThunarVfsUserId</link> thunar_vfs_user_get_id      (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Returns the unique id of <parameter>user</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the unique id of <parameter>user</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-get-name"/>thunar_vfs_user_get_name ()</title>
+<indexterm><primary>thunar_vfs_user_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_user_get_name       (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Returns the name of <parameter>user</parameter>. If the system is
+unable to determine the account name of <parameter>user</parameter>,
+it'll return the user id as string.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the name of <parameter>user</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-get-real-name"/>thunar_vfs_user_get_real_name ()</title>
+<indexterm><primary>thunar_vfs_user_get_real_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_user_get_real_name  (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Returns the real name of <parameter>user</parameter> or <literal>NULL</literal> if the
+real name for <parameter>user</parameter> is not known to the underlying
+system.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the real name for <parameter>user</parameter> or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-user-is-me"/>thunar_vfs_user_is_me ()</title>
+<indexterm><primary>thunar_vfs_user_is_me</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_user_is_me           (<link linkend="ThunarVfsUser">ThunarVfsUser</link> *user);</programlisting>
+<para>
+Checks whether the owner of the current process is
+described by <parameter>user</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>user</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsUser"><type>ThunarVfsUser</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>user</parameter> is the owner of the current
+              process, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-util.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-util.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-util.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,72 @@
+<refentry id="thunar-vfs-Utility-Functions">
+<refmeta>
+<refentrytitle>Utility Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Utility Functions</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+<link linkend="gchar">gchar</link>*      <link linkend="thunar-vfs-humanize-size">thunar_vfs_humanize_size</link>        (<link linkend="ThunarVfsFileSize">ThunarVfsFileSize</link> size,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> buflen);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="thunar-vfs-humanize-size"/>thunar_vfs_humanize_size ()</title>
+<indexterm><primary>thunar_vfs_humanize_size</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunar_vfs_humanize_size        (<link linkend="ThunarVfsFileSize">ThunarVfsFileSize</link> size,
+                                             <link linkend="gchar">gchar</link> *buffer,
+                                             <link linkend="gsize">gsize</link> buflen);</programlisting>
+<para>
+The caller is responsible to free the returned string using <link linkend="g-free"><function>g_free()</function></link>
+if you pass <literal>NULL</literal> for <parameter>buffer</parameter>. Else the returned string will be a
+pointer to <parameter>buffer</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&nbsp;:</term>
+<listitem><simpara> size in bytes.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buffer</parameter>&nbsp;:</term>
+<listitem><simpara> destination buffer or <literal>NULL</literal> to dynamically allocate a buffer.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buflen</parameter>&nbsp;:</term>
+<listitem><simpara> length of <parameter>buffer</parameter> in bytes.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a string containing a human readable description of <parameter>size</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume-manager.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume-manager.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume-manager.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,211 @@
+<refentry id="ThunarVfsVolumeManager">
+<refmeta>
+<refentrytitle>ThunarVfsVolumeManager</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsVolumeManager</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+            <link linkend="ThunarVfsVolumeManagerIface">ThunarVfsVolumeManagerIface</link>;
+            <link linkend="ThunarVfsVolumeManager-struct">ThunarVfsVolumeManager</link>;
+<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link>* <link linkend="thunar-vfs-volume-manager-get-default">thunar_vfs_volume_manager_get_default</link>
+                                            (void);
+<link linkend="ThunarVfsVolume">ThunarVfsVolume</link>* <link linkend="thunar-vfs-volume-manager-get-volume-by-info">thunar_vfs_volume_manager_get_volume_by_info</link>
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);
+<link linkend="GList">GList</link>*      <link linkend="thunar-vfs-volume-manager-get-volumes">thunar_vfs_volume_manager_get_volumes</link>
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-volume-manager-volumes-added">thunar_vfs_volume_manager_volumes_added</link>
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             <link linkend="GList">GList</link> *volumes);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-volume-manager-volumes-removed">thunar_vfs_volume_manager_volumes_removed</link>
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             <link linkend="GList">GList</link> *volumes);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GInterface">GInterface</link>
+   +----ThunarVfsVolumeManager
+</synopsis>
+
+</refsect1>
+
+<refsect1>
+<title>Prerequisites</title>
+<para>
+ThunarVfsVolumeManager requires
+ <link linkend="GObject">GObject</link>.</para>
+
+</refsect1>
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsVolumeManagerIface"/>ThunarVfsVolumeManagerIface</title>
+<indexterm><primary>ThunarVfsVolumeManagerIface</primary></indexterm><programlisting>typedef struct {
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolume *(*get_volume_by_info) (ThunarVfsVolumeManager *manager,
+                                          const ThunarVfsInfo    *info);
+  GList           *(*get_volumes)        (ThunarVfsVolumeManager *manager);
+
+  /* signals */
+  void (*volumes_added)   (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+  void (*volumes_removed) (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+} ThunarVfsVolumeManagerIface;
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsVolumeManager-struct"/>ThunarVfsVolumeManager</title>
+<indexterm><primary>ThunarVfsVolumeManager</primary></indexterm><programlisting>typedef struct _ThunarVfsVolumeManager ThunarVfsVolumeManager;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-manager-get-default"/>thunar_vfs_volume_manager_get_default ()</title>
+<indexterm><primary>thunar_vfs_volume_manager_get_default</primary></indexterm><programlisting><link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link>* thunar_vfs_volume_manager_get_default
+                                            (void);</programlisting>
+<para>
+Returns the default, shared <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance
+for this system. This function automatically determines, which
+implementation of <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> should be used for
+the target system and returns an instance of that class, which
+is shared among all modules using the volume manager facility.
+</para>
+<para>
+Call <link linkend="g-object-unref"><function>g_object_unref()</function></link> on the returned object when you are
+done with it.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the shared <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-manager-get-volume-by-info"/>thunar_vfs_volume_manager_get_volume_by_info ()</title>
+<indexterm><primary>thunar_vfs_volume_manager_get_volume_by_info</primary></indexterm><programlisting><link linkend="ThunarVfsVolume">ThunarVfsVolume</link>* thunar_vfs_volume_manager_get_volume_by_info
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             const <link linkend="ThunarVfsInfo">ThunarVfsInfo</link> *info);</programlisting>
+<para>
+Tries to lookup the <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> on which <parameter>info</parameter> is
+located. If <parameter>manager</parameter> doesn't know a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link>
+for <parameter>info</parameter>, <literal>NULL</literal> will be returned.
+</para>
+<para>
+The returned <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> (if any) is owned by
+<parameter>manager</parameter> and must not be freed by the caller.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsInfo"><type>ThunarVfsInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link>, on which <parameter>info</parameter> is
+              located or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-manager-get-volumes"/>thunar_vfs_volume_manager_get_volumes ()</title>
+<indexterm><primary>thunar_vfs_volume_manager_get_volumes</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunar_vfs_volume_manager_get_volumes
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager);</programlisting>
+<para>
+Returns all <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link><!---->s currently known for
+<parameter>manager</parameter>. The returned list is owned by <parameter>manager</parameter> and should
+therefore considered constant in the caller.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of volumes known for <parameter>manager</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-manager-volumes-added"/>thunar_vfs_volume_manager_volumes_added ()</title>
+<indexterm><primary>thunar_vfs_volume_manager_volumes_added</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_volume_manager_volumes_added
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             <link linkend="GList">GList</link> *volumes);</programlisting>
+<para>
+Emits the "volumes-added" signal on <parameter>manager</parameter> using the
+given <parameter>volumes</parameter>.
+</para>
+<para>
+This method should only be used by classes implementing
+the <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> interface.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>volumes</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-manager-volumes-removed"/>thunar_vfs_volume_manager_volumes_removed ()</title>
+<indexterm><primary>thunar_vfs_volume_manager_volumes_removed</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_volume_manager_volumes_removed
+                                            (<link linkend="ThunarVfsVolumeManager">ThunarVfsVolumeManager</link> *manager,
+                                             <link linkend="GList">GList</link> *volumes);</programlisting>
+<para>
+Emits the "volumes-removed" signal on <parameter>manager</parameter> using
+the given <parameter>volumes</parameter>.
+</para>
+<para>
+This method should only be used by classes implementing
+the <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> interface.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>manager</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolumeManager"><type>ThunarVfsVolumeManager</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>volumes</parameter>&nbsp;:</term>
+<listitem><simpara> a list of <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunar-vfs/xml/thunar-vfs-volume.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,359 @@
+<refentry id="ThunarVfsVolume">
+<refmeta>
+<refentrytitle>ThunarVfsVolume</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNAR-VFS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarVfsVolume</refname><refpurpose></refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunar-vfs/thunar-vfs.h&gt;
+
+
+enum        <link linkend="ThunarVfsVolumeKind">ThunarVfsVolumeKind</link>;
+enum        <link linkend="ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</link>;
+            <link linkend="ThunarVfsVolumeIface">ThunarVfsVolumeIface</link>;
+            <link linkend="ThunarVfsVolume-struct">ThunarVfsVolume</link>;
+<link linkend="ThunarVfsVolumeKind">ThunarVfsVolumeKind</link> <link linkend="thunar-vfs-volume-get-kind">thunar_vfs_volume_get_kind</link>
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-volume-get-name">thunar_vfs_volume_get_name</link>     (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</link> <link linkend="thunar-vfs-volume-get-status">thunar_vfs_volume_get_status</link>
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="ThunarVfsPath">ThunarVfsPath</link>* <link linkend="thunar-vfs-volume-get-mount-point">thunar_vfs_volume_get_mount_point</link>
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-volume-is-mounted">thunar_vfs_volume_is_mounted</link>    (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-volume-is-present">thunar_vfs_volume_is_present</link>    (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-volume-is-removable">thunar_vfs_volume_is_removable</link>  (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunar-vfs-volume-get-free-space">thunar_vfs_volume_get_free_space</link>
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume,
+                                             <link linkend="ThunarVfsFileSize">ThunarVfsFileSize</link> *free_space_return);
+const <link linkend="gchar">gchar</link>* <link linkend="thunar-vfs-volume-lookup-icon-name">thunar_vfs_volume_lookup_icon_name</link>
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);
+<link linkend="void">void</link>        <link linkend="thunar-vfs-volume-changed">thunar_vfs_volume_changed</link>       (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GInterface">GInterface</link>
+   +----ThunarVfsVolume
+</synopsis>
+
+</refsect1>
+
+<refsect1>
+<title>Prerequisites</title>
+<para>
+ThunarVfsVolume requires
+ <link linkend="GObject">GObject</link>.</para>
+
+</refsect1>
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarVfsVolumeKind"/>enum ThunarVfsVolumeKind</title>
+<indexterm><primary>ThunarVfsVolumeKind</primary></indexterm><programlisting>typedef enum
+{
+  THUNAR_VFS_VOLUME_KIND_UNKNOWN,
+  THUNAR_VFS_VOLUME_KIND_CDROM,
+  THUNAR_VFS_VOLUME_KIND_DVD,
+  THUNAR_VFS_VOLUME_KIND_FLOPPY,
+  THUNAR_VFS_VOLUME_KIND_HARDDISK,
+  THUNAR_VFS_VOLUME_KIND_USBSTICK,
+} ThunarVfsVolumeKind;
+</programlisting>
+<para>
+Describes the type of a VFS volume.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_UNKNOWN</literal></term>
+<listitem><simpara> Unknown volume.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_CDROM</literal></term>
+<listitem><simpara> CD drives.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_DVD</literal></term>
+<listitem><simpara> DVD drives.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_FLOPPY</literal></term>
+<listitem><simpara> Floppy drives.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_HARDDISK</literal></term>
+<listitem><simpara> Hard disk drives.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_KIND_USBSTICK</literal></term>
+<listitem><simpara> USB sticks.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsVolumeStatus"/>enum ThunarVfsVolumeStatus</title>
+<indexterm><primary>ThunarVfsVolumeStatus</primary></indexterm><programlisting>typedef enum /*&lt; flags &gt;*/
+{
+  THUNAR_VFS_VOLUME_STATUS_MOUNTED = 1 &lt;&lt; 0,
+  THUNAR_VFS_VOLUME_STATUS_PRESENT = 1 &lt;&lt; 1,
+} ThunarVfsVolumeStatus;
+</programlisting>
+<para>
+Describes the current status of a VFS volume.</para>
+<para>
+
+</para><variablelist role="enum">
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_STATUS_MOUNTED</literal></term>
+<listitem><simpara> Whether or not the media is currently mounted.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><literal>THUNAR_VFS_VOLUME_STATUS_PRESENT</literal></term>
+<listitem><simpara> Whether or not a medium is present.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsVolumeIface"/>ThunarVfsVolumeIface</title>
+<indexterm><primary>ThunarVfsVolumeIface</primary></indexterm><programlisting>typedef struct {
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolumeKind   (*get_kind)         (ThunarVfsVolume   *volume);
+  const gchar          *(*get_name)         (ThunarVfsVolume   *volume);
+  ThunarVfsVolumeStatus (*get_status)       (ThunarVfsVolume   *volume);
+  ThunarVfsPath        *(*get_mount_point)  (ThunarVfsVolume   *volume);
+  gboolean              (*get_free_space)   (ThunarVfsVolume   *volume,
+                                             ThunarVfsFileSize *free_space_return);
+  const gchar          *(*lookup_icon_name) (ThunarVfsVolume   *volume,
+                                             GtkIconTheme      *icon_theme);
+
+  /* signals */
+  void (*changed) (ThunarVfsVolume *volume);
+} ThunarVfsVolumeIface;
+</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarVfsVolume-struct"/>ThunarVfsVolume</title>
+<indexterm><primary>ThunarVfsVolume</primary></indexterm><programlisting>typedef struct _ThunarVfsVolume ThunarVfsVolume;</programlisting>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-get-kind"/>thunar_vfs_volume_get_kind ()</title>
+<indexterm><primary>thunar_vfs_volume_get_kind</primary></indexterm><programlisting><link linkend="ThunarVfsVolumeKind">ThunarVfsVolumeKind</link> thunar_vfs_volume_get_kind
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Returns the kind of drive/device representd by <parameter>volume</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the kind of <parameter>volume</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-get-name"/>thunar_vfs_volume_get_name ()</title>
+<indexterm><primary>thunar_vfs_volume_get_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_volume_get_name     (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Returns the name of the <parameter>volume</parameter>. This is usually the
+name of the device or the label of the medium, if a
+medium is present.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the name of <parameter>volume</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-get-status"/>thunar_vfs_volume_get_status ()</title>
+<indexterm><primary>thunar_vfs_volume_get_status</primary></indexterm><programlisting><link linkend="ThunarVfsVolumeStatus">ThunarVfsVolumeStatus</link> thunar_vfs_volume_get_status
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Determines the current status of the <parameter>volume</parameter>, e.g. whether
+or not the <parameter>volume</parameter> is currently mounted, or whether a
+medium is present.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the status for <parameter>volume</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-get-mount-point"/>thunar_vfs_volume_get_mount_point ()</title>
+<indexterm><primary>thunar_vfs_volume_get_mount_point</primary></indexterm><programlisting><link linkend="ThunarVfsPath">ThunarVfsPath</link>* thunar_vfs_volume_get_mount_point
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the path which identifies the path where
+              the volume will be mounted (or is already
+              mounted).
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-is-mounted"/>thunar_vfs_volume_is_mounted ()</title>
+<indexterm><primary>thunar_vfs_volume_is_mounted</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_volume_is_mounted    (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Determines whether <parameter>volume</parameter> is currently mounted into the
+filesystem hierarchy.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>volume</parameter> is mounted, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-is-present"/>thunar_vfs_volume_is_present ()</title>
+<indexterm><primary>thunar_vfs_volume_is_present</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_volume_is_present    (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Determines whether a medium is currently inserted for
+<parameter>volume</parameter>, e.g. for a CD-ROM drive, this will be <literal>TRUE</literal>
+only if a disc is present in the slot.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>volume</parameter> is present, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-is-removable"/>thunar_vfs_volume_is_removable ()</title>
+<indexterm><primary>thunar_vfs_volume_is_removable</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_volume_is_removable  (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Determines whether <parameter>volume</parameter> is a removable device, for example
+a CD-ROM or a floppy drive.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>volume</parameter> is a removable device, else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-get-free-space"/>thunar_vfs_volume_get_free_space ()</title>
+<indexterm><primary>thunar_vfs_volume_get_free_space</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunar_vfs_volume_get_free_space
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume,
+                                             <link linkend="ThunarVfsFileSize">ThunarVfsFileSize</link> *free_space_return);</programlisting>
+<para>
+Tries to determine the number of available bytes on the specified
+<parameter>volume</parameter> and places the result to the memory pointed to by
+<parameter>free_space_return</parameter>. The returned amount of bytes represents the
+space available to the current user, which may be different from
+the total free amount.
+</para>
+<para>
+If <parameter>volume</parameter> is unable to determine the free space, <literal>FALSE</literal> will be
+returned and <parameter>free_space_return</parameter> won't be set.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>free_space_return</parameter>&nbsp;:</term>
+<listitem><simpara> location to store the free space to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if the free amount was determined successfully,
+              else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-lookup-icon-name"/>thunar_vfs_volume_lookup_icon_name ()</title>
+<indexterm><primary>thunar_vfs_volume_lookup_icon_name</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunar_vfs_volume_lookup_icon_name
+                                            (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume,
+                                             <link linkend="GtkIconTheme">GtkIconTheme</link> *icon_theme);</programlisting>
+<para>
+Tries to find a suitable icon for <parameter>volume</parameter> in the given <parameter>icon_theme</parameter> and
+returns its name. If no suitable icon is found in <parameter>icon_theme</parameter>, then
+a fallback icon name will be returned. This way you can always count
+on this method to return a valid string.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>icon_theme</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GtkIconTheme"><type>GtkIconTheme</type></link> instance.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the icon name.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunar-vfs-volume-changed"/>thunar_vfs_volume_changed ()</title>
+<indexterm><primary>thunar_vfs_volume_changed</primary></indexterm><programlisting><link linkend="void">void</link>        thunar_vfs_volume_changed       (<link linkend="ThunarVfsVolume">ThunarVfsVolume</link> *volume);</programlisting>
+<para>
+Emits the "changed" signal on <parameter>volume</parameter>. This function should
+only be used by implementations of the <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link>
+interface.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>volume</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarVfsVolume"><type>ThunarVfsVolume</type></link> instance.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,62 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+AUTOMAKE_OPTIONS = 1.8
+
+# The name of the module.
+DOC_MODULE=thunarx
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="EXO_DISABLE_DEPRECATED"
+
+# Extra options to pass to gtkdoc-scangobj
+SCANGOBJ_OPTIONS=--type-init-func="gtk_type_init(0);g_type_class_ref(G_TYPE_OBJECT)"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=../../../thunarx
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS=
+
+# Used for dependencies
+HFILE_GLOB=$(top_srcdir)/thunarx/*.h
+CFILE_GLOB=$(top_srcdir)/thunarx/*.c
+
+# Header files to ignore when scanning
+IGNORE_HFILES=thunarx-alias.h
+
+# Extra files to add when scanning (relative to $srcdir)
+EXTRA_HFILES=
+
+# Images to copy into HTML directory
+HTML_IMAGES =								\
+	$(srcdir)/images/abstraction.png				\
+	$(srcdir)/images/menu-provider.png				\
+	$(srcdir)/images/say-hello.png
+
+# Extra SGML files that are included by DOC_MAIN_SGML_FILE
+content_files = 							\
+	version.xml
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES =	 							\
+	-I$(top_srcdir) 						\
+	-I$(top_builddir) 						\
+	$(GTK_CFLAGS)
+
+GTKDOC_LIBS =  								\
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+EXTRA_DIST +=								\
+	version.xml.in
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,631 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make
+subdir = docs/reference/thunarx
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 = version.xml
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+AUTOMAKE_OPTIONS = 1.8
+
+# The name of the module.
+DOC_MODULE = thunarx
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS = --deprecated-guards="EXO_DISABLE_DEPRECATED"
+
+# Extra options to pass to gtkdoc-scangobj
+SCANGOBJ_OPTIONS = --type-init-func="gtk_type_init(0);g_type_class_ref(G_TYPE_OBJECT)"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR = ../../../thunarx
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS = 
+
+# Used for dependencies
+HFILE_GLOB = $(top_srcdir)/thunarx/*.h
+CFILE_GLOB = $(top_srcdir)/thunarx/*.c
+
+# Header files to ignore when scanning
+IGNORE_HFILES = thunarx-alias.h
+
+# Extra files to add when scanning (relative to $srcdir)
+EXTRA_HFILES = 
+
+# Images to copy into HTML directory
+HTML_IMAGES = \
+	$(srcdir)/images/abstraction.png				\
+	$(srcdir)/images/menu-provider.png				\
+	$(srcdir)/images/say-hello.png
+
+
+# Extra SGML files that are included by DOC_MAIN_SGML_FILE
+content_files = \
+	version.xml
+
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES = \
+	-I$(top_srcdir) 						\
+	-I$(top_builddir) 						\
+	$(GTK_CFLAGS)
+
+GTKDOC_LIBS = \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+ at GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+ at GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+ at GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+ at GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+
+# Other files to distribute
+EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(DOC_MAIN_SGML_FILE) \
+	$(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt \
+	version.xml.in
+DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+	   $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+	$(DOC_MODULE).args 	 \
+	$(DOC_MODULE).hierarchy  \
+	$(DOC_MODULE).interfaces \
+	$(DOC_MODULE).prerequisites \
+	$(DOC_MODULE).signals
+
+CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(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  docs/reference/thunarx/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  docs/reference/thunarx/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
+version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	$(mkdir_p) $(distdir)/$(srcdir)/images $(distdir)/../../..
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local dist-hook distclean \
+	distclean-generic distclean-libtool distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-local mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-am uninstall-local
+
+
+ at ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+
+#### scan ####
+
+ at ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Scanning header files ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ at ENABLE_GTK_DOC_TRUE@	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+ at ENABLE_GTK_DOC_TRUE@	else \
+ at ENABLE_GTK_DOC_TRUE@	    cd $(srcdir) ; \
+ at ENABLE_GTK_DOC_TRUE@	    for i in $(SCANOBJ_FILES) ; do \
+ at ENABLE_GTK_DOC_TRUE@               test -f $$i || touch $$i ; \
+ at ENABLE_GTK_DOC_TRUE@	    done \
+ at ENABLE_GTK_DOC_TRUE@	fi
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && \
+ at ENABLE_GTK_DOC_TRUE@	  gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ at ENABLE_GTK_DOC_TRUE@	touch scan-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### templates ####
+
+ at ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Rebuilding template files ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch tmpl-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### xml ####
+
+ at ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml $(expand_content_files)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Building XML ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && \
+ at ENABLE_GTK_DOC_TRUE@	gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" $(MKDB_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch sgml-build.stamp
+
+ at ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
+ at ENABLE_GTK_DOC_TRUE@	@true
+
+#### html ####
+
+ at ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ at ENABLE_GTK_DOC_TRUE@	@echo '*** Building HTML ***'
+ at ENABLE_GTK_DOC_TRUE@	@-chmod -R u+w $(srcdir)
+ at ENABLE_GTK_DOC_TRUE@	rm -rf $(srcdir)/html 
+ at ENABLE_GTK_DOC_TRUE@	mkdir $(srcdir)/html
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ at ENABLE_GTK_DOC_TRUE@	test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+ at ENABLE_GTK_DOC_TRUE@	@echo '-- Fixing Crossreferences' 
+ at ENABLE_GTK_DOC_TRUE@	cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ at ENABLE_GTK_DOC_TRUE@	touch html-build.stamp
+ at ENABLE_GTK_DOC_FALSE@all-local:
+
+##############
+
+clean-local:
+	rm -f *~ *.bak
+	rm -rf .libs
+
+maintainer-clean-local: clean
+	cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+install-data-local:
+	installfiles=`echo $(srcdir)/html/*`; \
+	if test "$$installfiles" = '$(srcdir)/html/*'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
+	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+ at ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+ at ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+ at ENABLE_GTK_DOC_FALSE@	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+ at ENABLE_GTK_DOC_FALSE@	@false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/tmpl
+	mkdir $(distdir)/xml
+	mkdir $(distdir)/html
+	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+	-cp $(srcdir)/xml/*.xml $(distdir)/xml
+	-cp $(srcdir)/html/* $(distdir)/html
+	if test -f $(srcdir)/$(DOC_MODULE).types; then \
+	  cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
+	fi
+
+.PHONY : dist-hook-local
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxFileInfo.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxFileInfo.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxFileInfo.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,492 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarxFileInfo</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="prev" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="next" href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-abstraction-layer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-abstraction-layer.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="ThunarxPropertyPage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarxFileInfo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarxFileInfo</span></h2>
+<p>ThunarxFileInfo &#8212; Abstraction of a file handled within the file manager</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="id2592587"></a><h2>Stability Level</h2>
+Stable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <a href="ThunarxFileInfo.html#ThunarxFileInfoIface">ThunarxFileInfoIface</a>;
+            <a href="ThunarxFileInfo.html#ThunarxFileInfo-struct">ThunarxFileInfo</a>;
+gchar*      <a href="ThunarxFileInfo.html#thunarx-file-info-get-name">thunarx_file_info_get_name</a>      (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+gchar*      <a href="ThunarxFileInfo.html#thunarx-file-info-get-uri">thunarx_file_info_get_uri</a>       (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+gchar*      <a href="ThunarxFileInfo.html#thunarx-file-info-get-parent-uri">thunarx_file_info_get_parent_uri</a>
+                                            (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+gchar*      <a href="ThunarxFileInfo.html#thunarx-file-info-get-uri-scheme">thunarx_file_info_get_uri_scheme</a>
+                                            (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+gchar*      <a href="ThunarxFileInfo.html#thunarx-file-info-get-mime-type">thunarx_file_info_get_mime_type</a> (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+gboolean    <a href="ThunarxFileInfo.html#thunarx-file-info-has-mime-type">thunarx_file_info_has_mime_type</a> (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info,
+                                             const gchar *mime_type);
+gboolean    <a href="ThunarxFileInfo.html#thunarx-file-info-is-directory">thunarx_file_info_is_directory</a>  (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);
+GList*      <a href="ThunarxFileInfo.html#thunarx-file-info-list-copy">thunarx_file_info_list_copy</a>     (GList *file_infos);
+void        <a href="ThunarxFileInfo.html#thunarx-file-info-list-free">thunarx_file_info_list_free</a>     (GList *file_infos);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592842"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GInterface
+   +----ThunarxFileInfo
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592859"></a><h2>Prerequisites</h2>
+<p>
+ThunarxFileInfo requires
+ GObject.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592874"></a><h2>Description</h2>
+<p>
+  The <span class="interface">ThunarxFileInfo</span> interface provides extensions with
+  a way to access information about a file handled within the file manager.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2592889"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2592894"></a><h3>
+<a name="ThunarxFileInfoIface"></a>ThunarxFileInfoIface</h3>
+<a class="indexterm" name="id2592903"></a><pre class="programlisting">typedef struct {
+  gchar     *(*get_name)        (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_uri)         (ThunarxFileInfo *file_info);
+  gchar     *(*get_parent_uri)  (ThunarxFileInfo *file_info);
+  gchar     *(*get_uri_scheme)  (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_mime_type)   (ThunarxFileInfo *file_info);
+  gboolean   (*has_mime_type)   (ThunarxFileInfo *file_info,
+                                 const gchar     *mime_type);
+
+  gboolean   (*is_directory)    (ThunarxFileInfo *file_info);
+} ThunarxFileInfoIface;
+</pre>
+<p>
+  Interface with virtual methods implemented by the file manager and accessible
+  from the extensions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_name</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-get-name"><code class="function">thunarx_file_info_get_name()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_uri</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-get-uri"><code class="function">thunarx_file_info_get_uri()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_parent_uri</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-get-parent-uri"><code class="function">thunarx_file_info_get_parent_uri()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_uri_scheme</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-get-uri-scheme"><code class="function">thunarx_file_info_get_uri_scheme()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_mime_type</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-get-mime-type"><code class="function">thunarx_file_info_get_mime_type()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>has_mime_type</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-has-mime-type"><code class="function">thunarx_file_info_has_mime_type()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>is_directory</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxFileInfo.html#thunarx-file-info-is-directory"><code class="function">thunarx_file_info_is_directory()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593217"></a><h3>
+<a name="ThunarxFileInfo-struct"></a>ThunarxFileInfo</h3>
+<a class="indexterm" name="id2593225"></a><pre class="programlisting">typedef struct _ThunarxFileInfo ThunarxFileInfo;</pre>
+<p>
+	File info type, which is mapped to the real file info implementation
+	within the file manager.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593240"></a><h3>
+<a name="thunarx-file-info-get-name"></a>thunarx_file_info_get_name ()</h3>
+<a class="indexterm" name="id2593249"></a><pre class="programlisting">gchar*      thunarx_file_info_get_name      (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Returns the real name of the file represented
+by <em class="parameter"><code>file_info</code></em> in the local file system encoding.
+You can use <code class="function">g_filename_display_name()</code> or similar
+functions to generate an UTF-8 version of the
+name, which is suitable for use in the user
+interface.
+</p>
+<p>
+The caller is responsible to free the returned
+string using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the real name of the file represented
+              by <em class="parameter"><code>file_info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593345"></a><h3>
+<a name="thunarx-file-info-get-uri"></a>thunarx_file_info_get_uri ()</h3>
+<a class="indexterm" name="id2593353"></a><pre class="programlisting">gchar*      thunarx_file_info_get_uri       (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Returns the escaped, fully qualified URI
+of the file object represented by <em class="parameter"><code>file_info</code></em>.
+You may use <code class="function">g_filename_from_uri()</code> and similar
+functions to work with the returned URI.
+</p>
+<p>
+The caller is responsible to free the returned
+string using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the fully qualified URI of <em class="parameter"><code>file_info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593447"></a><h3>
+<a name="thunarx-file-info-get-parent-uri"></a>thunarx_file_info_get_parent_uri ()</h3>
+<a class="indexterm" name="id2593459"></a><pre class="programlisting">gchar*      thunarx_file_info_get_parent_uri
+                                            (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Returns the URI to the parent file of
+<em class="parameter"><code>file_info</code></em> or <code class="literal">NULL</code> if <em class="parameter"><code>file_info</code></em> has
+no parent. Note that the parent URI
+may be of a different type than the
+URI of <em class="parameter"><code>file_info</code></em>. For example, the
+parent of "file:///" is "computer:///".
+</p>
+<p>
+The caller is responsible to free the
+returned string using <code class="function">g_free()</code> when no
+longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the parent URI for <em class="parameter"><code>file_info</code></em>
+              or <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593566"></a><h3>
+<a name="thunarx-file-info-get-uri-scheme"></a>thunarx_file_info_get_uri_scheme ()</h3>
+<a class="indexterm" name="id2593578"></a><pre class="programlisting">gchar*      thunarx_file_info_get_uri_scheme
+                                            (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Returns the URI scheme of the file represented
+by <em class="parameter"><code>file_info</code></em>. E.g. if <em class="parameter"><code>file_info</code></em> refers to the
+file "file:///usr/home", the return value will
+be "file".
+</p>
+<p>
+The caller is responsible to free the returned
+string using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the URI scheme for <em class="parameter"><code>file_info</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593805"></a><h3>
+<a name="thunarx-file-info-get-mime-type"></a>thunarx_file_info_get_mime_type ()</h3>
+<a class="indexterm" name="id2593815"></a><pre class="programlisting">gchar*      thunarx_file_info_get_mime_type (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Returns the MIME-type of the file represented by
+<em class="parameter"><code>file_info</code></em> or <code class="literal">NULL</code> if no MIME-type is known for
+<em class="parameter"><code>file_info</code></em>.
+</p>
+<p>
+The caller is responsible to free the returned
+string using <code class="function">g_free()</code> when no longer needed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the MIME-type for <em class="parameter"><code>file_info</code></em> or
+              <code class="literal">NULL</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2593916"></a><h3>
+<a name="thunarx-file-info-has-mime-type"></a>thunarx_file_info_has_mime_type ()</h3>
+<a class="indexterm" name="id2593926"></a><pre class="programlisting">gboolean    thunarx_file_info_has_mime_type (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info,
+                                             const gchar *mime_type);</pre>
+<p>
+Checks whether <em class="parameter"><code>file_info</code></em> is of the given <em class="parameter"><code>mime_type</code></em>
+or whether the MIME-type of <em class="parameter"><code>file_info</code></em> is a subclass
+of <em class="parameter"><code>mime_type</code></em>.
+</p>
+<p>
+This is the preferred way for most extensions to check
+whether they support a given file or not, and you should
+consider using this method rather than
+<a href="ThunarxFileInfo.html#thunarx-file-info-get-mime-type"><code class="function">thunarx_file_info_get_mime_type()</code></a>. A simple example would
+be a menu extension that performs a certain action on
+text files. In this case you want to check whether a given
+<a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> refers to any kind of text file, not only
+to "text/plain" (e.g. this also includes "text/xml" and
+"application/x-desktop").
+</p>
+<p>
+But you should be aware that this method may take some
+time to test whether <em class="parameter"><code>mime_type</code></em> is valid for <em class="parameter"><code>file_info</code></em>,
+so don't call it too often.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>mime_type</code></em>&#160;:</span></td>
+<td> a MIME-type (e.g. "text/plain").
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>mime_type</code></em> is valid for <em class="parameter"><code>file_info</code></em>,
+              else <code class="literal">FALSE</code>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594082"></a><h3>
+<a name="thunarx-file-info-is-directory"></a>thunarx_file_info_is_directory ()</h3>
+<a class="indexterm" name="id2594091"></a><pre class="programlisting">gboolean    thunarx_file_info_is_directory  (<a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *file_info);</pre>
+<p>
+Checks whether <em class="parameter"><code>file_info</code></em> refers to a directory.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_info</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">TRUE</code> if <em class="parameter"><code>file_info</code></em> is a directory.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594168"></a><h3>
+<a name="thunarx-file-info-list-copy"></a>thunarx_file_info_list_copy ()</h3>
+<a class="indexterm" name="id2594177"></a><pre class="programlisting">GList*      thunarx_file_info_list_copy     (GList *file_infos);</pre>
+<p>
+Does a deep copy of <em class="parameter"><code>file_infos</code></em> and returns the
+new list.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>file_infos</code></em>&#160;:</span></td>
+<td> a <span class="type">GList</span> of <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>s.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> a copy of <em class="parameter"><code>file_infos</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2594256"></a><h3>
+<a name="thunarx-file-info-list-free"></a>thunarx_file_info_list_free ()</h3>
+<a class="indexterm" name="id2594264"></a><pre class="programlisting">void        thunarx_file_info_list_free     (GList *file_infos);</pre>
+<p>
+Frees the resources allocated for the <em class="parameter"><code>file_infos</code></em>
+list and decreases the reference count on the
+<a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>s contained within.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="parameter"><code>file_infos</code></em>&#160;:</span></td>
+<td> a <span class="type">GList</span> of <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>s.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-abstraction-layer.html"><b>&lt;&lt;&#160;Part&#160;IV.&#160;Abstraction Layer</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarxPropertyPage.html"><b>ThunarxPropertyPage&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxMenuProvider.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxMenuProvider.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxMenuProvider.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,379 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarxMenuProvider</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="prev" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="next" href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-providers.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-providers.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="ThunarxPropertyPageProvider.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarxMenuProvider"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarxMenuProvider</span></h2>
+<p>ThunarxMenuProvider &#8212; The interface to extensions that provide additional menu items</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="id2597540"></a><h2>Stability Level</h2>
+Stable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <a href="ThunarxMenuProvider.html#ThunarxMenuProviderIface">ThunarxMenuProviderIface</a>;
+            <a href="ThunarxMenuProvider.html#ThunarxMenuProvider-struct">ThunarxMenuProvider</a>;
+GList*      <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions">thunarx_menu_provider_get_file_actions</a>
+                                            (<a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">ThunarxMenuProvider</a> *provider,
+                                             GtkWidget *window,
+                                             GList *files);
+GList*      <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions">thunarx_menu_provider_get_folder_actions</a>
+                                            (<a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">ThunarxMenuProvider</a> *provider,
+                                             GtkWidget *window,
+                                             <a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *folder);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2598590"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GInterface
+   +----ThunarxMenuProvider
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2598608"></a><h2>Prerequisites</h2>
+<p>
+ThunarxMenuProvider requires
+ GObject.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2598622"></a><h2>Description</h2>
+<p>
+  The <span class="interface">ThunarxMenuProvider</span> interface is implemented by
+  extensions which provide additional menu items that should be displayed in
+  the file or folder context menus for certain types of files.
+</p>
+<p>
+  Extensions that implement this interface should do its best to respond as
+  fast as possible to method invokations by the file manager. That said, when
+  the file manager calls the <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions"><code class="function">thunarx_menu_provider_get_file_actions()</code></a> or the
+  <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions"><code class="function">thunarx_menu_provider_get_folder_actions()</code></a> method, the implementation in the
+  extension should use only the <a href="ThunarxFileInfo.html#thunarx-file-info-has-mime-type"><code class="function">thunarx_file_info_has_mime_type()</code></a> and
+  <a href="ThunarxFileInfo.html#thunarx-file-info-is-directory"><code class="function">thunarx_file_info_is_directory()</code></a> methods to determine the actions that should
+  be added to the file manager's context menu. Don't perform any complicated I/O
+  to determine the action list, as that would block the whole file manager process.
+</p>
+<p>
+  The GtkActions returned from the
+  <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions"><code class="function">thunarx_menu_provider_get_file_actions()</code></a> and <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions"><code class="function">thunarx_menu_provider_get_folder_actions()</code></a>
+  methods must be namespaced with the module to avoid collision with internal file manager
+  actions and actions provided by other extensions. For example, the menu action provided
+  by the <code class="systemitem">ThunarOpenTerminal</code> extension should be
+  called <code class="literal">ThunarOpenTerminal::open-terminal</code>.
+</p>
+<div class="example">
+<a name="id2598933"></a><p class="title"><b>Example&#160;5.&#160;Menu provider example</b></p>
+<pre class="programlisting">
+static GType hello_type;
+
+static void   hello_menu_provider_init (ThunarxMenuProviderIface *iface);
+static GList *hello_get_file_actions   (ThunarxMenuProvider      *provider,
+                                        GtkWidget                *window,
+                                        GList                    *files);
+
+static void
+hello_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (HelloClass),
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    sizeof (Hello),
+    0,
+    NULL,
+    NULL,
+  };
+
+  static const GInterfaceInfo menu_provider_info =
+  {
+    (GInterfaceInitFunc) hello_menu_provider_init,
+    NULL,
+    NULL,
+  };
+
+  hello_type = g_type_module_register_type (module, G_TYPE_OBJECT,
+                                            "Hello", &amp;info, 0);
+  g_type_module_add_interface (module, hello_type,
+                               THUNARX_TYPE_MENU_PROVIDER,
+                               &amp;menu_provider_info);
+}
+
+static void
+hello_menu_provider_init (ThunarxMenuProviderIface *iface)
+{
+  iface-&gt;get_file_actions = hello_get_file_actions;
+}
+
+static void
+hello_activated (GtkAction *action,
+                 GtkWidget *window)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                   GTK_DIALOG_MODAL
+                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   "Hello World!");
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static GList*
+hello_get_file_actions (ThunarxMenuProvider *provider,
+                        GtkWidget           *window,
+                        GList               *files)
+{
+  GtkAction *action;
+
+  action = gtk_action_new ("Hello::say-hello",
+                           "Say hello", "Say hello",
+                           NULL);
+  g_signal_connect (G_OBJECT (action), "activate",
+                    G_CALLBACK (hello_activated),
+                    window);
+
+  return g_list_append (NULL, action);
+}</pre>
+<p>
+    The above example will add an item <span class="guimenu"><span class="guimenuitem">Say hello</span></span>
+    to the file context menus as shown in the picture below:
+  </p>
+<p>
+    <img src="say-hello.png">
+  </p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2598968"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2598973"></a><h3>
+<a name="ThunarxMenuProviderIface"></a>ThunarxMenuProviderIface</h3>
+<a class="indexterm" name="id2599118"></a><pre class="programlisting">typedef struct {
+  GList *(*get_file_actions)    (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 GList               *files);
+
+  GList *(*get_folder_actions)  (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 ThunarxFileInfo     *folder);
+} ThunarxMenuProviderIface;
+</pre>
+<p>
+  Interface with virtual methods implemented by extensions that provide
+  additional menu items for the file manager's context menus.
+</p>
+<p>
+  Providers don't need to implement all of the virtual methods listed in
+  the interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_file_actions</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions"><code class="function">thunarx_menu_provider_get_file_actions()</code></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="structfield"><code>get_folder_actions</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions"><code class="function">thunarx_menu_provider_get_folder_actions()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599189"></a><h3>
+<a name="ThunarxMenuProvider-struct"></a>ThunarxMenuProvider</h3>
+<a class="indexterm" name="id2599197"></a><pre class="programlisting">typedef struct _ThunarxMenuProvider ThunarxMenuProvider;</pre>
+<p>
+  Menu provider type.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599212"></a><h3>
+<a name="thunarx-menu-provider-get-file-actions"></a>thunarx_menu_provider_get_file_actions ()</h3>
+<a class="indexterm" name="id2599224"></a><pre class="programlisting">GList*      thunarx_menu_provider_get_file_actions
+                                            (<a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">ThunarxMenuProvider</a> *provider,
+                                             GtkWidget *window,
+                                             GList *files);</pre>
+<p>
+Returns the list of <span class="type">GtkAction</span>s that <em class="parameter"><code>provider</code></em> has to offer for
+<em class="parameter"><code>files</code></em>.
+</p>
+<p>
+As a special note, this method automatically takes a reference on the
+<em class="parameter"><code>provider</code></em> for every <span class="type">GtkAction</span> object returned from the real implementation
+of this method in <em class="parameter"><code>provider</code></em>. This is to make sure that the extension stays
+in memory for atleast the time that the actions are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <em class="parameter"><code>provider</code></em> itself,
+that's released at a later time).
+</p>
+<p>
+The caller is responsible to free the returned list of actions using
+something like this when no longer needed:
+</p>
+<div class="informalexample"><pre class="programlisting">
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</pre></div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>provider</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider"><span class="type">ThunarxMenuProvider</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>window</code></em>&#160;:</span></td>
+<td> the <span class="type">GtkWindow</span> within which the actions will be used.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>files</code></em>&#160;:</span></td>
+<td> the list of <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>s to which the actions will be applied.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <span class="type">GtkAction</span>s that <em class="parameter"><code>provider</code></em> has to offer
+              for <em class="parameter"><code>files</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2599412"></a><h3>
+<a name="thunarx-menu-provider-get-folder-actions"></a>thunarx_menu_provider_get_folder_actions ()</h3>
+<a class="indexterm" name="id2599424"></a><pre class="programlisting">GList*      thunarx_menu_provider_get_folder_actions
+                                            (<a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">ThunarxMenuProvider</a> *provider,
+                                             GtkWidget *window,
+                                             <a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a> *folder);</pre>
+<p>
+Returns the list of <span class="type">GtkAction</span>s that <em class="parameter"><code>provider</code></em> has to offer for
+<em class="parameter"><code>folder</code></em>.
+</p>
+<p>
+As a special note, this method automatically takes a reference on the
+<em class="parameter"><code>provider</code></em> for every <span class="type">GtkAction</span> object returned from the real implementation
+of this method in <em class="parameter"><code>provider</code></em>. This is to make sure that the extension stays
+in memory for atleast the time that the actions are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <em class="parameter"><code>provider</code></em> itself,
+that's released at a later time).
+</p>
+<p>
+The caller is responsible to free the returned list of actions using
+something like this when no longer needed:
+</p>
+<div class="informalexample"><pre class="programlisting">
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</pre></div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>provider</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider"><span class="type">ThunarxMenuProvider</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>window</code></em>&#160;:</span></td>
+<td> the <span class="type">GtkWindow</span> within which the actions will be used.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>folder</code></em>&#160;:</span></td>
+<td> the folder to which the actions should will be applied.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <span class="type">GtkAction</span>s that <em class="parameter"><code>provider</code></em> has to offer
+              for <em class="parameter"><code>folder</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2599605"></a><h2>See Also</h2>
+<p>
+  The description of the <a href="ThunarxFileInfo.html" title="ThunarxFileInfo">ThunarxFileInfo</a>
+  interface.
+</p>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-providers.html"><b>&lt;&lt;&#160;Part&#160;V.&#160;Providers</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarxPropertyPageProvider.html"><b>ThunarxPropertyPageProvider&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPage.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPage.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPage.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,321 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarxPropertyPage</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="prev" href="ThunarxFileInfo.html" title="ThunarxFileInfo">
+<link rel="next" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarxFileInfo.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-abstraction-layer.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-providers.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarxPropertyPage"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarxPropertyPage</span></h2>
+<p>ThunarxPropertyPage &#8212; Base class for pages added to the properties dialog</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="id2596074"></a><h2>Stability Level</h2>
+Stable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <a href="ThunarxPropertyPage.html#ThunarxPropertyPage-struct">ThunarxPropertyPage</a>;
+GtkWidget*  <a href="ThunarxPropertyPage.html#thunarx-property-page-new">thunarx_property_page_new</a>       (const gchar *label);
+GtkWidget*  <a href="ThunarxPropertyPage.html#thunarx-property-page-new-with-label-widget">thunarx_property_page_new_with_label_widget</a>
+                                            (GtkWidget *label_widget);
+const gchar* <a href="ThunarxPropertyPage.html#thunarx-property-page-get-label">thunarx_property_page_get_label</a>
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page);
+void        <a href="ThunarxPropertyPage.html#thunarx-property-page-set-label">thunarx_property_page_set_label</a> (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page,
+                                             const gchar *label);
+GtkWidget*  <a href="ThunarxPropertyPage.html#thunarx-property-page-get-label-widget">thunarx_property_page_get_label_widget</a>
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page);
+void        <a href="ThunarxPropertyPage.html#thunarx-property-page-set-label-widget">thunarx_property_page_set_label_widget</a>
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page,
+                                             GtkWidget *label_widget);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2596288"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GObject
+   +----GtkObject
+         +----GtkWidget
+               +----GtkContainer
+                     +----GtkBin
+                           +----ThunarxPropertyPage
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2596327"></a><h2>Implemented Interfaces</h2>
+<p>
+ThunarxPropertyPage implements
+ AtkImplementorIface.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2596343"></a><h2>Properties</h2>
+<pre class="synopsis">
+
+  "<a href="ThunarxPropertyPage.html#ThunarxPropertyPage--label">label</a>"                gchararray            : Read / Write
+  "<a href="ThunarxPropertyPage.html#ThunarxPropertyPage--label-widget">label-widget</a>"         GtkWidget             : Read / Write
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2596380"></a><h2>Description</h2>
+<p>
+  The class for pages that can be added to Thunar's file properties dialog
+  by extensions implementing the <a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider"><span class="type">ThunarxPropertyPageProvider</span></a> interface.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2596396"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2596402"></a><h3>
+<a name="ThunarxPropertyPage-struct"></a>ThunarxPropertyPage</h3>
+<a class="indexterm" name="id2596410"></a><pre class="programlisting">typedef struct _ThunarxPropertyPage ThunarxPropertyPage;</pre>
+<p>
+  Base instance type for property pages.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2596426"></a><h3>
+<a name="thunarx-property-page-new"></a>thunarx_property_page_new ()</h3>
+<a class="indexterm" name="id2596435"></a><pre class="programlisting">GtkWidget*  thunarx_property_page_new       (const gchar *label);</pre>
+<p>
+Allocates a new <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> widget and sets its label to the
+specified <em class="parameter"><code>label</code></em>. If <em class="parameter"><code>label</code></em> is <code class="literal">NULL</code>, the label is omitted.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>label</code></em>&#160;:</span></td>
+<td> the text to use as the label of the page.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the newly allocated <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>
+              widget.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2596520"></a><h3>
+<a name="thunarx-property-page-new-with-label-widget"></a>thunarx_property_page_new_with_label_widget ()</h3>
+<a class="indexterm" name="id2596532"></a><pre class="programlisting">GtkWidget*  thunarx_property_page_new_with_label_widget
+                                            (GtkWidget *label_widget);</pre>
+<p>
+Allocates a new <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> widget and sets its label to
+the specified <em class="parameter"><code>label_widget</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>label_widget</code></em>&#160;:</span></td>
+<td> a <span class="type">GtkWidget</span>, which should be used as label.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the newly allocated <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> widget.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2596613"></a><h3>
+<a name="thunarx-property-page-get-label"></a>thunarx_property_page_get_label ()</h3>
+<a class="indexterm" name="id2596622"></a><pre class="programlisting">const gchar* thunarx_property_page_get_label
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page);</pre>
+<p>
+If the <em class="parameter"><code>property_page</code></em>'s label widget is a <span class="type">GtkLabel</span>, returns the text
+in the label widget (the <em class="parameter"><code>property_page</code></em> will have a <span class="type">GtkLabel</span> for the
+label widget if a non-<code class="literal">NULL</code> argument was passed to <a href="ThunarxPropertyPage.html#thunarx-property-page-new"><code class="function">thunarx_property_page_new()</code></a>).</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>property_page</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the text in the label or <code class="literal">NULL</code> if there was no label widget or
+              the label widget was not a <span class="type">GtkLabel</span>. The returned string is
+              owned by the <em class="parameter"><code>property_page</code></em> and must not be modified or freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2596877"></a><h3>
+<a name="thunarx-property-page-set-label"></a>thunarx_property_page_set_label ()</h3>
+<a class="indexterm" name="id2596887"></a><pre class="programlisting">void        thunarx_property_page_set_label (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page,
+                                             const gchar *label);</pre>
+<p>
+Sets the text of the label. If <em class="parameter"><code>label</code></em> is <code class="literal">NULL</code>, the current label is
+removed.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>property_page</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>label</code></em>&#160;:</span></td>
+<td> the text to use as the label of the page.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2596969"></a><h3>
+<a name="thunarx-property-page-get-label-widget"></a>thunarx_property_page_get_label_widget ()</h3>
+<a class="indexterm" name="id2596981"></a><pre class="programlisting">GtkWidget*  thunarx_property_page_get_label_widget
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page);</pre>
+<p>
+Returns the label widget for the <em class="parameter"><code>property_page</code></em>. See
+<a href="ThunarxPropertyPage.html#thunarx-property-page-set-label-widget"><code class="function">thunarx_property_page_set_label_widget()</code></a>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>property_page</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the label widget or <code class="literal">NULL</code> if there is none.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2597065"></a><h3>
+<a name="thunarx-property-page-set-label-widget"></a>thunarx_property_page_set_label_widget ()</h3>
+<a class="indexterm" name="id2597077"></a><pre class="programlisting">void        thunarx_property_page_set_label_widget
+                                            (<a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">ThunarxPropertyPage</a> *property_page,
+                                             GtkWidget *label_widget);</pre>
+<p>
+Sets the label widget for the <em class="parameter"><code>property_page</code></em>. This is the widget
+that will appear in the notebook header for the <em class="parameter"><code>property_page</code></em>.</p>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>property_page</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>label_widget</code></em>&#160;:</span></td>
+<td> the new label widget.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2597159"></a><h2>Properties</h2>
+<div class="refsect2" lang="en">
+<a name="id2597164"></a><h3>
+<a name="ThunarxPropertyPage--label"></a>The "<code class="literal">label</code>" property</h3>
+<pre class="programlisting">  "label"                gchararray            : Read / Write</pre>
+<p>Text of the page's label.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2597194"></a><h3>
+<a name="ThunarxPropertyPage--label-widget"></a>The "<code class="literal">label-widget</code>" property</h3>
+<pre class="programlisting">  "label-widget"         GtkWidget             : Read / Write</pre>
+<p>A widget to display in place of the usual page label.</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2597226"></a><h2>See Also</h2>
+<p>
+  The description of the <a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider"><span class="type">ThunarxPropertyPageProvider</span></a> interface.
+</p>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarxFileInfo.html"><b>&lt;&lt;&#160;ThunarxFileInfo</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-providers.html"><b>Part&#160;V.&#160;Providers&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPageProvider.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPageProvider.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ThunarxPropertyPageProvider.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,183 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>ThunarxPropertyPageProvider</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="prev" href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">
+<link rel="next" href="ix01.html" title="Index">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarxMenuProvider.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-providers.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="ix01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="ThunarxPropertyPageProvider"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ThunarxPropertyPageProvider</span></h2>
+<p>ThunarxPropertyPageProvider &#8212; The interface to extensions that provide additional property pages</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="id2599765"></a><h2>Stability Level</h2>
+Stable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <a href="ThunarxPropertyPageProvider.html#ThunarxPropertyPageProvider-struct">ThunarxPropertyPageProvider</a>;
+            <a href="ThunarxPropertyPageProvider.html#ThunarxPropertyPageProviderIface">ThunarxPropertyPageProviderIface</a>;
+GList*      <a href="ThunarxPropertyPageProvider.html#thunarx-property-page-provider-get-pages">thunarx_property_page_provider_get_pages</a>
+                                            (<a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider">ThunarxPropertyPageProvider</a> *provider,
+                                             GList *files);
+
+
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2600781"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+
+  GInterface
+   +----ThunarxPropertyPageProvider
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2600800"></a><h2>Prerequisites</h2>
+<p>
+ThunarxPropertyPageProvider requires
+ GObject.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2600816"></a><h2>Description</h2>
+<p>
+  To add a property page to the file properties dialog, extensions must implement the
+  <span class="type">ThunarxPropertyPageProvider</span> interface. This interface has only one virtual
+  method, <code class="function">get_pages</code>, that is passed a list of <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> objects and returns a list
+  of <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> objects.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2600849"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2600854"></a><h3>
+<a name="ThunarxPropertyPageProvider-struct"></a>ThunarxPropertyPageProvider</h3>
+<a class="indexterm" name="id2600865"></a><pre class="programlisting">typedef struct _ThunarxPropertyPageProvider ThunarxPropertyPageProvider;</pre>
+<p>
+  Property page provider type.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2600880"></a><h3>
+<a name="ThunarxPropertyPageProviderIface"></a>ThunarxPropertyPageProviderIface</h3>
+<a class="indexterm" name="id2600960"></a><pre class="programlisting">typedef struct {
+  GList *(*get_pages) (ThunarxPropertyPageProvider *provider,
+                       GList                       *files);
+} ThunarxPropertyPageProviderIface;
+</pre>
+<p>
+	Interface with virtual methods implemented by extensions that provide
+	additional pages for the file properties dialog.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td>
+<span class="term"><em class="structfield"><code>get_pages</code></em>&#160;()</span></td>
+<td>See <a href="ThunarxPropertyPageProvider.html#thunarx-property-page-provider-get-pages"><code class="function">thunarx_property_page_provider_get_pages()</code></a>.
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2601003"></a><h3>
+<a name="thunarx-property-page-provider-get-pages"></a>thunarx_property_page_provider_get_pages ()</h3>
+<a class="indexterm" name="id2601015"></a><pre class="programlisting">GList*      thunarx_property_page_provider_get_pages
+                                            (<a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider">ThunarxPropertyPageProvider</a> *provider,
+                                             GList *files);</pre>
+<p>
+Returns the list of <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>s that <em class="parameter"><code>provider</code></em> has to offer for <em class="parameter"><code>files</code></em>.
+</p>
+<p>
+As a special note, this method automatically takes a reference on the
+<em class="parameter"><code>provider</code></em> for every <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> object returned from the real implementation
+of this method in <em class="parameter"><code>provider</code></em>. This is to make sure that the extension stays
+in memory for atleast the time that the pages are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <em class="parameter"><code>provider</code></em> itself,
+that's released at a later time).
+</p>
+<p>
+The caller is responsible to free the returned list of pages using
+something like this when no longer needed:
+</p>
+<div class="informalexample"><pre class="programlisting">
+g_list_foreach (list, (GFunc) g_object_ref, NULL);
+g_list_foreach (list, (GFunc) gtk_object_sink, NULL);
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</pre></div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>provider</code></em>&#160;:</span></td>
+<td> a <a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider"><span class="type">ThunarxPropertyPageProvider</span></a>.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>files</code></em>&#160;:</span></td>
+<td> the list of <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>s for which a properties dialog will be displayed.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> the list of <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>s that <em class="parameter"><code>provider</code></em> has to offer
+              for <em class="parameter"><code>files</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2601245"></a><h2>See Also</h2>
+<p>
+  The description of the <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a> class.
+</p>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarxMenuProvider.html"><b>&lt;&lt;&#160;ThunarxMenuProvider</b></a></td>
+<td align="right"><a accesskey="n" href="ix01.html"><b>Index&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/abstraction.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/abstraction.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/home.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/home.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,83 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Thunar Extensions Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="next" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book" lang="en">
+<div class="titlepage">
+<div>
+<div><table class="navigation" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Thunar Extensions Reference Manual</p></th></tr></table></div>
+<div><div class="authorgroup"><div class="author">
+<h3 class="author">
+<span class="firstname">Benedikt</span> <span class="surname">Meurer</span>
+</h3>
+<div class="affiliation">
+<div class="address"><p><code class="email">&lt;<a href="mailto:benny at xfce.org">benny at xfce.org</a>&gt;</code></p></div>
+<span class="orgname">os-cillation<br></span><span class="orgdiv">System development<br></span><span class="jobtitle">Software developer<br></span>
+</div>
+</div></div></div>
+<div><p class="releaseinfo">Version 0.1.4pre-alpha-r18844
+</p></div>
+<div><p class="copyright">Copyright &#169; 2005 Benedikt Meurer</p></div>
+<div><div class="legalnotice">
+<a name="legalnotice"></a><p>
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.1 or
+        any later version published by the Free Software Foundation; with no
+        Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+        Texts. The complete license text is available from the <a href="http://www.gnu.org/" target="_top">Free Software Foundation</a>.
+      </p>
+</div></div>
+<div><p class="pubdate">September 2005</p></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="part"><a href="thunarx-overview.html">I. Overview</a></span></dt>
+<dt><span class="part"><a href="thunarx-writing-extensions.html">II. Writing Extensions</a></span></dt>
+<dt><span class="part"><a href="thunarx-fundamentals.html">III. Fundamentals</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="thunarx-Variables-and-functions-to-check-the-library-version.html">Version information</a></span><span class="refpurpose"> - Variables and functions to check the library version</span>
+</dt></dl></dd>
+<dt><span class="part"><a href="thunarx-abstraction-layer.html">IV. Abstraction Layer</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="ThunarxFileInfo.html">ThunarxFileInfo</a></span><span class="refpurpose"> - Abstraction of a file handled within the file manager</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarxPropertyPage.html">ThunarxPropertyPage</a></span><span class="refpurpose"> - Base class for pages added to the properties dialog</span>
+</dt>
+</dl></dd>
+<dt><span class="part"><a href="thunarx-providers.html">V. Providers</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="ThunarxMenuProvider.html">ThunarxMenuProvider</a></span><span class="refpurpose"> - The interface to extensions that provide additional menu items</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="ThunarxPropertyPageProvider.html">ThunarxPropertyPageProvider</a></span><span class="refpurpose"> - The interface to extensions that provide additional property pages</span>
+</dt>
+</dl></dd>
+<dt><span class="index"><a href="ix01.html">Index</a></span></dt>
+</dl>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"></td>
+<td align="right"><a accesskey="n" href="thunarx-overview.html"><b>Part&#160;I.&#160;Overview&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/index.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,40 @@
+<ANCHOR id="thunarx-Variables-and-functions-to-check-the-library-version" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html">
+<ANCHOR id="thunarx-major-version" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-major-version">
+<ANCHOR id="thunarx-minor-version" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-minor-version">
+<ANCHOR id="thunarx-micro-version" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-micro-version">
+<ANCHOR id="thunarx-check-version" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-check-version">
+<ANCHOR id="THUNARX-MAJOR-VERSION:CAPS" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MAJOR-VERSION:CAPS">
+<ANCHOR id="THUNARX-MINOR-VERSION:CAPS" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MINOR-VERSION:CAPS">
+<ANCHOR id="THUNARX-MICRO-VERSION:CAPS" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MICRO-VERSION:CAPS">
+<ANCHOR id="THUNARX-CHECK-VERSION:CAPS" href="thunarx/thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-CHECK-VERSION:CAPS">
+<ANCHOR id="ThunarxFileInfo" href="thunarx/ThunarxFileInfo.html">
+<ANCHOR id="ThunarxFileInfoIface" href="thunarx/ThunarxFileInfo.html#ThunarxFileInfoIface">
+<ANCHOR id="ThunarxFileInfo-struct" href="thunarx/ThunarxFileInfo.html#ThunarxFileInfo-struct">
+<ANCHOR id="thunarx-file-info-get-name" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-get-name">
+<ANCHOR id="thunarx-file-info-get-uri" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-get-uri">
+<ANCHOR id="thunarx-file-info-get-parent-uri" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-get-parent-uri">
+<ANCHOR id="thunarx-file-info-get-uri-scheme" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-get-uri-scheme">
+<ANCHOR id="thunarx-file-info-get-mime-type" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-get-mime-type">
+<ANCHOR id="thunarx-file-info-has-mime-type" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-has-mime-type">
+<ANCHOR id="thunarx-file-info-is-directory" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-is-directory">
+<ANCHOR id="thunarx-file-info-list-copy" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-list-copy">
+<ANCHOR id="thunarx-file-info-list-free" href="thunarx/ThunarxFileInfo.html#thunarx-file-info-list-free">
+<ANCHOR id="ThunarxPropertyPage" href="thunarx/ThunarxPropertyPage.html">
+<ANCHOR id="ThunarxPropertyPage-struct" href="thunarx/ThunarxPropertyPage.html#ThunarxPropertyPage-struct">
+<ANCHOR id="thunarx-property-page-new" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-new">
+<ANCHOR id="thunarx-property-page-new-with-label-widget" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-new-with-label-widget">
+<ANCHOR id="thunarx-property-page-get-label" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-get-label">
+<ANCHOR id="thunarx-property-page-set-label" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-set-label">
+<ANCHOR id="thunarx-property-page-get-label-widget" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-get-label-widget">
+<ANCHOR id="thunarx-property-page-set-label-widget" href="thunarx/ThunarxPropertyPage.html#thunarx-property-page-set-label-widget">
+<ANCHOR id="ThunarxPropertyPage--label" href="thunarx/ThunarxPropertyPage.html#ThunarxPropertyPage--label">
+<ANCHOR id="ThunarxPropertyPage--label-widget" href="thunarx/ThunarxPropertyPage.html#ThunarxPropertyPage--label-widget">
+<ANCHOR id="ThunarxMenuProvider" href="thunarx/ThunarxMenuProvider.html">
+<ANCHOR id="ThunarxMenuProviderIface" href="thunarx/ThunarxMenuProvider.html#ThunarxMenuProviderIface">
+<ANCHOR id="ThunarxMenuProvider-struct" href="thunarx/ThunarxMenuProvider.html#ThunarxMenuProvider-struct">
+<ANCHOR id="thunarx-menu-provider-get-file-actions" href="thunarx/ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions">
+<ANCHOR id="thunarx-menu-provider-get-folder-actions" href="thunarx/ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions">
+<ANCHOR id="ThunarxPropertyPageProvider" href="thunarx/ThunarxPropertyPageProvider.html">
+<ANCHOR id="ThunarxPropertyPageProvider-struct" href="thunarx/ThunarxPropertyPageProvider.html#ThunarxPropertyPageProvider-struct">
+<ANCHOR id="ThunarxPropertyPageProviderIface" href="thunarx/ThunarxPropertyPageProvider.html#ThunarxPropertyPageProviderIface">
+<ANCHOR id="thunarx-property-page-provider-get-pages" href="thunarx/ThunarxPropertyPageProvider.html#thunarx-property-page-provider-get-pages">

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ix01.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ix01.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/ix01.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,104 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarxPropertyPageProvider.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2600177"></a>Index</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>T</h3>
+<dl>
+<dt>ThunarxFileInfo, <a href="ThunarxFileInfo.html#id2593217">ThunarxFileInfo</a>
+</dt>
+<dt>ThunarxFileInfoIface, <a href="ThunarxFileInfo.html#id2592894">ThunarxFileInfoIface</a>
+</dt>
+<dt>ThunarxMenuProvider, <a href="ThunarxMenuProvider.html#id2599189">ThunarxMenuProvider</a>
+</dt>
+<dt>ThunarxMenuProviderIface, <a href="ThunarxMenuProvider.html#id2598973">ThunarxMenuProviderIface</a>
+</dt>
+<dt>ThunarxPropertyPage, <a href="ThunarxPropertyPage.html#id2596402">ThunarxPropertyPage</a>
+</dt>
+<dt>ThunarxPropertyPageProvider, <a href="ThunarxPropertyPageProvider.html#id2600854">ThunarxPropertyPageProvider</a>
+</dt>
+<dt>ThunarxPropertyPageProviderIface, <a href="ThunarxPropertyPageProvider.html#id2600880">ThunarxPropertyPageProviderIface</a>
+</dt>
+<dt>thunarx_check_version, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591237">thunarx_check_version ()</a>
+</dt>
+<dt>THUNARX_CHECK_VERSION, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591514">THUNARX_CHECK_VERSION()</a>
+</dt>
+<dt>thunarx_file_info_get_mime_type, <a href="ThunarxFileInfo.html#id2593805">thunarx_file_info_get_mime_type ()</a>
+</dt>
+<dt>thunarx_file_info_get_name, <a href="ThunarxFileInfo.html#id2593240">thunarx_file_info_get_name ()</a>
+</dt>
+<dt>thunarx_file_info_get_parent_uri, <a href="ThunarxFileInfo.html#id2593447">thunarx_file_info_get_parent_uri ()</a>
+</dt>
+<dt>thunarx_file_info_get_uri, <a href="ThunarxFileInfo.html#id2593345">thunarx_file_info_get_uri ()</a>
+</dt>
+<dt>thunarx_file_info_get_uri_scheme, <a href="ThunarxFileInfo.html#id2593566">thunarx_file_info_get_uri_scheme ()</a>
+</dt>
+<dt>thunarx_file_info_has_mime_type, <a href="ThunarxFileInfo.html#id2593916">thunarx_file_info_has_mime_type ()</a>
+</dt>
+<dt>thunarx_file_info_is_directory, <a href="ThunarxFileInfo.html#id2594082">thunarx_file_info_is_directory ()</a>
+</dt>
+<dt>thunarx_file_info_list_copy, <a href="ThunarxFileInfo.html#id2594168">thunarx_file_info_list_copy ()</a>
+</dt>
+<dt>thunarx_file_info_list_free, <a href="ThunarxFileInfo.html#id2594256">thunarx_file_info_list_free ()</a>
+</dt>
+<dt>thunarx_major_version, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2590977">thunarx_major_version</a>
+</dt>
+<dt>THUNARX_MAJOR_VERSION, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591418">THUNARX_MAJOR_VERSION</a>
+</dt>
+<dt>thunarx_menu_provider_get_file_actions, <a href="ThunarxMenuProvider.html#id2599212">thunarx_menu_provider_get_file_actions ()</a>
+</dt>
+<dt>thunarx_menu_provider_get_folder_actions, <a href="ThunarxMenuProvider.html#id2599412">thunarx_menu_provider_get_folder_actions ()</a>
+</dt>
+<dt>thunarx_micro_version, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591105">thunarx_micro_version</a>
+</dt>
+<dt>THUNARX_MICRO_VERSION, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591482">THUNARX_MICRO_VERSION</a>
+</dt>
+<dt>thunarx_minor_version, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591041">thunarx_minor_version</a>
+</dt>
+<dt>THUNARX_MINOR_VERSION, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#id2591450">THUNARX_MINOR_VERSION</a>
+</dt>
+<dt>thunarx_property_page_get_label, <a href="ThunarxPropertyPage.html#id2596613">thunarx_property_page_get_label ()</a>
+</dt>
+<dt>thunarx_property_page_get_label_widget, <a href="ThunarxPropertyPage.html#id2596969">thunarx_property_page_get_label_widget ()</a>
+</dt>
+<dt>thunarx_property_page_new, <a href="ThunarxPropertyPage.html#id2596426">thunarx_property_page_new ()</a>
+</dt>
+<dt>thunarx_property_page_new_with_label_widget, <a href="ThunarxPropertyPage.html#id2596520">thunarx_property_page_new_with_label_widget ()</a>
+</dt>
+<dt>thunarx_property_page_provider_get_pages, <a href="ThunarxPropertyPageProvider.html#id2601003">thunarx_property_page_provider_get_pages ()</a>
+</dt>
+<dt>thunarx_property_page_set_label, <a href="ThunarxPropertyPage.html#id2596877">thunarx_property_page_set_label ()</a>
+</dt>
+<dt>thunarx_property_page_set_label_widget, <a href="ThunarxPropertyPage.html#id2597065">thunarx_property_page_set_label_widget ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarxPropertyPageProvider.html"><b>&lt;&lt;&#160;ThunarxPropertyPageProvider</b></a></td>
+<td align="right"></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/left.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/left.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/menu-provider.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/menu-provider.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/right.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/right.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/say-hello.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/say-hello.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/style.css
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/style.css	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/style.css	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,66 @@
+.synopsis, .classsynopsis 
+{
+  background: #eeeeee;
+  border: solid 1px #aaaaaa;
+  padding: 0.5em;
+}
+.programlisting 
+{
+  background: #eeeeff;
+  border: solid 1px #aaaaff;
+  padding: 0.5em;
+}
+.variablelist 
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+table.navigation 
+{
+  background: #ffeeee;
+  border: solid 1px #ffaaaa;
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+.navigation a 
+{
+  color: #770000;
+}
+.navigation a:visited 
+{
+  color: #550000;
+}
+.navigation .title 
+{
+  font-size: 200%;
+}
+div.refnamediv 
+{
+  margin-top: 2em;
+}
+div.gallery-float 
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img 
+{
+  border-style: none;
+}
+div.gallery-spacer 
+{
+  clear: both;
+}
+a
+{
+  text-decoration: none;
+}
+a:hover
+{
+  text-decoration: underline;
+  color: #FF0000;
+}

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-Variables-and-functions-to-check-the-library-version.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-Variables-and-functions-to-check-the-library-version.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-Variables-and-functions-to-check-the-library-version.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,288 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Version information</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="prev" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="next" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-fundamentals.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-fundamentals.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-abstraction-layer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="thunarx-Variables-and-functions-to-check-the-library-version"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Version information</span></h2>
+<p>Version information &#8212; Variables and functions to check the library version</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="id2590809"></a><h2>Stability Level</h2>
+Stable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+extern      const guint <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-major-version">thunarx_major_version</a>;
+extern      const guint <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-minor-version">thunarx_minor_version</a>;
+extern      const guint <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-micro-version">thunarx_micro_version</a>;
+const gchar* <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-check-version">thunarx_check_version</a>          (guint required_major,
+                                             guint required_minor,
+                                             guint required_micro);
+#define     <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MAJOR-VERSION:CAPS">THUNARX_MAJOR_VERSION</a>
+#define     <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MINOR-VERSION:CAPS">THUNARX_MINOR_VERSION</a>
+#define     <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MICRO-VERSION:CAPS">THUNARX_MICRO_VERSION</a>
+#define     <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-CHECK-VERSION:CAPS">THUNARX_CHECK_VERSION</a>           (major,minor,micro)
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2590962"></a><h2>Description</h2>
+<p>
+  The Thunar Extension library provides version information,
+  which should be used by extensions.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="id2590971"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="id2590977"></a><h3>
+<a name="thunarx-major-version"></a>thunarx_major_version</h3>
+<a class="indexterm" name="id2590985"></a><pre class="programlisting">extern const guint thunarx_major_version;
+</pre>
+<p>
+The major version number of the
+<code class="systemitem">thunarx</code> library (e.g. in
+version 0.5.1 this is 0).
+</p>
+<p>
+This variable is in the library, so represents the
+<code class="systemitem">thunarx</code> library you have
+linked against. Contrast with the <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MAJOR-VERSION:CAPS"><span class="type">THUNARX_MAJOR_VERSION</span></a> macro, which
+represents the major version of the
+<code class="systemitem">thunarx</code> headers you have
+included.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591041"></a><h3>
+<a name="thunarx-minor-version"></a>thunarx_minor_version</h3>
+<a class="indexterm" name="id2591049"></a><pre class="programlisting">extern const guint thunarx_minor_version;
+</pre>
+<p>
+The minor version number of the
+<code class="systemitem">thunarx</code> library (e.g. in
+version 0.5.1 this is 5).
+</p>
+<p>
+This variable is in the library, so represents the
+<code class="systemitem">thunarx</code> library you have
+linked against. Contrast with the <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MINOR-VERSION:CAPS"><span class="type">THUNARX_MINOR_VERSION</span></a> macro, which
+represents the minor version of the
+<code class="systemitem">thunarx</code> headers you have
+included.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591105"></a><h3>
+<a name="thunarx-micro-version"></a>thunarx_micro_version</h3>
+<a class="indexterm" name="id2591113"></a><pre class="programlisting">extern const guint thunarx_micro_version;
+</pre>
+<p>
+The micro version number of the
+<code class="systemitem">thunarx</code> library (e.g. in
+version 0.5.1 this is 1).
+</p>
+<p>
+This variable is in the library, so represents the
+<code class="systemitem">thunarx</code> library you have
+linked against. Contrast with the <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MICRO-VERSION:CAPS"><span class="type">THUNARX_MICRO_VERSION</span></a> macro, which
+represents the micro version of the
+<code class="systemitem">thunarx</code> headers you have
+included.</p>
+<p>
+
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591237"></a><h3>
+<a name="thunarx-check-version"></a>thunarx_check_version ()</h3>
+<a class="indexterm" name="id2591245"></a><pre class="programlisting">const gchar* thunarx_check_version          (guint required_major,
+                                             guint required_minor,
+                                             guint required_micro);</pre>
+<p>
+Checks that the <code class="systemitem">thunarx</code> library
+in use is compatible with the given version. Generally you would pass in
+the constants <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MAJOR-VERSION:CAPS"><span class="type">THUNARX_MAJOR_VERSION</span></a>, <a href="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MINOR-VERSION:CAPS"><span class="type">THUNARX_MINOR_VERSION</span></a> and
+<span class="type">THUNARX_VERSION_MICRO</span> as the three arguments to this function; that produces
+a check that the library in use is compatible with the version of
+<code class="systemitem">thunarx</code> the extension was
+compiled against.
+</p>
+<p>
+This function should be called by extensions in the
+<code class="function">thunar_extension_initialize()</code> method to verify that the <code class="systemitem">thunarx</code> library used by file manager is
+compatible with the version the extension was compiled with.
+</p>
+<p>
+</p>
+<div class="example">
+<a name="id2591341"></a><p class="title"><b>Example&#160;3.&#160;Checking the runtime version of the Thunar Extension library</b></p>
+<pre class="programlisting">
+const gchar *mismatch;
+mismatch = thunarx_check_version (THUNARX_VERSION_MAJOR,
+                                  THUNARX_VERSION_MINOR,
+                                  THUNARX_VERSION_MICRO);
+if (G_UNLIKELY (mismatch != NULL))
+  g_error ("Version mismatch: %s", mismatch);
+</pre>
+</div>
+<p>
+
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>required_major</code></em>&#160;:</span></td>
+<td> the required major version.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>required_minor</code></em>&#160;:</span></td>
+<td> the required minor version.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>required_micro</code></em>&#160;:</span></td>
+<td> the required micro version.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><span class="emphasis"><em>Returns</em></span>&#160;:</span></td>
+<td> <code class="literal">NULL</code> if the library is compatible with the given version,
+              or a string describing the version mismatch. The returned
+              string is owned by the library and must not be freed or
+              modified by the caller.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591418"></a><h3>
+<a name="THUNARX-MAJOR-VERSION:CAPS"></a>THUNARX_MAJOR_VERSION</h3>
+<a class="indexterm" name="id2591427"></a><pre class="programlisting">#define THUNARX_MAJOR_VERSION 0
+</pre>
+<p>
+  The major version number of the <code class="systemitem">thunarx</code> library.
+  Like thunarx_major_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591450"></a><h3>
+<a name="THUNARX-MINOR-VERSION:CAPS"></a>THUNARX_MINOR_VERSION</h3>
+<a class="indexterm" name="id2591459"></a><pre class="programlisting">#define THUNARX_MINOR_VERSION 1
+</pre>
+<p>
+  The minor version number of the <code class="systemitem">thunarx</code> library.
+  Like thunarx_minor_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591482"></a><h3>
+<a name="THUNARX-MICRO-VERSION:CAPS"></a>THUNARX_MICRO_VERSION</h3>
+<a class="indexterm" name="id2591491"></a><pre class="programlisting">#define THUNARX_MICRO_VERSION 3
+</pre>
+<p>
+  The micro version number of the <code class="systemitem">thunarx</code> library.
+  Like thunarx_micro_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="id2591514"></a><h3>
+<a name="THUNARX-CHECK-VERSION:CAPS"></a>THUNARX_CHECK_VERSION()</h3>
+<a class="indexterm" name="id2591523"></a><pre class="programlisting">#define     THUNARX_CHECK_VERSION(major,minor,micro)</pre>
+<p>
+  Checks the version of the <code class="systemitem">thunarx</code> library. Returns
+  <code class="literal">TRUE</code> if the version of the <code class="systemitem">thunarx</code> header files is
+  the same as or newer than the passed-in version.
+</p>
+<div class="example">
+<a name="id2591558"></a><p class="title"><b>Example&#160;4.&#160;Checking the version of the Thunar Extension library</b></p>
+<pre class="programlisting">
+if (!THUNARX_CHECK_VERSION (0, 1, 0))
+  g_error ("Thunarx version 0.1.0 or above is required");</pre>
+</div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>major</code></em>&#160;:</span></td>
+<td>the major version number.
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>minor</code></em>&#160;:</span></td>
+<td>the minor version number
+</td>
+</tr>
+<tr>
+<td>
+<span class="term"><em class="parameter"><code>micro</code></em>&#160;:</span></td>
+<td>the micro version number.
+
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-fundamentals.html"><b>&lt;&lt;&#160;Part&#160;III.&#160;Fundamentals</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-abstraction-layer.html"><b>Part&#160;IV.&#160;Abstraction Layer&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-abstraction-layer.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-abstraction-layer.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-abstraction-layer.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;IV.&#160;Abstraction Layer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="thunarx-Variables-and-functions-to-check-the-library-version.html" title="Version information">
+<link rel="next" href="ThunarxFileInfo.html" title="ThunarxFileInfo">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-Variables-and-functions-to-check-the-library-version.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="ThunarxFileInfo.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="thunarx-abstraction-layer"></a>Abstraction Layer</h1></div></div></div>
+<p>
+      In order to hide the internals of the file manager from the extensions, the <code class="systemitem">thunarx</code> provides an abstraction layer, which includes interfaces
+      accessible to the extension, that are implemented by the file manager at runtime.
+    </p>
+<p>
+      <img src="abstraction.png">
+    </p>
+<p>
+      Currently the abstraction layer consists of the interface <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>, which provides
+      extensions with a way to access information about a file handled within
+      the file manager, and the class <a href="ThunarxPropertyPage.html" title="ThunarxPropertyPage"><span class="type">ThunarxPropertyPage</span></a>, which
+      is the base class for widgets that can be added to the properties dialog by
+      extensions.
+    </p>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-Variables-and-functions-to-check-the-library-version.html"><b>&lt;&lt;&#160;Version information</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarxFileInfo.html"><b>ThunarxFileInfo&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-fundamentals.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-fundamentals.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-fundamentals.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,33 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;III.&#160;Fundamentals</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="thunarx-writing-extensions-advanced-topics.html" title="Advanced topics">
+<link rel="next" href="thunarx-Variables-and-functions-to-check-the-library-version.html" title="Version information">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-writing-extensions-advanced-topics.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-Variables-and-functions-to-check-the-library-version.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title">
+<a name="thunarx-fundamentals"></a>Fundamentals</h1></div></div></div></div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-writing-extensions-advanced-topics.html"><b>&lt;&lt;&#160;Advanced topics</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-Variables-and-functions-to-check-the-library-version.html"><b>Version information&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-overview.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-overview.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-overview.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;I.&#160;Overview</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="next" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-writing-extensions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="thunarx-overview"></a>Overview</h1></div></div></div>
+<p>
+      The Thunar Extension Framework (<code class="systemitem">thunarx</code>) provides
+      developers with an easy way to extend the basic functionality provided by
+      the <a href="http://thunar.xfce.org/" target="_top">Thunar File Manager</a>.
+      The <code class="systemitem">thunarx</code> library includes interfaces that can
+      be implemented by extensions for various purposes.
+    </p>
+<p>
+      It is based on the <a href="http://developer.gnome.org/doc/API/2.0/gobject/ch02.html" target="_top">GLib Dynamic Type
+      System</a> and loads the extensions on demand to reduce the system resources
+      allocated for the file manager process.
+    </p>
+<div class="sect1" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="thunarx-overview-goals"></a>Goals</h2></div></div></div>
+<p>
+        The Thunar Extension Framework was developed with the following goals in mind:
+      </p>
+<div class="orderedlist"><ol type="1">
+<li>
+          It should be easy to extend the functionality of the file manager in certain
+          ways.
+        </li>
+<li>
+          The internals of the file manager should be hidden from the extensions to be
+          able to maintain API/ABI compatibility for extensions over various major
+          releases of the file manager.
+        </li>
+<li>
+          Provide basic compatibility with the <a href="http://www.gnome.org/projects/nautilus/" target="_top">Nautilus</a> Extension Framework,
+          so vendors don't need to write several versions of their extensions for the various
+          file managers. With the current implementation it should be easy to write a small
+          wrapper library for generic extensions that can be loaded into both Thunar and
+          Nautilus.
+        </li>
+<li>
+          Extensions should not be loaded into memory until they are actually required to
+          save system resources. This differs from the way Nautilus handles extensions and
+          therefore people that already know how to write Nautilus extensions must be
+          careful when writing extensions for Thunar, because Thunar actually unloads the
+          extension when it's no longer needed. The <a href="http://developer.gnome.org/doc/API/2.0/gobject/GTypePlugin.html" target="_top">GTypePlugin</a>
+          and <a href="http://developer.gnome.org/doc/API/2.0/gobject/GTypeModule.html" target="_top">GTypeModule</a>
+          sections in the <a href="http://developer.gnome.org/doc/API/2.0/gobject/" target="_top">GObject
+          Reference Manual</a> provide details about the handling of dynamic type plugins.
+        </li>
+<li>
+          Permit developers to write extensions in languages other than C.
+        </li>
+</ol></div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="index.html"><b>&lt;&lt;&#160;Thunar Extensions Reference Manual</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-writing-extensions.html"><b>Part&#160;II.&#160;Writing Extensions&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-providers.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-providers.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-providers.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,50 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;V.&#160;Providers</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="ThunarxPropertyPage.html" title="ThunarxPropertyPage">
+<link rel="next" href="ThunarxMenuProvider.html" title="ThunarxMenuProvider">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ThunarxPropertyPage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="ThunarxMenuProvider.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="thunarx-providers"></a>Providers</h1></div></div></div>
+<p>
+      The extensions interact with the file manager by implementing so called
+      <span class="emphasis"><em>providers</em></span>. This is a concept adopted from the Nautilus
+      Extension Framework.
+    </p>
+<p>
+      Providers are interfaces in the <code class="systemitem">thunarx</code>
+      library that describe the functionality provided by a certain extension. For
+      example, when the file manager pops up the file context menu, it'll first lookup
+      all extensions that implement the interface <span class="interface">ThunarxMenuProvider</span>
+      ask those extensions for the list of additional actions.
+    </p>
+<p>
+      <img src="menu-provider.png">
+    </p>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="ThunarxPropertyPage.html"><b>&lt;&lt;&#160;ThunarxPropertyPage</b></a></td>
+<td align="right"><a accesskey="n" href="ThunarxMenuProvider.html"><b>ThunarxMenuProvider&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-advanced-topics.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-advanced-topics.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-advanced-topics.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,73 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Advanced topics</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="prev" href="thunarx-writing-extensions-getting-started.html" title="Getting Started">
+<link rel="next" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-writing-extensions-getting-started.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-writing-extensions.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-fundamentals.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="sect1" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="thunarx-writing-extensions-advanced-topics"></a>Advanced topics</h2></div></div></div>
+<p>
+        This section provides a short introduction to some of the advanced topics in the
+        Thunar Extension Framework.
+      </p>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-memory-resident-extensions"></a>Memory-Resident Extensions</h3></div></div></div>
+<p>
+          Some extensions may not play well with Thunar's on-demand loading and unloading
+          of extensions. For example, an extension that uses a desktop library, which in
+          turn registers additional static GTypes will not work after being loaded and
+          unloaded for the first time. For these kind of extensions, Thunar provides the
+          option to make extensions <span class="emphasis"><em>memory resident</em></span>, which means the
+          extension will be loaded once and afterwards will never be unloaded again until
+          Thunar exits.
+        </p>
+<p>
+          Such extensions must set the <code class="literal">resident</code> property of the type
+          module in its <code class="function">thunar_extension_initialize()</code> function to
+          <code class="literal">TRUE</code>.
+        </p>
+<div class="example">
+<a name="id2538660"></a><p class="title"><b>Example&#160;2.&#160;Making an extension memory resident</b></p>
+<pre class="programlisting">
+G_MODULE_EXPORT void
+thunar_extension_initialize (GTypeModule *module)
+{
+  /* setup the types for the extension */
+  ...
+
+  /* ensure that the extension will never be unloaded */
+  g_object_set (G_OBJECT (module),
+                "resident", TRUE,
+                NULL);
+}</pre>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-writing-extensions-getting-started.html"><b>&lt;&lt;&#160;Getting Started</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-fundamentals.html"><b>Part&#160;III.&#160;Fundamentals&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-getting-started.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-getting-started.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions-getting-started.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,179 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Getting Started</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="prev" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="next" href="thunarx-writing-extensions-advanced-topics.html" title="Advanced topics">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-writing-extensions.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="thunarx-writing-extensions.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-writing-extensions-advanced-topics.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="sect1" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="thunarx-writing-extensions-getting-started"></a>Getting Started</h2></div></div></div>
+<p>
+        Providers are <span class="type">GTypeModule</span>s loaded from shared libraries installed in
+        <code class="filename">$libdir/thunarx-1/</code>. The shared libraries are linked against the
+        <code class="systemitem">thunarx-1</code> library.
+      </p>
+<p>
+        The extensions must provide three public functions, <code class="function">thunar_extension_initialize()</code>,
+        <code class="function">thunar_extension_shutdown()</code> and <code class="function">thunar_extension_list_types()</code>.
+      </p>
+<p>
+        <code class="function">thunar_extension_initialize()</code> is passed a <span class="type">GTypeModule</span>
+        object, and must register all GTypes that the extension needs. <code class="function">thunar_extension_shutdown()</code> should
+        perform any extension-specific shutdown required prior to unloading the extension. <code class="function">thunar_extension_list_types()</code>
+        returns an array of GTypes that represent the types of the providers exported by the extension. Thunar will instantiate
+        objects of those types when needed.
+      </p>
+<div class="example">
+<a name="id2539667"></a><p class="title"><b>Example&#160;1.&#160;Basic Structure of an extension</b></p>
+<pre class="programlisting">
+#include &lt;gmodule.h&gt;
+#include &lt;thunarx/thunarx.h&gt;
+
+static GType type_list[1];
+
+static void
+foo_extension_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (FooExtensionClass),
+    NULL,
+    NULL,
+    (GClassInitFunc) foo_extension_class_init,
+    NULL,
+    NULL,
+    sizeof (FooExtension),
+    0,
+    (GInstanceInitFunc) foo_extension_init,
+    NULL,
+  };
+
+  type_list[0] = g_type_module_register_type (module,
+                                              G_TYPE_OBJECT,
+                                              "FooExtension",
+                                              &amp;info, 0);
+
+  /* implement the desired provider interfaces */
+}
+
+static GType
+foo_extension_get_type (void)
+{
+  return type_list[0];
+}
+
+G_MODULE_EXPORT void
+thunar_extension_initialize (GTypeModule *module)
+{
+  const gchar *mismatch;
+
+  /* verify the versions */
+  mismatch = thunarx_check_version (THUNARX_MAJOR_VERSION,
+                                    THUNARX_MINOR_VERSION,
+                                    THUNARX_MICRO_VERSION);
+  if (G_UNLIKELY (mismatch != NULL))
+    {
+      g_warning ("Version mismatch: %s", mismatch);
+      return;
+    }
+
+  foo_extension_register_type (module);
+}
+
+G_MODULE_EXPORT void
+thunar_extension_shutdown (void)
+{
+  /* any extension-specific shutdown */
+}
+
+G_MODULE_EXPORT void
+thunar_extension_list_types (const GType **types,
+                             gint         *n_types)
+{
+  *types = type_list;
+  *n_types = G_N_ELEMENTS (type_list);
+}</pre>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-compiling-thunar-extensions"></a>Compiling Thunar Extensions</h3></div></div></div>
+<p>
+          To compile a Thunar extension, you need to tell the compiler where to find the
+          <code class="systemitem">thunarx</code> header files and library. This
+          is done with the <code class="literal">pkg-config</code> utility.
+        </p>
+<p>
+          The following interactive shell session demonstrates how <code class="literal">pkg-config</code>
+          is used (the actual output on your system will be different):
+          </p>
+<pre class="screen">
+$ pkg-config --cflags thunarx-1
+-DXTHREADS -DXUSE_MTSAFE_API -I/opt/local/include/thunarx-1 -I/usr/local/include/atk-1.0 \
+-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/X11R6/include/gtk-2.0 \
+-I/usr/X11R6/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/X11R6/include/pango-1.0 \
+-I/usr/local/include/freetype2 -I/usr/local/include
+$ pkg-config --libs thunarx-1
+-Wl,--rpath -Wl,/usr/local/lib -L/usr/local/lib -L/usr/X11R6/lib -L/opt/local/lib -lthunarx-1</pre>
+<p>
+        </p>
+<p>
+          The easiest way to compile an extension is to use the <span class="emphasis"><em>backticks</em></span>
+          feature of the shell. If you enclose a command in backticks (<span class="emphasis"><em>not single
+          quotes</em></span>), then its output will be substituted into the command line before
+          execution. So to compile an extension, you would type the following:
+          </p>
+<pre class="screen">
+$ gcc -shared -fPIC -DPIC `pkg-config --cflags --libs thunarx-1` foo.c -o foo.so</pre>
+<p>
+        </p>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-installing-thunar-extensions"></a>Installing Thunar Extensions</h3></div></div></div>
+<p>
+          To determine the directory where extensions must be installed on your local system,
+          you can use the following command (as mentioned above, the output will be different
+          on your system):
+          </p>
+<pre class="screen">
+$ pkg-config --variable=extensionsdir thunarx-1
+/opt/local/lib/thunarx-1</pre>
+<p>
+        </p>
+<p>
+          For example, to install the extension <code class="filename">foo.so</code> on your system,
+          you would type the following:
+          </p>
+<pre class="screen">
+$ install -d `pkg-config --variable=extensionsdir thunarx-1`
+$ install -c -m 0755 foo.so `pkg-config --variable=extensionsdir thunarx-1`/foo.so</pre>
+<p>
+        </p>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-writing-extensions.html"><b>&lt;&lt;&#160;Part&#160;II.&#160;Writing Extensions</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-writing-extensions-advanced-topics.html"><b>Advanced topics&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions.html
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions.html	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx-writing-extensions.html	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,99 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Part&#160;II.&#160;Writing Extensions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
+<link rel="start" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="up" href="index.html" title="Thunar Extensions Reference Manual">
+<link rel="prev" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="next" href="thunarx-writing-extensions-getting-started.html" title="Getting Started">
+<meta name="generator" content="GTK-Doc V1.4 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="part" href="thunarx-overview.html" title="Part&#160;I.&#160;Overview">
+<link rel="part" href="thunarx-writing-extensions.html" title="Part&#160;II.&#160;Writing Extensions">
+<link rel="part" href="thunarx-fundamentals.html" title="Part&#160;III.&#160;Fundamentals">
+<link rel="part" href="thunarx-abstraction-layer.html" title="Part&#160;IV.&#160;Abstraction Layer">
+<link rel="part" href="thunarx-providers.html" title="Part&#160;V.&#160;Providers">
+<link rel="index" href="ix01.html" title="Index">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="thunarx-overview.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Thunar Extensions Reference Manual</th>
+<td><a accesskey="n" href="thunarx-writing-extensions-getting-started.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part" lang="en">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="thunarx-writing-extensions"></a>Writing Extensions</h1></div></div></div>
+<p>
+      This section explains the basic steps required to write an extension for the <a href="http://thunar.xfce.org" target="_top">Thunar File Manager</a> using the C language interface. It is
+      just a short introduction and not meant to provide extensive details about the internal workings
+      of the file manager.
+    </p>
+<div class="sect1" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="thunarx-writing-extensions-basic-concepts"></a>Basic Concepts</h2></div></div></div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-extensions-and-providers"></a>Extensions and Providers</h3></div></div></div>
+<p>
+          <span class="emphasis"><em>Thunar Extensions</em></span> are shared libraries that extend the basic functionality
+          provided by the Thunar File Manager. An extension exports one or more <span class="type">GObject</span>s, called <span class="emphasis"><em>providers</em></span> to Thunar.
+        </p>
+<p>
+          Providers implement one or more of the <span class="type">GInterface</span>s included with
+          the <code class="systemitem">thunarx</code> library. The currently exported interfaces
+          include the <a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider"><span class="type">ThunarxMenuProvider</span></a> for adding context menu
+          items to the file views and the <a href="ThunarxPropertyPageProvider.html" title="ThunarxPropertyPageProvider"><span class="type">ThunarxPropertyPageProvider</span></a> for adding pages to the
+          file properties dialog.
+        </p>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-thunarxfileinfo"></a>ThunarxFileInfo</h3></div></div></div>
+<p>
+          Thunar passes file references to the provider using <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a>
+          objects. The <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> interface provides access to the file
+          information that Thunar has already read - mime type, URI, name, etc. Extensions should use the data from
+          from the <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> rather than reading it themselves, to
+          prevent excessive I/O.
+        </p>
+<p>
+          There is exactly one <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> per file, and it is kept around
+          for as long as Thunar is interested in the file. Extensions can use this information to manage lifecycles of
+          its own data - e.g. when the <a href="ThunarxFileInfo.html" title="ThunarxFileInfo"><span class="type">ThunarxFileInfo</span></a> goes away, it is safe
+          for the extension to forget any private data for that file.
+        </p>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-names"></a>Names</h3></div></div></div>
+<p>
+          Most objects created by the extensions need names, e.g. the <span class="type">GtkAction</span>s
+          returned from the <a href="ThunarxMenuProvider.html" title="ThunarxMenuProvider"><span class="type">ThunarxMenuProvider</span></a>s. These names must be
+          namespaced with the name of the extension. For example the main action returned from the
+          <span class="application">OpenTerminal</span> extension should be called <code class="literal">OpenTerminal::open-terminal</code>.
+          The namespace must be global among the providers exported by a certain extension.
+        </p>
+</div>
+<div class="sect2" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="thunarx-writing-extensions-types"></a>Types</h3></div></div></div>
+<p>
+          Thunar extensions are loaded as <span class="type">GTypeModule</span>s. This means that all GTypes
+          created by the extension must be registered with the <span class="type">GTypeModule</span>, using
+          <code class="function">g_type_module_register_type()</code> function rather
+          than <code class="function">g_type_register_static()</code>. All types exported by
+          an extension must be registered in
+          <code class="function">thunar_extension_initialize()</code>.
+        </p>
+</div>
+</div>
+</div>
+<table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle">
+<td align="left"><a accesskey="p" href="thunarx-overview.html"><b>&lt;&lt;&#160;Part&#160;I.&#160;Overview</b></a></td>
+<td align="right"><a accesskey="n" href="thunarx-writing-extensions-getting-started.html"><b>Getting Started&#160;&gt;&gt;</b></a></td>
+</tr></table>
+</body>
+</html>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx.devhelp
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx.devhelp	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/thunarx.devhelp	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<book xmlns="http://www.devhelp.net/book" title="Thunar Extensions Reference Manual" link="index.html" author="Benedikt Meurer" name="thunarx">
+  <chapters>
+    <sub name="Overview" link="thunarx-overview.html">
+      <sub name="Goals" link="thunarx-overview.html#thunarx-overview-goals"/>
+    </sub>
+    <sub name="Writing Extensions" link="thunarx-writing-extensions.html">
+      <sub name="Basic Concepts" link="thunarx-writing-extensions.html#thunarx-writing-extensions-basic-concepts"/>
+      <sub name="Getting Started" link="thunarx-writing-extensions-getting-started.html"/>
+      <sub name="Advanced topics" link="thunarx-writing-extensions-advanced-topics.html"/>
+    </sub>
+    <sub name="Fundamentals" link="thunarx-fundamentals.html">
+      <sub name="Version information" link="thunarx-Variables-and-functions-to-check-the-library-version.html"/>
+    </sub>
+    <sub name="Abstraction Layer" link="thunarx-abstraction-layer.html">
+      <sub name="ThunarxFileInfo" link="ThunarxFileInfo.html"/>
+      <sub name="ThunarxPropertyPage" link="ThunarxPropertyPage.html"/>
+    </sub>
+    <sub name="Providers" link="thunarx-providers.html">
+      <sub name="ThunarxMenuProvider" link="ThunarxMenuProvider.html"/>
+      <sub name="ThunarxPropertyPageProvider" link="ThunarxPropertyPageProvider.html"/>
+    </sub>
+    <sub name="Index" link="ix01.html"/>
+  </chapters>
+  <functions>
+    <function name="thunarx_major_version" link="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-major-version"/>
+    <function name="thunarx_minor_version" link="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-minor-version"/>
+    <function name="thunarx_micro_version" link="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-micro-version"/>
+    <function name="thunarx_check_version ()" link="thunarx-Variables-and-functions-to-check-the-library-version.html#thunarx-check-version"/>
+    <function name="THUNARX_MAJOR_VERSION" link="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MAJOR-VERSION:CAPS"/>
+    <function name="THUNARX_MINOR_VERSION" link="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MINOR-VERSION:CAPS"/>
+    <function name="THUNARX_MICRO_VERSION" link="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-MICRO-VERSION:CAPS"/>
+    <function name="THUNARX_CHECK_VERSION()" link="thunarx-Variables-and-functions-to-check-the-library-version.html#THUNARX-CHECK-VERSION:CAPS"/>
+    <function name="ThunarxFileInfoIface" link="ThunarxFileInfo.html#ThunarxFileInfoIface"/>
+    <function name="ThunarxFileInfo" link="ThunarxFileInfo.html#ThunarxFileInfo-struct"/>
+    <function name="thunarx_file_info_get_name ()" link="ThunarxFileInfo.html#thunarx-file-info-get-name"/>
+    <function name="thunarx_file_info_get_uri ()" link="ThunarxFileInfo.html#thunarx-file-info-get-uri"/>
+    <function name="thunarx_file_info_get_parent_uri ()" link="ThunarxFileInfo.html#thunarx-file-info-get-parent-uri"/>
+    <function name="thunarx_file_info_get_uri_scheme ()" link="ThunarxFileInfo.html#thunarx-file-info-get-uri-scheme"/>
+    <function name="thunarx_file_info_get_mime_type ()" link="ThunarxFileInfo.html#thunarx-file-info-get-mime-type"/>
+    <function name="thunarx_file_info_has_mime_type ()" link="ThunarxFileInfo.html#thunarx-file-info-has-mime-type"/>
+    <function name="thunarx_file_info_is_directory ()" link="ThunarxFileInfo.html#thunarx-file-info-is-directory"/>
+    <function name="thunarx_file_info_list_copy ()" link="ThunarxFileInfo.html#thunarx-file-info-list-copy"/>
+    <function name="thunarx_file_info_list_free ()" link="ThunarxFileInfo.html#thunarx-file-info-list-free"/>
+    <function name="ThunarxPropertyPage" link="ThunarxPropertyPage.html#ThunarxPropertyPage-struct"/>
+    <function name="thunarx_property_page_new ()" link="ThunarxPropertyPage.html#thunarx-property-page-new"/>
+    <function name="thunarx_property_page_new_with_label_widget ()" link="ThunarxPropertyPage.html#thunarx-property-page-new-with-label-widget"/>
+    <function name="thunarx_property_page_get_label ()" link="ThunarxPropertyPage.html#thunarx-property-page-get-label"/>
+    <function name="thunarx_property_page_set_label ()" link="ThunarxPropertyPage.html#thunarx-property-page-set-label"/>
+    <function name="thunarx_property_page_get_label_widget ()" link="ThunarxPropertyPage.html#thunarx-property-page-get-label-widget"/>
+    <function name="thunarx_property_page_set_label_widget ()" link="ThunarxPropertyPage.html#thunarx-property-page-set-label-widget"/>
+    <function name="The &quot;label&quot; property" link="ThunarxPropertyPage.html#ThunarxPropertyPage--label"/>
+    <function name="The &quot;label-widget&quot; property" link="ThunarxPropertyPage.html#ThunarxPropertyPage--label-widget"/>
+    <function name="ThunarxMenuProviderIface" link="ThunarxMenuProvider.html#ThunarxMenuProviderIface"/>
+    <function name="ThunarxMenuProvider" link="ThunarxMenuProvider.html#ThunarxMenuProvider-struct"/>
+    <function name="thunarx_menu_provider_get_file_actions ()" link="ThunarxMenuProvider.html#thunarx-menu-provider-get-file-actions"/>
+    <function name="thunarx_menu_provider_get_folder_actions ()" link="ThunarxMenuProvider.html#thunarx-menu-provider-get-folder-actions"/>
+    <function name="ThunarxPropertyPageProvider" link="ThunarxPropertyPageProvider.html#ThunarxPropertyPageProvider-struct"/>
+    <function name="ThunarxPropertyPageProviderIface" link="ThunarxPropertyPageProvider.html#ThunarxPropertyPageProviderIface"/>
+    <function name="thunarx_property_page_provider_get_pages ()" link="ThunarxPropertyPageProvider.html#thunarx-property-page-provider-get-pages"/>
+  </functions>
+</book>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/up.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/html/up.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/abstraction.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/abstraction.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/menu-provider.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/menu-provider.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/say-hello.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/images/say-hello.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-docs.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-docs.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-docs.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,454 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+
+<!ENTITY ThunarxFileInfo SYSTEM "xml/thunarx-file-info.xml">
+<!ENTITY ThunarxMenuProvider SYSTEM "xml/thunarx-menu-provider.xml">
+<!ENTITY ThunarxPropertyPage SYSTEM "xml/thunarx-property-page.xml">
+<!ENTITY ThunarxPropertyPageProvider SYSTEM "xml/thunarx-property-page-provider.xml">
+<!ENTITY thunarx-version-information SYSTEM "xml/thunarx-version-information.xml">
+
+<!ENTITY version SYSTEM "version.xml">
+<!ENTITY date "September 2005">
+]>
+
+<book id="index">
+  <bookinfo>
+    <title>Thunar Extensions Reference Manual</title>
+    <releaseinfo>Version &version;</releaseinfo>
+    <pubdate>&date;</pubdate>
+
+    <copyright>
+      <year>2005</year>
+      <holder>Benedikt Meurer</holder>
+    </copyright>
+
+    <legalnotice id="legalnotice">
+      <para>
+        Permission is granted to copy, distribute and/or modify this document
+        under the terms of the GNU Free Documentation License, Version 1.1 or
+        any later version published by the Free Software Foundation; with no
+        Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+        Texts. The complete license text is available from the <ulink
+        type="http" url="http://www.gnu.org/">Free Software Foundation</ulink>.
+      </para>
+    </legalnotice>
+
+    <authorgroup>
+      <author>
+        <firstname>Benedikt</firstname>
+        <surname>Meurer</surname>
+        <affiliation>
+          <address><email>benny at xfce.org</email></address>
+          <orgname>os-cillation</orgname>
+          <orgdiv>System development</orgdiv>
+          <jobtitle>Software developer</jobtitle>
+        </affiliation>
+      </author>
+    </authorgroup>
+  </bookinfo>
+
+  <part id="thunarx-overview">
+    <title>Overview</title>
+
+    <para>
+      The Thunar Extension Framework (<systemitem class="library">thunarx</systemitem>) provides
+      developers with an easy way to extend the basic functionality provided by
+      the <ulink type="http" url="http://thunar.xfce.org/">Thunar File Manager</ulink>.
+      The <systemitem class="library">thunarx</systemitem> library includes interfaces that can
+      be implemented by extensions for various purposes.
+    </para>
+
+    <para>
+      It is based on the <ulink type="http"
+      url="http://developer.gnome.org/doc/API/2.0/gobject/ch02.html">GLib Dynamic Type
+      System</ulink> and loads the extensions on demand to reduce the system resources
+      allocated for the file manager process.
+    </para>
+
+    <sect1 id="thunarx-overview-goals">
+      <title>Goals</title>
+
+      <para>
+        The Thunar Extension Framework was developed with the following goals in mind:
+      </para>
+
+      <orderedlist>
+        <listitem>
+          It should be easy to extend the functionality of the file manager in certain
+          ways.
+        </listitem>
+
+        <listitem>
+          The internals of the file manager should be hidden from the extensions to be
+          able to maintain API/ABI compatibility for extensions over various major
+          releases of the file manager.
+        </listitem>
+
+        <listitem>
+          Provide basic compatibility with the <ulink type="http"
+          url="http://www.gnome.org/projects/nautilus/">Nautilus</ulink> Extension Framework,
+          so vendors don't need to write several versions of their extensions for the various
+          file managers. With the current implementation it should be easy to write a small
+          wrapper library for generic extensions that can be loaded into both Thunar and
+          Nautilus.
+        </listitem>
+
+        <listitem>
+          Extensions should not be loaded into memory until they are actually required to
+          save system resources. This differs from the way Nautilus handles extensions and
+          therefore people that already know how to write Nautilus extensions must be
+          careful when writing extensions for Thunar, because Thunar actually unloads the
+          extension when it's no longer needed. The <ulink type="http"
+          url="http://developer.gnome.org/doc/API/2.0/gobject/GTypePlugin.html">GTypePlugin</ulink>
+          and <ulink type="http"
+          url="http://developer.gnome.org/doc/API/2.0/gobject/GTypeModule.html">GTypeModule</ulink>
+          sections in the <ulink type="http" url="http://developer.gnome.org/doc/API/2.0/gobject/">GObject
+          Reference Manual</ulink> provide details about the handling of dynamic type plugins.
+        </listitem>
+
+        <listitem>
+          Permit developers to write extensions in languages other than C.
+        </listitem>
+      </orderedlist>
+    </sect1>
+  </part>
+
+  <part id="thunarx-writing-extensions">
+    <title>Writing Extensions</title>
+
+    <para>
+      This section explains the basic steps required to write an extension for the <ulink type="http"
+      url="http://thunar.xfce.org">Thunar File Manager</ulink> using the C language interface. It is
+      just a short introduction and not meant to provide extensive details about the internal workings
+      of the file manager.
+    </para>
+
+    <sect1 id="thunarx-writing-extensions-basic-concepts">
+      <title>Basic Concepts</title>
+
+      <sect2 id="thunarx-writing-extensions-extensions-and-providers">
+        <title>Extensions and Providers</title>
+
+        <para>
+          <emphasis>Thunar Extensions</emphasis> are shared libraries that extend the basic functionality
+          provided by the Thunar File Manager. An extension exports one or more <link
+          linkend="GObject"><type>GObject</type></link>s, called <emphasis>providers</emphasis> to Thunar.
+        </para>
+
+        <para>
+          Providers implement one or more of the <link linkend="GInterface"><type>GInterface</type></link>s included with
+          the <systemitem class="library">thunarx</systemitem> library. The currently exported interfaces
+          include the <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link> for adding context menu
+          items to the file views and the <link
+          linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link> for adding pages to the
+          file properties dialog.
+        </para>
+      </sect2>
+
+      <sect2 id="thunarx-writing-extensions-thunarxfileinfo">
+        <title>ThunarxFileInfo</title>
+
+        <para>
+          Thunar passes file references to the provider using <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>
+          objects. The <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> interface provides access to the file
+          information that Thunar has already read - mime type, URI, name, etc. Extensions should use the data from
+          from the <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> rather than reading it themselves, to
+          prevent excessive I/O.
+        </para>
+
+        <para>
+          There is exactly one <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> per file, and it is kept around
+          for as long as Thunar is interested in the file. Extensions can use this information to manage lifecycles of
+          its own data - e.g. when the <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> goes away, it is safe
+          for the extension to forget any private data for that file.
+        </para>
+      </sect2>
+
+      <sect2 id="thunarx-writing-extensions-names">
+        <title>Names</title>
+
+        <para>
+          Most objects created by the extensions need names, e.g. the <link linkend="GtkAction"><type>GtkAction</type></link>s
+          returned from the <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link>s. These names must be
+          namespaced with the name of the extension. For example the main action returned from the
+          <application>OpenTerminal</application> extension should be called <literal>OpenTerminal::open-terminal</literal>.
+          The namespace must be global among the providers exported by a certain extension.
+        </para>
+      </sect2>
+
+      <sect2 id="thunarx-writing-extensions-types">
+        <title>Types</title>
+
+        <para>
+          Thunar extensions are loaded as <link linkend="GTypeModule"><type>GTypeModule</type></link>s. This means that all GTypes
+          created by the extension must be registered with the <link linkend="GTypeModule"><type>GTypeModule</type></link>, using
+          <link linkend="g-type-module-register-type"><function>g_type_module_register_type()</function></link> function rather
+          than <link linked="g-type-register-static"><function>g_type_register_static()</function></link>. All types exported by
+          an extension must be registered in
+          <link linkend="thunar-extension-initialize"><function>thunar_extension_initialize()</function></link>.
+        </para>
+      </sect2>
+    </sect1>
+
+    <sect1 id="thunarx-writing-extensions-getting-started">
+      <title>Getting Started</title>
+
+      <para>
+        Providers are <link linkend="GTypeModule"><type>GTypeModule</type></link>s loaded from shared libraries installed in
+        <filename role="directory">$libdir/thunarx-1/</filename>. The shared libraries are linked against the
+        <systemitem class="library">thunarx-1</systemitem> library.
+      </para>
+
+      <para>
+        The extensions must provide three public functions, <function>thunar_extension_initialize()</function>,
+        <function>thunar_extension_shutdown()</function> and <function>thunar_extension_list_types()</function>.
+      </para>
+
+      <para>
+        <function>thunar_extension_initialize()</function> is passed a <link linkend="GTypeModule"><type>GTypeModule</type></link>
+        object, and must register all GTypes that the extension needs. <function>thunar_extension_shutdown()</function> should
+        perform any extension-specific shutdown required prior to unloading the extension. <function>thunar_extension_list_types()</function>
+        returns an array of GTypes that represent the types of the providers exported by the extension. Thunar will instantiate
+        objects of those types when needed.
+      </para>
+
+      <example>
+        <title>Basic Structure of an extension</title>
+
+        <programlisting>
+#include &lt;gmodule.h&gt;
+#include &lt;thunarx/thunarx.h&gt;
+
+static GType type_list[1];
+
+static void
+foo_extension_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (FooExtensionClass),
+    NULL,
+    NULL,
+    (GClassInitFunc) foo_extension_class_init,
+    NULL,
+    NULL,
+    sizeof (FooExtension),
+    0,
+    (GInstanceInitFunc) foo_extension_init,
+    NULL,
+  };
+
+  type_list[0] = g_type_module_register_type (module,
+                                              G_TYPE_OBJECT,
+                                              "FooExtension",
+                                              &amp;info, 0);
+
+  /* implement the desired provider interfaces */
+}
+
+static GType
+foo_extension_get_type (void)
+{
+  return type_list[0];
+}
+
+G_MODULE_EXPORT void
+thunar_extension_initialize (GTypeModule *module)
+{
+  const gchar *mismatch;
+
+  /* verify the versions */
+  mismatch = thunarx_check_version (THUNARX_MAJOR_VERSION,
+                                    THUNARX_MINOR_VERSION,
+                                    THUNARX_MICRO_VERSION);
+  if (G_UNLIKELY (mismatch != NULL))
+    {
+      g_warning ("Version mismatch: %s", mismatch);
+      return;
+    }
+
+  foo_extension_register_type (module);
+}
+
+G_MODULE_EXPORT void
+thunar_extension_shutdown (void)
+{
+  /* any extension-specific shutdown */
+}
+
+G_MODULE_EXPORT void
+thunar_extension_list_types (const GType **types,
+                             gint         *n_types)
+{
+  *types = type_list;
+  *n_types = G_N_ELEMENTS (type_list);
+}</programlisting>
+      </example>
+
+      <sect2 id="thunarx-writing-extensions-compiling-thunar-extensions">
+        <title>Compiling Thunar Extensions</title>
+
+        <para>
+          To compile a Thunar extension, you need to tell the compiler where to find the
+          <systemitem class="library">thunarx</systemitem> header files and library. This
+          is done with the <literal>pkg-config</literal> utility.
+        </para>
+
+        <para>
+          The following interactive shell session demonstrates how <literal>pkg-config</literal>
+          is used (the actual output on your system will be different):
+          <screen>
+$ pkg-config --cflags thunarx-1
+-DXTHREADS -DXUSE_MTSAFE_API -I/opt/local/include/thunarx-1 -I/usr/local/include/atk-1.0 \
+-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/X11R6/include/gtk-2.0 \
+-I/usr/X11R6/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/X11R6/include/pango-1.0 \
+-I/usr/local/include/freetype2 -I/usr/local/include
+$ pkg-config --libs thunarx-1
+-Wl,--rpath -Wl,/usr/local/lib -L/usr/local/lib -L/usr/X11R6/lib -L/opt/local/lib -lthunarx-1</screen>
+        </para>
+
+        <para>
+          The easiest way to compile an extension is to use the <emphasis>backticks</emphasis>
+          feature of the shell. If you enclose a command in backticks (<emphasis>not single
+          quotes</emphasis>), then its output will be substituted into the command line before
+          execution. So to compile an extension, you would type the following:
+          <screen>
+$ gcc -shared -fPIC -DPIC `pkg-config --cflags --libs thunarx-1` foo.c -o foo.so</screen>
+        </para>
+      </sect2>
+
+      <sect2 id="thunarx-writing-extensions-installing-thunar-extensions">
+        <title>Installing Thunar Extensions</title>
+
+        <para>
+          To determine the directory where extensions must be installed on your local system,
+          you can use the following command (as mentioned above, the output will be different
+          on your system):
+          <screen>
+$ pkg-config --variable=extensionsdir thunarx-1
+/opt/local/lib/thunarx-1</screen>
+        </para>
+
+        <para>
+          For example, to install the extension <filename>foo.so</filename> on your system,
+          you would type the following:
+          <screen>
+$ install -d `pkg-config --variable=extensionsdir thunarx-1`
+$ install -c -m 0755 foo.so `pkg-config --variable=extensionsdir thunarx-1`/foo.so</screen>
+        </para>
+      </sect2>
+    </sect1>
+
+    <sect1 id="thunarx-writing-extensions-advanced-topics">
+      <title>Advanced topics</title>
+
+      <para>
+        This section provides a short introduction to some of the advanced topics in the
+        Thunar Extension Framework.
+      </para>
+
+      <sect2 id="thunarx-writing-extensions-memory-resident-extensions">
+        <title>Memory-Resident Extensions</title>
+
+        <para>
+          Some extensions may not play well with Thunar's on-demand loading and unloading
+          of extensions. For example, an extension that uses a desktop library, which in
+          turn registers additional static GTypes will not work after being loaded and
+          unloaded for the first time. For these kind of extensions, Thunar provides the
+          option to make extensions <emphasis>memory resident</emphasis>, which means the
+          extension will be loaded once and afterwards will never be unloaded again until
+          Thunar exits.
+        </para>
+
+        <para>
+          Such extensions must set the <literal>resident</literal> property of the type
+          module in its <function>thunar_extension_initialize()</function> function to
+          <literal>TRUE</literal>.
+        </para>
+
+        <example>
+          <title>Making an extension memory resident</title>
+          <programlisting>
+G_MODULE_EXPORT void
+thunar_extension_initialize (GTypeModule *module)
+{
+  /* setup the types for the extension */
+  ...
+
+  /* ensure that the extension will never be unloaded */
+  g_object_set (G_OBJECT (module),
+                "resident", TRUE,
+                NULL);
+}</programlisting>
+        </example>
+      </sect2>
+    </sect1>
+  </part>
+
+  <part id="thunarx-fundamentals">
+    <title>Fundamentals</title>
+
+    &thunarx-version-information;
+  </part>
+
+  <part id="thunarx-abstraction-layer">
+    <title>Abstraction Layer</title>
+
+    <para>
+      In order to hide the internals of the file manager from the extensions, the <systemitem
+      class="library">thunarx</systemitem> provides an abstraction layer, which includes interfaces
+      accessible to the extension, that are implemented by the file manager at runtime.
+    </para>
+
+    <para>
+      <inlinegraphic fileref="abstraction.png" format="PNG" />
+    </para>
+
+    <para>
+      Currently the abstraction layer consists of the interface <link
+      linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>, which provides
+      extensions with a way to access information about a file handled within
+      the file manager, and the class <link
+      linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>, which
+      is the base class for widgets that can be added to the properties dialog by
+      extensions.
+    </para>
+
+    &ThunarxFileInfo;
+    &ThunarxPropertyPage;
+  </part>
+
+  <part id="thunarx-providers">
+    <title>Providers</title>
+
+    <para>
+      The extensions interact with the file manager by implementing so called
+      <emphasis>providers</emphasis>. This is a concept adopted from the Nautilus
+      Extension Framework.
+    </para>
+
+    <para>
+      Providers are interfaces in the <systemitem class="library">thunarx</systemitem>
+      library that describe the functionality provided by a certain extension. For
+      example, when the file manager pops up the file context menu, it'll first lookup
+      all extensions that implement the interface <interface>ThunarxMenuProvider</interface>
+      ask those extensions for the list of additional actions.
+    </para>
+
+    <para>
+      <inlinegraphic fileref="menu-provider.png" format="PNG" />
+    </para>
+
+    &ThunarxMenuProvider;
+    &ThunarxPropertyPageProvider;
+  </part>
+
+  <index>
+    <title>Index</title>
+  </index>
+</book>
+
+<!--
+  vi:set ts=2 sw=2 et ai syntax=docbkxml:
+-->

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-overrides.txt
===================================================================

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-sections.txt
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-sections.txt	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx-sections.txt	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,92 @@
+<INCLUDE>thunarx/thunarx.h</INCLUDE>
+
+<SECTION>
+<FILE>thunarx-file-info</FILE>
+<TITLE>ThunarxFileInfo</TITLE>
+ThunarxFileInfoIface
+ThunarxFileInfo
+thunarx_file_info_get_name
+thunarx_file_info_get_uri
+thunarx_file_info_get_parent_uri
+thunarx_file_info_get_uri_scheme
+thunarx_file_info_get_mime_type
+thunarx_file_info_has_mime_type
+thunarx_file_info_is_directory
+thunarx_file_info_list_copy
+thunarx_file_info_list_free
+<SUBSECTION Standard>
+THUNARX_TYPE_FILE_INFO
+THUNARX_FILE_INFO
+THUNARX_IS_FILE_INFO
+THUNARX_FILE_INFO_GET_IFACE
+<SUBSECTION Private>
+thunarx_file_info_get_type
+</SECTION>
+
+<SECTION>
+<FILE>thunarx-menu-provider</FILE>
+<TITLE>ThunarxMenuProvider</TITLE>
+ThunarxMenuProviderIface
+ThunarxMenuProvider
+thunarx_menu_provider_get_file_actions
+thunarx_menu_provider_get_folder_actions
+<SUBSECTION Standard>
+THUNARX_TYPE_MENU_PROVIDER
+THUNARX_MENU_PROVIDER
+THUNARX_IS_MENU_PROVIDER
+THUNARX_MENU_PROVIDER_GET_IFACE
+<SUBSECTION Private>
+thunarx_menu_provider_get_type
+</SECTION>
+
+<SECTION>
+<FILE>thunarx-property-page</FILE>
+<TITLE>ThunarxPropertyPage</TITLE>
+ThunarxPropertyPage
+thunarx_property_page_new
+thunarx_property_page_new_with_label_widget
+thunarx_property_page_get_label
+thunarx_property_page_set_label
+thunarx_property_page_get_label_widget
+thunarx_property_page_set_label_widget
+<SUBSECTION Standard>
+ThunarxPropertyPageClass
+THUNARX_TYPE_PROPERTY_PAGE
+THUNARX_PROPERTY_PAGE
+THUNARX_PROPERTY_PAGE_CLASS
+THUNARX_IS_PROPERTY_PAGE
+THUNARX_IS_PROPERTY_PAGE_CLASS
+THUNARX_PROPERTY_PAGE_GET_CLASS
+<SUBSECTION Private>
+ThunarxPropertyPagePrivate
+thunarx_property_page_get_type
+</SECTION>
+
+<SECTION>
+<FILE>thunarx-property-page-provider</FILE>
+<TITLE>ThunarxPropertyPageProvider</TITLE>
+ThunarxPropertyPageProvider
+ThunarxPropertyPageProviderIface
+thunarx_property_page_provider_get_pages
+<SUBSECTION Standard>
+THUNARX_TYPE_PROPERTY_PAGE_PROVIDER
+THUNARX_PROPERTY_PAGE_PROVIDER
+THUNARX_IS_PROPERTY_PAGE_PROVIDER
+THUNARX_PROPERTY_PAGE_PROVIDER_GET_IFACE
+<SUBSECTION Private>
+thunarx_property_page_provider_get_type
+</SECTION>
+
+<SECTION>
+<FILE>thunarx-version-information</FILE>
+<TITLE>Variables and functions to check the library version</TITLE>
+thunarx_major_version
+thunarx_minor_version
+thunarx_micro_version
+thunarx_check_version
+THUNARX_MAJOR_VERSION
+THUNARX_MINOR_VERSION
+THUNARX_MICRO_VERSION
+THUNARX_CHECK_VERSION
+</SECTION>
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx.types
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx.types	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/thunarx.types	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,6 @@
+#include <thunarx/thunarx.h>
+
+thunarx_file_info_get_type
+thunarx_menu_provider_get_type
+thunarx_property_page_get_type
+thunarx_property_page_provider_get_type

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-file-info.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-file-info.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-file-info.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,122 @@
+<!-- ##### SECTION Title ##### -->
+ThunarxFileInfo
+
+<!-- ##### SECTION Short_Description ##### -->
+Abstraction of a file handled within the file manager
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  The <interface>ThunarxFileInfo</interface> interface provides extensions with
+  a way to access information about a file handled within the file manager.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### STRUCT ThunarxFileInfoIface ##### -->
+<para>
+  Interface with virtual methods implemented by the file manager and accessible
+  from the extensions.
+</para>
+
+ at get_name: See thunarx_file_info_get_name().
+ at get_uri: See thunarx_file_info_get_uri().
+ at get_parent_uri: See thunarx_file_info_get_parent_uri().
+ at get_uri_scheme: See thunarx_file_info_get_uri_scheme().
+ at get_mime_type: See thunarx_file_info_get_mime_type().
+ at has_mime_type: See thunarx_file_info_has_mime_type().
+ at is_directory: See thunarx_file_info_is_directory().
+
+<!-- ##### STRUCT ThunarxFileInfo ##### -->
+<para>
+	File info type, which is mapped to the real file info implementation
+	within the file manager.
+</para>
+
+
+<!-- ##### FUNCTION thunarx_file_info_get_name ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_get_uri ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_get_parent_uri ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_get_uri_scheme ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_get_mime_type ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_has_mime_type ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at mime_type: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_is_directory ##### -->
+<para>
+
+</para>
+
+ at file_info: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_list_copy ##### -->
+<para>
+
+</para>
+
+ at file_infos: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_file_info_list_free ##### -->
+<para>
+
+</para>
+
+ at file_infos: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-menu-provider.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-menu-provider.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-menu-provider.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,175 @@
+<!-- ##### SECTION Title ##### -->
+ThunarxMenuProvider
+
+<!-- ##### SECTION Short_Description ##### -->
+The interface to extensions that provide additional menu items
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  The <interface>ThunarxMenuProvider</interface> interface is implemented by
+  extensions which provide additional menu items that should be displayed in
+  the file or folder context menus for certain types of files.
+</para>
+
+<para>
+  Extensions that implement this interface should do its best to respond as
+  fast as possible to method invokations by the file manager. That said, when
+  the file manager calls the thunarx_menu_provider_get_file_actions() or the
+  thunarx_menu_provider_get_folder_actions() method, the implementation in the
+  extension should use only the thunarx_file_info_has_mime_type() and
+  thunarx_file_info_is_directory() methods to determine the actions that should
+  be added to the file manager's context menu. Don't perform any complicated I/O
+  to determine the action list, as that would block the whole file manager process.
+</para>
+
+<para>
+  The <link linkend="GtkAction">GtkAction</link>s returned from the
+  thunarx_menu_provider_get_file_actions() and thunarx_menu_provider_get_folder_actions()
+  methods must be namespaced with the module to avoid collision with internal file manager
+  actions and actions provided by other extensions. For example, the menu action provided
+  by the <systemitem class="library">ThunarOpenTerminal</systemitem> extension should be
+  called <literal>ThunarOpenTerminal::open-terminal</literal>.
+</para>
+
+<example>
+  <title>Menu provider example</title>
+
+  <programlisting>
+static GType hello_type;
+
+static void   hello_menu_provider_init (ThunarxMenuProviderIface *iface);
+static GList *hello_get_file_actions   (ThunarxMenuProvider      *provider,
+                                        GtkWidget                *window,
+                                        GList                    *files);
+
+static void
+hello_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (HelloClass),
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    sizeof (Hello),
+    0,
+    NULL,
+    NULL,
+  };
+
+  static const GInterfaceInfo menu_provider_info =
+  {
+    (GInterfaceInitFunc) hello_menu_provider_init,
+    NULL,
+    NULL,
+  };
+
+  hello_type = g_type_module_register_type (module, G_TYPE_OBJECT,
+                                            "Hello", &amp;info, 0);
+  g_type_module_add_interface (module, hello_type,
+                               THUNARX_TYPE_MENU_PROVIDER,
+                               &amp;menu_provider_info);
+}
+
+static void
+hello_menu_provider_init (ThunarxMenuProviderIface *iface)
+{
+  iface->get_file_actions = hello_get_file_actions;
+}
+
+static void
+hello_activated (GtkAction *action,
+                 GtkWidget *window)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                   GTK_DIALOG_MODAL
+                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   "Hello World!");
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static GList*
+hello_get_file_actions (ThunarxMenuProvider *provider,
+                        GtkWidget           *window,
+                        GList               *files)
+{
+  GtkAction *action;
+
+  action = gtk_action_new ("Hello::say-hello",
+                           "Say hello", "Say hello",
+                           NULL);
+  g_signal_connect (G_OBJECT (action), "activate",
+                    G_CALLBACK (hello_activated),
+                    window);
+
+  return g_list_append (NULL, action);
+}</programlisting>
+
+  <para>
+    The above example will add an item <guimenu><guimenuitem>Say hello</guimenuitem></guimenu>
+    to the file context menus as shown in the picture below:
+  </para>
+
+  <para>
+    <inlinegraphic fileref="say-hello.png" format="PNG" />
+  </para>
+</example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+  The description of the <link linkend="ThunarxFileInfo">ThunarxFileInfo</link>
+  interface.
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### STRUCT ThunarxMenuProviderIface ##### -->
+<para>
+  Interface with virtual methods implemented by extensions that provide
+  additional menu items for the file manager's context menus.
+</para>
+
+<para>
+  Providers don't need to implement all of the virtual methods listed in
+  the interface.
+</para>
+
+ at get_file_actions: See thunarx_menu_provider_get_file_actions().
+ at get_folder_actions: See thunarx_menu_provider_get_folder_actions().
+
+<!-- ##### STRUCT ThunarxMenuProvider ##### -->
+<para>
+  Menu provider type.
+</para>
+
+
+<!-- ##### FUNCTION thunarx_menu_provider_get_file_actions ##### -->
+<para>
+
+</para>
+
+ at provider: 
+ at window: 
+ at files: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_menu_provider_get_folder_actions ##### -->
+<para>
+
+</para>
+
+ at provider: 
+ at window: 
+ at folder: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page-provider.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page-provider.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page-provider.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+<!-- ##### SECTION Title ##### -->
+ThunarxPropertyPageProvider
+
+<!-- ##### SECTION Short_Description ##### -->
+The interface to extensions that provide additional property pages
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  To add a property page to the file properties dialog, extensions must implement the
+  <type>ThunarxPropertyPageProvider</type> interface. This interface has only one virtual
+  method, <function>get_pages</function>, that is passed a list of <link
+  linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> objects and returns a list
+  of <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> objects.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+  The description of the <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> class.
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### STRUCT ThunarxPropertyPageProvider ##### -->
+<para>
+  Property page provider type.
+</para>
+
+
+<!-- ##### STRUCT ThunarxPropertyPageProviderIface ##### -->
+<para>
+	Interface with virtual methods implemented by extensions that provide
+	additional pages for the file properties dialog.
+</para>
+
+ at get_pages: See thunarx_property_page_provider_get_pages().
+
+<!-- ##### FUNCTION thunarx_property_page_provider_get_pages ##### -->
+<para>
+
+</para>
+
+ at provider: 
+ at files: 
+ at Returns: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-property-page.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,90 @@
+<!-- ##### SECTION Title ##### -->
+ThunarxPropertyPage
+
+<!-- ##### SECTION Short_Description ##### -->
+Base class for pages added to the properties dialog
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  The class for pages that can be added to Thunar's file properties dialog
+  by extensions implementing the #ThunarxPropertyPageProvider interface.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+  The description of the <link linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link> interface.
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### STRUCT ThunarxPropertyPage ##### -->
+<para>
+  Base instance type for property pages.
+</para>
+
+
+<!-- ##### ARG ThunarxPropertyPage:label ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG ThunarxPropertyPage:label-widget ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION thunarx_property_page_new ##### -->
+<para>
+
+</para>
+
+ at label: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_property_page_new_with_label_widget ##### -->
+<para>
+
+</para>
+
+ at label_widget: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_property_page_get_label ##### -->
+<para>
+
+</para>
+
+ at property_page: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_property_page_set_label ##### -->
+<para>
+
+</para>
+
+ at property_page: 
+ at label: 
+
+
+<!-- ##### FUNCTION thunarx_property_page_get_label_widget ##### -->
+<para>
+
+</para>
+
+ at property_page: 
+ at Returns: 
+
+
+<!-- ##### FUNCTION thunarx_property_page_set_label_widget ##### -->
+<para>
+
+</para>
+
+ at property_page: 
+ at label_widget: 
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-unused.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-unused.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-unused.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,14 @@
+<!-- ##### STRUCT ThunarxPropertyPageClass ##### -->
+<para>
+
+</para>
+
+ at __parent__: 
+
+<!-- ##### FUNCTION thunarx_property_page_provider_get_type ##### -->
+<para>
+
+</para>
+
+ at Returns: 
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-version-information.sgml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-version-information.sgml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/tmpl/thunarx-version-information.sgml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,96 @@
+<!-- ##### SECTION Title ##### -->
+Version information
+
+<!-- ##### SECTION Short_Description ##### -->
+Variables and functions to check the library version
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+  The Thunar Extension library provides version information,
+  which should be used by extensions.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Stable
+
+<!-- ##### VARIABLE thunarx_major_version ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE thunarx_minor_version ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE thunarx_micro_version ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION thunarx_check_version ##### -->
+<para>
+
+</para>
+
+ at required_major: 
+ at required_minor: 
+ at required_micro: 
+ at Returns: 
+
+
+<!-- ##### MACRO THUNARX_MAJOR_VERSION ##### -->
+<para>
+  The major version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_major_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para>
+
+
+
+<!-- ##### MACRO THUNARX_MINOR_VERSION ##### -->
+<para>
+  The minor version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_minor_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para>
+
+
+
+<!-- ##### MACRO THUNARX_MICRO_VERSION ##### -->
+<para>
+  The micro version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_micro_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para>
+
+
+
+<!-- ##### MACRO THUNARX_CHECK_VERSION ##### -->
+<para>
+  Checks the version of the <systemitem class="library">thunarx</systemitem> library. Returns
+  %TRUE if the version of the <systemitem class="library">thunarx</systemitem> header files is
+  the same as or newer than the passed-in version.
+</para>
+
+<example>
+  <title>Checking the version of the Thunar Extension library</title>
+
+  <programlisting>
+if (!THUNARX_CHECK_VERSION (0, 1, 0))
+  g_error ("Thunarx version 0.1.0 or above is required");</programlisting>
+</example>
+
+ at major: the major version number.
+ at minor: the minor version number
+ at micro: the micro version number.
+
+

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1 @@
+0.1.4pre-alpha-r18850

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/version.xml.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1 @@
+ at PACKAGE_VERSION@

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-file-info.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-file-info.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-file-info.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,340 @@
+<refentry id="ThunarxFileInfo">
+<refmeta>
+<refentrytitle>ThunarxFileInfo</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNARX Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarxFileInfo</refname><refpurpose>Abstraction of a file handled within the file manager</refpurpose>
+</refnamediv>
+<refsect1>
+<title>Stability Level</title>
+Stable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <link linkend="ThunarxFileInfoIface">ThunarxFileInfoIface</link>;
+            <link linkend="ThunarxFileInfo-struct">ThunarxFileInfo</link>;
+<link linkend="gchar">gchar</link>*      <link linkend="thunarx-file-info-get-name">thunarx_file_info_get_name</link>      (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunarx-file-info-get-uri">thunarx_file_info_get_uri</link>       (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunarx-file-info-get-parent-uri">thunarx_file_info_get_parent_uri</link>
+                                            (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunarx-file-info-get-uri-scheme">thunarx_file_info_get_uri_scheme</link>
+                                            (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="gchar">gchar</link>*      <link linkend="thunarx-file-info-get-mime-type">thunarx_file_info_get_mime_type</link> (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunarx-file-info-has-mime-type">thunarx_file_info_has_mime_type</link> (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info,
+                                             const <link linkend="gchar">gchar</link> *mime_type);
+<link linkend="gboolean">gboolean</link>    <link linkend="thunarx-file-info-is-directory">thunarx_file_info_is_directory</link>  (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);
+<link linkend="GList">GList</link>*      <link linkend="thunarx-file-info-list-copy">thunarx_file_info_list_copy</link>     (<link linkend="GList">GList</link> *file_infos);
+<link linkend="void">void</link>        <link linkend="thunarx-file-info-list-free">thunarx_file_info_list_free</link>     (<link linkend="GList">GList</link> *file_infos);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GInterface">GInterface</link>
+   +----ThunarxFileInfo
+</synopsis>
+
+</refsect1>
+
+<refsect1>
+<title>Prerequisites</title>
+<para>
+ThunarxFileInfo requires
+ <link linkend="GObject">GObject</link>.</para>
+
+</refsect1>
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+  The <interface>ThunarxFileInfo</interface> interface provides extensions with
+  a way to access information about a file handled within the file manager.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarxFileInfoIface"/>ThunarxFileInfoIface</title>
+<indexterm><primary>ThunarxFileInfoIface</primary></indexterm><programlisting>typedef struct {
+  gchar     *(*get_name)        (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_uri)         (ThunarxFileInfo *file_info);
+  gchar     *(*get_parent_uri)  (ThunarxFileInfo *file_info);
+  gchar     *(*get_uri_scheme)  (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_mime_type)   (ThunarxFileInfo *file_info);
+  gboolean   (*has_mime_type)   (ThunarxFileInfo *file_info,
+                                 const gchar     *mime_type);
+
+  gboolean   (*is_directory)    (ThunarxFileInfo *file_info);
+} ThunarxFileInfoIface;
+</programlisting>
+<para>
+  Interface with virtual methods implemented by the file manager and accessible
+  from the extensions.
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>get_name</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-get-name"><function>thunarx_file_info_get_name()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_uri</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-get-uri"><function>thunarx_file_info_get_uri()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_parent_uri</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-get-parent-uri"><function>thunarx_file_info_get_parent_uri()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_uri_scheme</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-get-uri-scheme"><function>thunarx_file_info_get_uri_scheme()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_mime_type</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-get-mime-type"><function>thunarx_file_info_get_mime_type()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>has_mime_type</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-has-mime-type"><function>thunarx_file_info_has_mime_type()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>is_directory</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-file-info-is-directory"><function>thunarx_file_info_is_directory()</function></link>.
+
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarxFileInfo-struct"/>ThunarxFileInfo</title>
+<indexterm><primary>ThunarxFileInfo</primary></indexterm><programlisting>typedef struct _ThunarxFileInfo ThunarxFileInfo;</programlisting>
+<para>
+	File info type, which is mapped to the real file info implementation
+	within the file manager.
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-get-name"/>thunarx_file_info_get_name ()</title>
+<indexterm><primary>thunarx_file_info_get_name</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunarx_file_info_get_name      (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Returns the real name of the file represented
+by <parameter>file_info</parameter> in the local file system encoding.
+You can use <link linkend="g-filename-display-name"><function>g_filename_display_name()</function></link> or similar
+functions to generate an UTF-8 version of the
+name, which is suitable for use in the user
+interface.
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the real name of the file represented
+              by <parameter>file_info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-get-uri"/>thunarx_file_info_get_uri ()</title>
+<indexterm><primary>thunarx_file_info_get_uri</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunarx_file_info_get_uri       (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Returns the escaped, fully qualified URI
+of the file object represented by <parameter>file_info</parameter>.
+You may use <link linkend="g-filename-from-uri"><function>g_filename_from_uri()</function></link> and similar
+functions to work with the returned URI.
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the fully qualified URI of <parameter>file_info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-get-parent-uri"/>thunarx_file_info_get_parent_uri ()</title>
+<indexterm><primary>thunarx_file_info_get_parent_uri</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunarx_file_info_get_parent_uri
+                                            (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Returns the URI to the parent file of
+<parameter>file_info</parameter> or <literal>NULL</literal> if <parameter>file_info</parameter> has
+no parent. Note that the parent URI
+may be of a different type than the
+URI of <parameter>file_info</parameter>. For example, the
+parent of "file:///" is "computer:///".
+</para>
+<para>
+The caller is responsible to free the
+returned string using <link linkend="g-free"><function>g_free()</function></link> when no
+longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the parent URI for <parameter>file_info</parameter>
+              or <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-get-uri-scheme"/>thunarx_file_info_get_uri_scheme ()</title>
+<indexterm><primary>thunarx_file_info_get_uri_scheme</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunarx_file_info_get_uri_scheme
+                                            (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Returns the URI scheme of the file represented
+by <parameter>file_info</parameter>. E.g. if <parameter>file_info</parameter> refers to the
+file "file:///usr/home", the return value will
+be "file".
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the URI scheme for <parameter>file_info</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-get-mime-type"/>thunarx_file_info_get_mime_type ()</title>
+<indexterm><primary>thunarx_file_info_get_mime_type</primary></indexterm><programlisting><link linkend="gchar">gchar</link>*      thunarx_file_info_get_mime_type (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Returns the MIME-type of the file represented by
+<parameter>file_info</parameter> or <literal>NULL</literal> if no MIME-type is known for
+<parameter>file_info</parameter>.
+</para>
+<para>
+The caller is responsible to free the returned
+string using <link linkend="g-free"><function>g_free()</function></link> when no longer needed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the MIME-type for <parameter>file_info</parameter> or
+              <literal>NULL</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-has-mime-type"/>thunarx_file_info_has_mime_type ()</title>
+<indexterm><primary>thunarx_file_info_has_mime_type</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunarx_file_info_has_mime_type (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info,
+                                             const <link linkend="gchar">gchar</link> *mime_type);</programlisting>
+<para>
+Checks whether <parameter>file_info</parameter> is of the given <parameter>mime_type</parameter>
+or whether the MIME-type of <parameter>file_info</parameter> is a subclass
+of <parameter>mime_type</parameter>.
+</para>
+<para>
+This is the preferred way for most extensions to check
+whether they support a given file or not, and you should
+consider using this method rather than
+<link linkend="thunarx-file-info-get-mime-type"><function>thunarx_file_info_get_mime_type()</function></link>. A simple example would
+be a menu extension that performs a certain action on
+text files. In this case you want to check whether a given
+<link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> refers to any kind of text file, not only
+to "text/plain" (e.g. this also includes "text/xml" and
+"application/x-desktop").
+</para>
+<para>
+But you should be aware that this method may take some
+time to test whether <parameter>mime_type</parameter> is valid for <parameter>file_info</parameter>,
+so don't call it too often.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mime_type</parameter>&nbsp;:</term>
+<listitem><simpara> a MIME-type (e.g. "text/plain").
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>mime_type</parameter> is valid for <parameter>file_info</parameter>,
+              else <literal>FALSE</literal>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-is-directory"/>thunarx_file_info_is_directory ()</title>
+<indexterm><primary>thunarx_file_info_is_directory</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    thunarx_file_info_is_directory  (<link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *file_info);</programlisting>
+<para>
+Checks whether <parameter>file_info</parameter> refers to a directory.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_info</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>TRUE</literal> if <parameter>file_info</parameter> is a directory.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-list-copy"/>thunarx_file_info_list_copy ()</title>
+<indexterm><primary>thunarx_file_info_list_copy</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunarx_file_info_list_copy     (<link linkend="GList">GList</link> *file_infos);</programlisting>
+<para>
+Does a deep copy of <parameter>file_infos</parameter> and returns the
+new list.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_infos</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link><!---->s.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> a copy of <parameter>file_infos</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-file-info-list-free"/>thunarx_file_info_list_free ()</title>
+<indexterm><primary>thunarx_file_info_list_free</primary></indexterm><programlisting><link linkend="void">void</link>        thunarx_file_info_list_free     (<link linkend="GList">GList</link> *file_infos);</programlisting>
+<para>
+Frees the resources allocated for the <parameter>file_infos</parameter>
+list and decreases the reference count on the
+<link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link><!---->s contained within.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>file_infos</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link><!---->s.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-menu-provider.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-menu-provider.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-menu-provider.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,320 @@
+<refentry id="ThunarxMenuProvider">
+<refmeta>
+<refentrytitle>ThunarxMenuProvider</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNARX Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarxMenuProvider</refname><refpurpose>The interface to extensions that provide additional menu items</refpurpose>
+</refnamediv>
+<refsect1>
+<title>Stability Level</title>
+Stable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <link linkend="ThunarxMenuProviderIface">ThunarxMenuProviderIface</link>;
+            <link linkend="ThunarxMenuProvider-struct">ThunarxMenuProvider</link>;
+<link linkend="GList">GList</link>*      <link linkend="thunarx-menu-provider-get-file-actions">thunarx_menu_provider_get_file_actions</link>
+                                            (<link linkend="ThunarxMenuProvider">ThunarxMenuProvider</link> *provider,
+                                             <link linkend="GtkWidget">GtkWidget</link> *window,
+                                             <link linkend="GList">GList</link> *files);
+<link linkend="GList">GList</link>*      <link linkend="thunarx-menu-provider-get-folder-actions">thunarx_menu_provider_get_folder_actions</link>
+                                            (<link linkend="ThunarxMenuProvider">ThunarxMenuProvider</link> *provider,
+                                             <link linkend="GtkWidget">GtkWidget</link> *window,
+                                             <link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *folder);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GInterface">GInterface</link>
+   +----ThunarxMenuProvider
+</synopsis>
+
+</refsect1>
+
+<refsect1>
+<title>Prerequisites</title>
+<para>
+ThunarxMenuProvider requires
+ <link linkend="GObject">GObject</link>.</para>
+
+</refsect1>
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+  The <interface>ThunarxMenuProvider</interface> interface is implemented by
+  extensions which provide additional menu items that should be displayed in
+  the file or folder context menus for certain types of files.
+</para>
+
+<para>
+  Extensions that implement this interface should do its best to respond as
+  fast as possible to method invokations by the file manager. That said, when
+  the file manager calls the <link linkend="thunarx-menu-provider-get-file-actions"><function>thunarx_menu_provider_get_file_actions()</function></link> or the
+  <link linkend="thunarx-menu-provider-get-folder-actions"><function>thunarx_menu_provider_get_folder_actions()</function></link> method, the implementation in the
+  extension should use only the <link linkend="thunarx-file-info-has-mime-type"><function>thunarx_file_info_has_mime_type()</function></link> and
+  <link linkend="thunarx-file-info-is-directory"><function>thunarx_file_info_is_directory()</function></link> methods to determine the actions that should
+  be added to the file manager's context menu. Don't perform any complicated I/O
+  to determine the action list, as that would block the whole file manager process.
+</para>
+
+<para>
+  The <link linkend="GtkAction">GtkAction</link>s returned from the
+  <link linkend="thunarx-menu-provider-get-file-actions"><function>thunarx_menu_provider_get_file_actions()</function></link> and <link linkend="thunarx-menu-provider-get-folder-actions"><function>thunarx_menu_provider_get_folder_actions()</function></link>
+  methods must be namespaced with the module to avoid collision with internal file manager
+  actions and actions provided by other extensions. For example, the menu action provided
+  by the <systemitem class="library">ThunarOpenTerminal</systemitem> extension should be
+  called <literal>ThunarOpenTerminal::open-terminal</literal>.
+</para>
+
+<example>
+  <title>Menu provider example</title>
+
+  <programlisting>
+static GType hello_type;
+
+static void   hello_menu_provider_init (ThunarxMenuProviderIface *iface);
+static GList *hello_get_file_actions   (ThunarxMenuProvider      *provider,
+                                        GtkWidget                *window,
+                                        GList                    *files);
+
+static void
+hello_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (HelloClass),
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    sizeof (Hello),
+    0,
+    NULL,
+    NULL,
+  };
+
+  static const GInterfaceInfo menu_provider_info =
+  {
+    (GInterfaceInitFunc) hello_menu_provider_init,
+    NULL,
+    NULL,
+  };
+
+  hello_type = g_type_module_register_type (module, G_TYPE_OBJECT,
+                                            "Hello", &amp;info, 0);
+  g_type_module_add_interface (module, hello_type,
+                               THUNARX_TYPE_MENU_PROVIDER,
+                               &amp;menu_provider_info);
+}
+
+static void
+hello_menu_provider_init (ThunarxMenuProviderIface *iface)
+{
+  iface->get_file_actions = hello_get_file_actions;
+}
+
+static void
+hello_activated (GtkAction *action,
+                 GtkWidget *window)
+{
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                   GTK_DIALOG_MODAL
+                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO,
+                                   GTK_BUTTONS_OK,
+                                   "Hello World!");
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+static GList*
+hello_get_file_actions (ThunarxMenuProvider *provider,
+                        GtkWidget           *window,
+                        GList               *files)
+{
+  GtkAction *action;
+
+  action = gtk_action_new ("Hello::say-hello",
+                           "Say hello", "Say hello",
+                           NULL);
+  g_signal_connect (G_OBJECT (action), "activate",
+                    G_CALLBACK (hello_activated),
+                    window);
+
+  return g_list_append (NULL, action);
+}</programlisting>
+
+  <para>
+    The above example will add an item <guimenu><guimenuitem>Say hello</guimenuitem></guimenu>
+    to the file context menus as shown in the picture below:
+  </para>
+
+  <para>
+    <inlinegraphic fileref="say-hello.png" format="PNG" />
+  </para>
+</example>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarxMenuProviderIface"/>ThunarxMenuProviderIface</title>
+<indexterm><primary>ThunarxMenuProviderIface</primary></indexterm><programlisting>typedef struct {
+  GList *(*get_file_actions)    (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 GList               *files);
+
+  GList *(*get_folder_actions)  (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 ThunarxFileInfo     *folder);
+} ThunarxMenuProviderIface;
+</programlisting>
+<para>
+  Interface with virtual methods implemented by extensions that provide
+  additional menu items for the file manager's context menus.
+</para>
+
+<para>
+  Providers don't need to implement all of the virtual methods listed in
+  the interface.
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>get_file_actions</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-menu-provider-get-file-actions"><function>thunarx_menu_provider_get_file_actions()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_folder_actions</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-menu-provider-get-folder-actions"><function>thunarx_menu_provider_get_folder_actions()</function></link>.
+
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="ThunarxMenuProvider-struct"/>ThunarxMenuProvider</title>
+<indexterm><primary>ThunarxMenuProvider</primary></indexterm><programlisting>typedef struct _ThunarxMenuProvider ThunarxMenuProvider;</programlisting>
+<para>
+  Menu provider type.
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-menu-provider-get-file-actions"/>thunarx_menu_provider_get_file_actions ()</title>
+<indexterm><primary>thunarx_menu_provider_get_file_actions</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunarx_menu_provider_get_file_actions
+                                            (<link linkend="ThunarxMenuProvider">ThunarxMenuProvider</link> *provider,
+                                             <link linkend="GtkWidget">GtkWidget</link> *window,
+                                             <link linkend="GList">GList</link> *files);</programlisting>
+<para>
+Returns the list of <link linkend="GtkAction"><type>GtkAction</type></link><!---->s that <parameter>provider</parameter> has to offer for
+<parameter>files</parameter>.
+</para>
+<para>
+As a special note, this method automatically takes a reference on the
+<parameter>provider</parameter> for every <link linkend="GtkAction"><type>GtkAction</type></link> object returned from the real implementation
+of this method in <parameter>provider</parameter>. This is to make sure that the extension stays
+in memory for atleast the time that the actions are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <parameter>provider</parameter> itself,
+that's released at a later time).
+</para>
+<para>
+The caller is responsible to free the returned list of actions using
+something like this when no longer needed:
+<informalexample><programlisting>
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>provider</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>window</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="GtkWindow"><type>GtkWindow</type></link> within which the actions will be used.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>files</parameter>&nbsp;:</term>
+<listitem><simpara> the list of <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link><!---->s to which the actions will be applied.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="GtkAction"><type>GtkAction</type></link><!---->s that <parameter>provider</parameter> has to offer
+              for <parameter>files</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-menu-provider-get-folder-actions"/>thunarx_menu_provider_get_folder_actions ()</title>
+<indexterm><primary>thunarx_menu_provider_get_folder_actions</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunarx_menu_provider_get_folder_actions
+                                            (<link linkend="ThunarxMenuProvider">ThunarxMenuProvider</link> *provider,
+                                             <link linkend="GtkWidget">GtkWidget</link> *window,
+                                             <link linkend="ThunarxFileInfo">ThunarxFileInfo</link> *folder);</programlisting>
+<para>
+Returns the list of <link linkend="GtkAction"><type>GtkAction</type></link><!---->s that <parameter>provider</parameter> has to offer for
+<parameter>folder</parameter>.
+</para>
+<para>
+As a special note, this method automatically takes a reference on the
+<parameter>provider</parameter> for every <link linkend="GtkAction"><type>GtkAction</type></link> object returned from the real implementation
+of this method in <parameter>provider</parameter>. This is to make sure that the extension stays
+in memory for atleast the time that the actions are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <parameter>provider</parameter> itself,
+that's released at a later time).
+</para>
+<para>
+The caller is responsible to free the returned list of actions using
+something like this when no longer needed:
+<informalexample><programlisting>
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>provider</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxMenuProvider"><type>ThunarxMenuProvider</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>window</parameter>&nbsp;:</term>
+<listitem><simpara> the <link linkend="GtkWindow"><type>GtkWindow</type></link> within which the actions will be used.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>folder</parameter>&nbsp;:</term>
+<listitem><simpara> the folder to which the actions should will be applied.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="GtkAction"><type>GtkAction</type></link><!---->s that <parameter>provider</parameter> has to offer
+              for <parameter>folder</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+<refsect1>
+<title>See Also</title>
+<para>
+  The description of the <link linkend="ThunarxFileInfo">ThunarxFileInfo</link>
+  interface.
+</para>
+</refsect1>
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page-provider.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page-provider.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page-provider.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,145 @@
+<refentry id="ThunarxPropertyPageProvider">
+<refmeta>
+<refentrytitle>ThunarxPropertyPageProvider</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNARX Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarxPropertyPageProvider</refname><refpurpose>The interface to extensions that provide additional property pages</refpurpose>
+</refnamediv>
+<refsect1>
+<title>Stability Level</title>
+Stable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <link linkend="ThunarxPropertyPageProvider-struct">ThunarxPropertyPageProvider</link>;
+            <link linkend="ThunarxPropertyPageProviderIface">ThunarxPropertyPageProviderIface</link>;
+<link linkend="GList">GList</link>*      <link linkend="thunarx-property-page-provider-get-pages">thunarx_property_page_provider_get_pages</link>
+                                            (<link linkend="ThunarxPropertyPageProvider">ThunarxPropertyPageProvider</link> *provider,
+                                             <link linkend="GList">GList</link> *files);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GInterface">GInterface</link>
+   +----ThunarxPropertyPageProvider
+</synopsis>
+
+</refsect1>
+
+<refsect1>
+<title>Prerequisites</title>
+<para>
+ThunarxPropertyPageProvider requires
+ <link linkend="GObject">GObject</link>.</para>
+
+</refsect1>
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+  To add a property page to the file properties dialog, extensions must implement the
+  <type>ThunarxPropertyPageProvider</type> interface. This interface has only one virtual
+  method, <function>get_pages</function>, that is passed a list of <link
+  linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link> objects and returns a list
+  of <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> objects.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarxPropertyPageProvider-struct"/>ThunarxPropertyPageProvider</title>
+<indexterm><primary>ThunarxPropertyPageProvider</primary></indexterm><programlisting>typedef struct _ThunarxPropertyPageProvider ThunarxPropertyPageProvider;</programlisting>
+<para>
+  Property page provider type.
+</para></refsect2>
+<refsect2>
+<title><anchor id="ThunarxPropertyPageProviderIface"/>ThunarxPropertyPageProviderIface</title>
+<indexterm><primary>ThunarxPropertyPageProviderIface</primary></indexterm><programlisting>typedef struct {
+  GList *(*get_pages) (ThunarxPropertyPageProvider *provider,
+                       GList                       *files);
+} ThunarxPropertyPageProviderIface;
+</programlisting>
+<para>
+	Interface with virtual methods implemented by extensions that provide
+	additional pages for the file properties dialog.
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>get_pages</structfield>&nbsp;()</term>
+<listitem><simpara>See <link linkend="thunarx-property-page-provider-get-pages"><function>thunarx_property_page_provider_get_pages()</function></link>.
+
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-provider-get-pages"/>thunarx_property_page_provider_get_pages ()</title>
+<indexterm><primary>thunarx_property_page_provider_get_pages</primary></indexterm><programlisting><link linkend="GList">GList</link>*      thunarx_property_page_provider_get_pages
+                                            (<link linkend="ThunarxPropertyPageProvider">ThunarxPropertyPageProvider</link> *provider,
+                                             <link linkend="GList">GList</link> *files);</programlisting>
+<para>
+Returns the list of <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link><!---->s that <parameter>provider</parameter> has to offer for <parameter>files</parameter>.
+</para>
+<para>
+As a special note, this method automatically takes a reference on the
+<parameter>provider</parameter> for every <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> object returned from the real implementation
+of this method in <parameter>provider</parameter>. This is to make sure that the extension stays
+in memory for atleast the time that the pages are used. If the extension
+wants to stay in memory for a longer time, it'll need to take care of this
+itself (e.g. by taking an additional reference on the <parameter>provider</parameter> itself,
+that's released at a later time).
+</para>
+<para>
+The caller is responsible to free the returned list of pages using
+something like this when no longer needed:
+<informalexample><programlisting>
+g_list_foreach (list, (GFunc) g_object_ref, NULL);
+g_list_foreach (list, (GFunc) gtk_object_sink, NULL);
+g_list_foreach (list, (GFunc) g_object_unref, NULL);
+g_list_free (list);
+</programlisting></informalexample></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>provider</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>files</parameter>&nbsp;:</term>
+<listitem><simpara> the list of <link linkend="ThunarxFileInfo"><type>ThunarxFileInfo</type></link><!---->s for which a properties dialog will be displayed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the list of <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link><!---->s that <parameter>provider</parameter> has to offer
+              for <parameter>files</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+<refsect1>
+<title>See Also</title>
+<para>
+  The description of the <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> class.
+</para>
+</refsect1>
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-property-page.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,218 @@
+<refentry id="ThunarxPropertyPage">
+<refmeta>
+<refentrytitle>ThunarxPropertyPage</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNARX Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ThunarxPropertyPage</refname><refpurpose>Base class for pages added to the properties dialog</refpurpose>
+</refnamediv>
+<refsect1>
+<title>Stability Level</title>
+Stable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+            <link linkend="ThunarxPropertyPage-struct">ThunarxPropertyPage</link>;
+<link linkend="GtkWidget">GtkWidget</link>*  <link linkend="thunarx-property-page-new">thunarx_property_page_new</link>       (const <link linkend="gchar">gchar</link> *label);
+<link linkend="GtkWidget">GtkWidget</link>*  <link linkend="thunarx-property-page-new-with-label-widget">thunarx_property_page_new_with_label_widget</link>
+                                            (<link linkend="GtkWidget">GtkWidget</link> *label_widget);
+const <link linkend="gchar">gchar</link>* <link linkend="thunarx-property-page-get-label">thunarx_property_page_get_label</link>
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page);
+<link linkend="void">void</link>        <link linkend="thunarx-property-page-set-label">thunarx_property_page_set_label</link> (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page,
+                                             const <link linkend="gchar">gchar</link> *label);
+<link linkend="GtkWidget">GtkWidget</link>*  <link linkend="thunarx-property-page-get-label-widget">thunarx_property_page_get_label_widget</link>
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page);
+<link linkend="void">void</link>        <link linkend="thunarx-property-page-set-label-widget">thunarx_property_page_set_label_widget</link>
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page,
+                                             <link linkend="GtkWidget">GtkWidget</link> *label_widget);
+
+
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Object Hierarchy</title>
+<synopsis>
+
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="GtkObject">GtkObject</link>
+         +----<link linkend="GtkWidget">GtkWidget</link>
+               +----<link linkend="GtkContainer">GtkContainer</link>
+                     +----<link linkend="GtkBin">GtkBin</link>
+                           +----ThunarxPropertyPage
+</synopsis>
+
+</refsect1>
+
+
+
+<refsect1>
+<title>Implemented Interfaces</title>
+<para>
+ThunarxPropertyPage implements
+ <link linkend="AtkImplementorIface">AtkImplementorIface</link>.</para>
+
+</refsect1>
+
+
+<refsect1>
+<title>Properties</title>
+<synopsis>
+
+  &quot;<link linkend="ThunarxPropertyPage--label">label</link>&quot;                <link linkend="gchararray">gchararray</link>            : Read / Write
+  &quot;<link linkend="ThunarxPropertyPage--label-widget">label-widget</link>&quot;         <link linkend="GtkWidget">GtkWidget</link>             : Read / Write
+</synopsis>
+</refsect1>
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+  The class for pages that can be added to Thunar's file properties dialog
+  by extensions implementing the <link linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link> interface.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="ThunarxPropertyPage-struct"/>ThunarxPropertyPage</title>
+<indexterm><primary>ThunarxPropertyPage</primary></indexterm><programlisting>typedef struct _ThunarxPropertyPage ThunarxPropertyPage;</programlisting>
+<para>
+  Base instance type for property pages.
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-new"/>thunarx_property_page_new ()</title>
+<indexterm><primary>thunarx_property_page_new</primary></indexterm><programlisting><link linkend="GtkWidget">GtkWidget</link>*  thunarx_property_page_new       (const <link linkend="gchar">gchar</link> *label);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> widget and sets its label to the
+specified <parameter>label</parameter>. If <parameter>label</parameter> is <literal>NULL</literal>, the label is omitted.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>label</parameter>&nbsp;:</term>
+<listitem><simpara> the text to use as the label of the page.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>
+              widget.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-new-with-label-widget"/>thunarx_property_page_new_with_label_widget ()</title>
+<indexterm><primary>thunarx_property_page_new_with_label_widget</primary></indexterm><programlisting><link linkend="GtkWidget">GtkWidget</link>*  thunarx_property_page_new_with_label_widget
+                                            (<link linkend="GtkWidget">GtkWidget</link> *label_widget);</programlisting>
+<para>
+Allocates a new <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> widget and sets its label to
+the specified <parameter>label_widget</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>label_widget</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="GtkWidget"><type>GtkWidget</type></link>, which should be used as label.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the newly allocated <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link> widget.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-get-label"/>thunarx_property_page_get_label ()</title>
+<indexterm><primary>thunarx_property_page_get_label</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunarx_property_page_get_label
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page);</programlisting>
+<para>
+If the <parameter>property_page</parameter>'s label widget is a <link linkend="GtkLabel"><type>GtkLabel</type></link>, returns the text
+in the label widget (the <parameter>property_page</parameter> will have a <link linkend="GtkLabel"><type>GtkLabel</type></link> for the
+label widget if a non-<literal>NULL</literal> argument was passed to <link linkend="thunarx-property-page-new"><function>thunarx_property_page_new()</function></link>).</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>property_page</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the text in the label or <literal>NULL</literal> if there was no label widget or
+              the label widget was not a <link linkend="GtkLabel"><type>GtkLabel</type></link>. The returned string is
+              owned by the <parameter>property_page</parameter> and must not be modified or freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-set-label"/>thunarx_property_page_set_label ()</title>
+<indexterm><primary>thunarx_property_page_set_label</primary></indexterm><programlisting><link linkend="void">void</link>        thunarx_property_page_set_label (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page,
+                                             const <link linkend="gchar">gchar</link> *label);</programlisting>
+<para>
+Sets the text of the label. If <parameter>label</parameter> is <literal>NULL</literal>, the current label is
+removed.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>property_page</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>label</parameter>&nbsp;:</term>
+<listitem><simpara> the text to use as the label of the page.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-get-label-widget"/>thunarx_property_page_get_label_widget ()</title>
+<indexterm><primary>thunarx_property_page_get_label_widget</primary></indexterm><programlisting><link linkend="GtkWidget">GtkWidget</link>*  thunarx_property_page_get_label_widget
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page);</programlisting>
+<para>
+Returns the label widget for the <parameter>property_page</parameter>. See
+<link linkend="thunarx-property-page-set-label-widget"><function>thunarx_property_page_set_label_widget()</function></link>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>property_page</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the label widget or <literal>NULL</literal> if there is none.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="thunarx-property-page-set-label-widget"/>thunarx_property_page_set_label_widget ()</title>
+<indexterm><primary>thunarx_property_page_set_label_widget</primary></indexterm><programlisting><link linkend="void">void</link>        thunarx_property_page_set_label_widget
+                                            (<link linkend="ThunarxPropertyPage">ThunarxPropertyPage</link> *property_page,
+                                             <link linkend="GtkWidget">GtkWidget</link> *label_widget);</programlisting>
+<para>
+Sets the label widget for the <parameter>property_page</parameter>. This is the widget
+that will appear in the notebook header for the <parameter>property_page</parameter>.</para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>property_page</parameter>&nbsp;:</term>
+<listitem><simpara> a <link linkend="ThunarxPropertyPage"><type>ThunarxPropertyPage</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>label_widget</parameter>&nbsp;:</term>
+<listitem><simpara> the new label widget.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+<refsect1>
+<title>Properties</title>
+<refsect2><title><anchor id="ThunarxPropertyPage--label"/>The &quot;<literal>label</literal>&quot; property</title>
+<programlisting>  &quot;label&quot;                <link linkend="gchararray">gchararray</link>            : Read / Write</programlisting>
+<para>Text of the page's label.</para><para>Default value: NULL</para>
+</refsect2>
+<refsect2><title><anchor id="ThunarxPropertyPage--label-widget"/>The &quot;<literal>label-widget</literal>&quot; property</title>
+<programlisting>  &quot;label-widget&quot;         <link linkend="GtkWidget">GtkWidget</link>             : Read / Write</programlisting>
+<para>A widget to display in place of the usual page label.</para></refsect2>
+
+</refsect1>
+
+
+
+<refsect1>
+<title>See Also</title>
+<para>
+  The description of the <link linkend="ThunarxPropertyPageProvider"><type>ThunarxPropertyPageProvider</type></link> interface.
+</para>
+</refsect1>
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-version-information.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-version-information.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/docs/reference/thunarx/xml/thunarx-version-information.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,222 @@
+<refentry id="thunarx-Variables-and-functions-to-check-the-library-version">
+<refmeta>
+<refentrytitle>Version information</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>THUNARX Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Version information</refname><refpurpose>Variables and functions to check the library version</refpurpose>
+</refnamediv>
+<refsect1>
+<title>Stability Level</title>
+Stable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv><title>Synopsis</title>
+
+<synopsis>
+
+#include &lt;thunarx/thunarx.h&gt;
+
+
+extern      const guint <link linkend="thunarx-major-version">thunarx_major_version</link>;
+extern      const guint <link linkend="thunarx-minor-version">thunarx_minor_version</link>;
+extern      const guint <link linkend="thunarx-micro-version">thunarx_micro_version</link>;
+const <link linkend="gchar">gchar</link>* <link linkend="thunarx-check-version">thunarx_check_version</link>          (<link linkend="guint">guint</link> required_major,
+                                             <link linkend="guint">guint</link> required_minor,
+                                             <link linkend="guint">guint</link> required_micro);
+#define     <link linkend="THUNARX-MAJOR-VERSION:CAPS">THUNARX_MAJOR_VERSION</link>
+#define     <link linkend="THUNARX-MINOR-VERSION:CAPS">THUNARX_MINOR_VERSION</link>
+#define     <link linkend="THUNARX-MICRO-VERSION:CAPS">THUNARX_MICRO_VERSION</link>
+#define     <link linkend="THUNARX-CHECK-VERSION:CAPS">THUNARX_CHECK_VERSION</link>           (major,minor,micro)
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1>
+<title>Description</title>
+<para>
+  The Thunar Extension library provides version information,
+  which should be used by extensions.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+<refsect2>
+<title><anchor id="thunarx-major-version"/>thunarx_major_version</title>
+<indexterm><primary>thunarx_major_version</primary></indexterm><programlisting>extern const guint thunarx_major_version;
+</programlisting>
+<para>
+The major version number of the
+<systemitem class="library">thunarx</systemitem> library (e.g. in
+version 0.5.1 this is 0).
+</para>
+<para>
+This variable is in the library, so represents the
+<systemitem class="library">thunarx</systemitem> library you have
+linked against. Contrast with the <link linkend="THUNARX-MAJOR-VERSION:CAPS"><type>THUNARX_MAJOR_VERSION</type></link> macro, which
+represents the major version of the
+<systemitem class="library">thunarx</systemitem> headers you have
+included.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-minor-version"/>thunarx_minor_version</title>
+<indexterm><primary>thunarx_minor_version</primary></indexterm><programlisting>extern const guint thunarx_minor_version;
+</programlisting>
+<para>
+The minor version number of the
+<systemitem class="library">thunarx</systemitem> library (e.g. in
+version 0.5.1 this is 5).
+</para>
+<para>
+This variable is in the library, so represents the
+<systemitem class="library">thunarx</systemitem> library you have
+linked against. Contrast with the <link linkend="THUNARX-MINOR-VERSION:CAPS"><type>THUNARX_MINOR_VERSION</type></link> macro, which
+represents the minor version of the
+<systemitem class="library">thunarx</systemitem> headers you have
+included.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-micro-version"/>thunarx_micro_version</title>
+<indexterm><primary>thunarx_micro_version</primary></indexterm><programlisting>extern const guint thunarx_micro_version;
+</programlisting>
+<para>
+The micro version number of the
+<systemitem class="library">thunarx</systemitem> library (e.g. in
+version 0.5.1 this is 1).
+</para>
+<para>
+This variable is in the library, so represents the
+<systemitem class="library">thunarx</systemitem> library you have
+linked against. Contrast with the <link linkend="THUNARX-MICRO-VERSION:CAPS"><type>THUNARX_MICRO_VERSION</type></link> macro, which
+represents the micro version of the
+<systemitem class="library">thunarx</systemitem> headers you have
+included.</para>
+<para>
+
+</para></refsect2>
+<refsect2>
+<title><anchor id="thunarx-check-version"/>thunarx_check_version ()</title>
+<indexterm><primary>thunarx_check_version</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* thunarx_check_version          (<link linkend="guint">guint</link> required_major,
+                                             <link linkend="guint">guint</link> required_minor,
+                                             <link linkend="guint">guint</link> required_micro);</programlisting>
+<para>
+Checks that the <systemitem class="library">thunarx</systemitem> library
+in use is compatible with the given version. Generally you would pass in
+the constants <link linkend="THUNARX-MAJOR-VERSION:CAPS"><type>THUNARX_MAJOR_VERSION</type></link>, <link linkend="THUNARX-MINOR-VERSION:CAPS"><type>THUNARX_MINOR_VERSION</type></link> and
+<link linkend="THUNARX-VERSION-MICRO:CAPS"><type>THUNARX_VERSION_MICRO</type></link> as the three arguments to this function; that produces
+a check that the library in use is compatible with the version of
+<systemitem class="library">thunarx</systemitem> the extension was
+compiled against.
+</para>
+<para>
+This function should be called by extensions in the
+<link linkend="thunar-extension-initialize"><function>thunar_extension_initialize()</function></link> method to verify that the <systemitem
+class="library">thunarx</systemitem> library used by file manager is
+compatible with the version the extension was compiled with.
+</para>
+<para>
+<example>
+<title>Checking the runtime version of the Thunar Extension library</title>
+<programlisting>
+const gchar *mismatch;
+mismatch = thunarx_check_version (THUNARX_VERSION_MAJOR,
+                                  THUNARX_VERSION_MINOR,
+                                  THUNARX_VERSION_MICRO);
+if (G_UNLIKELY (mismatch != NULL))
+  g_error ("Version mismatch: %<!---->s", mismatch);
+</programlisting>
+</example></para>
+<para>
+
+</para><variablelist role="params">
+<varlistentry><term><parameter>required_major</parameter>&nbsp;:</term>
+<listitem><simpara> the required major version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>required_minor</parameter>&nbsp;:</term>
+<listitem><simpara> the required minor version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>required_micro</parameter>&nbsp;:</term>
+<listitem><simpara> the required micro version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <literal>NULL</literal> if the library is compatible with the given version,
+              or a string describing the version mismatch. The returned
+              string is owned by the library and must not be freed or
+              modified by the caller.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2>
+<title><anchor id="THUNARX-MAJOR-VERSION:CAPS"/>THUNARX_MAJOR_VERSION</title>
+<indexterm><primary>THUNARX_MAJOR_VERSION</primary></indexterm><programlisting>#define THUNARX_MAJOR_VERSION 0
+</programlisting>
+<para>
+  The major version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_major_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para></refsect2>
+<refsect2>
+<title><anchor id="THUNARX-MINOR-VERSION:CAPS"/>THUNARX_MINOR_VERSION</title>
+<indexterm><primary>THUNARX_MINOR_VERSION</primary></indexterm><programlisting>#define THUNARX_MINOR_VERSION 1
+</programlisting>
+<para>
+  The minor version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_minor_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para></refsect2>
+<refsect2>
+<title><anchor id="THUNARX-MICRO-VERSION:CAPS"/>THUNARX_MICRO_VERSION</title>
+<indexterm><primary>THUNARX_MICRO_VERSION</primary></indexterm><programlisting>#define THUNARX_MICRO_VERSION 3
+</programlisting>
+<para>
+  The micro version number of the <systemitem class="library">thunarx</systemitem> library.
+  Like thunarx_micro_version, but from the headers used at application compile time, rather
+  than from the library linked against at application run time.
+</para></refsect2>
+<refsect2>
+<title><anchor id="THUNARX-CHECK-VERSION:CAPS"/>THUNARX_CHECK_VERSION()</title>
+<indexterm><primary>THUNARX_CHECK_VERSION</primary></indexterm><programlisting>#define     THUNARX_CHECK_VERSION(major,minor,micro)</programlisting>
+<para>
+  Checks the version of the <systemitem class="library">thunarx</systemitem> library. Returns
+  <literal>TRUE</literal> if the version of the <systemitem class="library">thunarx</systemitem> header files is
+  the same as or newer than the passed-in version.
+</para>
+
+<example>
+  <title>Checking the version of the Thunar Extension library</title>
+
+  <programlisting>
+if (!THUNARX_CHECK_VERSION (0, 1, 0))
+  g_error ("Thunarx version 0.1.0 or above is required");</programlisting>
+</example><variablelist role="params">
+<varlistentry><term><parameter>major</parameter>&nbsp;:</term>
+<listitem><simpara>the major version number.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>minor</parameter>&nbsp;:</term>
+<listitem><simpara>the minor version number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>micro</parameter>&nbsp;:</term>
+<listitem><simpara>the micro version number.
+
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>

Added: desktop/trunk/thunar/branches/upstream/current/examples/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,6 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	open-terminal-here
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/examples/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,573 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	open-terminal-here
+
+all: all-recursive
+
+.SUFFIXES:
+$(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  examples/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  examples/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	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: ctags-recursive $(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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,40 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+INCLUDES =								\
+	-I$(top_builddir)						\
+	-I$(top_srcdir)							\
+	-DG_LOG_DOMAIN=\"OpenTerminalHere\"				\
+	$(PLATFORM_CPPFLAGS)
+
+extensionsdir = $(libdir)/thunarx-$(THUNAR_VERSION_API)
+extensions_LTLIBRARIES =						\
+	open-terminal-here.la
+
+open_terminal_here_la_SOURCES =						\
+	open-terminal-here.c
+
+open_terminal_here_la_CFLAGS =						\
+	$(GTK_CFLAGS)							\
+	$(PLATFORM_CFLAGS)
+
+open_terminal_here_la_DEPENDENCIES =					\
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+open_terminal_here_la_LIBADD =						\
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la	\
+	$(GTK_LIBS)
+
+open_terminal_here_la_LDFLAGS =						\
+	-avoid-version							\
+	-export-dynamic							\
+	-module								\
+	$(PLATFORM_LDFLAGS)
+
+EXTRA_DIST =								\
+	README
+
+# Don't install/uninstall examples by default
+install:
+uninstall:
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,608 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SOURCES = $(open_terminal_here_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = examples/open-terminal-here
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(extensionsdir)"
+extensionsLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(extensions_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_open_terminal_here_la_OBJECTS =  \
+	open_terminal_here_la-open-terminal-here.lo
+open_terminal_here_la_OBJECTS = $(am_open_terminal_here_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(open_terminal_here_la_SOURCES)
+DIST_SOURCES = $(open_terminal_here_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = \
+	-I$(top_builddir)						\
+	-I$(top_srcdir)							\
+	-DG_LOG_DOMAIN=\"OpenTerminalHere\"				\
+	$(PLATFORM_CPPFLAGS)
+
+extensionsdir = $(libdir)/thunarx-$(THUNAR_VERSION_API)
+extensions_LTLIBRARIES = \
+	open-terminal-here.la
+
+open_terminal_here_la_SOURCES = \
+	open-terminal-here.c
+
+open_terminal_here_la_CFLAGS = \
+	$(GTK_CFLAGS)							\
+	$(PLATFORM_CFLAGS)
+
+open_terminal_here_la_DEPENDENCIES = \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+open_terminal_here_la_LIBADD = \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la	\
+	$(GTK_LIBS)
+
+open_terminal_here_la_LDFLAGS = \
+	-avoid-version							\
+	-export-dynamic							\
+	-module								\
+	$(PLATFORM_LDFLAGS)
+
+EXTRA_DIST = \
+	README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  examples/open-terminal-here/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  examples/open-terminal-here/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-extensionsLTLIBRARIES: $(extensions_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(extensionsdir)" || $(mkdir_p) "$(DESTDIR)$(extensionsdir)"
+	@list='$(extensions_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) --mode=install $(extensionsLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(extensionsdir)/$$f'"; \
+	    $(LIBTOOL) --mode=install $(extensionsLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(extensionsdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-extensionsLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@set -x; list='$(extensions_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(extensionsdir)/$$p'"; \
+	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(extensionsdir)/$$p"; \
+	done
+
+clean-extensionsLTLIBRARIES:
+	-test -z "$(extensions_LTLIBRARIES)" || rm -f $(extensions_LTLIBRARIES)
+	@list='$(extensions_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+open-terminal-here.la: $(open_terminal_here_la_OBJECTS) $(open_terminal_here_la_DEPENDENCIES) 
+	$(LINK) -rpath $(extensionsdir) $(open_terminal_here_la_LDFLAGS) $(open_terminal_here_la_OBJECTS) $(open_terminal_here_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/open_terminal_here_la-open-terminal-here.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+open_terminal_here_la-open-terminal-here.lo: open-terminal-here.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(open_terminal_here_la_CFLAGS) $(CFLAGS) -MT open_terminal_here_la-open-terminal-here.lo -MD -MP -MF "$(DEPDIR)/open_terminal_here_la-open-terminal-here.Tpo" -c -o open_terminal_here_la-open-terminal-here.lo `test -f 'open-terminal-here.c' || echo '$(srcdir)/'`open-terminal-here.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/open_terminal_here_la-open-terminal-here.Tpo" "$(DEPDIR)/open_terminal_here_la-open-terminal-here.Plo"; else rm -f "$(DEPDIR)/open_terminal_here_la-open-terminal-here.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='open-terminal-here.c' object='open_terminal_here_la-open-terminal-here.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(open_terminal_here_la_CFLAGS) $(CFLAGS) -c -o open_terminal_here_la-open-terminal-here.lo `test -f 'open-terminal-here.c' || echo '$(srcdir)/'`open-terminal-here.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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 $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(extensionsdir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install-exec: install-exec-am
+install-data: install-data-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-extensionsLTLIBRARIES clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-extensionsLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+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 \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-extensionsLTLIBRARIES uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean \
+	clean-extensionsLTLIBRARIES clean-generic clean-libtool ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am \
+	install-extensionsLTLIBRARIES install-info install-info-am \
+	install-man install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-extensionsLTLIBRARIES uninstall-info-am
+
+
+# Don't install/uninstall examples by default
+install:
+uninstall:
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/README
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/README	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/README	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,15 @@
+This is an example for a Thunar Extension that provides additional context
+menu items. It adds an "Open Terminal Here" action to the folder context
+menu and to the file context menu of directories, and thereby allows you
+to open a new Terminal instance in the given folder.
+
+The example is mainly provided for developers to get an idea about how
+to write an extension that implements the ThunarxMenuProvider interface.
+
+The extension is not installed by default, as every installed extension
+increases the resources required to run Thunar. If you want to install
+this extension, you can use the command
+
+  make install-extensionsLTLIBRARIES
+
+in this directory.

Added: desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/open-terminal-here.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/open-terminal-here.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/examples/open-terminal-here/open-terminal-here.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,244 @@
+/* $Id: open-terminal-here.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunarx/thunarx.h>
+
+
+
+/* make sure to export the required public functions */
+#ifdef HAVE_GNUC_VISIBILITY
+extern void thunar_extension_initialize (GTypeModule *module) __attribute__((visibility("default")));
+extern void thunar_extension_shutdown (void) __attribute__((visibility("default")));
+extern void thunar_extension_list_types (const GType **types, gint *n_types) __attribute__((visibility("default")));
+#else
+extern G_MODULE_EXPORT void thunar_extension_initialize (GTypeModule *module);
+extern G_MODULE_EXPORT void thunar_extension_shutdown (void);
+extern G_MODULE_EXPORT void thunar_extension_list_types (const GType **types, gint *n_types);
+#endif
+
+
+
+static GType type_list[1];
+
+
+
+typedef struct _OpenTerminalHereClass OpenTerminalHereClass;
+typedef struct _OpenTerminalHere      OpenTerminalHere;
+
+
+
+static void   open_terminal_here_register_type      (GTypeModule              *module);
+static void   open_terminal_here_menu_provider_init (ThunarxMenuProviderIface *iface);
+static GList *open_terminal_here_get_file_actions   (ThunarxMenuProvider      *provider,
+                                                     GtkWidget                *window,
+                                                     GList                    *files);
+static GList *open_terminal_here_get_folder_actions (ThunarxMenuProvider      *provider,
+                                                     GtkWidget                *window,
+                                                     ThunarxFileInfo          *folder);
+static void   open_terminal_here_activated          (GtkAction                *action,
+                                                     GtkWidget                *window);
+
+
+
+struct _OpenTerminalHereClass
+{
+  GObjectClass __parent__;
+};
+
+struct _OpenTerminalHere
+{
+  GObject __parent__;
+};
+
+
+
+static void
+open_terminal_here_register_type (GTypeModule *module)
+{
+  static const GTypeInfo info =
+  {
+    sizeof (OpenTerminalHereClass),
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    sizeof (OpenTerminalHere),
+    0,
+    NULL,
+    NULL,
+  };
+
+  static const GInterfaceInfo menu_provider_info =
+  {
+    (GInterfaceInitFunc) open_terminal_here_menu_provider_init,
+    NULL,
+    NULL,
+  };
+
+  type_list[0] = g_type_module_register_type (module, G_TYPE_OBJECT, "OpenTerminalHere", &info, 0);
+  g_type_module_add_interface (module, type_list[0], THUNARX_TYPE_MENU_PROVIDER, &menu_provider_info);
+}
+
+
+
+static void
+open_terminal_here_menu_provider_init (ThunarxMenuProviderIface *iface)
+{
+  iface->get_file_actions = open_terminal_here_get_file_actions;
+  iface->get_folder_actions = open_terminal_here_get_folder_actions;
+}
+
+
+
+static GList*
+open_terminal_here_get_file_actions (ThunarxMenuProvider *provider,
+                                     GtkWidget           *window,
+                                     GList               *files)
+{
+  /* check if we have a directory here */
+  if (G_LIKELY (files != NULL && files->next == NULL && thunarx_file_info_is_directory (files->data)))
+    return open_terminal_here_get_folder_actions (provider, window, files->data);
+
+  return NULL;
+}
+
+
+
+static GList*
+open_terminal_here_get_folder_actions (ThunarxMenuProvider *provider,
+                                       GtkWidget           *window,
+                                       ThunarxFileInfo     *folder)
+{
+  GtkAction *action = NULL;
+  gchar     *scheme;
+  gchar     *path;
+  gchar     *uri;
+
+  /* determine the uri scheme of the folder and check if we support it */
+  scheme = thunarx_file_info_get_uri_scheme (folder);
+  if (G_LIKELY (strcmp (scheme, "file") == 0))
+    {
+      /* determine the local path to the folder */
+      uri = thunarx_file_info_get_uri (folder);
+      path = g_filename_from_uri (uri, NULL, NULL);
+      g_free (uri);
+
+      /* check if we have a valid path here */
+      if (G_LIKELY (path != NULL))
+        {
+          action = gtk_action_new ("OpenTerminalHere::open-terminal-here", "Open Terminal Here", "Open Terminal in this folder", NULL);
+          g_signal_connect (G_OBJECT (action), "activate", G_CALLBACK (open_terminal_here_activated), window);
+          g_object_set_data_full (G_OBJECT (action), "open-terminal-here-path", path, g_free);
+        }
+    }
+  g_free (scheme);
+
+  return (action != NULL) ? g_list_prepend (NULL, action) : NULL;
+}
+
+
+
+static void
+open_terminal_here_activated (GtkAction *action,
+                              GtkWidget *window)
+{
+  const gchar *path;
+  GtkWidget   *dialog;
+  GError      *error = NULL;
+  gchar       *command;
+
+  /* determine the folder path */
+  path = g_object_get_data (G_OBJECT (action), "open-terminal-here-path");
+  if (G_UNLIKELY (path == NULL))
+    return;
+  
+  /* build up the command line for the terminal */
+  command = g_strdup_printf ("Terminal --working-directory \"%s\"", path);
+
+  /* try to run the terminal command */
+  if (!gdk_spawn_command_line_on_screen (gtk_widget_get_screen (window), command, &error))
+    {
+      /* display an error dialog */
+      dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                       GTK_DIALOG_DESTROY_WITH_PARENT,
+                                       GTK_MESSAGE_ERROR,
+                                       GTK_BUTTONS_CLOSE,
+                                       "Failed to open terminal in folder %s.",
+                                       path);
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s.", error->message);
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+      g_error_free (error);
+    }
+
+  /* cleanup */
+  g_free (command);
+}
+
+
+
+void
+thunar_extension_initialize (GTypeModule *module)
+{
+  const gchar *mismatch;
+
+  /* verify that the thunarx versions are compatible */
+  mismatch = thunarx_check_version (THUNARX_MAJOR_VERSION, THUNARX_MINOR_VERSION, THUNARX_MICRO_VERSION);
+  if (G_UNLIKELY (mismatch != NULL))
+    {
+      g_warning ("Version mismatch: %s", mismatch);
+      return;
+    }
+
+  g_message ("Initializing OpenTerminalHere extension");
+
+  open_terminal_here_register_type (module);
+}
+
+
+
+void
+thunar_extension_shutdown (void)
+{
+  g_message ("Shutting down OpenTerminalHere extension");
+}
+
+
+
+void
+thunar_extension_list_types (const GType **types,
+                             gint         *n_types)
+{
+  *types = type_list;
+  *n_types = G_N_ELEMENTS (type_list);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/gtk-doc.make
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/gtk-doc.make	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/gtk-doc.make	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,153 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST = 				\
+	$(content_files)		\
+	$(HTML_IMAGES)			\
+	$(DOC_MAIN_SGML_FILE)		\
+	$(DOC_MODULE)-sections.txt	\
+	$(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+	   $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = 		 \
+	$(DOC_MODULE).args 	 \
+	$(DOC_MODULE).hierarchy  \
+	$(DOC_MODULE).interfaces \
+	$(DOC_MODULE).prerequisites \
+	$(DOC_MODULE).signals
+
+CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+	@echo '*** Scanning header files ***'
+	@-chmod -R u+w $(srcdir)
+	if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+	else \
+	    cd $(srcdir) ; \
+	    for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+	    done \
+	fi
+	cd $(srcdir) && \
+	  gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+	touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp
+	@true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+	@echo '*** Rebuilding template files ***'
+	@-chmod -R u+w $(srcdir)
+	cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+	touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+	@true
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml $(expand_content_files)
+	@echo '*** Building XML ***'
+	@-chmod -R u+w $(srcdir)
+	cd $(srcdir) && \
+	gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" $(MKDB_OPTIONS)
+	touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+	@true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+	@echo '*** Building HTML ***'
+	@-chmod -R u+w $(srcdir)
+	rm -rf $(srcdir)/html 
+	mkdir $(srcdir)/html
+	cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+	test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+	@echo '-- Fixing Crossreferences' 
+	cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+	touch html-build.stamp
+else
+all-local:
+endif
+
+##############
+
+clean-local:
+	rm -f *~ *.bak
+	rm -rf .libs
+
+maintainer-clean-local: clean
+	cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+install-data-local:
+	installfiles=`echo $(srcdir)/html/*`; \
+	if test "$$installfiles" = '$(srcdir)/html/*'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
+	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+	@false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/tmpl
+	mkdir $(distdir)/xml
+	mkdir $(distdir)/html
+	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+	-cp $(srcdir)/xml/*.xml $(distdir)/xml
+	-cp $(srcdir)/html/* $(distdir)/html
+	if test -f $(srcdir)/$(DOC_MODULE).types; then \
+	  cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
+	fi
+
+.PHONY : dist-hook-local

Added: desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+iconsdir = $(datadir)/icons/hicolor/24x24/apps
+icons_DATA =								\
+	Thunar.png
+
+EXTRA_DIST =								\
+	$(icons_DATA)
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/24x24/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,462 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = icons/24x24
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+iconsDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+iconsdir = $(datadir)/icons/hicolor/24x24/apps
+icons_DATA = \
+	Thunar.png
+
+EXTRA_DIST = \
+	$(icons_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(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  icons/24x24/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  icons/24x24/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-iconsDATA: $(icons_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(iconsdir)" || $(mkdir_p) "$(DESTDIR)$(iconsdir)"
+	@list='$(icons_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(iconsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(iconsdir)/$$f'"; \
+	  $(iconsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(iconsdir)/$$f"; \
+	done
+
+uninstall-iconsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(icons_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(iconsdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(iconsdir)/$$f"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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 $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(iconsdir)"; 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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-iconsDATA install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-iconsDATA uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/icons/24x24/Thunar.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/icons/24x24/Thunar.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+iconsdir = $(datadir)/icons/hicolor/48x48/apps
+icons_DATA =								\
+	Thunar.png
+
+EXTRA_DIST =								\
+	$(icons_DATA)
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/48x48/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,462 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = icons/48x48
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+iconsDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+iconsdir = $(datadir)/icons/hicolor/48x48/apps
+icons_DATA = \
+	Thunar.png
+
+EXTRA_DIST = \
+	$(icons_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(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  icons/48x48/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  icons/48x48/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-iconsDATA: $(icons_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(iconsdir)" || $(mkdir_p) "$(DESTDIR)$(iconsdir)"
+	@list='$(icons_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(iconsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(iconsdir)/$$f'"; \
+	  $(iconsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(iconsdir)/$$f"; \
+	done
+
+uninstall-iconsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(icons_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(iconsdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(iconsdir)/$$f"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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 $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(iconsdir)"; 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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-iconsDATA install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-iconsDATA uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/icons/48x48/Thunar.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/icons/48x48/Thunar.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/icons/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,7 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	24x24								\
+	48x48
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/icons/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/icons/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/icons/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = icons
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	24x24								\
+	48x48
+
+all: all-recursive
+
+.SUFFIXES:
+$(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  icons/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  icons/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	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: ctags-recursive $(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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+	clean clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/install-sh
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/install-sh	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/install-sh	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,322 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-09-10.20
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit 0;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+	shift
+	shift
+	continue;;
+
+    -T) no_target_directory=true
+	shift
+	continue;;
+
+    --version) echo "$0 $scriptversion"; exit 0;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+	# When -t is used, the destination is already specified.
+	test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+	for arg
+	do
+          if test -n "$dstarg"; then
+	    # $@ is not empty: it contains at least $arg.
+	    set fnord "$@" "$dstarg"
+	    shift # fnord
+	  fi
+	  shift # arg
+	  dstarg=$arg
+	done
+	break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+	 '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+	# mkdir can fail with a `File exist' error in case several
+	# install-sh are creating the directory concurrently.  This
+	# is OK.
+	test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dstdir/$dstfile"; then
+	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	       || {
+		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 (exit 1); exit
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	 }
+    }
+  fi || { (exit 1); exit; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/install-sh
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/intltool-extract.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/intltool-extract.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/intltool-extract.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,516 @@
+#!@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 at gnu.org>
+#           Darin Adler <darin at bentspoon.com>
+#
+
+## Release information
+my $PROGRAM      = "intltool-extract";
+my $PACKAGE      = "intltool";
+my $VERSION      = "0.33";
+
+## 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;
+
+## 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";
+}   
+
+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"
+  -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";
+    &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";
+}
+
+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/&amp;/&/g;
+    s/&lt;/</g;
+    s/&gt;/>/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 =~ /^_.*=(.*)$/mg) {
+        $messages{$1} = [];
+    }
+}
+
+sub type_keys {
+    ### For generic translatable mime/keys files ###
+    while ($input =~ /^\s*_\w+=(.*)$/mg) {
+        $messages{$1} = [];
+    }
+}
+
+sub type_xml {
+    ### For generic translatable XML files ###
+        
+    while ($input =~ /(?:<!--([^>]*?)-->[^\n]*\n?[^\n]*)?\s_$w+\s*=\s*\"([^"]*)\"/sg) { # "
+        $messages{entity_decode_minimal($2)} = [];
+        $comments{entity_decode_minimal($2)} = $1 if (defined($1));
+    }
+
+    while ($input =~ /(?:<!--([^>]*?)-->\s*)?<_($w+)(?: xml:space="($w+)")?[^>]*>(.*?)<\/_\2>/sg) {
+        $_ = $4;
+        if (!defined($3) || $3 ne "preserve") {
+            s/\s+/ /g;
+            s/^ //;
+            s/ $//;
+        }
+        $messages{$_} = [];
+        $comments{$_} = $1 if (defined($1));
+    }
+}
+
+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_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";  
+	    }
+        }
+    }
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/intltool-merge.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/intltool-merge.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/intltool-merge.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1315 @@
+#!@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 at noisehavoc.org>
+#            Kenneth Christiansen <kenneth at gnu.org>
+#            Darin Adler <darin at bentspoon.com>
+#
+#  Proper XML UTF-8'ification written by Cyrille Chepelov <chepelov at calixo.net>
+#
+
+## Release information
+my $PROGRAM = "intltool-merge";
+my $PACKAGE = "intltool";
+my $VERSION = "0.33";
+
+## 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 $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,
+ "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"} || $ENV{"INTLTOOL_ICONV"} || "/usr/local/bin/iconv";
+
+# 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;
+} 
+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
+  -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
+{
+    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"} || "/opt/local/lib/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 </dev/null 2>/dev/null");
+    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 STDERR "WARNING: $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;
+}
+
+## NOTE: deal with < - &lt; but not > - &gt;  because it seems its ok to have 
+## > in the entity. For further info please look at #84738.
+sub entity_decode
+{
+    local ($_) = @_;
+
+    s/&apos;/'/g; # '
+    s/&quot;/"/g; # "
+    s/&amp;/&/g;
+    s/&lt;/</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: $!";
+
+    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; # we still want translations for deep nesting (FIXME: this will cause
+                                     # problems since we might get untranslated duplicated entries, but with xml:lang set)
+                    # Fix would be to set it here to eg. 3, and do a check in traverse() to see if any of the containing tags
+                    # really need translation, and only emit "translation" if there is (this means parsing same data twice)
+                }
+            } else {
+                 $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" if $translate == 2
+            }
+	}
+	
+	$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
+#   doesn't support nesting of translatable tags (i.e. <_blah>this <_doh>doesn't</_doh> work</_blah> -- besides
+#   can you define the correct semantics for this?)
+#
+
+sub getXMLstring
+{
+    my $ref = shift;
+    my @list = @{ $ref };
+    my $result = "";
+
+    my $count = scalar(@list);
+    my $attrs = $list[0];
+    my $index = 1;
+
+    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 (!((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/)));
+		$result .= ($content);
+	    } else {
+		#print "no cdata content when expected it\n"; # is this possible, is this ok?
+		# what to do if this happens?
+		# Did I mention that I hate XML::Parser tree style?
+	    }
+	} else {
+	    # We've got another element
+	    $result .= "<$type";
+	    $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements
+	    if ($content) {
+		my $subresult = getXMLstring($content);
+		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 @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);
+            $MULTIPLE_OUTPUT = $oldMO;
+        } else {
+            traverse($fh, $type, $rest, $language);
+        }
+        $index += 2;
+    }
+}
+
+sub traverse
+{
+    my $fh = shift; 
+    my $nodename = shift;
+    my $content = shift;
+    my $language = shift || "";
+
+    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 = '';
+	print $fh "<$nodename", $outattr;
+	if ($translate) {
+	    $lookup = getXMLstring($content);
+            if (!((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/))) {
+                $lookup =~ s/^\s+//s;
+                $lookup =~ s/\s+$//s;
+            }
+
+	    if ($lookup || $translate == 2) {
+                my $translation = $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);
+                    } 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);
+                    } 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 ($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);
+                            } 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);
+                    $index += 2;
+                }
+		print $fh "</$nodename>";
+	    } else {
+		print $fh "/>";
+	    }
+	}
+    }
+}
+
+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 };
+    traverse($fh, $name, $cont, $language);
+}
+
+sub xml_merge_output
+{
+    my $source;
+
+    if ($MULTIPLE_OUTPUT) {
+        for my $lang (sort keys %po_files_by_lang) {
+	    if ( ! -e $lang ) {
+	        mkdir $lang or die "Cannot create subdirectory $lang: $!\n";
+            }
+            open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+            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";
+    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;
+
+    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;
+
+    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;
+
+    # 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;
+
+    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;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/intltool-update.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/intltool-update.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/intltool-update.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1063 @@
+#!@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 at gnu.org>
+#           Maciej Stachowiak
+#           Darin Adler <darin at bentspoon.com>
+
+## Release information
+my $PROGRAM = "intltool-update";
+my $VERSION = "0.33";
+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. 
+
+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
+
+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 = ".";
+my $POTFILES_in;
+
+$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"};
+$POTFILES_in = "<$SRCDIR/POTFILES.in";
+
+## 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;
+
+# --version and --help don't require a module name
+my $MODULE = $GETTEXT_PACKAGE || &FindPackageName;
+
+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
+    );
+
+    ## 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)+)$/;
+	}, "..";
+
+
+    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 $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, "<$ignore" or die "ERROR: Failed to open $ignore!\n";
+	    
+	while (<FILE>)
+	{
+	    push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/;
+	}
+	close FILE;
+
+	@buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles);
+    }
+
+    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 (/\.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;
+	    }
+
+	    if (/_\(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_(.*)=\"/ || /<_[^>]+>/ || /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) 
+    {
+	$in2{$_} = 1;
+    }
+
+    my @result;
+
+    foreach (@buf_allfiles_sorted)
+    {
+	if (!exists($in2{$_}))
+	{
+	    push @result, $_
+	}
+    }
+
+    my @buf_potfiles_notexist;
+
+    foreach (@buf_potfiles_sorted)
+    {
+	chomp (my $dummy = $_);
+	if ("$dummy" ne "" and ! -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 or POTFILES.skip. 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 GenerateHeaders
+{
+    my $EXTRACT = "@INTLTOOL_EXTRACT@";
+    chomp $EXTRACT;
+
+    $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"};
+
+    ## Generate the .h header files, so we can allow glade and
+    ## xml translation support
+    if (! -x "$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"} || "/opt/local/bin/xgettext";
+    my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
+    chomp $XGETTEXT;
+
+    if (! -x $XGETTEXT)
+    {
+	print STDERR " *** 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 >/dev/null 2>/dev/null`;
+    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 
+	{
+	    if ($SRCDIR eq ".") {
+	        print OUTFILE "../$_\n";
+	    } else {
+	        print OUTFILE "$SRCDIR/../$_\n";
+	    }
+	    $gettext_code = &TextFile_DetermineEncoding ("../$_") 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\=\.",
+			   "--output\=$MODULE\.pot",
+			   "--files-from\=\.\/POTFILES\.in\.temp");
+    my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
+    push @xgettext_argument, $XGETTEXT_KEYWORDS;
+    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"} || "/opt/local/bin/msgmerge";
+    my ($lang, $outfile) = @_;
+
+    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"} || "/opt/local/bin/msgfmt";
+
+    $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
+
+    system ("$MSGFMT", "-o", "/dev/null", "--statistics", $output_file);
+}
+
+sub Console_Write_CoverageReport
+{
+    my $MSGFMT = $ENV{"MSGFMT"} || "/opt/local/bin/msgfmt";
+
+    &GatherPOFiles;
+
+    foreach my $lang (@languages) 
+    {
+	print "$lang: ";
+	&POFile_Update ($lang, "");
+    }
+
+    print "\n\n * Current translation support in $MODULE \n\n";
+
+    foreach my $lang (@languages)
+    {
+	print "$lang: ";
+	system ("$MSGFMT", "-o", "/dev/null", "--statistics", "$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 = $varhash{$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 at .*/@@;
+
+    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 "../configure.ac") 
+	{
+	    $conf_in = "../configure.ac";
+	} 
+	elsif (-f "../configure.in") 
+	{
+	    $conf_in = "../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{"AC_PACKAGE_NAME"} = $name;
+	$varhash{"PACKAGE"} = $name;
+	$varhash{"AC_PACKAGE_VERSION"} = $version;
+	$varhash{"VERSION"} = $version;
+    }
+    
+    if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) 
+    {
+	($name, $version) = ($1, $2);
+	$name    =~ s/[\[\]\s]//g;
+	$version =~ s/[\[\]\s]//g;
+	$varhash{"AC_PACKAGE_NAME"} = $name;
+	$varhash{"PACKAGE"} = $name;
+	$varhash{"AC_PACKAGE_VERSION"} = $version;
+	$varhash{"VERSION"} = $version;
+    }
+
+    # \s makes this not work, why?
+    $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
+    
+    # prepend '$' to auto* internal variables, usually they are
+    # used in configure.in/ac without the '$'
+    $name =~ s/AC_/\$AC_/g;
+    $name =~ s/\$\$/\$/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;
+}

Added: desktop/trunk/thunar/branches/upstream/current/ltmain.sh
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/ltmain.sh	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/ltmain.sh	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,6422 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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.
+#
+# 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.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.6
+TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42)"
+
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell, and then maybe $echo will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+  SP2NL="tr '\100' '\n'"
+  NL2SP="tr '\r\n' '\100\100'"
+  ;;
+ *) # Assume ASCII based system
+  SP2NL="tr '\040' '\012'"
+  NL2SP="tr '\015\012' '\040\040'"
+  ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS=" 	
+"}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  $echo "$modename: not configured to build any kind of library" 1>&2
+  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid () {
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 | \
+	sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+      if test "X$win32_nmres" = "Ximport" ; then
+        win32_libid_type="x86 archive import"
+      else
+        win32_libid_type="x86 archive static"
+      fi
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag () {
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	case $arg in
+	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	CC_quoted="$CC_quoted $arg"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	    # Double-quote args containing other shell metacharacters.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    CC_quoted="$CC_quoted $arg"
+	  done
+	    case "$@ " in
+	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  $echo "$modename: unable to infer tagged configuration"
+	  $echo "$modename: specify a tag with \`--tag'" 1>&2
+	  exit $EXIT_FAILURE
+#        else
+#          $echo "$modename: using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+  arg="$1"
+  shift
+
+  case $arg in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case $prev in
+    execute_dlfiles)
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    tag)
+      tagname="$arg"
+      preserve_args="${preserve_args}=$arg"
+
+      # Check whether tagname contains only valid characters
+      case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+	$echo "$progname: invalid tag name: $tagname" 1>&2
+	exit $EXIT_FAILURE
+	;;
+      esac
+
+      case $tagname in
+      CC)
+	# Don't test for the "default" C tag, as we know, it's there, but
+	# not specially marked.
+	;;
+      *)
+	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+	  taglist="$taglist $tagname"
+	  # Evaluate the configuration.
+	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+	else
+	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
+	fi
+	;;
+      esac
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case $arg in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    $echo
+    $echo "Copyright (C) 2003  Free Software Foundation, Inc."
+    $echo "This is free software; see the source for copying conditions.  There is NO"
+    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    exit $EXIT_SUCCESS
+    ;;
+
+  --config)
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+    done
+    exit $EXIT_SUCCESS
+    ;;
+
+  --debug)
+    $echo "$progname: enabling shell trace mode"
+    set -x
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    $echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $echo "enable shared libraries"
+    else
+      $echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $echo "enable static libraries"
+    else
+      $echo "disable static libraries"
+    fi
+    exit $EXIT_SUCCESS
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
+  --quiet | --silent)
+    show=:
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --tag) prevopt="--tag" prev=tag ;;
+  --tag=*)
+    set tag "$optarg" ${1+"$@"}
+    shift
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+    $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+    case $nonopt in
+    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+      mode=link
+      for arg
+      do
+	case $arg in
+	-c)
+	   mode=compile
+	   break
+	   ;;
+	esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+	if test -n "$nonopt"; then
+	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+	else
+	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+	fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case $mode in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+
+    for arg
+    do
+      case "$arg_mode" in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  if test -n "$libobj" ; then
+	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-static | -prefer-pic | -prefer-non-pic)
+	  later="$later $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+ 	  for arg in $args; do
+	    IFS="$save_ifs"
+
+	    # Double-quote args containing other shell metacharacters.
+	    # Many Bourne shells cannot handle close brackets correctly
+	    # in scan sets, so we specify it separately.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    lastarg="$lastarg $arg"
+	  done
+	  IFS="$save_ifs"
+	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+	  # Add the arguments to base_compile.
+	  base_compile="$base_compile $lastarg"
+	  continue
+	  ;;
+
+	* )
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      case $lastarg in
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	lastarg="\"$lastarg\""
+	;;
+      esac
+
+      base_compile="$base_compile $lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      $echo "$modename: you must specify an argument for -Xcompile"
+      exit $EXIT_FAILURE
+      ;;
+    target)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *)
+      # Get the name of the library object.
+      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSifmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.f90) xform=f90 ;;
+    *.for) xform=for ;;
+    *.java) xform=java ;;
+    esac
+
+    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case $libobj in
+    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+    *)
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -static)
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$xdir" = "X$obj"; then
+      xdir=
+    else
+      xdir=$xdir/
+    fi
+    lobj=${xdir}$objdir/$objname
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
+	$show "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+      $echo $srcfile > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+
+    $run $rm "$libobj" "${libobj}T"
+
+    # Create a libtool object file (analogous to a ".la" file),
+    # but don't create it if we're doing a dry run.
+    test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $srcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      fi
+
+      if test ! -d "${xdir}$objdir"; then
+	$show "$mkdir ${xdir}$objdir"
+	$run $mkdir ${xdir}$objdir
+	status=$?
+	if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+	  exit $status
+	fi
+      fi
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	command="$command -o $lobj"
+      fi
+
+      $run $rm "$lobj" "$output_obj"
+
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	test -n "$output_obj" && $run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	$show "$mv $output_obj $lobj"
+	if $run $mv $output_obj $lobj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the PIC object to the libtool object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+        suppress_output=' >/dev/null 2>&1'
+      fi
+    else
+      # No PIC object so indicate it doesn't exist in the libtool
+      # object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      else
+	command="$base_compile $srcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$obj" "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	$show "$mv $output_obj $obj"
+	if $run $mv $output_obj $obj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+    else
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+    fi
+
+    $run $mv "${libobj}T" "${libobj}"
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $run $rm "$lockfile"
+    fi
+
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool link mode
+  link | relink)
+    modename="$modename: link"
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args="$nonopt"
+    base_compile="$nonopt $@"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -all-static | -static)
+	if test "X$arg" = "X-all-static"; then
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	else
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	fi
+	build_libtool_libs=no
+	build_old_libs=yes
+	prefer_static_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+	;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  compile_command="$compile_command @OUTPUT@"
+	  finalize_command="$finalize_command @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    compile_command="$compile_command @SYMFILE@"
+	    finalize_command="$finalize_command @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      dlfiles="$dlfiles $arg"
+	    else
+	      dlprefiles="$dlprefiles $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  if test ! -f "$arg"; then
+	    $echo "$modename: symbol file \`$arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat $save_arg`
+	    do
+#	      moreargs="$moreargs $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		# If there is no directory component, then add one.
+		case $arg in
+		*/* | *\\*) . $arg ;;
+		*) . ./$arg ;;
+		esac
+
+		if test -z "$pic_object" || \
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none && \
+		   test "$non_pic_object" = none; then
+		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+
+		# Extract subdirectory from the argument.
+		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		if test "X$xdir" = "X$arg"; then
+		  xdir=
+		else
+		  xdir="$xdir/"
+		fi
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      dlfiles="$dlfiles $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    dlprefiles="$dlprefiles $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  libobjs="$libobjs $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if test -z "$run"; then
+		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+		  exit $EXIT_FAILURE
+		else
+		  # Dry-run case.
+
+		  # Extract subdirectory from the argument.
+		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		  if test "X$xdir" = "X$arg"; then
+		    xdir=
+		  else
+		    xdir="$xdir/"
+		  fi
+
+		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+		  libobjs="$libobjs $pic_object"
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		fi
+	      fi
+	    done
+	  else
+	    $echo "$modename: link input file \`$save_arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    $echo "$modename: only absolute run-paths are allowed" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) rpath="$rpath $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) xrpath="$xrpath $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  compile_command="$compile_command $wl$qarg"
+	  finalize_command="$finalize_command $wl$qarg"
+	  continue
+	  ;;
+	xcclinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	shrext)
+  	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  compile_command="$compile_command $link_static_flag"
+	  finalize_command="$finalize_command $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+	continue
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+	  exit $EXIT_FAILURE
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  if test -z "$absdir"; then
+	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-mingw* | *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    deplibs="$deplibs -framework System"
+	    continue
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # gcc -m* arguments should be passed to the linker via $compiler_flags
+      # in order to pass architecture information to the linker
+      # (e.g. 32 vs 64-bit).  This may also be accomplished via -Wl,-mfoo
+      # but this is not reliable with gcc because gcc may use -mfoo to
+      # select a different linker, different libraries, etc, while
+      # -Wl,-mfoo simply passes -mfoo to the linker.
+      -m*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+        compile_command="$compile_command $arg"
+        finalize_command="$finalize_command $arg"
+        if test "$with_gcc" = "yes" ; then
+          compiler_flags="$compiler_flags $arg"
+        fi
+        continue
+        ;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # in order for the loader to find any dlls it needs.
+	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  $echo "$modename: only absolute run-paths are allowed" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) xrpath="$xrpath $dir" ;;
+	esac
+	continue
+	;;
+
+      -static)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Wl,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $wl$flag"
+	  linker_flags="$linker_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # Some other compiler flag.
+      -* | +*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+
+      *.$objext)
+	# A standard object.
+	objs="$objs $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  # If there is no directory component, then add one.
+	  case $arg in
+	  */* | *\\*) . $arg ;;
+	  *) . ./$arg ;;
+	  esac
+
+	  if test -z "$pic_object" || \
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none && \
+	     test "$non_pic_object" = none; then
+	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$arg"; then
+	    xdir=
+ 	  else
+	    xdir="$xdir/"
+	  fi
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		dlfiles="$dlfiles $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      dlprefiles="$dlprefiles $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    libobjs="$libobjs $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if test -z "$run"; then
+	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+	    exit $EXIT_FAILURE
+	  else
+	    # Dry-run case.
+
+	    # Extract subdirectory from the argument.
+	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$arg"; then
+	      xdir=
+	    else
+	      xdir="$xdir/"
+	    fi
+
+	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+	    libobjs="$libobjs $pic_object"
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d "$output_objdir"; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      status=$?
+      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+	exit $status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      duplicate_compiler_generated_deps=yes
+      ;;
+    *)
+      duplicate_compiler_generated_deps=$duplicate_deps
+      ;;
+    esac
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if test "X$duplicate_deps" = "Xyes" ; then
+	case "$libs " in
+	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  esac
+	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+    case $linkmode in
+    lib)
+	passes="conv link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+    for pass in $passes; do
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+	    continue
+	  fi
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if (${SED} -e '2q' $lib |
+                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		  library_names=
+		  old_library=
+		  case $lib in
+		  */* | *\\*) . $lib ;;
+		  *) . ./$lib ;;
+		  esac
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+		    test "X$ladir" = "X$lib" && ladir="."
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+	        ;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  *)
+	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    if test "$deplibs_check_method" != pass_all; then
+	      $echo
+	      $echo "*** Warning: Trying to link with static lib archive $deplib."
+	      $echo "*** I have the capability to make that library automatically link in when"
+	      $echo "*** you link to this library.  But I can only do this if you have a"
+	      $echo "*** shared version of the library, which you do not appear to have"
+	      $echo "*** because the file extensions .$libext of this argument makes me believe"
+	      $echo "*** that it is just a static archive that I should not used here."
+	    else
+	      $echo
+	      $echo "*** Warning: Linking the shared library $output against the"
+	      $echo "*** static library $deplib is not portable!"
+	      deplibs="$deplib $deplibs"
+	    fi
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      newdlprefiles="$newdlprefiles $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      newdlfiles="$newdlfiles $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  $echo "$modename: cannot find the library \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$ladir" = "X$lib" && ladir="."
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+
+	# Read the .la file
+	case $lib in
+	*/* | *\\*) . $lib ;;
+	*) . ./$lib ;;
+	esac
+
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	      exit $EXIT_FAILURE
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+              if test "X$duplicate_deps" = "Xyes" ; then
+	        case "$tmp_libs " in
+	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	        esac
+              fi
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	for l in $old_library $library_names; do
+	  linklib="$l"
+	done
+	if test -z "$linklib"; then
+	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
+	else
+	  dir="$ladir/$objdir"
+	  absdir="$abs_ladir/$objdir"
+	  # Remove this search path later
+	  notinst_path="$notinst_path $abs_ladir"
+	fi # $installed = yes
+	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
+	  else
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
+	  fi
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var"; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath " in
+	      *" $dir "*) ;;
+	      *" $absdir "*) ;;
+	      *) temp_rpath="$temp_rpath $dir" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	if test -n "$library_names" &&
+	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	  if test "$installed" = no; then
+	    notinst_deplibs="$notinst_deplibs $lib"
+	    need_relink=yes
+	  fi
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on
+	  # some systems (darwin)
+	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
+	    $echo
+	    if test "$linkmode" = prog; then
+	      $echo "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $echo "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $echo "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    realname="$2"
+	    shift; shift
+	    libname=`eval \\$echo \"$libname_spec\"`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw*)
+		major=`expr $current - $age`
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      $show "extracting exported symbol list from \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$extract_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      $show "generating import library for \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$old_archive_from_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a module then we can not link against
+		    # it, someone is ignoring the new warnings I added
+		    if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
+		      $echo "** Warning, lib $linklib is a module, not a shared library"
+		      if test -z "$old_library" ; then
+		        $echo
+		        $echo "** And there doesn't seem to be a static archive available"
+		        $echo "** The link will probably fail, sorry"
+		      else
+		        add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case "$libdir" in
+		    [\\/]*)
+		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      $echo "$modename: configuration error: unsupported hardcode properties"
+	      exit $EXIT_FAILURE
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes && \
+		 test "$hardcode_minus_L" != yes && \
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+	        add="$inst_prefix_dir$libdir/$linklib"
+	      else
+	        add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case "$libdir" in
+		  [\\/]*)
+		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    $echo
+	    $echo "*** Warning: This system can not link to static lib archive $lib."
+	    $echo "*** I have the capability to make that library automatically link in when"
+	    $echo "*** you link to this library.  But I can only do this if you have a"
+	    $echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      $echo "*** But as you try to build a module library, libtool will still create "
+	      $echo "*** a static module, that should work as long as the dlopening application"
+	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		$echo
+		$echo "*** However, this would only work if libtool was able to extract symbol"
+		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		$echo "*** not find such a program.  So, this module is probably useless."
+		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    convenience="$convenience $dir/$old_library"
+	    old_convenience="$old_convenience $dir/$old_library"
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+		test "X$dir" = "X$deplib" && dir="."
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if grep "^installed=no" $deplib > /dev/null; then
+		  path="$absdir/$objdir"
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  if test -z "$libdir"; then
+		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		    exit $EXIT_FAILURE
+		  fi
+		  if test "$absdir" != "$libdir"; then
+		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+		  fi
+		  path="$absdir"
+		fi
+		depdepl=
+		case $host in
+		*-*-darwin*)
+		  # we do not want to link against static libs,
+		  # but need to link against shared
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$path/$depdepl" ; then
+		      depdepl="$path/$depdepl"
+		    fi
+		    # do not add paths which are already there
+		    case " $newlib_search_path " in
+		    *" $path "*) ;;
+		    *) newlib_search_path="$newlib_search_path $path";;
+		    esac
+		  fi
+		  path=""
+		  ;;
+		*)
+		  path="-L$path"
+		  ;;
+		esac
+		;;
+	      -l*)
+		case $host in
+		*-*-darwin*)
+		  # Again, we only want to link against shared libraries
+		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+		  for tmp in $newlib_search_path ; do
+		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
+		      eval depdepl="$tmp/lib$tmp_libs.dylib"
+		      break
+		    fi
+		  done
+		  path=""
+		  ;;
+		*) continue ;;
+		esac
+		;;
+	      *) continue ;;
+	      esac
+	      case " $deplibs " in
+	      *" $depdepl "*) ;;
+	      *) deplibs="$depdepl $deplibs" ;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$deplibs $path" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  tmp_libs="$tmp_libs $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+      fi
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	if test "$module" = no; then
+	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+	  exit $EXIT_FAILURE
+	else
+	  $echo
+	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
+	  $echo "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
+      fi
+
+      if test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+      fi
+
+      set dummy $rpath
+      if test "$#" -gt 2; then
+	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	if test -n "$vinfo"; then
+	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+	fi
+
+	if test -n "$release"; then
+	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+	fi
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	IFS="$save_ifs"
+
+	if test -n "$8"; then
+	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$2"
+	  number_minor="$3"
+	  number_revision="$4"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows)
+	    current=`expr $number_major + $number_minor`
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    current=`expr $number_major + $number_minor - 1`
+	    age="$number_minor"
+	    revision="$number_minor"
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$2"
+	  revision="$3"
+	  age="$4"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	[0-9]*) ;;
+	*)
+	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $revision in
+	[0-9]*) ;;
+	*)
+	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $age in
+	[0-9]*) ;;
+	*)
+	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current";
+	  ;;
+
+	irix | nonstopux)
+	  major=`expr $current - $age + 1`
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    iface=`expr $revision - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  major=.`expr $current - $age`
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    iface=`expr $current - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  verstring="$verstring:${current}.0"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  major=`expr $current - $age`
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
+	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+      fi
+
+      if test "$mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$echo "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+	         then
+		   continue
+		 fi
+	       fi
+	       removelist="$removelist $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	if test -n "$removelist"; then
+	  $show "${rm}r $removelist"
+	  $run ${rm}r $removelist
+	fi
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      for path in $notinst_path; do
+	lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+	deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+	dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+      done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs -framework System"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+ 	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $rm conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $rm conftest
+	  $LTCC -o conftest conftest.c $deplibs
+	  if test "$?" -eq 0 ; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" -ne "0"; then
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    newdeplibs="$newdeplibs $i"
+		    i=""
+		    ;;
+		  esac
+	        fi
+		if test -n "$i" ; then
+		  libname=`eval \\$echo \"$libname_spec\"`
+		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		  set dummy $deplib_matches
+		  deplib_match=$2
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    $echo
+		    $echo "*** Warning: dynamic linker does not accept needed library $i."
+		    $echo "*** I have the capability to make that library automatically link in when"
+		    $echo "*** you link to this library.  But I can only do this if you have a"
+		    $echo "*** shared version of the library, which I believe you do not have"
+		    $echo "*** because a test_compile did reveal that the linker did not use it for"
+		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" != "0"; then
+		$rm conftest
+		$LTCC -o conftest conftest.c $i
+		# Did it work?
+		if test "$?" -eq 0 ; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      newdeplibs="$newdeplibs $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval \\$echo \"$libname_spec\"`
+		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		    set dummy $deplib_matches
+		    deplib_match=$2
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      newdeplibs="$newdeplibs $i"
+		    else
+		      droppeddeps=yes
+		      $echo
+		      $echo "*** Warning: dynamic linker does not accept needed library $i."
+		      $echo "*** I have the capability to make that library automatically link in when"
+		      $echo "*** you link to this library.  But I can only do this if you have a"
+		      $echo "*** shared version of the library, which you do not appear to have"
+		      $echo "*** because a test_compile did reveal that the linker did not use this one"
+		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  $echo
+		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
+		  $echo "***  make it link in!  You will probably need to install it or some"
+		  $echo "*** library that it depends on before this library will be fully"
+		  $echo "*** functional.  Installing it before continuing would be even better."
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method
+	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+            if test "$name" != "" && test  "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null \
+			 | grep " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+			 | ${SED} 10q \
+			 | $EGREP "$file_magic_regex" > /dev/null; then
+			newdeplibs="$newdeplibs $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval $echo \"$potent_lib\" 2>/dev/null \
+		        | ${SED} 10q \
+		        | $EGREP "$match_pattern_regex" > /dev/null; then
+		      newdeplibs="$newdeplibs $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+	    -e 's/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+	    done
+	  fi
+	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
+	    | grep . >/dev/null; then
+	    $echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      $echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    $echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	  fi
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library is the System framework
+	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    $echo
+	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
+	    $echo "*** a static module, that should work as long as the dlopening"
+	    $echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      $echo
+	      $echo "*** However, this would only work if libtool was able to extract symbol"
+	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      $echo "*** not find such a program.  So, this module is probably useless."
+	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    $echo "*** The inter-library dependencies that have been dropped here will be"
+	    $echo "*** automatically added whenever a program is linked with this library"
+	    $echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      $echo
+	      $echo "*** Since this library must not contain undefined symbols,"
+	      $echo "*** because either the platform does not support them or"
+	      $echo "*** it was explicitly requested with -no-undefined,"
+	      $echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	realname="$2"
+	shift; shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	for link
+	do
+	  linknames="$linknames $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $cmds; do
+	      IFS="$save_ifs"
+	      eval cmd=\"$cmd\"
+	      if len=`expr "X$cmd" : ".*"` &&
+	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	        $show "$cmd"
+	        $run eval "$cmd" || exit $?
+	        skipped_export=false
+	      else
+	        # The command line is too long to execute in one step.
+	        $show "using reloadable object file for export list..."
+	        skipped_export=:
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex"; then
+	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+		case " $convenience " in
+		*" $test_deplib "*) ;;
+		*)
+			tmp_deplibs="$tmp_deplibs $test_deplib"
+			;;
+		esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    $show "${rm}r $gentop"
+	    $run ${rm}r "$gentop"
+	    $show "$mkdir $gentop"
+	    $run $mkdir "$gentop"
+	    status=$?
+	    if test "$status" -ne 0 && test ! -d "$gentop"; then
+	      exit $status
+	    fi
+	    generated="$generated $gentop"
+
+	    for xlib in $convenience; do
+	      # Extract the objects.
+	      case $xlib in
+	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	      *) xabs=`pwd`"/$xlib" ;;
+	      esac
+	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	      xdir="$gentop/$xlib"
+
+	      $show "${rm}r $xdir"
+	      $run ${rm}r "$xdir"
+	      $show "$mkdir $xdir"
+	      $run $mkdir "$xdir"
+	      status=$?
+	      if test "$status" -ne 0 && test ! -d "$xdir"; then
+		exit $status
+	      fi
+	      # We will extract separately just the conflicting names and we will no
+	      # longer touch any unique names. It is faster to leave these extract
+	      # automatically by $AR in one run.
+	      $show "(cd $xdir && $AR x $xabs)"
+	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	      if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+		:
+	      else
+		$echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+		$echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+		$AR t "$xabs" | sort | uniq -cd | while read -r count name
+		do
+		  i=1
+		  while test "$i" -le "$count"
+		  do
+		   # Put our $i before any first dot (extension)
+		   # Never overwrite any file
+		   name_to="$name"
+		   while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		   do
+		     name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		   done
+		   $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		   $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		   i=`expr $i + 1`
+		  done
+		done
+	      fi
+
+	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+	    done
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	  eval test_cmds=\"$archive_expsym_cmds\"
+	  cmds=$archive_expsym_cmds
+	else
+	  eval test_cmds=\"$archive_cmds\"
+	  cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise.
+	  $echo "creating reloadable object files..."
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  delfiles=
+	  last_robj=
+	  k=1
+	  output=$output_objdir/$save_output-${k}.$objext
+	  # Loop over the list of objects to be linked.
+	  for obj in $save_libobjs
+	  do
+	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+	    if test "X$objlist" = X ||
+	       { len=`expr "X$test_cmds" : ".*"` &&
+		 test "$len" -le "$max_cmd_len"; }; then
+	      objlist="$objlist $obj"
+	    else
+	      # The command $test_cmds is almost too long, add a
+	      # command to the queue.
+	      if test "$k" -eq 1 ; then
+		# The first file doesn't have a previous command to add.
+		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+	      else
+		# All subsequent reloadable object files will link in
+		# the last one created.
+		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+	      fi
+	      last_robj=$output_objdir/$save_output-${k}.$objext
+	      k=`expr $k + 1`
+	      output=$output_objdir/$save_output-${k}.$objext
+	      objlist=$obj
+	      len=1
+	    fi
+	  done
+	  # Handle the remaining objects by creating one last
+	  # reloadable object file.  All subsequent reloadable object
+	  # files will link in the last one created.
+	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+	  if ${skipped_export-false}; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    libobjs=$output
+	    # Append the command to create the export file.
+	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+          fi
+
+	  # Set up a command to remove the reloadale object files
+	  # after they are used.
+	  i=0
+	  while test "$i" -lt "$k"
+	  do
+	    i=`expr $i + 1`
+	    delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+	  done
+
+	  $echo "creating a temporary reloadable object file: $output"
+
+	  # Loop through the commands generated above and execute them.
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $concat_cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    cmds=$archive_expsym_cmds
+	  else
+	    cmds=$archive_cmds
+	    fi
+	  fi
+
+	  # Append the command to remove the reloadable object files
+	  # to the just-reset $cmds.
+	  eval cmds=\"\$cmds~\$rm $delfiles\"
+	fi
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+      fi
+
+      case $output in
+      *.lo)
+	if test -n "$objs$old_deplibs"; then
+	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	libobj="$output"
+	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $run $rm $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+	else
+	  gentop="$output_objdir/${obj}x"
+	  $show "${rm}r $gentop"
+	  $run ${rm}r "$gentop"
+	  $show "$mkdir $gentop"
+	  $run $mkdir "$gentop"
+	  status=$?
+	  if test "$status" -ne 0 && test ! -d "$gentop"; then
+	    exit $status
+	  fi
+	  generated="$generated $gentop"
+
+	  for xlib in $convenience; do
+	    # Extract the objects.
+	    case $xlib in
+	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	    *) xabs=`pwd`"/$xlib" ;;
+	    esac
+	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	    xdir="$gentop/$xlib"
+
+	    $show "${rm}r $xdir"
+	    $run ${rm}r "$xdir"
+	    $show "$mkdir $xdir"
+	    $run $mkdir "$xdir"
+	    status=$?
+	    if test "$status" -ne 0 && test ! -d "$xdir"; then
+	      exit $status
+	    fi
+	    # We will extract separately just the conflicting names and we will no
+	    # longer touch any unique names. It is faster to leave these extract
+	    # automatically by $AR in one run.
+	    $show "(cd $xdir && $AR x $xabs)"
+	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	    if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	      :
+	    else
+	      $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	      $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	      $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	      do
+		i=1
+		while test "$i" -le "$count"
+		do
+		 # Put our $i before any first dot (extension)
+		 # Never overwrite any file
+		 name_to="$name"
+		 while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		 do
+		   name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		 done
+		 $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		 $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		 i=`expr $i + 1`
+		done
+	      done
+	    fi
+
+	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+	  done
+	fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      cmds=$reload_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $run eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	cmds=$reload_cmds
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+      fi
+
+      if test -n "$gentop"; then
+	$show "${rm}r $gentop"
+	$run ${rm}r $gentop
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+	   test "$dlopen_self_static" = unknown; then
+	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+	fi
+      fi
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	;;
+      esac
+
+      case $host in
+      *darwin*)
+        # Don't allow lazy linking, it breaks C++ global constructors
+        if test "$tagname" = CXX ; then
+        compile_command="$compile_command ${wl}-bind_at_load"
+        finalize_command="$finalize_command ${wl}-bind_at_load"
+        fi
+        ;;
+      esac
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	  dlsyms="${outputname}S.c"
+	else
+	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+	fi
+      fi
+
+      if test -n "$dlsyms"; then
+	case $dlsyms in
+	"") ;;
+	*.c)
+	  # Discover the nlist of each of the dlfiles.
+	  nlist="$output_objdir/${outputname}.nm"
+
+	  $show "$rm $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Parse the name list into a source file.
+	  $show "creating $output_objdir/$dlsyms"
+
+	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+	  if test "$dlself" = yes; then
+	    $show "generating symbol list for \`$output'"
+
+	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+	    # Add our own program objects to the symbol list.
+	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	    for arg in $progfiles; do
+	      $show "extracting global C symbols from \`$arg'"
+	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	    done
+
+	    if test -n "$exclude_expsyms"; then
+	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    if test -n "$export_symbols_regex"; then
+	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    # Prepare the list of exported symbols
+	    if test -z "$export_symbols"; then
+	      export_symbols="$output_objdir/$output.exp"
+	      $run $rm $export_symbols
+	      $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	    else
+	      $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+	      $run eval 'mv "$nlist"T "$nlist"'
+	    fi
+	  fi
+
+	  for arg in $dlprefiles; do
+	    $show "extracting global C symbols from \`$arg'"
+	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+	    $run eval '$echo ": $name " >> "$nlist"'
+	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -z "$run"; then
+	    # Make sure we have at least an empty file.
+	    test -f "$nlist" || : > "$nlist"
+
+	    if test -n "$exclude_expsyms"; then
+	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	      $mv "$nlist"T "$nlist"
+	    fi
+
+	    # Try sorting and uniquifying the output.
+	    if grep -v "^: " < "$nlist" |
+		if sort -k 3 </dev/null >/dev/null 2>&1; then
+		  sort -k 3
+		else
+		  sort +2
+		fi |
+		uniq > "$nlist"S; then
+	      :
+	    else
+	      grep -v "^: " < "$nlist" > "$nlist"S
+	    fi
+
+	    if test -f "$nlist"S; then
+	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+	    else
+	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+	    fi
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	  fi
+
+	  pic_flag_for_symtable=
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+	    esac;;
+	  *-*-hpux*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag";;
+	    esac
+	  esac
+
+	  # Now compile the dynamic symbol file.
+	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+	  # Clean up the generated files.
+	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Transform the symbol file into the correct name.
+	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  ;;
+	*)
+	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      else
+	# We keep going just in case the user didn't refer to
+	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+	# really was required.
+
+	# Nullify the symbol file.
+	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      fi
+
+      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+	# Replace the output file specification.
+	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	$show "$link_command"
+	$run eval "$link_command"
+	status=$?
+
+	# Delete the generated files.
+	if test -n "$dlsyms"; then
+	  $show "$rm $output_objdir/${outputname}S.${objext}"
+	  $run $rm "$output_objdir/${outputname}S.${objext}"
+	fi
+
+	exit $status
+      fi
+
+      if test -n "$shlibpath_var"; then
+	# We should set the shlibpath_var
+	rpath=
+	for dir in $temp_rpath; do
+	  case $dir in
+	  [\\/]* | [A-Za-z]:[\\/]*)
+	    # Absolute path.
+	    rpath="$rpath$dir:"
+	    ;;
+	  *)
+	    # Relative path: add a thisdir entry.
+	    rpath="$rpath\$thisdir/$dir:"
+	    ;;
+	  esac
+	done
+	temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$run $rm $output
+	# Link the executable and exit
+	$show "$link_command"
+	$run eval "$link_command" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+	$echo "$modename: \`$output' will be relinked during installation" 1>&2
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      $show "$link_command"
+      $run eval "$link_command" || exit $?
+
+      # Now create the wrapper script.
+      $show "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $echo for shipping.
+      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+	case $progpath in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+	esac
+	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if our run command is non-null.
+      if test -z "$run"; then
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    cwrappersource=`$echo ${objdir}/lt-${output}.c`
+	    cwrapper=`$echo ${output}.exe`
+	    $rm $cwrappersource $cwrapper
+	    trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "/bin/sh $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+	    cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int i;
+
+  program_name = (char *) xstrdup ((char *) basename (argv[0]));
+  newargz = XMALLOC(char *, argc+2);
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  newargz[0] = "$SHELL";
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+  newargz[1] = fnqualify(argv[0]);
+  /* we know the script has the same name, without the .exe */
+  /* so make sure newargz[1] doesn't end in .exe */
+  strendzap(newargz[1],".exe");
+  for (i = 1; i < argc; i++)
+    newargz[i+1] = xstrdup(argv[i]);
+  newargz[argc+1] = NULL;
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  execv("$SHELL",newargz);
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void * p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha (name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+  size_t size;
+  char *p;
+  char tmp[LT_PATHMAX + 1];
+
+  assert(path != NULL);
+
+  /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha (path[0]) && path[1] == ':')
+    return xstrdup (path);
+#endif
+  if (IS_DIR_SEPARATOR (path[0]))
+    return xstrdup (path);
+
+  /* prepend the current directory */
+  /* doesn't handle '~' */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+  p = XMALLOC(char, size);
+  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+  return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert(str != NULL);
+  assert(pat != NULL);
+
+  len = strlen(str);
+  patlen = strlen(pat);
+
+  if (patlen <= len)
+  {
+    str += len - patlen;
+    if (strcmp(str, pat) == 0)
+      *str = '\0';
+  }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+          const char * message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+	  # we should really use a build-platform specific compiler
+	  # here, but OTOH, the wrappers (shell script and this C one)
+	  # are only useful if you want to execute the "real" binary.
+	  # Since the "real" binary is built for $host, then this
+	  # wrapper might as well be built for $host, too.
+	  $run $LTCC -s -o $cwrapper $cwrappersource
+	  ;;
+	esac
+	$rm $output
+	trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+	$echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+	$echo >> $output "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $echo >> $output "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" || \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $mkdir \"\$progdir\"
+    else
+      $rm \"\$progdir/\$file\"
+    fi"
+
+	  $echo >> $output "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$echo \"\$relink_command_output\" >&2
+	$rm \"\$progdir/\$file\"
+	exit $EXIT_FAILURE
+      fi
+    fi
+
+    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $rm \"\$progdir/\$program\";
+      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $rm \"\$progdir/\$file\"
+  fi"
+	else
+	  $echo >> $output "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$echo >> $output "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $echo >> $output "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	# fixup the dll searchpath if we need to.
+	if test -n "$dllsearchpath"; then
+	  $echo >> $output "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	$echo >> $output "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+	case $host in
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
+	  $echo >> $output "\
+      exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	*)
+	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+	esac
+	$echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      exit $EXIT_FAILURE
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi\
+"
+	chmod +x $output
+      fi
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	$show "${rm}r $gentop"
+	$run ${rm}r "$gentop"
+	$show "$mkdir $gentop"
+	$run $mkdir "$gentop"
+	status=$?
+	if test "$status" -ne 0 && test ! -d "$gentop"; then
+	  exit $status
+	fi
+	generated="$generated $gentop"
+
+	# Add in members from convenience archives.
+	for xlib in $addlibs; do
+	  # Extract the objects.
+	  case $xlib in
+	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	  *) xabs=`pwd`"/$xlib" ;;
+	  esac
+	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	  xdir="$gentop/$xlib"
+
+	  $show "${rm}r $xdir"
+	  $run ${rm}r "$xdir"
+	  $show "$mkdir $xdir"
+	  $run $mkdir "$xdir"
+	  status=$?
+	  if test "$status" -ne 0 && test ! -d "$xdir"; then
+	    exit $status
+	  fi
+	  # We will extract separately just the conflicting names and we will no
+	  # longer touch any unique names. It is faster to leave these extract
+	  # automatically by $AR in one run.
+	  $show "(cd $xdir && $AR x $xabs)"
+	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	  if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	    $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	    $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	    do
+	      i=1
+	      while test "$i" -le "$count"
+	      do
+	       # Put our $i before any first dot (extension)
+	       # Never overwrite any file
+	       name_to="$name"
+	       while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+	       do
+		 name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+	       done
+	       $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+	       $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+	       i=`expr $i + 1`
+	      done
+	    done
+	  fi
+
+	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+	done
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+	eval cmds=\"$old_archive_cmds\"
+
+	if len=`expr "X$cmds" : ".*"` &&
+	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  $echo "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+	  # encoded into archives.  This makes 'ar r' malfunction in
+	  # this piecewise linking case whenever conflicting object
+	  # names appear in distinct ar calls; check, warn and compensate.
+	    if (for obj in $save_oldobjs
+	    do
+	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+	    $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+	    AR_FLAGS=cq
+	  fi
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  for obj in $save_oldobjs
+	  do
+	    oldobjs="$objlist $obj"
+	    objlist="$objlist $obj"
+	    eval test_cmds=\"$old_archive_cmds\"
+	    if len=`expr "X$test_cmds" : ".*"` &&
+	       test "$len" -le "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+	        RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+        eval cmd=\"$cmd\"
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      $show "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+
+      # Only create the output if not a dry run.
+      if test -z "$run"; then
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		if test -z "$libdir"; then
+		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlfiles="$newdlfiles $libdir/$name"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlprefiles="$newdlprefiles $libdir/$name"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlfiles="$newdlfiles $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlprefiles="$newdlprefiles $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $rm $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
+	  $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $echo >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      fi
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool install mode
+  install)
+    modename="$modename: install"
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg="$nonopt"
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case $arg in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+	files="$files $dest"
+	dest="$arg"
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f) prev="-f" ;;
+      -g) prev="-g" ;;
+      -m) prev="-m" ;;
+      -o) prev="-o" ;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*) ;;
+
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  prev=
+	else
+	  dest="$arg"
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	$echo "$modename: no file or destination specified" 1>&2
+      else
+	$echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test "$#" -gt 2; then
+	$echo "$modename: \`$dest' is not a directory" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	staticlibs="$staticlibs $file"
+	;;
+
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	library_names=
+	old_library=
+	relink_command=
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  esac
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+	test "X$dir" = "X$file/" && dir=
+	dir="$dir$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  if test "$inst_prefix_dir" = "$destdir"; then
+	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  $echo "$modename: warning: relinking \`$file'" 1>&2
+	  $show "$relink_command"
+	  if $run eval "$relink_command"; then :
+	  else
+	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names
+	if test -n "$2"; then
+	  realname="$2"
+	  shift
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  $show "$install_prog $dir/$srcname $destdir/$realname"
+	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+	  if test -n "$stripme" && test -n "$striplib"; then
+	    $show "$striplib $destdir/$realname"
+	    $run eval "$striplib $destdir/$realname" || exit $?
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    for linkname
+	    do
+	      if test "$linkname" != "$realname"; then
+		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+	      fi
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  cmds=$postinstall_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+	fi
+
+	# Install the pseudo-library for information purposes.
+	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	instname="$dir/$name"i
+	$show "$install_prog $instname $destdir/$name"
+	$run eval "$install_prog $instname $destdir/$name" || exit $?
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	if test -n "$destfile"; then
+	  $show "$install_prog $file $destfile"
+	  $run eval "$install_prog $file $destfile" || exit $?
+	fi
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+	  $show "$install_prog $staticobj $staticdest"
+	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      file=`$echo $file|${SED} 's,.exe$,,'`
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin*|*mingw*)
+	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
+	  esac
+
+	  # Check the variables that should have been set.
+	  if test -z "$notinst_deplibs"; then
+	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      # If there is no directory component, then add one.
+	      case $lib in
+	      */* | *\\*) . $lib ;;
+	      *) . ./$lib ;;
+	      esac
+	    fi
+	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
+	  esac
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    if test "$finalize" = yes && test -z "$run"; then
+	      tmpdir="/tmp"
+	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
+	      tmpdir="$tmpdir/libtool-$$"
+	      save_umask=`umask`
+	      umask 0077
+	      if $mkdir "$tmpdir"; then
+	        umask $save_umask
+	      else
+	        umask $save_umask
+		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+		continue
+	      fi
+	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+	      outputname="$tmpdir/$file"
+	      # Replace the output file specification.
+	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+	      $show "$relink_command"
+	      if $run eval "$relink_command"; then :
+	      else
+		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+		${rm}r "$tmpdir"
+		continue
+	      fi
+	      file="$outputname"
+	    else
+	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+	    fi
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyways
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+	    ;;
+	  esac
+	  ;;
+	esac
+	$show "$install_prog$stripme $file $destfile"
+	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+	test -n "$outputname" && ${rm}r "$tmpdir"
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	$show "$old_striplib $oldlib"
+	$run eval "$old_striplib $oldlib" || exit $?
+      fi
+
+      # Do each command in the postinstall commands.
+      cmds=$old_postinstall_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+	libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  cmds=$finish_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+	  done
+	  IFS="$save_ifs"
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = : && exit $EXIT_SUCCESS
+
+    $echo "----------------------------------------------------------------------"
+    $echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $echo "   $libdir"
+    done
+    $echo
+    $echo "If you ever happen to want to link against installed libraries"
+    $echo "in a given directory, LIBDIR, you must either use libtool, and"
+    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $echo
+    $echo "See any operating system documentation about shared libraries for"
+    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    $echo "----------------------------------------------------------------------"
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit $EXIT_FAILURE
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+	$echo "$modename: \`$file' is not a file" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+
+      dir=
+      case $file in
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  dir="$dir/$objdir"
+	else
+	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+	;;
+
+      *)
+	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      if test "${save_LC_ALL+set}" = set; then
+	LC_ALL="$save_LC_ALL"; export LC_ALL
+      fi
+      if test "${save_LANG+set}" = set; then
+	LANG="$save_LANG"; export LANG
+      fi
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+	$echo "export $shlibpath_var"
+      fi
+      $echo "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool clean and uninstall mode
+  clean | uninstall)
+    modename="$modename: $mode"
+    rm="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) rm="$rm $arg"; rmforce=yes ;;
+      -*) rm="$rm $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    if test -z "$rm"; then
+      $echo "$modename: you must specify an RM program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$dir" = "X$file"; then
+	dir=.
+	objdir="$origobjdir"
+      else
+	objdir="$dir/$origobjdir"
+      fi
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if (test -L "$file") >/dev/null 2>&1 \
+	|| (test -h "$file") >/dev/null 2>&1 \
+	|| test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  . $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    rmfiles="$rmfiles $objdir/$n"
+	  done
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+	  if test "$mode" = uninstall; then
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      cmds=$postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      cmds=$old_postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+	  # Read the .lo file
+	  . $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" \
+	     && test "$pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" \
+	     && test "$non_pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    file=`$echo $file|${SED} 's,.exe$,,'`
+	    noexename=`$echo $name|${SED} 's,.exe$,,'`
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    rmfiles="$rmfiles $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	    relink_command=
+	    . $dir/$noexename
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      rmfiles="$rmfiles $objdir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	$show "rmdir $dir"
+	$run rmdir $dir >/dev/null 2>&1
+      fi
+    done
+
+    exit $exit_status
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+  esac
+
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --tag=TAG         use configuration variables from tag TAG
+    --version         print version information
+
+MODE must be one of the following:
+
+      clean           remove files from the build directory
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool at gnu.org>."
+  exit $EXIT_SUCCESS
+  ;;
+
+clean)
+  $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+compile)
+  $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -static           always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+  ;;
+
+execute)
+  $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+  ;;
+
+finish)
+  $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+  ;;
+
+install)
+  $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+  ;;
+
+link)
+  $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+		    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+		    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -static           do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+		    specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+  ;;
+
+uninstall)
+  $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+*)
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+  ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit $EXIT_SUCCESS
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:

Added: desktop/trunk/thunar/branches/upstream/current/missing
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/missing	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/missing	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,353 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2004-09-07.08
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# 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, 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.
+
+# 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.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit 0
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit 0
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case "$1" in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f y.tab.h ]; then
+	echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: desktop/trunk/thunar/branches/upstream/current/missing
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/mkinstalldirs
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/mkinstalldirs	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/mkinstalldirs	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman at prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here


Property changes on: desktop/trunk/thunar/branches/upstream/current/mkinstalldirs
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+pixmapsdir = $(datadir)/pixmaps/Thunar
+pixmaps_DATA =								\
+	Thunar-about-logo.png
+
+EXTRA_DIST =								\
+	$(pixmaps_DATA)
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/pixmaps/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,462 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pixmapsdir)"
+pixmapsDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pixmaps_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+pixmapsdir = $(datadir)/pixmaps/Thunar
+pixmaps_DATA = \
+	Thunar-about-logo.png
+
+EXTRA_DIST = \
+	$(pixmaps_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(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  pixmaps/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  pixmaps/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-pixmapsDATA: $(pixmaps_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pixmapsdir)" || $(mkdir_p) "$(DESTDIR)$(pixmapsdir)"
+	@list='$(pixmaps_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(pixmapsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pixmapsdir)/$$f'"; \
+	  $(pixmapsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pixmapsdir)/$$f"; \
+	done
+
+uninstall-pixmapsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pixmaps_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pixmapsdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pixmapsdir)/$$f"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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 $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(pixmapsdir)"; 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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pixmapsDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pixmapsDATA
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-pixmapsDATA \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-info-am uninstall-pixmapsDATA
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/pixmaps/Thunar-about-logo.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/pixmaps/Thunar-about-logo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/ChangeLog
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/ChangeLog	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/ChangeLog	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,105 @@
+2005-10-30  Daichi Kawahata <daichi at xfce.org>
+
+	* Thunar.pot: Added again, because it requires for translators
+	  who are grabbing PO files from `trunk-po' module, without POT
+	  file, it's hard to create initial PO file from command line
+	  (e.g. msginit) or with GUI tools (e.g. KBabel, poEdit).
+
+2005-10-16  Daichi Kawahata <daichi at xfce.org>
+
+	* de.po, el.po, es.po, hu.po, ja.po: Updated.
+
+2005-10-14  Daichi Kawahata <daichi at xfce.org>
+
+	* POTFILES.in: Added missing files.
+	* de.po, el.po, es.po, hu.po, ja.po: Updated with the latest source.
+
+2005-10-10  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Updated Japanese translations.
+
+2005-10-06  Daichi Kawahata <daichi at xfce.org>
+
+	* es.po: Fixed an error.
+	* ja.po: Updated Japanese translations.
+
+2005-10-03  Benedikt Meurer <benny at xfce.org>
+
+	* es.po: Add Spanish translations, thanks to Pablo Hernandez-M.
+	  Saiz <homeless3d at gmail.com>.
+
+2005-09-30  Stavros Giannouris <stavrosg2002 at freemail.gr>
+
+	* el.po: Updated Greek translations.
+
+2005-09-27  Benedikt Meurer <benny at xfce.org>
+
+	* de.po: Add initial, incomplete translations.
+	* el.po, hu.po, ja.po: Update translations.
+
+2005-09-24  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Updated Japanese translations.
+	* ChangeLog: Style change so that Emacs also can color this file
+	  correctly.
+
+2005-09-22  Benedikt Meurer <benny at xfce.org>
+
+	* de.po, el.po, hu.po, ja.po: Update po files.
+
+2005-09-15  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Corrected a typo. etc.
+
+2005-09-14  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Updated Japanese translations.
+
+2005-09-11  Benedikt Meurer <benny at xfce.org>
+
+	* POTFILES.in: Add thunarx/thunarx-property-page.c here.
+
+2005-08-28  Benedikt Meurer <benny at xfce.org>
+
+	* POTFILES.in: Remove thunar-vfs-mime.{c,h}.
+	* de.po, el.po, hu.po, ja.po: Update .po files.
+
+2005-08-23  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Updated Japanese translations.
+
+2005-08-18  Daichi Kawahata <daichi at xfce.org>
+
+	* ja.po: Updated Japanese translations.
+
+2005-08-11  Benedikt Meurer <benny at xfce.org>
+
+	* POTFILES.in: Add missing source files here, and remove obsolete
+	  files. Add desktop file for Thunar.
+
+2005-08-07  Benedikt Meurer <benny at xfce.org>
+
+	* ja.po: Add initial Japanese translations, thanks to Daichi
+	  Kawahata <daichi at xfce.org>. This fixes #1004.
+
+2005-08-05  Stavros Giannouris <stavrosg2002 at freemail.gr>
+
+	* el.po: Added a mostly complete Greek translation for Thunar.
+
+2005-08-04  Stavros Giannouris <stavrosg2002 at freemail.gr>
+
+	* el.po: Added el.po for Thunar.
+
+2005-08-04  Stavros Giannouris <stavrosg2002 at freemail.gr>
+
+	* de.po, hu.po: First test commit.
+
+2005-08-03  Benedikt Meurer <benny at xfce.org>
+
+	* hu.po: Add Hungarian translations, thanks to Szervac Attila
+	  <sas at 321.hu>.
+
+2005-08-03  Benedikt Meurer <benny at xfce.org>
+
+	* ChangeLog, POTFILES.in, de.po: Add i18n support.
+

Added: desktop/trunk/thunar/branches/upstream/current/po/Makefile.in.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/Makefile.in.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/Makefile.in.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,257 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper at 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 at redhat.com> to use GETTEXT_PACKAGE
+#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob at ximian.com> to install
+#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+ at SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+libdir = @libdir@
+localedir = $(libdir)/locale
+gnulocaledir = $(datadir)/locale
+gettextsrcdir = $(datadir)/glib-2.0/gettext/po
+subdir = po
+install_sh = @install_sh@
+mkdir_p = @mkdir_p@
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+XGETTEXT = @XGETTEXT@ $(XGETTEXT_ARGS)
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = XGETTEXT_ARGS="$(XGETTEXT_ARGS)" INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT   = XGETTEXT_ARGS="$(XGETTEXT_ARGS)" INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = 
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in \
+$(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+	$(COMPILE) $<
+
+.po.pox:
+	$(MAKE) $(GETTEXT_PACKAGE).pot
+	$(MSGMERGE) $< $(top_builddir)/po/$(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- at USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+	$(GENPOT)
+
+install: install-exec install-data
+install-exec:
+install-data: install-data- at USE_NLS@
+install-data-no: all
+install-data-yes: all
+	if test -n "$(MKINSTALLDIRS)"; then \
+	  $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
+	else \
+	  $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
+	fi
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  case "$$cat" in \
+	    *.gmo) destdir=$(gnulocaledir);; \
+	    *)     destdir=$(localedir);; \
+	  esac; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
+	  if test -n "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $$dir; \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+	  fi; \
+	  if test -r $$cat; then \
+	    $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+	  else \
+	    $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $(srcdir)/$$cat as" \
+		 "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+	  fi; \
+	  if test -r $$cat.m; then \
+	    $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	    echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+	  else \
+	    if test -r $(srcdir)/$$cat.m ; then \
+	      $(INSTALL_DATA) $(srcdir)/$$cat.m \
+		$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	      echo "installing $(srcdir)/$$cat as" \
+		   "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+	    else \
+	      true; \
+	    fi; \
+	  fi; \
+	done
+	if test "$(PACKAGE)" = "glib"; then \
+	  if test -n "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
+	  fi; \
+	  $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+			  $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+	else \
+	  : ; \
+	fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	done
+	if test "$(PACKAGE)" = "glib"; then \
+	  rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+	fi
+
+check: all
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+	rm -f core core.* *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+	rm -fr *.o
+	rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+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 $(GMOFILES)
+
+distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES) $(GETTEXT_PACKAGE).pot
+	dists="$(DISTFILES)"; \
+	for file in $$dists; do \
+	  ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+	    || cp -p $(srcdir)/$$file $(distdir); \
+	done
+
+update-po: Makefile
+	$(MAKE) $(GETTEXT_PACKAGE).pot
+	tmpdir=`pwd`; \
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  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 $$cat failed!"; \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  fi; \
+	done
+
+# POTFILES is created from POTFILES.in by stripping comments, empty lines
+# and Intltool tags (enclosed in square brackets), and appending a full
+# relative path to them
+POTFILES: POTFILES.in
+	( if test 'x$(srcdir)' != 'x.'; then \
+	    posrcprefix='$(top_srcdir)/'; \
+	  else \
+	    posrcprefix="../"; \
+	  fi; \
+	  rm -f $@-t $@ \
+	    && (sed -e '/^#/d' 						\
+		    -e "s/^\[.*\] +//" 					\
+		    -e '/^[ 	]*$$/d' 				\
+		    -e "s at .*@	$$posrcprefix& \\\\@" < $(srcdir)/$@.in	\
+		| sed -e '$$s/\\$$//') > $@-t \
+	    && chmod a-w $@-t \
+	    && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+	cd .. \
+	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+	       $(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:

Added: desktop/trunk/thunar/branches/upstream/current/po/POTFILES.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/POTFILES.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/POTFILES.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,75 @@
+thunar-vfs/thunar-vfs-config.c
+thunar-vfs/thunar-vfs-exec.c
+thunar-vfs/thunar-vfs-info.c
+thunar-vfs/thunar-vfs-interactive-job.c
+thunar-vfs/thunar-vfs-job.c
+thunar-vfs/thunar-vfs-link-job.c
+thunar-vfs/thunar-vfs-listdir-job.c
+thunar-vfs/thunar-vfs-mime-application.c
+thunar-vfs/thunar-vfs-mime-cache.c
+thunar-vfs/thunar-vfs-mime-database.c
+thunar-vfs/thunar-vfs-mime-info.c
+thunar-vfs/thunar-vfs-mime-legacy.c
+thunar-vfs/thunar-vfs-mime-parser.c
+thunar-vfs/thunar-vfs-mime-provider.c
+thunar-vfs/thunar-vfs-mime-sniffer.c
+thunar-vfs/thunar-vfs-mkdir-job.c
+thunar-vfs/thunar-vfs-monitor.c
+thunar-vfs/thunar-vfs-path.c
+thunar-vfs/thunar-vfs-scandir.c
+thunar-vfs/thunar-vfs-thumb-jpeg.c
+thunar-vfs/thunar-vfs-thumb.c
+thunar-vfs/thunar-vfs-transfer-job.c
+thunar-vfs/thunar-vfs-unlink-job.c
+thunar-vfs/thunar-vfs-user.c
+thunar-vfs/thunar-vfs-util.c
+thunar-vfs/thunar-vfs-volume-bsd.c
+thunar-vfs/thunar-vfs-volume-sysv.c
+thunar-vfs/thunar-vfs-xfer.c
+thunar-vfs/thunar-vfs.c
+
+thunar/main.c
+thunar/thunar-application.c
+thunar/thunar-chooser-dialog.c
+thunar/thunar-chooser-model.c
+thunar/thunar-clipboard-manager.c
+thunar/thunar-create-dialog.c
+thunar/thunar-details-view.c
+thunar/thunar-dialogs.c
+thunar/thunar-dnd.c
+thunar/thunar-emblem-chooser.c
+thunar/thunar-extension-manager.c
+thunar/thunar-favourites-model.c
+thunar/thunar-favourites-pane.c
+thunar/thunar-favourites-view.c
+thunar/thunar-file.c
+thunar/thunar-folder.c
+thunar/thunar-gdk-pixbuf-extensions.c
+thunar/thunar-gtk-extensions.c
+thunar/thunar-icon-factory.c
+thunar/thunar-icon-renderer.c
+thunar/thunar-icon-view.c
+thunar/thunar-launcher.c
+thunar/thunar-list-model.c
+thunar/thunar-location-bar.c
+thunar/thunar-location-buttons.c
+thunar/thunar-location-dialog.c
+thunar/thunar-location-entry.c
+thunar/thunar-metafile.c
+thunar/thunar-navigator.c
+thunar/thunar-open-with-action.c
+thunar/thunar-path-entry.c
+thunar/thunar-preferences.c
+thunar/thunar-progress-dialog.c
+thunar/thunar-properties-dialog.c
+thunar/thunar-side-pane.c
+thunar/thunar-standard-view.c
+thunar/thunar-statusbar.c
+thunar/thunar-text-renderer.c
+thunar/thunar-thumbnail-generator.c
+thunar/thunar-view.c
+thunar/thunar-window.c
+
+thunarx/thunarx-property-page.c
+
+Thunar.desktop.in

Added: desktop/trunk/thunar/branches/upstream/current/po/de.gmo
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/po/de.gmo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/de.po
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/de.po	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/de.po	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1341 @@
+# German translations for Thunar.
+# Copyright (C) 2004-2005 Benedikt Meurer.
+# This file is distributed under the same license as the Thunar package.
+# Benedikt Meurer <benny at xfce.org>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Thunar 0.1.2svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-14 15:38+0100\n"
+"PO-Revision-Date: 2005-10-06 22:03+0900\n"
+"Last-Translator: Benedikt Meurer <benny at xfce.org>\n"
+"Language-Team: German <de at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../thunar-vfs/thunar-vfs-info.c:261
+msgid "No Exec field specified"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:269
+msgid "Unable to parse file"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:359
+msgid "Invalid file name"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:381
+msgid "Invalid desktop file"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:615
+#, c-format
+msgid "Failed to stat file `%s': %s"
+msgstr ""
+
+#. ask the user whether we should remove the target first
+#. ask the user whether to overwrite
+#: ../thunar-vfs/thunar-vfs-link-job.c:176
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:685
+#, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to overwrite it?"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-link-job.c:200
+#, c-format
+msgid "Failed to remove `%s': %s"
+msgstr ""
+
+#. ask the user whether to skip this file (used for cancellation only)
+#. ask the user whether to skip
+#: ../thunar-vfs/thunar-vfs-link-job.c:212
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:705
+#, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mime-database.c:1625
+#, c-format
+msgid "Failed to load application from file %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mime-info.c:228
+#, c-format
+msgid "%s document"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mkdir-job.c:165
+#, c-format
+msgid "Unable to create directory `%s': %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:657
+msgid "Path too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:761
+msgid "URI too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:144 ../thunar/thunar-details-view.c:150
+msgid "Size"
+msgstr "Größe"
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:145
+msgid "The desired thumbnail size"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:233
+msgid "Collecting files..."
+msgstr ""
+
+#. display info message
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:295
+#, fuzzy
+msgid "Deleting directories..."
+msgstr "Detailierte Verzeichnisansicht"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:315
+#, c-format
+msgid "Unable to remove directory `%s': %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:593
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:639
+#, c-format
+msgid "Unable to remove `%s': %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:831
+msgid "Cannot transfer the root directory"
+msgstr ""
+
+#. tell the user that we're preparing the unlink job
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:161
+msgid "Preparing..."
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:234
+#, c-format
+msgid ""
+"Unable to remove %s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:157
+#, c-format
+msgid "copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:658
+#: ../thunar/thunar-properties-dialog.c:588
+#, c-format
+msgid "link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:161
+#, c-format
+msgid "another copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:162
+#, c-format
+msgid "another link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:165
+#, c-format
+msgid "third copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:166
+#, c-format
+msgid "third link to %s"
+msgstr ""
+
+#. if we had no match on the NAMES, try the "%uth copy of %s" pattern
+#: ../thunar-vfs/thunar-vfs-xfer.c:205 ../thunar-vfs/thunar-vfs-xfer.c:221
+#, c-format
+msgid "%uth copy of %s"
+msgid_plural "%uth copy of %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:223
+#, c-format
+msgid "%uth link to %s"
+msgid_plural "%uth link to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#. setup the error return
+#: ../thunar-vfs/thunar-vfs-xfer.c:263
+#, c-format
+msgid "Failed to create directory `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:286
+#, c-format
+msgid "Failed to create named fifo `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:318
+#, c-format
+msgid "Failed to open `%s' for reading"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:330
+#, c-format
+msgid "Failed to open `%s' for writing"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:345
+#, c-format
+msgid "Failed to read data from `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:357
+#, c-format
+msgid "Failed to write data to `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:371
+#, c-format
+msgid "Failed to remove `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:415
+#, c-format
+msgid "Failed to read link target from `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:423
+#, c-format
+msgid "Failed to create symbolic link `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:431
+#, c-format
+msgid "Failed to change mode of `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:465 ../thunar-vfs/thunar-vfs-xfer.c:525
+#, c-format
+msgid "Failed to determine file info for `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:494
+#, c-format
+msgid "Failed to copy special file `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:536
+#, c-format
+msgid "Failed to create symbolic `%s'"
+msgstr ""
+
+#. setup application name
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:347
+msgid "Thunar"
+msgstr "Thunar"
+
+#. display an error message to the user
+#: ../thunar/thunar-application.c:190
+msgid "Failed to launch operation"
+msgstr ""
+
+#: ../thunar/thunar-application.c:411
+msgid "Copying files..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:445
+msgid "Creating symbolic links..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:480
+msgid "Moving files..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:515
+msgid "Deleting files..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:555
+msgid "Creating directories..."
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:137 ../thunar/thunar-emblem-chooser.c:115
+#: ../thunar/thunar-emblem-chooser.c:116 ../thunar/thunar-icon-renderer.c:129
+#: ../thunar/thunar-open-with-action.c:115
+#: ../thunar/thunar-open-with-action.c:116
+#: ../thunar/thunar-properties-dialog.c:142 ../thunar/thunar-statusbar.c:190
+msgid "File"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:138
+msgid "The file for which an application should be chosen"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:150
+#, fuzzy
+msgid "Open"
+msgstr "Ö_ffnen"
+
+#: ../thunar/thunar-chooser-dialog.c:151
+msgid "Whether the chooser should open the specified file"
+msgstr ""
+
+#. the "Open with" action
+#: ../thunar/thunar-chooser-dialog.c:176 ../thunar/thunar-launcher.c:197
+msgid "Open With"
+msgstr ""
+
+#. create the "Custom command" expand
+#: ../thunar/thunar-chooser-dialog.c:238
+msgid "Use a _custom command:"
+msgstr ""
+
+#. create the "Custom command" button
+#: ../thunar/thunar-chooser-dialog.c:256
+#, fuzzy
+msgid "_Browse"
+msgstr "_Schließen"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:429
+#, fuzzy, c-format
+msgid "Failed to add new application `%s'"
+msgstr "Andere Anwendung..."
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:451
+#, c-format
+msgid "Failed to set default application for `%s'"
+msgstr ""
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:464
+#, c-format
+msgid "Failed to execute `%s'"
+msgstr ""
+
+#. update the header label
+#: ../thunar/thunar-chooser-dialog.c:580
+#, c-format
+msgid "Open <i>%s</i> and other files of type \"%s\" with:"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:602
+#, fuzzy
+msgid "Select an Application"
+msgstr "Andere Anwendung..."
+
+#: ../thunar/thunar-chooser-dialog.c:612
+msgid "All Files"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:617
+msgid "Executable Files"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:632
+msgid "Perl Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:638
+msgid "Python Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:644
+msgid "Ruby Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:650
+msgid "Shell Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:116 ../thunar/thunar-folder.c:134
+#: ../thunar/thunar-standard-view.c:357 ../thunar/thunar-statusbar.c:204
+#: ../thunar/thunar-statusbar.c:746 ../thunar/thunar-view.c:82
+msgid "Loading"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:117
+msgid "Whether the model is currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:129
+msgid "Mime info"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:130
+msgid "The mime info for the model"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:306
+msgid "None available"
+msgstr ""
+
+#. append the "Recommended Applications:" category
+#: ../thunar/thunar-chooser-model.c:350
+msgid "Recommended Applications:"
+msgstr ""
+
+#. append the "Other Applications:" category
+#: ../thunar/thunar-chooser-model.c:353
+#, fuzzy
+msgid "Other Applications:"
+msgstr "Andere Anwendung..."
+
+#: ../thunar/thunar-clipboard-manager.c:149
+msgid "Can paste"
+msgstr ""
+
+#: ../thunar/thunar-clipboard-manager.c:150
+msgid "Whether the clipboard content can be pasted"
+msgstr ""
+
+#. tell the user that we cannot paste
+#: ../thunar/thunar-clipboard-manager.c:333
+msgid "There is nothing on the clipboard to paste"
+msgstr ""
+
+#: ../thunar/thunar-create-dialog.c:100 ../thunar/thunar-create-dialog.c:101
+#, fuzzy
+msgid "Filename"
+msgstr "Dateimanager"
+
+#: ../thunar/thunar-create-dialog.c:113 ../thunar/thunar-create-dialog.c:114
+msgid "Mime Info"
+msgstr ""
+
+#: ../thunar/thunar-create-dialog.c:148
+msgid "Enter the new name:"
+msgstr ""
+
+#: ../thunar/thunar-details-view.c:131
+msgid "Name"
+msgstr "Name"
+
+#: ../thunar/thunar-details-view.c:165
+msgid "Permissions"
+msgstr "Berechtigungen"
+
+#: ../thunar/thunar-details-view.c:180
+msgid "Type"
+msgstr "Typ"
+
+#: ../thunar/thunar-details-view.c:192
+msgid "Date modified"
+msgstr "Letzte Änderung"
+
+#: ../thunar/thunar-details-view.c:221
+msgid "Details view"
+msgstr "Detailansicht"
+
+#: ../thunar/thunar-details-view.c:222
+msgid "Detailed directory listing"
+msgstr "Detailierte Verzeichnisansicht"
+
+#: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#, c-format
+msgid "%s."
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Copy here"
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Move here"
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Link here"
+msgstr ""
+
+#. display an error to the user
+#. display an error message to the user
+#: ../thunar/thunar-dnd.c:190 ../thunar/thunar-launcher.c:314
+#, c-format
+msgid "Unable to execute file `%s'"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:158
+msgid "Resident"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:159
+msgid "Ensures that an extension will never be unloaded."
+msgstr ""
+
+#. append the remove menu item
+#: ../thunar/thunar-favourites-view.c:292
+msgid "_Remove Favourite"
+msgstr ""
+
+#. append the rename menu item
+#: ../thunar/thunar-favourites-view.c:307
+msgid "Re_name Favourite"
+msgstr ""
+
+#: ../thunar/thunar-favourites-view.c:627
+#, c-format
+msgid "The path '%s' does not refer to a directory"
+msgstr ""
+
+#. display an error message to the user
+#: ../thunar/thunar-favourites-view.c:646
+msgid "Failed to add new favourite"
+msgstr ""
+
+#: ../thunar/thunar-file.c:681
+msgid "The root folder has no parent"
+msgstr ""
+
+#: ../thunar/thunar-file.c:873
+msgid "Filesystem"
+msgstr "Dateisystem"
+
+#: ../thunar/thunar-file.c:897
+msgid "Home"
+msgstr ""
+
+#: ../thunar/thunar-folder.c:135
+msgid "Whether the contents of the folder are currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:163
+msgid "Icon theme"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:164
+msgid "The icon theme used by the icon factory"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:116
+msgid "Drop file"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:117
+msgid "The file which should be rendered in as drop acceptor"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:130
+msgid "The file whose icon to render"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:145 ../thunar/thunar-icon-renderer.c:146
+#: ../thunar/thunar-text-renderer.c:172 ../thunar/thunar-text-renderer.c:173
+msgid "Follow state"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:158 ../thunar/thunar-path-entry.c:179
+msgid "Icon size"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:159
+msgid "The icon size in pixels"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:111
+msgid "Arran_ge Items"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Sort By _Name"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Keep items sorted by their name in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Sort By _Size"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Keep items sorted by their size in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Sort By _Type"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Keep items sorted by their type in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Sort By Modification _Date"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Keep items sorted by their modification date in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "_Ascending"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "Sort items in ascending order"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "_Descending"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "Sort items in descending order"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:226
+msgid "Icon view"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:227
+msgid "Icon based directory listing"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:134 ../thunar/thunar-launcher.c:135
+msgid "Action group"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:147 ../thunar/thunar-launcher.c:148
+msgid "Selected files"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:160 ../thunar/thunar-launcher.c:161
+msgid "Widget"
+msgstr ""
+
+#. the "Open" action
+#: ../thunar/thunar-launcher.c:189 ../thunar/thunar-launcher.c:521
+#: ../thunar/thunar-launcher.c:539
+msgid "_Open"
+msgstr "Ö_ffnen"
+
+#: ../thunar/thunar-launcher.c:189
+msgid "Open the selected items"
+msgstr ""
+
+#. the "Open in New Window" action
+#: ../thunar/thunar-launcher.c:193
+msgid "Open in New Window"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:193
+msgid "Open the selected directories in new Thunar windows"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:347
+#, c-format
+msgid "Unable to open \"%s\"."
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:352
+#, c-format
+msgid "Unable to open %d file."
+msgid_plural "Unable to open %d files."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-launcher.c:458
+msgid "Are you sure you want to open all folders?"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:460
+#, c-format
+msgid "This will open %d separate window."
+msgid_plural "This will open %d separate windows."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-launcher.c:519
+#, c-format
+msgid "Open in %d New Window"
+msgid_plural "Open in %d New Windows"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-launcher.c:537
+msgid "_Execute"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:258
+msgid "Folder"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:259
+msgid "The stores folder"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:271
+msgid "Folders first"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:272
+msgid "Folders first in sorting"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:284
+msgid "Number of files"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:285
+msgid "Number of visible files"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:297 ../thunar/thunar-view.c:111
+#: ../thunar/thunar-window.c:218
+msgid "Show hidden"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:298 ../thunar/thunar-view.c:112
+#: ../thunar/thunar-window.c:219
+msgid "Whether to display hidden files"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:656 ../thunar/thunar-properties-dialog.c:586
+msgid "broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1924
+#, c-format
+msgid "%d item, Free space: %s"
+msgid_plural "%d items, Free space: %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-list-model.c:1929
+#, c-format
+msgid "%d item"
+msgid_plural "%d items"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-list-model.c:1945
+#, c-format
+msgid "\"%s\" broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1949
+#, c-format
+msgid "\"%s\" (%s) link to %s"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1954
+#, c-format
+msgid "\"%s\" (%s) %s"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1971 ../thunar/thunar-list-model.c:1976
+#, c-format
+msgid "%d item selected"
+msgid_plural "%d items selected (%s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-location-buttons.c:214
+msgid "Spacing"
+msgstr ""
+
+#: ../thunar/thunar-location-buttons.c:215
+msgid "The amount of space between the path buttons"
+msgstr ""
+
+#: ../thunar/thunar-location-dialog.c:85
+msgid "Open Location"
+msgstr ""
+
+#: ../thunar/thunar-location-dialog.c:99
+msgid "_Location:"
+msgstr ""
+
+#: ../thunar/thunar-navigator.c:137 ../thunar/thunar-window.c:205
+msgid "Current directory"
+msgstr ""
+
+#: ../thunar/thunar-navigator.c:138
+msgid "The directory currently displayed by the navigator"
+msgstr ""
+
+#: ../thunar/thunar-open-with-action.c:320
+#, c-format
+msgid "%s (default)"
+msgstr "%s (Standard)"
+
+#. add our custom children
+#: ../thunar/thunar-open-with-action.c:371
+msgid "Other Application..."
+msgstr "Andere Anwendung..."
+
+#: ../thunar/thunar-path-entry.c:167
+msgid "Current file"
+msgstr ""
+
+#: ../thunar/thunar-path-entry.c:168
+msgid "The currently displayed file"
+msgstr ""
+
+#: ../thunar/thunar-path-entry.c:180
+msgid "The icon size for the path entry"
+msgstr ""
+
+#: ../thunar/thunar-preferences.c:178
+#, c-format
+msgid "Failed to create the Thunar configuration directory in %s"
+msgstr ""
+
+#: ../thunar/thunar-preferences.c:186
+#, c-format
+msgid "Failed to open preferences database in %s: %s"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:129
+msgid "Job"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:130
+msgid "The job whose progress to display"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:273
+msgid "Question"
+msgstr "Frage"
+
+#: ../thunar/thunar-progress-dialog.c:299
+msgid "_Yes"
+msgstr "_Ja"
+
+#: ../thunar/thunar-progress-dialog.c:303
+msgid "Yes to _all"
+msgstr "Ja zu _allen"
+
+#: ../thunar/thunar-progress-dialog.c:307
+msgid "_No"
+msgstr "_Nein"
+
+#: ../thunar/thunar-progress-dialog.c:311
+msgid "_Cancel"
+msgstr "_Abbrechen"
+
+#: ../thunar/thunar-progress-dialog.c:437
+#, c-format
+msgid "(%lu hour remaining)"
+msgid_plural "(%lu hours remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:442
+#, c-format
+msgid "(%lu minute remaining)"
+msgid_plural "(%lu minutes remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:447
+#, c-format
+msgid "(%lu second remaining)"
+msgid_plural "(%lu seconds remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-properties-dialog.c:143
+msgid "The file displayed by the dialog"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:180
+msgid "General"
+msgstr "Allgemein"
+
+#: ../thunar/thunar-properties-dialog.c:197
+msgid "Name:"
+msgstr "Name:"
+
+#.
+#. Second box (kind)
+#.
+#: ../thunar/thunar-properties-dialog.c:222
+msgid "Kind:"
+msgstr ""
+
+#.
+#. Third box (modified, accessed)
+#.
+#: ../thunar/thunar-properties-dialog.c:247
+msgid "Modified:"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:260
+msgid "Accessed:"
+msgstr ""
+
+#.
+#. Fourth box (volume, size)
+#.
+#: ../thunar/thunar-properties-dialog.c:284
+msgid "Volume:"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:307
+msgid "Size:"
+msgstr "Größe:"
+
+#.
+#. Emblem chooser
+#.
+#: ../thunar/thunar-properties-dialog.c:331
+msgid "Emblems"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:563
+#, c-format
+msgid "%s Info"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:644
+#, c-format
+msgid "%s (%u Bytes)"
+msgstr "%s (%u Byte)"
+
+#. display an error message
+#: ../thunar/thunar-properties-dialog.c:690
+#: ../thunar/thunar-standard-view.c:2135
+#, c-format
+msgid "Failed to rename `%s'"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:245
+msgid "File Context Menu"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:246
+msgid "Folder Context Menu"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create _Folder..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create an empty folder within the current folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "_Properties"
+msgstr "_Eigenschaften"
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "View the properties of the selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "_Copy Files"
+msgstr "_Datei"
+
+#: ../thunar/thunar-standard-view.c:249
+msgid "Copy the selected files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cu_t Files"
+msgstr "_Datei"
+
+#: ../thunar/thunar-standard-view.c:250
+msgid "Cut the selected files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:251
+msgid "_Paste Files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:252
+msgid "_Delete Files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:252
+msgid "Delete the selected files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste Files into Folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste files into the selected folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select _all Files"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select all files in this window"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select by _Pattern"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select all files that match a certain pattern"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:256 ../thunar/thunar-standard-view.c:2414
+msgid "Du_plicate File"
+msgid_plural "Du_plicate Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:256
+msgid "Duplicate each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:257 ../thunar/thunar-standard-view.c:2420
+msgid "Ma_ke Link"
+msgid_plural "Ma_ke Links"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:257
+msgid "Create a symbolic link for each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "_Rename"
+msgstr "_Umbennen"
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "Rename the selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:358 ../thunar/thunar-view.c:83
+msgid "Whether the view is currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:853
+msgid "Loading folder contents..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1305
+msgid "New Folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1308
+msgid "New Folder..."
+msgstr ""
+
+#. display an error message
+#: ../thunar/thunar-standard-view.c:1322
+#, c-format
+msgid "Cannot convert filename `%s' to the local encoding"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1468
+#, c-format
+msgid ""
+"Are you sure that you want to\n"
+"permanently delete \"%s\"?"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1474
+#, c-format
+msgid ""
+"Are you sure that you want to permanently\n"
+"delete the selected file?"
+msgid_plural ""
+"Are you sure that you want to permanently\n"
+"delete the %u selected files?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:1489
+msgid "If you delete a file, it is permanently lost."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1561
+msgid "Select by Pattern"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1576
+msgid "Pattern:"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:2087
+#, fuzzy, c-format
+msgid "Failed to open directory `%s'"
+msgstr "Detailierte Verzeichnisansicht"
+
+#: ../thunar/thunar-standard-view.c:2387
+#, fuzzy
+msgid "_Copy File"
+msgid_plural "_Copy Files"
+msgstr[0] "_Datei"
+msgstr[1] "_Datei"
+
+#: ../thunar/thunar-standard-view.c:2393
+#, fuzzy
+msgid "Cu_t File"
+msgid_plural "Cu_t Files"
+msgstr[0] "_Datei"
+msgstr[1] "_Datei"
+
+#: ../thunar/thunar-standard-view.c:2402
+msgid "_Delete File"
+msgid_plural "_Delete Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-statusbar.c:191
+msgid "The file whose icon to display"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:205 ../thunar/thunar-statusbar.c:747
+msgid "Whether to display a loading animation"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:760 ../thunar/thunar-view.c:98
+msgid "Statusbar text"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:761
+msgid "The main text to be displayed in the statusbar"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:185
+msgid "Text"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:186
+msgid "The text to render"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:200
+msgid "Wrap mode"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:201
+msgid "The wrap mode"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:216
+msgid "Wrap width"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:217
+msgid "The wrap width"
+msgstr ""
+
+#: ../thunar/thunar-view.c:99
+msgid "Text to be displayed in the statusbar associated with this view"
+msgstr ""
+
+#: ../thunar/thunar-view.c:125 ../thunar/thunar-window.c:233
+msgid "UI manager"
+msgstr ""
+
+#: ../thunar/thunar-view.c:126
+msgid "UI manager of the surrounding window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:149
+msgid "_File"
+msgstr "_Datei"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open New _Window"
+msgstr "_Neues Fenster öffnen"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open a new Thunar window for the displayed location"
+msgstr ""
+
+#: ../thunar/thunar-window.c:151
+msgid "Close _All Windows"
+msgstr ""
+
+#: ../thunar/thunar-window.c:151
+msgid "Close all Thunar windows"
+msgstr "Alle Thunar Fenster schließen"
+
+#: ../thunar/thunar-window.c:152
+msgid "_Close"
+msgstr "_Schließen"
+
+#: ../thunar/thunar-window.c:152
+msgid "Close this window"
+msgstr "Dieses Fenster schließen"
+
+#: ../thunar/thunar-window.c:153
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: ../thunar/thunar-window.c:154
+msgid "_View"
+msgstr "_Anzeige"
+
+#: ../thunar/thunar-window.c:155
+msgid "_Location Bar"
+msgstr ""
+
+#: ../thunar/thunar-window.c:156
+msgid "_Side Pane"
+msgstr ""
+
+#: ../thunar/thunar-window.c:157
+msgid "_Go"
+msgstr "_Gehe"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open _Parent"
+msgstr ""
+
+#: ../thunar/thunar-window.c:158
+msgid "Open the parent folder"
+msgstr ""
+
+#: ../thunar/thunar-window.c:159
+msgid "_Home"
+msgstr ""
+
+#: ../thunar/thunar-window.c:159
+msgid "Open the home folder"
+msgstr ""
+
+#: ../thunar/thunar-window.c:160
+msgid "Open _Location..."
+msgstr ""
+
+#: ../thunar/thunar-window.c:160
+msgid "Specify a location to open"
+msgstr ""
+
+#: ../thunar/thunar-window.c:161
+msgid "_Help"
+msgstr "_Hilfe"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "_About"
+msgstr "Ü_ber"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "Display information about Thunar"
+msgstr ""
+
+#: ../thunar/thunar-window.c:171
+msgid "Show _Hidden Files"
+msgstr ""
+
+#: ../thunar/thunar-window.c:171
+msgid "Toggles the display of hidden files in the current window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:206
+msgid "The directory currently displayed within this window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:234
+msgid "The UI manager used within this window"
+msgstr ""
+
+#.
+#. * add the side pane options
+#.
+#: ../thunar/thunar-window.c:289
+msgid "_Favourites"
+msgstr "Favouriten"
+
+#: ../thunar/thunar-window.c:295 ../thunar/thunar-window.c:316
+msgid "_Hidden"
+msgstr ""
+
+#.
+#. * add the location bar options
+#.
+#: ../thunar/thunar-window.c:304
+msgid "_Button Style"
+msgstr ""
+
+#: ../thunar/thunar-window.c:310
+msgid "_Traditional Style"
+msgstr ""
+
+#.
+#. * add view options
+#.
+#: ../thunar/thunar-window.c:325
+msgid "View as _Icons"
+msgstr ""
+
+#: ../thunar/thunar-window.c:331
+msgid "View as _Detailed List"
+msgstr ""
+
+#. display an error to the user
+#: ../thunar/thunar-window.c:738
+msgid "Failed to open home directory"
+msgstr ""
+
+#: ../thunar/thunar-window.c:815
+msgid ""
+"Thunar is a fast and easy to use file manager\n"
+"for the Xfce Desktop Environment."
+msgstr ""
+
+#: ../thunar/thunar-window.c:820
+msgid "translator-credits"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:104
+msgid "Label"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:105
+msgid "Text of the page's label"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:117
+msgid "Label widget"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:118
+msgid "A widget to display in place of the usual page label"
+msgstr ""
+
+#: ../Thunar.desktop.in.h:1
+msgid "Browse the filesystem with the file manager"
+msgstr ""
+
+#: ../Thunar.desktop.in.h:2
+msgid "File Manager"
+msgstr "Dateimanager"
+
+#: ../Thunar.desktop.in.h:3
+msgid "Thunar File Manager"
+msgstr "Thunar Dateimanager"
+
+#~ msgid "Computer"
+#~ msgstr "Computer"
+
+#~ msgid "Trash"
+#~ msgstr "Papierkorb"
+
+#~ msgid "_Empty Trash Bin"
+#~ msgstr "Papierkorb _leeren"
+
+#~ msgid "Delete all items in the Trash"
+#~ msgstr "Alle im Papierkorb befindlichen Dateien löschen"

Added: desktop/trunk/thunar/branches/upstream/current/po/el.gmo
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/po/el.gmo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/el.po
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/el.po	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/el.po	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1453 @@
+# Translation of Thunar to Greek
+# Copyright (C) 2004-2005 Benedikt Meurer.
+# This file is distributed under the same license as the Thunar package.
+# Stavros Giannouris <stavrosg2002 at freemail.gr>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Thunar 0.1.2svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-14 15:38+0100\n"
+"PO-Revision-Date: 2005-10-06 22:03+0900\n"
+"Last-Translator: Stavros Giannouris <stavrosg2002 at freemail.gr>\n"
+"Language-Team: Greek <nls at tux.hellug.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Greek\n"
+"X-Poedit-Country: GREECE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../thunar-vfs/thunar-vfs-info.c:261
+msgid "No Exec field specified"
+msgstr "Δεν έχει οριστεί το πεδίο Exec"
+
+#: ../thunar-vfs/thunar-vfs-info.c:269
+msgid "Unable to parse file"
+msgstr "Αδυναμία ανάγνωσης του αρχείου"
+
+#: ../thunar-vfs/thunar-vfs-info.c:359
+msgid "Invalid file name"
+msgstr "Μη έγκυρο όνομα αρχείου"
+
+#: ../thunar-vfs/thunar-vfs-info.c:381
+#, fuzzy
+msgid "Invalid desktop file"
+msgstr "Μη έγκυρο όνομα αρχείου"
+
+#: ../thunar-vfs/thunar-vfs-info.c:615
+#, fuzzy, c-format
+msgid "Failed to stat file `%s': %s"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#. ask the user whether we should remove the target first
+#. ask the user whether to overwrite
+#: ../thunar-vfs/thunar-vfs-link-job.c:176
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:685
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to overwrite it?"
+msgstr ""
+"Το %s υπάρχει ήδη.\n"
+"\n"
+"Θέλετε να αντικατασταθεί;"
+
+#: ../thunar-vfs/thunar-vfs-link-job.c:200
+#, fuzzy, c-format
+msgid "Failed to remove `%s': %s"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#. ask the user whether to skip this file (used for cancellation only)
+#. ask the user whether to skip
+#: ../thunar-vfs/thunar-vfs-link-job.c:212
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:705
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"\n"
+"\n"
+"Θέλετε να το προσπεράσετε;"
+
+#: ../thunar-vfs/thunar-vfs-mime-database.c:1625
+#, c-format
+msgid "Failed to load application from file %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mime-info.c:228
+#, c-format
+msgid "%s document"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mkdir-job.c:165
+#, fuzzy, c-format
+msgid "Unable to create directory `%s': %s"
+msgstr "Αδυναμία δημιουργίας του καταλόγου %s."
+
+#: ../thunar-vfs/thunar-vfs-path.c:657
+msgid "Path too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:761
+msgid "URI too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:144 ../thunar/thunar-details-view.c:150
+msgid "Size"
+msgstr "Μέγεθος"
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:145
+msgid "The desired thumbnail size"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:233
+msgid "Collecting files..."
+msgstr "Συλλογή αρχείων..."
+
+#. display info message
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:295
+#, fuzzy
+msgid "Deleting directories..."
+msgstr "Διαγραφή αρχείων..."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:315
+#, fuzzy, c-format
+msgid "Unable to remove directory `%s': %s"
+msgstr "Αδυναμία δημιουργίας του καταλόγου %s."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:593
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:639
+#, fuzzy, c-format
+msgid "Unable to remove `%s': %s"
+msgstr "Αδύνατη η αφαίρεση του %s."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:831
+msgid "Cannot transfer the root directory"
+msgstr ""
+
+#. tell the user that we're preparing the unlink job
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:161
+msgid "Preparing..."
+msgstr "Προετοιμασία..."
+
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:234
+#, c-format
+msgid ""
+"Unable to remove %s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:157
+#, c-format
+msgid "copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:658
+#: ../thunar/thunar-properties-dialog.c:588
+#, c-format
+msgid "link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:161
+#, c-format
+msgid "another copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:162
+#, c-format
+msgid "another link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:165
+#, c-format
+msgid "third copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:166
+#, c-format
+msgid "third link to %s"
+msgstr ""
+
+#. if we had no match on the NAMES, try the "%uth copy of %s" pattern
+#: ../thunar-vfs/thunar-vfs-xfer.c:205 ../thunar-vfs/thunar-vfs-xfer.c:221
+#, c-format
+msgid "%uth copy of %s"
+msgid_plural "%uth copy of %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:223
+#, c-format
+msgid "%uth link to %s"
+msgid_plural "%uth link to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#. setup the error return
+#: ../thunar-vfs/thunar-vfs-xfer.c:263
+#, fuzzy, c-format
+msgid "Failed to create directory `%s'"
+msgstr "Αδυναμία δημιουργίας του καταλόγου %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:286
+#, fuzzy, c-format
+msgid "Failed to create named fifo `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:318
+#, c-format
+msgid "Failed to open `%s' for reading"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:330
+#, c-format
+msgid "Failed to open `%s' for writing"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:345
+#, fuzzy, c-format
+msgid "Failed to read data from `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:357
+#, fuzzy, c-format
+msgid "Failed to write data to `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:371
+#, fuzzy, c-format
+msgid "Failed to remove `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:415
+#, fuzzy, c-format
+msgid "Failed to read link target from `%s'"
+msgstr "Αποτυχία ανάγνωσης συμβολικού δεσμού %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:423
+#, fuzzy, c-format
+msgid "Failed to create symbolic link `%s'"
+msgstr "Δεν είναι δυνατή η δημιουργία συμβολικού δεσμού %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:431
+#, fuzzy, c-format
+msgid "Failed to change mode of `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:465 ../thunar-vfs/thunar-vfs-xfer.c:525
+#, c-format
+msgid "Failed to determine file info for `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:494
+#, fuzzy, c-format
+msgid "Failed to copy special file `%s'"
+msgstr "Αδυναμία αντιγραφής αρχείου %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:536
+#, fuzzy, c-format
+msgid "Failed to create symbolic `%s'"
+msgstr "Δεν είναι δυνατή η δημιουργία συμβολικού δεσμού %s."
+
+#. setup application name
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:347
+msgid "Thunar"
+msgstr "Thunar"
+
+#. display an error message to the user
+#: ../thunar/thunar-application.c:190
+#, fuzzy
+msgid "Failed to launch operation"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar/thunar-application.c:411
+msgid "Copying files..."
+msgstr "Αντιγραφή αρχείων..."
+
+#: ../thunar/thunar-application.c:445
+msgid "Creating symbolic links..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:480
+msgid "Moving files..."
+msgstr "Μετακίνηση αρχείων..."
+
+#: ../thunar/thunar-application.c:515
+msgid "Deleting files..."
+msgstr "Διαγραφή αρχείων..."
+
+#: ../thunar/thunar-application.c:555
+#, fuzzy
+msgid "Creating directories..."
+msgstr "Τρέχον κατάλογος"
+
+#: ../thunar/thunar-chooser-dialog.c:137 ../thunar/thunar-emblem-chooser.c:115
+#: ../thunar/thunar-emblem-chooser.c:116 ../thunar/thunar-icon-renderer.c:129
+#: ../thunar/thunar-open-with-action.c:115
+#: ../thunar/thunar-open-with-action.c:116
+#: ../thunar/thunar-properties-dialog.c:142 ../thunar/thunar-statusbar.c:190
+msgid "File"
+msgstr "Αρχείο"
+
+#: ../thunar/thunar-chooser-dialog.c:138
+msgid "The file for which an application should be chosen"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:150
+msgid "Open"
+msgstr "Άνοιγμα"
+
+#: ../thunar/thunar-chooser-dialog.c:151
+msgid "Whether the chooser should open the specified file"
+msgstr ""
+
+#. the "Open with" action
+#: ../thunar/thunar-chooser-dialog.c:176 ../thunar/thunar-launcher.c:197
+msgid "Open With"
+msgstr "Άνοιγμα Με"
+
+#. create the "Custom command" expand
+#: ../thunar/thunar-chooser-dialog.c:238
+msgid "Use a _custom command:"
+msgstr ""
+
+#. create the "Custom command" button
+#: ../thunar/thunar-chooser-dialog.c:256
+#, fuzzy
+msgid "_Browse"
+msgstr "_Κλείσιμο"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:429
+#, fuzzy, c-format
+msgid "Failed to add new application `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:451
+#, fuzzy, c-format
+msgid "Failed to set default application for `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:464
+#, fuzzy, c-format
+msgid "Failed to execute `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#. update the header label
+#: ../thunar/thunar-chooser-dialog.c:580
+#, c-format
+msgid "Open <i>%s</i> and other files of type \"%s\" with:"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:602
+#, fuzzy
+msgid "Select an Application"
+msgstr "Άνοιγμα _Τοποθεσίας..."
+
+#: ../thunar/thunar-chooser-dialog.c:612
+#, fuzzy
+msgid "All Files"
+msgstr "Αρχεία"
+
+#: ../thunar/thunar-chooser-dialog.c:617
+#, fuzzy
+msgid "Executable Files"
+msgstr "Επιλογή ό_λων των αρχείων"
+
+#: ../thunar/thunar-chooser-dialog.c:632
+msgid "Perl Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:638
+msgid "Python Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:644
+msgid "Ruby Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:650
+msgid "Shell Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:116 ../thunar/thunar-folder.c:134
+#: ../thunar/thunar-standard-view.c:357 ../thunar/thunar-statusbar.c:204
+#: ../thunar/thunar-statusbar.c:746 ../thunar/thunar-view.c:82
+msgid "Loading"
+msgstr "Φόρτωση"
+
+#: ../thunar/thunar-chooser-model.c:117
+#, fuzzy
+msgid "Whether the model is currently being loaded"
+msgstr "Εάν μπορούν να επικολληθούν τα περιεχόμενα του πρόχειρου"
+
+#: ../thunar/thunar-chooser-model.c:129
+msgid "Mime info"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:130
+msgid "The mime info for the model"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:306
+msgid "None available"
+msgstr ""
+
+#. append the "Recommended Applications:" category
+#: ../thunar/thunar-chooser-model.c:350
+msgid "Recommended Applications:"
+msgstr ""
+
+#. append the "Other Applications:" category
+#: ../thunar/thunar-chooser-model.c:353
+#, fuzzy
+msgid "Other Applications:"
+msgstr "Άνοιγμα _Τοποθεσίας..."
+
+#: ../thunar/thunar-clipboard-manager.c:149
+msgid "Can paste"
+msgstr "Δυνατότητα επικόλλησης"
+
+#: ../thunar/thunar-clipboard-manager.c:150
+msgid "Whether the clipboard content can be pasted"
+msgstr "Εάν μπορούν να επικολληθούν τα περιεχόμενα του πρόχειρου"
+
+#. tell the user that we cannot paste
+#: ../thunar/thunar-clipboard-manager.c:333
+msgid "There is nothing on the clipboard to paste"
+msgstr "Δεν υπάρχει τίποτα στο πρόχειρο για να επικολληθεί."
+
+#: ../thunar/thunar-create-dialog.c:100 ../thunar/thunar-create-dialog.c:101
+#, fuzzy
+msgid "Filename"
+msgstr "Διαχειριστής Αρχείων"
+
+#: ../thunar/thunar-create-dialog.c:113 ../thunar/thunar-create-dialog.c:114
+#, fuzzy
+msgid "Mime Info"
+msgstr "%s Πληροφορίες"
+
+#: ../thunar/thunar-create-dialog.c:148
+msgid "Enter the new name:"
+msgstr ""
+
+#: ../thunar/thunar-details-view.c:131
+msgid "Name"
+msgstr "Όνομα"
+
+#: ../thunar/thunar-details-view.c:165
+msgid "Permissions"
+msgstr "Δικαιώματα"
+
+#: ../thunar/thunar-details-view.c:180
+msgid "Type"
+msgstr "Τύπος"
+
+#: ../thunar/thunar-details-view.c:192
+msgid "Date modified"
+msgstr "Ημερομηνία Τροποποίησης"
+
+#: ../thunar/thunar-details-view.c:221
+msgid "Details view"
+msgstr "Προβολή λεπτομεριών"
+
+#: ../thunar/thunar-details-view.c:222
+msgid "Detailed directory listing"
+msgstr "Λεπτομερής απεικόνιση καταλόγων"
+
+#: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#, c-format
+msgid "%s."
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+#, fuzzy
+msgid "_Copy here"
+msgstr "_Αντιγραφή Αρχείου"
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Move here"
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Link here"
+msgstr ""
+
+#. display an error to the user
+#. display an error message to the user
+#: ../thunar/thunar-dnd.c:190 ../thunar/thunar-launcher.c:314
+#, fuzzy, c-format
+msgid "Unable to execute file `%s'"
+msgstr "Αδυναμία εκτέλεσης του αρχείου \"%s\"."
+
+#: ../thunar/thunar-extension-manager.c:158
+msgid "Resident"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:159
+msgid "Ensures that an extension will never be unloaded."
+msgstr ""
+
+#. append the remove menu item
+#: ../thunar/thunar-favourites-view.c:292
+msgid "_Remove Favourite"
+msgstr "_Απομάκρυνση Αγαπημένου"
+
+#. append the rename menu item
+#: ../thunar/thunar-favourites-view.c:307
+msgid "Re_name Favourite"
+msgstr "Μετο_νομασία Αγαπημένου"
+
+#: ../thunar/thunar-favourites-view.c:627
+#, c-format
+msgid "The path '%s' does not refer to a directory"
+msgstr ""
+
+#. display an error message to the user
+#: ../thunar/thunar-favourites-view.c:646
+#, fuzzy
+msgid "Failed to add new favourite"
+msgstr "Αδυναμία προσθήκης αγαπημένου"
+
+#: ../thunar/thunar-file.c:681
+msgid "The root folder has no parent"
+msgstr ""
+
+#: ../thunar/thunar-file.c:873
+msgid "Filesystem"
+msgstr "Σύστημα αρχείων"
+
+#: ../thunar/thunar-file.c:897
+msgid "Home"
+msgstr "Αρχικός Κατάλογος"
+
+#: ../thunar/thunar-folder.c:135
+msgid "Whether the contents of the folder are currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:163
+msgid "Icon theme"
+msgstr "Θέμα εικονιδίων"
+
+#: ../thunar/thunar-icon-factory.c:164
+msgid "The icon theme used by the icon factory"
+msgstr "Το θέμα εικονιδίων που χρησιμοποιείται από το icon factory"
+
+#: ../thunar/thunar-icon-renderer.c:116
+#, fuzzy
+msgid "Drop file"
+msgstr "Αποστολή Αρχείου"
+
+#: ../thunar/thunar-icon-renderer.c:117
+msgid "The file which should be rendered in as drop acceptor"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:130
+msgid "The file whose icon to render"
+msgstr "Το αρχείο του οποίου το εικονίδιο να προβληθει"
+
+#: ../thunar/thunar-icon-renderer.c:145 ../thunar/thunar-icon-renderer.c:146
+#: ../thunar/thunar-text-renderer.c:172 ../thunar/thunar-text-renderer.c:173
+msgid "Follow state"
+msgstr "Παρακολούθηση κατάστασης"
+
+#: ../thunar/thunar-icon-renderer.c:158 ../thunar/thunar-path-entry.c:179
+msgid "Icon size"
+msgstr "Μέγεθος εικονιδίου"
+
+#: ../thunar/thunar-icon-renderer.c:159
+msgid "The icon size in pixels"
+msgstr "Το μέγεθος εικονιδίου σε pixels"
+
+#: ../thunar/thunar-icon-view.c:111
+msgid "Arran_ge Items"
+msgstr "Στοί_χιση Αντικειμένων"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Sort By _Name"
+msgstr "Ταξινόμηση κατά Ό_νομα"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Keep items sorted by their name in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Sort By _Size"
+msgstr "Ταξινόμηση κατά _Μέγεθος"
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Keep items sorted by their size in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Sort By _Type"
+msgstr "Ταξινόμηση λίστας κατά _Τύπο"
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Keep items sorted by their type in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Sort By Modification _Date"
+msgstr "Ταξινόμηση κατά Χρονολογία _Τροποποίησης"
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Keep items sorted by their modification date in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "_Ascending"
+msgstr "_Αύξουσα"
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "Sort items in ascending order"
+msgstr "Ταξινόμηση αντικειμένων με αύξουσα σειρά"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "_Descending"
+msgstr "_Φθίνουσα"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "Sort items in descending order"
+msgstr "Ταξινόμηση καρτελών με φθίνουσα σειρά"
+
+#: ../thunar/thunar-icon-view.c:226
+msgid "Icon view"
+msgstr "Προβολή Εικονιδίων"
+
+#: ../thunar/thunar-icon-view.c:227
+msgid "Icon based directory listing"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:134 ../thunar/thunar-launcher.c:135
+msgid "Action group"
+msgstr "Ομάδα ενέργειας"
+
+#: ../thunar/thunar-launcher.c:147 ../thunar/thunar-launcher.c:148
+msgid "Selected files"
+msgstr "Επιλεγμένα αρχεία"
+
+#: ../thunar/thunar-launcher.c:160 ../thunar/thunar-launcher.c:161
+msgid "Widget"
+msgstr "Μαραφέτι"
+
+#. the "Open" action
+#: ../thunar/thunar-launcher.c:189 ../thunar/thunar-launcher.c:521
+#: ../thunar/thunar-launcher.c:539
+msgid "_Open"
+msgstr "_Άνοιγμα"
+
+#: ../thunar/thunar-launcher.c:189
+msgid "Open the selected items"
+msgstr "Εκτέλεση των επιλεγμένων αντικειμένων"
+
+#. the "Open in New Window" action
+#: ../thunar/thunar-launcher.c:193
+msgid "Open in New Window"
+msgstr "Άνοιγμα σε Νέο Παράθυρο"
+
+#: ../thunar/thunar-launcher.c:193
+msgid "Open the selected directories in new Thunar windows"
+msgstr "Άνοιγμα των επιλεγμένων καταλόγων σε νέα παράθυρα του Thunar"
+
+#: ../thunar/thunar-launcher.c:347
+#, c-format
+msgid "Unable to open \"%s\"."
+msgstr "Αδυναμία ανοίγματος του αρχείου \"%s\"."
+
+#: ../thunar/thunar-launcher.c:352
+#, c-format
+msgid "Unable to open %d file."
+msgid_plural "Unable to open %d files."
+msgstr[0] "Αδύνατο το άνοιγμα %d αρχείου."
+msgstr[1] "Αδύνατο το άνοιγμα %d αρχείων."
+
+#: ../thunar/thunar-launcher.c:458
+msgid "Are you sure you want to open all folders?"
+msgstr "Είσαστε βέβαιοι ότι θέλετε να ανοίξετε όλους τους φακέλους;"
+
+#: ../thunar/thunar-launcher.c:460
+#, c-format
+msgid "This will open %d separate window."
+msgid_plural "This will open %d separate windows."
+msgstr[0] "Αυτό θα ανοίξει %d διαφορετικό παράθυρο."
+msgstr[1] "Αυτό θα ανοίξει %d διαφορετικά παράθυρα."
+
+#: ../thunar/thunar-launcher.c:519
+#, c-format
+msgid "Open in %d New Window"
+msgid_plural "Open in %d New Windows"
+msgstr[0] "Άνοιγμα σε %d Νέο Παράθυρο"
+msgstr[1] "Άνοιγμα σε %d Νέα Παράθυρα"
+
+#: ../thunar/thunar-launcher.c:537
+#, fuzzy
+msgid "_Execute"
+msgstr "Εκτέλεση"
+
+#: ../thunar/thunar-list-model.c:258
+msgid "Folder"
+msgstr "Φάκελος"
+
+#: ../thunar/thunar-list-model.c:259
+#, fuzzy
+msgid "The stores folder"
+msgstr "Φακέλος Προορισμού:"
+
+#: ../thunar/thunar-list-model.c:271
+msgid "Folders first"
+msgstr "Πρώτα οι φάκελοι"
+
+#: ../thunar/thunar-list-model.c:272
+msgid "Folders first in sorting"
+msgstr "Εμφάνιση πρώτα των φακέλων κατά την ταξινόμηση"
+
+#: ../thunar/thunar-list-model.c:284
+msgid "Number of files"
+msgstr "Αριθμός Αρχείων"
+
+#: ../thunar/thunar-list-model.c:285
+msgid "Number of visible files"
+msgstr "Αριθμός ορατών αρχείων"
+
+#: ../thunar/thunar-list-model.c:297 ../thunar/thunar-view.c:111
+#: ../thunar/thunar-window.c:218
+msgid "Show hidden"
+msgstr "Προβολή κρυφών"
+
+#: ../thunar/thunar-list-model.c:298 ../thunar/thunar-view.c:112
+#: ../thunar/thunar-window.c:219
+msgid "Whether to display hidden files"
+msgstr "Αν θα προβάλλονται τα κρυφά αρχεία"
+
+#: ../thunar/thunar-list-model.c:656 ../thunar/thunar-properties-dialog.c:586
+msgid "broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1924
+#, c-format
+msgid "%d item, Free space: %s"
+msgid_plural "%d items, Free space: %s"
+msgstr[0] "%d αντικείμενο, Ελεύθερος χώρος: %s"
+msgstr[1] "%d αντικείμενα, Ελεύθερος χώρος: %s"
+
+#: ../thunar/thunar-list-model.c:1929
+#, c-format
+msgid "%d item"
+msgid_plural "%d items"
+msgstr[0] "%d αντικείμενο"
+msgstr[1] "%d αντικείμενα"
+
+#: ../thunar/thunar-list-model.c:1945
+#, c-format
+msgid "\"%s\" broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1949
+#, fuzzy, c-format
+msgid "\"%s\" (%s) link to %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1954
+#, c-format
+msgid "\"%s\" (%s) %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1971 ../thunar/thunar-list-model.c:1976
+#, c-format
+msgid "%d item selected"
+msgid_plural "%d items selected (%s)"
+msgstr[0] "%d επιλεγμένο αντικείμενο"
+msgstr[1] "%d επιλεγμένα αντικείμενα (%s)"
+
+#: ../thunar/thunar-location-buttons.c:214
+msgid "Spacing"
+msgstr "Διάστιχο"
+
+#: ../thunar/thunar-location-buttons.c:215
+msgid "The amount of space between the path buttons"
+msgstr "Το μέγεθος του διαστήματος μεταξύ κουμπιών διαδρομής"
+
+#: ../thunar/thunar-location-dialog.c:85
+msgid "Open Location"
+msgstr "Άνοιγμα Τοποθεσίας"
+
+#: ../thunar/thunar-location-dialog.c:99
+msgid "_Location:"
+msgstr "_Τοποθεσία:"
+
+#: ../thunar/thunar-navigator.c:137 ../thunar/thunar-window.c:205
+msgid "Current directory"
+msgstr "Τρέχον κατάλογος"
+
+#: ../thunar/thunar-navigator.c:138
+msgid "The directory currently displayed by the navigator"
+msgstr ""
+
+#: ../thunar/thunar-open-with-action.c:320
+#, c-format
+msgid "%s (default)"
+msgstr "%s (προεπιλογή)"
+
+#. add our custom children
+#: ../thunar/thunar-open-with-action.c:371
+#, fuzzy
+msgid "Other Application..."
+msgstr "Άνοιγμα _Τοποθεσίας..."
+
+#: ../thunar/thunar-path-entry.c:167
+msgid "Current file"
+msgstr "Τρέχον αρχείο"
+
+#: ../thunar/thunar-path-entry.c:168
+msgid "The currently displayed file"
+msgstr "Το αρχείο που εμφανίζεται τώρα"
+
+#: ../thunar/thunar-path-entry.c:180
+msgid "The icon size for the path entry"
+msgstr "Μέγεθος εικονιδίου για τη διαδρομή"
+
+#: ../thunar/thunar-preferences.c:178
+#, fuzzy, c-format
+msgid "Failed to create the Thunar configuration directory in %s"
+msgstr "Αδυναμία δημιουργίας του καταλόγου %s."
+
+#: ../thunar/thunar-preferences.c:186
+#, fuzzy, c-format
+msgid "Failed to open preferences database in %s: %s"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar/thunar-progress-dialog.c:129
+msgid "Job"
+msgstr "Εργασία"
+
+#: ../thunar/thunar-progress-dialog.c:130
+msgid "The job whose progress to display"
+msgstr "Ποιας εργασίας η πρόοδος θα παρουσιαστεί"
+
+#: ../thunar/thunar-progress-dialog.c:273
+msgid "Question"
+msgstr "Ερώτηση"
+
+#: ../thunar/thunar-progress-dialog.c:299
+msgid "_Yes"
+msgstr "_Ναι"
+
+#: ../thunar/thunar-progress-dialog.c:303
+msgid "Yes to _all"
+msgstr "Ναι σε ό_λα"
+
+#: ../thunar/thunar-progress-dialog.c:307
+msgid "_No"
+msgstr "_Όχι"
+
+#: ../thunar/thunar-progress-dialog.c:311
+msgid "_Cancel"
+msgstr "_Ακύρωση"
+
+#: ../thunar/thunar-progress-dialog.c:437
+#, c-format
+msgid "(%lu hour remaining)"
+msgid_plural "(%lu hours remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:442
+#, c-format
+msgid "(%lu minute remaining)"
+msgid_plural "(%lu minutes remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:447
+#, c-format
+msgid "(%lu second remaining)"
+msgid_plural "(%lu seconds remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-properties-dialog.c:143
+#, fuzzy
+msgid "The file displayed by the dialog"
+msgstr "Ο τίτλος του διαλόγου επιλογής αρχείου."
+
+#: ../thunar/thunar-properties-dialog.c:180
+msgid "General"
+msgstr "Γενικές"
+
+#: ../thunar/thunar-properties-dialog.c:197
+msgid "Name:"
+msgstr "Όνομα:"
+
+#.
+#. Second box (kind)
+#.
+#: ../thunar/thunar-properties-dialog.c:222
+msgid "Kind:"
+msgstr "Είδος:"
+
+#.
+#. Third box (modified, accessed)
+#.
+#: ../thunar/thunar-properties-dialog.c:247
+msgid "Modified:"
+msgstr "Τροποποιήθηκε:"
+
+#: ../thunar/thunar-properties-dialog.c:260
+msgid "Accessed:"
+msgstr "Προσπελάστηκε:"
+
+#.
+#. Fourth box (volume, size)
+#.
+#: ../thunar/thunar-properties-dialog.c:284
+msgid "Volume:"
+msgstr "Τόμος:"
+
+#: ../thunar/thunar-properties-dialog.c:307
+msgid "Size:"
+msgstr "Μέγεθος:"
+
+#.
+#. Emblem chooser
+#.
+#: ../thunar/thunar-properties-dialog.c:331
+msgid "Emblems"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:563
+#, c-format
+msgid "%s Info"
+msgstr "%s Πληροφορίες"
+
+#: ../thunar/thunar-properties-dialog.c:644
+#, c-format
+msgid "%s (%u Bytes)"
+msgstr "%s (%u Bytes)"
+
+#. display an error message
+#: ../thunar/thunar-properties-dialog.c:690
+#: ../thunar/thunar-standard-view.c:2135
+#, fuzzy, c-format
+msgid "Failed to rename `%s'"
+msgstr "Αποτυχία μετονομασίας του %s."
+
+#: ../thunar/thunar-standard-view.c:245
+#, fuzzy
+msgid "File Context Menu"
+msgstr "X-Chat: Μενού Χρήστη"
+
+#: ../thunar/thunar-standard-view.c:246
+#, fuzzy
+msgid "Folder Context Menu"
+msgstr "X-Chat: Μενού Χρήστη"
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create _Folder..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create an empty folder within the current folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "_Properties"
+msgstr "_Ιδιότητες"
+
+#: ../thunar/thunar-standard-view.c:248
+#, fuzzy
+msgid "View the properties of the selected file"
+msgstr "Προβολή των ιδιοτήτων του επιλεγμένου αντικειμένου"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "_Copy Files"
+msgstr "_Αντιγραφή Αρχείων"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "Copy the selected files"
+msgstr "Εκτέλεση των επιλεγμένων αντικειμένων"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cu_t Files"
+msgstr "Αποκοπή _Αρχείων"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cut the selected files"
+msgstr "Εκτέλεση των επιλεγμένων αντικειμένων"
+
+#: ../thunar/thunar-standard-view.c:251
+#, fuzzy
+msgid "_Paste Files"
+msgstr "_Επικόλληση Αρχείων"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "_Delete Files"
+msgstr "Επιλεγμένα αρχεία"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "Delete the selected files"
+msgstr "Εκτέλεση των επιλεγμένων αντικειμένων"
+
+#: ../thunar/thunar-standard-view.c:253
+#, fuzzy
+msgid "Paste Files into Folder"
+msgstr "_Επικόλληση Αρχείων στο φάκελο"
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste files into the selected folder"
+msgstr "Επικόλληση αρχείων στον επιλεγμένο φάκελο"
+
+#: ../thunar/thunar-standard-view.c:254
+#, fuzzy
+msgid "Select _all Files"
+msgstr "Επιλογή ό_λων των αρχείων"
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select all files in this window"
+msgstr "Επιλογή όλων των αρχείων σε αυτό το παράθυρο"
+
+#: ../thunar/thunar-standard-view.c:255
+#, fuzzy
+msgid "Select by _Pattern"
+msgstr "Επιλογή βάσει _μοτίβου"
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select all files that match a certain pattern"
+msgstr "Επιλογή όλων των αρχείων που ταιριάζουν σε ένα μοτίβο"
+
+#: ../thunar/thunar-standard-view.c:256 ../thunar/thunar-standard-view.c:2414
+msgid "Du_plicate File"
+msgid_plural "Du_plicate Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:256
+#, fuzzy
+msgid "Duplicate each selected file"
+msgstr "Εκτέλεση των επιλεγμένων αντικειμένων"
+
+#: ../thunar/thunar-standard-view.c:257 ../thunar/thunar-standard-view.c:2420
+msgid "Ma_ke Link"
+msgid_plural "Ma_ke Links"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:257
+msgid "Create a symbolic link for each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "_Rename"
+msgstr "_Μετονομασία"
+
+#: ../thunar/thunar-standard-view.c:258
+#, fuzzy
+msgid "Rename the selected file"
+msgstr "Μετονομασία επιλεγμένου αντικειμένου"
+
+#: ../thunar/thunar-standard-view.c:358 ../thunar/thunar-view.c:83
+msgid "Whether the view is currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:853
+msgid "Loading folder contents..."
+msgstr "Φόρτωμα περιεχομένων φακέλου..."
+
+#: ../thunar/thunar-standard-view.c:1305
+#, fuzzy
+msgid "New Folder"
+msgstr "Φάκελος"
+
+#: ../thunar/thunar-standard-view.c:1308
+#, fuzzy
+msgid "New Folder..."
+msgstr "Φάκελος"
+
+#. display an error message
+#: ../thunar/thunar-standard-view.c:1322
+#, c-format
+msgid "Cannot convert filename `%s' to the local encoding"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1468
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to\n"
+"permanently delete \"%s\"?"
+msgstr ""
+"Είστε βέβαιος/η ότι θέλετε να διαγράψετε όλα τα αρχεία από τα απορρίμματα;"
+
+#: ../thunar/thunar-standard-view.c:1474
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to permanently\n"
+"delete the selected file?"
+msgid_plural ""
+"Are you sure that you want to permanently\n"
+"delete the %u selected files?"
+msgstr[0] ""
+"Είστε βέβαιος/η ότι θέλετε να διαγράψετε όλα τα αρχεία από τα απορρίμματα;"
+msgstr[1] ""
+"Είστε βέβαιος/η ότι θέλετε να διαγράψετε όλα τα αρχεία από τα απορρίμματα;"
+
+#: ../thunar/thunar-standard-view.c:1489
+msgid "If you delete a file, it is permanently lost."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1561
+#, fuzzy
+msgid "Select by Pattern"
+msgstr "Επιλογή βάσει μοτίβου"
+
+#: ../thunar/thunar-standard-view.c:1576
+msgid "Pattern:"
+msgstr "Μοτίβο:"
+
+#: ../thunar/thunar-standard-view.c:2087
+#, fuzzy, c-format
+msgid "Failed to open directory `%s'"
+msgstr "Αδυναμία ανοίγματος καταλόγου %s."
+
+#: ../thunar/thunar-standard-view.c:2387
+#, fuzzy
+msgid "_Copy File"
+msgid_plural "_Copy Files"
+msgstr[0] "_Αντιγραφή Αρχείου"
+msgstr[1] "_Αντιγραφή Αρχείου"
+
+#: ../thunar/thunar-standard-view.c:2393
+#, fuzzy
+msgid "Cu_t File"
+msgid_plural "Cu_t Files"
+msgstr[0] "Αποκοπή _Αρχείων"
+msgstr[1] "Αποκοπή _Αρχείων"
+
+#: ../thunar/thunar-standard-view.c:2402
+#, fuzzy
+msgid "_Delete File"
+msgid_plural "_Delete Files"
+msgstr[0] "Επιλεγμένα αρχεία"
+msgstr[1] "Επιλεγμένα αρχεία"
+
+#: ../thunar/thunar-statusbar.c:191
+msgid "The file whose icon to display"
+msgstr "Το αρχείο του οποίου το εικονίδιο να προβληθει"
+
+#: ../thunar/thunar-statusbar.c:205 ../thunar/thunar-statusbar.c:747
+#, fuzzy
+msgid "Whether to display a loading animation"
+msgstr "Αν θα εμφανίζει μια \"ασυνεπή\" κατάσταση"
+
+#: ../thunar/thunar-statusbar.c:760 ../thunar/thunar-view.c:98
+msgid "Statusbar text"
+msgstr "Κείμενο μπάρας κατάστασης"
+
+#: ../thunar/thunar-statusbar.c:761
+msgid "The main text to be displayed in the statusbar"
+msgstr "Το κυρίως κείμενο που θα εμφανίζεται στη μπάρα κατάστασης"
+
+#: ../thunar/thunar-text-renderer.c:185
+msgid "Text"
+msgstr "Κείμενο"
+
+#: ../thunar/thunar-text-renderer.c:186
+msgid "The text to render"
+msgstr "Κείμενο προς εμφάνιση"
+
+#: ../thunar/thunar-text-renderer.c:200
+msgid "Wrap mode"
+msgstr "Κατάσταση αναδίπλωσης"
+
+#: ../thunar/thunar-text-renderer.c:201
+msgid "The wrap mode"
+msgstr "Η κατάσταση αναδίπλωσης"
+
+#: ../thunar/thunar-text-renderer.c:216
+msgid "Wrap width"
+msgstr "Πλάτος αναδίπλωσης"
+
+#: ../thunar/thunar-text-renderer.c:217
+msgid "The wrap width"
+msgstr "Το πλάτος αναδίπλωσης"
+
+#: ../thunar/thunar-view.c:99
+msgid "Text to be displayed in the statusbar associated with this view"
+msgstr ""
+
+#: ../thunar/thunar-view.c:125 ../thunar/thunar-window.c:233
+msgid "UI manager"
+msgstr "Διαχειριστής UI"
+
+#: ../thunar/thunar-view.c:126
+#, fuzzy
+msgid "UI manager of the surrounding window"
+msgstr "Σφάλμα στο διαχειριστή παραθύρων: "
+
+#: ../thunar/thunar-window.c:149
+msgid "_File"
+msgstr "_Αρχείο"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open New _Window"
+msgstr "Άνοιγμα νέου _παραθύρου"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open a new Thunar window for the displayed location"
+msgstr ""
+"'Ανοιγμα ενός άλλου παράθυρου του Thunar για την προβαλλόμενη τοποθεσία"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close _All Windows"
+msgstr "Κλείσιμο _Όλων των Παραθύρων"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close all Thunar windows"
+msgstr "Κλείσιμο όλων των παραθύρων του Thunar"
+
+#: ../thunar/thunar-window.c:152
+msgid "_Close"
+msgstr "_Κλείσιμο"
+
+#: ../thunar/thunar-window.c:152
+msgid "Close this window"
+msgstr "Κλείσιμο αυτού του παραθύρου"
+
+#: ../thunar/thunar-window.c:153
+msgid "_Edit"
+msgstr "_Επεξεργασία"
+
+#: ../thunar/thunar-window.c:154
+msgid "_View"
+msgstr "_Προβολή"
+
+#: ../thunar/thunar-window.c:155
+msgid "_Location Bar"
+msgstr "Γραμμή _Τοποθεσίας"
+
+#: ../thunar/thunar-window.c:156
+msgid "_Side Pane"
+msgstr "_Πλευρικό Ταμπλό"
+
+#: ../thunar/thunar-window.c:157
+msgid "_Go"
+msgstr "_Μετάβαση"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open _Parent"
+msgstr "Άνοιγμα _Γονικού"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open the parent folder"
+msgstr "Άνοιγμα του γονικού φακέλου"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "_Home"
+msgstr "Αρχικός Κατάλογος"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "Open the home folder"
+msgstr "Άνοιγμα του γονικού φακέλου"
+
+#: ../thunar/thunar-window.c:160
+msgid "Open _Location..."
+msgstr "Άνοιγμα _Τοποθεσίας..."
+
+#: ../thunar/thunar-window.c:160
+msgid "Specify a location to open"
+msgstr "Καθορίστε μια τοποθεσία για άνοιγμα"
+
+#: ../thunar/thunar-window.c:161
+msgid "_Help"
+msgstr "_Βοήθεια"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "_About"
+msgstr "_Περί"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "Display information about Thunar"
+msgstr "Εμφάνιση πληροφοριών σχετικά με το Thunar"
+
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Show _Hidden Files"
+msgstr "Εμφάνιση _Κρυφών Αρχείων"
+
+#: ../thunar/thunar-window.c:171
+msgid "Toggles the display of hidden files in the current window"
+msgstr "Εναλλάσσει την εμφάνιση κρυφών αρχείων στο τρέχον παράθυρο"
+
+#: ../thunar/thunar-window.c:206
+msgid "The directory currently displayed within this window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:234
+msgid "The UI manager used within this window"
+msgstr ""
+
+#.
+#. * add the side pane options
+#.
+#: ../thunar/thunar-window.c:289
+msgid "_Favourites"
+msgstr "_Αγαπημένα"
+
+#: ../thunar/thunar-window.c:295 ../thunar/thunar-window.c:316
+msgid "_Hidden"
+msgstr "Κ_ρυφό"
+
+#.
+#. * add the location bar options
+#.
+#: ../thunar/thunar-window.c:304
+msgid "_Button Style"
+msgstr "_Στυλ κουμπιών"
+
+#: ../thunar/thunar-window.c:310
+msgid "_Traditional Style"
+msgstr "_Παραδοσιακό Στυλ"
+
+#.
+#. * add view options
+#.
+#: ../thunar/thunar-window.c:325
+msgid "View as _Icons"
+msgstr "Προβολή Ε_ικονιδίων"
+
+#: ../thunar/thunar-window.c:331
+msgid "View as _Detailed List"
+msgstr "Προβολή Λίστας"
+
+#. display an error to the user
+#: ../thunar/thunar-window.c:738
+#, fuzzy
+msgid "Failed to open home directory"
+msgstr "Αδυναμία ανοίγματος καταλόγου %s."
+
+#: ../thunar/thunar-window.c:815
+msgid ""
+"Thunar is a fast and easy to use file manager\n"
+"for the Xfce Desktop Environment."
+msgstr ""
+
+#: ../thunar/thunar-window.c:820
+msgid "translator-credits"
+msgstr "Σταύρος Γιαννούρης <stavrosg2002 at freemail.gr>"
+
+#: ../thunarx/thunarx-property-page.c:104
+msgid "Label"
+msgstr "Ετικέτα"
+
+#: ../thunarx/thunarx-property-page.c:105
+msgid "Text of the page's label"
+msgstr "Κείμενο της ετικέτας της σελίδας"
+
+#: ../thunarx/thunarx-property-page.c:117
+#, fuzzy
+msgid "Label widget"
+msgstr "Γραφικό συστατικό ετικέτας"
+
+#: ../thunarx/thunarx-property-page.c:118
+#, fuzzy
+msgid "A widget to display in place of the usual page label"
+msgstr ""
+"Ένα γραφικό συστατικό που θα εμφανίζεται στην θέση της συνήθους ετικέτας "
+"expander"
+
+#: ../Thunar.desktop.in.h:1
+msgid "Browse the filesystem with the file manager"
+msgstr "Περιήγηση του συστήματος αρχείων με τον διαχειριστή αρχείων"
+
+#: ../Thunar.desktop.in.h:2
+msgid "File Manager"
+msgstr "Διαχειριστής Αρχείων"
+
+#: ../Thunar.desktop.in.h:3
+msgid "Thunar File Manager"
+msgstr "Διαχειριστής Αρχείων Thunar"
+
+#~ msgid "Unable to open file %s."
+#~ msgstr "Αδύνατο το άνοιγμα αρχείου %s."
+
+#~ msgid "Files"
+#~ msgstr "Αρχεία"
+
+#~ msgid "The list of files stored within this trash"
+#~ msgstr "Η λίστα με τα αρχεία που βρίσκονται σε αυτό τον κάδο"
+
+#~ msgid "Empty"
+#~ msgstr "Άδειο"
+
+#~ msgid "Whether all trashes are empty"
+#~ msgstr "Εάν είναι άδειοι όλοι οι κάδοι"
+
+#~ msgid "The URI '%s' is invalid"
+#~ msgstr "Το URI '%s' δεν είναι έγκυρο"
+
+#~ msgid "The trash file URI '%s' may not include a '#'"
+#~ msgstr "Το URI του αρχείου κάδου '%s'  μπορεί να μην περιέχει ένα '#'"
+
+#~ msgid "Only local directories can be listed"
+#~ msgstr "Προβολή μόνο τοπικών καταλόγων"
+
+#~ msgid "Computer"
+#~ msgstr "Υπολογιστής"
+
+#~ msgid "Model"
+#~ msgstr "Μοντέλο"
+
+#~ msgid "The model to display"
+#~ msgstr "Ποιο μοντέλο θα απεικονιστεί"
+
+#~ msgid "File column"
+#~ msgstr "Στήλη αρχείου"
+
+#~ msgid "The column which contains the file"
+#~ msgstr "Η στήλη που περιέχει το αρχείο"
+
+#~ msgid "Position column"
+#~ msgstr "Στήλη τοποθέτησης"
+
+#~ msgid "The column which contains the position"
+#~ msgstr "Η στήλη που περιέχει τη θέση"
+
+#~ msgid "Unable to rename file"
+#~ msgstr "Αδυναμία μετονομασίας του αρχείου"
+
+#~ msgid "unknown"
+#~ msgstr "άγνωστο"
+
+#~ msgid "\"%s\" %s"
+#~ msgstr "\"%s\" %s"
+
+#~ msgid "Trash"
+#~ msgstr "Απορρίμματα"
+
+#~ msgid "_Empty Trash Bin"
+#~ msgstr "_Άδειασμα Απορριμμάτων"
+
+#~ msgid "Delete all items in the Trash"
+#~ msgstr "Διαγραφή όλων των αντικειμένων από τα Απορρίμματα"
+
+#~ msgid "This will delete %d file currently located in the trash bin."
+#~ msgid_plural "This will delete %d files currently located in the trash bin."
+#~ msgstr[0] "Αυτό θα διαγράψει %d αρχείο που βρίσκεται τώρα στα απορρίμματα."
+#~ msgstr[1] "Αυτό θα διαγράψει %d αρχεία που βρίσκονται τώρα στα απορρίμματα."
+
+#~ msgid "Other..."
+#~ msgstr "Άλλο..."

Added: desktop/trunk/thunar/branches/upstream/current/po/es.gmo
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/po/es.gmo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/es.po
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/es.po	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/es.po	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1436 @@
+# Spanish translations for Thunar.
+# Copyright (C) 2004-2005 Benedikt Meurer.
+# This file is distributed under the same license as the Thunar package.
+# Pablo Hernández-M. Saiz <homeless3d at gmail.com>, 2005
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Thunar 0.1.2svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-14 15:38+0100\n"
+"PO-Revision-Date: 2005-10-14 23:57+0900\n"
+"Last-Translator: Pablo Hernández-M. Saiz <homeless3d at gmail.com>\n"
+"Language-Team: Spanish <es at li.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"
+
+#: ../thunar-vfs/thunar-vfs-info.c:261
+msgid "No Exec field specified"
+msgstr "Campo de ejecución no especificado"
+
+#: ../thunar-vfs/thunar-vfs-info.c:269
+msgid "Unable to parse file"
+msgstr "Imposible interpretar archivo"
+
+#: ../thunar-vfs/thunar-vfs-info.c:359
+msgid "Invalid file name"
+msgstr "Nombre de archivo inválido"
+
+#: ../thunar-vfs/thunar-vfs-info.c:381
+msgid "Invalid desktop file"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:615
+#, fuzzy, c-format
+msgid "Failed to stat file `%s': %s"
+msgstr "Imposible renombrar %s."
+
+#. ask the user whether we should remove the target first
+#. ask the user whether to overwrite
+#: ../thunar-vfs/thunar-vfs-link-job.c:176
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:685
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to overwrite it?"
+msgstr ""
+"%s ya existe.\n"
+"\n"
+"¿Desea sobreescribirlo?"
+
+#: ../thunar-vfs/thunar-vfs-link-job.c:200
+#, fuzzy, c-format
+msgid "Failed to remove `%s': %s"
+msgstr "Imposible renombrar %s."
+
+#. ask the user whether to skip this file (used for cancellation only)
+#. ask the user whether to skip
+#: ../thunar-vfs/thunar-vfs-link-job.c:212
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:705
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"\n"
+"\n"
+"¿Quiere dejarlo como está?"
+
+#: ../thunar-vfs/thunar-vfs-mime-database.c:1625
+#, c-format
+msgid "Failed to load application from file %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mime-info.c:228
+#, c-format
+msgid "%s document"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mkdir-job.c:165
+#, fuzzy, c-format
+msgid "Unable to create directory `%s': %s"
+msgstr "Imposible crear el directorio %s."
+
+#: ../thunar-vfs/thunar-vfs-path.c:657
+msgid "Path too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:761
+msgid "URI too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:144 ../thunar/thunar-details-view.c:150
+msgid "Size"
+msgstr "Tamaño"
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:145
+msgid "The desired thumbnail size"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:233
+msgid "Collecting files..."
+msgstr ""
+
+#. display info message
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:295
+#, fuzzy
+msgid "Deleting directories..."
+msgstr "Borrando archivos..."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:315
+#, fuzzy, c-format
+msgid "Unable to remove directory `%s': %s"
+msgstr "Imposible crear el directorio %s."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:593
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:639
+#, fuzzy, c-format
+msgid "Unable to remove `%s': %s"
+msgstr "Imposible eliminar %s."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:831
+msgid "Cannot transfer the root directory"
+msgstr ""
+
+#. tell the user that we're preparing the unlink job
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:161
+msgid "Preparing..."
+msgstr "Preparando..."
+
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:234
+#, c-format
+msgid ""
+"Unable to remove %s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"No se puede eliminar %s.\n"
+"\n"
+"¿Quiere dejarlo como está?"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:157
+#, c-format
+msgid "copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:658
+#: ../thunar/thunar-properties-dialog.c:588
+#, c-format
+msgid "link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:161
+#, c-format
+msgid "another copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:162
+#, c-format
+msgid "another link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:165
+#, c-format
+msgid "third copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:166
+#, c-format
+msgid "third link to %s"
+msgstr ""
+
+#. if we had no match on the NAMES, try the "%uth copy of %s" pattern
+#: ../thunar-vfs/thunar-vfs-xfer.c:205 ../thunar-vfs/thunar-vfs-xfer.c:221
+#, c-format
+msgid "%uth copy of %s"
+msgid_plural "%uth copy of %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:223
+#, c-format
+msgid "%uth link to %s"
+msgid_plural "%uth link to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#. setup the error return
+#: ../thunar-vfs/thunar-vfs-xfer.c:263
+#, fuzzy, c-format
+msgid "Failed to create directory `%s'"
+msgstr "Imposible crear el directorio %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:286
+#, fuzzy, c-format
+msgid "Failed to create named fifo `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:318
+#, c-format
+msgid "Failed to open `%s' for reading"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:330
+#, c-format
+msgid "Failed to open `%s' for writing"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:345
+#, fuzzy, c-format
+msgid "Failed to read data from `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:357
+#, fuzzy, c-format
+msgid "Failed to write data to `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:371
+#, fuzzy, c-format
+msgid "Failed to remove `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:415
+#, fuzzy, c-format
+msgid "Failed to read link target from `%s'"
+msgstr "Imposible seguir el enlace de %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:423
+#, fuzzy, c-format
+msgid "Failed to create symbolic link `%s'"
+msgstr "Imposible crear el enlace de %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:431
+#, fuzzy, c-format
+msgid "Failed to change mode of `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:465 ../thunar-vfs/thunar-vfs-xfer.c:525
+#, c-format
+msgid "Failed to determine file info for `%s'"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:494
+#, fuzzy, c-format
+msgid "Failed to copy special file `%s'"
+msgstr "Imposible copiar el archivo %s."
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:536
+#, fuzzy, c-format
+msgid "Failed to create symbolic `%s'"
+msgstr "Imposible crear el enlace de %s."
+
+#. setup application name
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:347
+msgid "Thunar"
+msgstr "Thunar"
+
+#. display an error message to the user
+#: ../thunar/thunar-application.c:190
+#, fuzzy
+msgid "Failed to launch operation"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar/thunar-application.c:411
+msgid "Copying files..."
+msgstr "Copiando archivos..."
+
+#: ../thunar/thunar-application.c:445
+msgid "Creating symbolic links..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:480
+msgid "Moving files..."
+msgstr "Moviendo archivos..."
+
+#: ../thunar/thunar-application.c:515
+msgid "Deleting files..."
+msgstr "Borrando archivos..."
+
+#: ../thunar/thunar-application.c:555
+#, fuzzy
+msgid "Creating directories..."
+msgstr "Directorio actual"
+
+#: ../thunar/thunar-chooser-dialog.c:137 ../thunar/thunar-emblem-chooser.c:115
+#: ../thunar/thunar-emblem-chooser.c:116 ../thunar/thunar-icon-renderer.c:129
+#: ../thunar/thunar-open-with-action.c:115
+#: ../thunar/thunar-open-with-action.c:116
+#: ../thunar/thunar-properties-dialog.c:142 ../thunar/thunar-statusbar.c:190
+msgid "File"
+msgstr "Archivo"
+
+#: ../thunar/thunar-chooser-dialog.c:138
+msgid "The file for which an application should be chosen"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:150
+msgid "Open"
+msgstr "Abrir"
+
+#: ../thunar/thunar-chooser-dialog.c:151
+msgid "Whether the chooser should open the specified file"
+msgstr ""
+
+#. the "Open with" action
+#: ../thunar/thunar-chooser-dialog.c:176 ../thunar/thunar-launcher.c:197
+msgid "Open With"
+msgstr "Abrir con"
+
+#. create the "Custom command" expand
+#: ../thunar/thunar-chooser-dialog.c:238
+msgid "Use a _custom command:"
+msgstr ""
+
+#. create the "Custom command" button
+#: ../thunar/thunar-chooser-dialog.c:256
+#, fuzzy
+msgid "_Browse"
+msgstr "_Cerrar"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:429
+#, fuzzy, c-format
+msgid "Failed to add new application `%s'"
+msgstr "Imposible renombrar %s."
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:451
+#, fuzzy, c-format
+msgid "Failed to set default application for `%s'"
+msgstr "Imposible renombrar %s."
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:464
+#, fuzzy, c-format
+msgid "Failed to execute `%s'"
+msgstr "Imposible renombrar %s."
+
+#. update the header label
+#: ../thunar/thunar-chooser-dialog.c:580
+#, c-format
+msgid "Open <i>%s</i> and other files of type \"%s\" with:"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:602
+#, fuzzy
+msgid "Select an Application"
+msgstr "Otra aplicación..."
+
+#: ../thunar/thunar-chooser-dialog.c:612
+#, fuzzy
+msgid "All Files"
+msgstr "Archivos"
+
+#: ../thunar/thunar-chooser-dialog.c:617
+#, fuzzy
+msgid "Executable Files"
+msgstr "Seleccionar _todos los archivos"
+
+#: ../thunar/thunar-chooser-dialog.c:632
+msgid "Perl Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:638
+msgid "Python Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:644
+msgid "Ruby Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:650
+msgid "Shell Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:116 ../thunar/thunar-folder.c:134
+#: ../thunar/thunar-standard-view.c:357 ../thunar/thunar-statusbar.c:204
+#: ../thunar/thunar-statusbar.c:746 ../thunar/thunar-view.c:82
+msgid "Loading"
+msgstr "Cargando"
+
+#: ../thunar/thunar-chooser-model.c:117
+msgid "Whether the model is currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:129
+msgid "Mime info"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:130
+msgid "The mime info for the model"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:306
+msgid "None available"
+msgstr ""
+
+#. append the "Recommended Applications:" category
+#: ../thunar/thunar-chooser-model.c:350
+msgid "Recommended Applications:"
+msgstr ""
+
+#. append the "Other Applications:" category
+#: ../thunar/thunar-chooser-model.c:353
+#, fuzzy
+msgid "Other Applications:"
+msgstr "Otra aplicación..."
+
+#: ../thunar/thunar-clipboard-manager.c:149
+msgid "Can paste"
+msgstr "Se puede pegar"
+
+#: ../thunar/thunar-clipboard-manager.c:150
+msgid "Whether the clipboard content can be pasted"
+msgstr ""
+
+#. tell the user that we cannot paste
+#: ../thunar/thunar-clipboard-manager.c:333
+msgid "There is nothing on the clipboard to paste"
+msgstr "No hay nada en el portapapeles que pueda ser pegado"
+
+#: ../thunar/thunar-create-dialog.c:100 ../thunar/thunar-create-dialog.c:101
+#, fuzzy
+msgid "Filename"
+msgstr "Gestor de archivos"
+
+#: ../thunar/thunar-create-dialog.c:113 ../thunar/thunar-create-dialog.c:114
+msgid "Mime Info"
+msgstr ""
+
+#: ../thunar/thunar-create-dialog.c:148
+msgid "Enter the new name:"
+msgstr ""
+
+#: ../thunar/thunar-details-view.c:131
+msgid "Name"
+msgstr "Nombre"
+
+#: ../thunar/thunar-details-view.c:165
+msgid "Permissions"
+msgstr "Permisos"
+
+#: ../thunar/thunar-details-view.c:180
+msgid "Type"
+msgstr "Tipo"
+
+#: ../thunar/thunar-details-view.c:192
+msgid "Date modified"
+msgstr "Fecha de modificación"
+
+#: ../thunar/thunar-details-view.c:221
+msgid "Details view"
+msgstr "Vista detallada"
+
+#: ../thunar/thunar-details-view.c:222
+msgid "Detailed directory listing"
+msgstr "Listado detallado del directorio"
+
+#: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#, c-format
+msgid "%s."
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+#, fuzzy
+msgid "_Copy here"
+msgstr "_Copiar archivo"
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Move here"
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Link here"
+msgstr ""
+
+#. display an error to the user
+#. display an error message to the user
+#: ../thunar/thunar-dnd.c:190 ../thunar/thunar-launcher.c:314
+#, fuzzy, c-format
+msgid "Unable to execute file `%s'"
+msgstr "No se puede ejecutar el archivo \"%s\"."
+
+#: ../thunar/thunar-extension-manager.c:158
+msgid "Resident"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:159
+msgid "Ensures that an extension will never be unloaded."
+msgstr ""
+
+#. append the remove menu item
+#: ../thunar/thunar-favourites-view.c:292
+msgid "_Remove Favourite"
+msgstr "_Borrar marcador"
+
+#. append the rename menu item
+#: ../thunar/thunar-favourites-view.c:307
+msgid "Re_name Favourite"
+msgstr "Re_nombrar marcador"
+
+#: ../thunar/thunar-favourites-view.c:627
+#, c-format
+msgid "The path '%s' does not refer to a directory"
+msgstr ""
+
+#. display an error message to the user
+#: ../thunar/thunar-favourites-view.c:646
+#, fuzzy
+msgid "Failed to add new favourite"
+msgstr "No se puede añadir el marcador"
+
+#: ../thunar/thunar-file.c:681
+msgid "The root folder has no parent"
+msgstr ""
+
+#: ../thunar/thunar-file.c:873
+msgid "Filesystem"
+msgstr "Raíz"
+
+# msgstr "Sistema de archivos"
+#: ../thunar/thunar-file.c:897
+msgid "Home"
+msgstr "Casa"
+
+#: ../thunar/thunar-folder.c:135
+msgid "Whether the contents of the folder are currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:163
+msgid "Icon theme"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:164
+msgid "The icon theme used by the icon factory"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:116
+msgid "Drop file"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:117
+msgid "The file which should be rendered in as drop acceptor"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:130
+msgid "The file whose icon to render"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:145 ../thunar/thunar-icon-renderer.c:146
+#: ../thunar/thunar-text-renderer.c:172 ../thunar/thunar-text-renderer.c:173
+msgid "Follow state"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:158 ../thunar/thunar-path-entry.c:179
+msgid "Icon size"
+msgstr "Tamaño de icono"
+
+#: ../thunar/thunar-icon-renderer.c:159
+msgid "The icon size in pixels"
+msgstr "Tamaño del icono en pixels"
+
+#: ../thunar/thunar-icon-view.c:111
+msgid "Arran_ge Items"
+msgstr "Organizar los _elementos"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Sort By _Name"
+msgstr "Por _nombre"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Keep items sorted by their name in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Sort By _Size"
+msgstr "Por ta_maño"
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Keep items sorted by their size in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Sort By _Type"
+msgstr "Por _tipo"
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Keep items sorted by their type in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Sort By Modification _Date"
+msgstr "Por _fecha de modificación"
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Keep items sorted by their modification date in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "_Ascending"
+msgstr "_Ascendente"
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "Sort items in ascending order"
+msgstr "Ordenar elementos en orden ascendente"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "_Descending"
+msgstr "_Descendente"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "Sort items in descending order"
+msgstr "Ordenar elementos en orden descendente"
+
+#: ../thunar/thunar-icon-view.c:226
+msgid "Icon view"
+msgstr "Vista de iconos"
+
+#: ../thunar/thunar-icon-view.c:227
+msgid "Icon based directory listing"
+msgstr "listado de directorio con iconos"
+
+#: ../thunar/thunar-launcher.c:134 ../thunar/thunar-launcher.c:135
+msgid "Action group"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:147 ../thunar/thunar-launcher.c:148
+msgid "Selected files"
+msgstr "Archivos seleccionados"
+
+#: ../thunar/thunar-launcher.c:160 ../thunar/thunar-launcher.c:161
+msgid "Widget"
+msgstr ""
+
+#. the "Open" action
+#: ../thunar/thunar-launcher.c:189 ../thunar/thunar-launcher.c:521
+#: ../thunar/thunar-launcher.c:539
+msgid "_Open"
+msgstr "_Abrir"
+
+#: ../thunar/thunar-launcher.c:189
+msgid "Open the selected items"
+msgstr "Abrir el elemento seleccionado"
+
+#. the "Open in New Window" action
+#: ../thunar/thunar-launcher.c:193
+msgid "Open in New Window"
+msgstr "Abrir en una ventana nueva"
+
+#: ../thunar/thunar-launcher.c:193
+msgid "Open the selected directories in new Thunar windows"
+msgstr "Abre el elemento en una ventana de Thunar nueva"
+
+#: ../thunar/thunar-launcher.c:347
+#, c-format
+msgid "Unable to open \"%s\"."
+msgstr "No se puede abrir \"%s\"."
+
+#: ../thunar/thunar-launcher.c:352
+#, c-format
+msgid "Unable to open %d file."
+msgid_plural "Unable to open %d files."
+msgstr[0] "No se puede abrir %d archivo."
+msgstr[1] "No se puede abrir %d archivos."
+
+#: ../thunar/thunar-launcher.c:458
+msgid "Are you sure you want to open all folders?"
+msgstr "¿Seguro que quiere abrir todas las carpetas?"
+
+#: ../thunar/thunar-launcher.c:460
+#, c-format
+msgid "This will open %d separate window."
+msgid_plural "This will open %d separate windows."
+msgstr[0] "Esto abrirá %d ventana diferente."
+msgstr[1] "Esto abrirá %d ventanas diferentes."
+
+#: ../thunar/thunar-launcher.c:519
+#, c-format
+msgid "Open in %d New Window"
+msgid_plural "Open in %d New Windows"
+msgstr[0] "Abrir en %d ventana nueva"
+msgstr[1] "Abrir en %d ventanas nuevas"
+
+#: ../thunar/thunar-launcher.c:537
+#, fuzzy
+msgid "_Execute"
+msgstr "Ejecutar"
+
+#: ../thunar/thunar-list-model.c:258
+msgid "Folder"
+msgstr "Carpeta"
+
+#: ../thunar/thunar-list-model.c:259
+msgid "The stores folder"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:271
+msgid "Folders first"
+msgstr "Carpetas primero"
+
+#: ../thunar/thunar-list-model.c:272
+msgid "Folders first in sorting"
+msgstr "Ordenado con las carpetas primero"
+
+#: ../thunar/thunar-list-model.c:284
+msgid "Number of files"
+msgstr "Número de archivos"
+
+#: ../thunar/thunar-list-model.c:285
+msgid "Number of visible files"
+msgstr "Número de archivos visibles"
+
+#: ../thunar/thunar-list-model.c:297 ../thunar/thunar-view.c:111
+#: ../thunar/thunar-window.c:218
+msgid "Show hidden"
+msgstr "Mostrar ocultos"
+
+#: ../thunar/thunar-list-model.c:298 ../thunar/thunar-view.c:112
+#: ../thunar/thunar-window.c:219
+msgid "Whether to display hidden files"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:656 ../thunar/thunar-properties-dialog.c:586
+msgid "broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1924
+#, c-format
+msgid "%d item, Free space: %s"
+msgid_plural "%d items, Free space: %s"
+msgstr[0] "%d elemento, espacio libre %s"
+msgstr[1] "%d elementos, espacio libre %s"
+
+#: ../thunar/thunar-list-model.c:1929
+#, c-format
+msgid "%d item"
+msgid_plural "%d items"
+msgstr[0] "%d elemento"
+msgstr[1] "%d elementos"
+
+#: ../thunar/thunar-list-model.c:1945
+#, c-format
+msgid "\"%s\" broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1949
+#, fuzzy, c-format
+msgid "\"%s\" (%s) link to %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1954
+#, c-format
+msgid "\"%s\" (%s) %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1971 ../thunar/thunar-list-model.c:1976
+#, c-format
+msgid "%d item selected"
+msgid_plural "%d items selected (%s)"
+msgstr[0] "%d elemento seleccionado"
+msgstr[1] "%d elementos seleccionados (%s)"
+
+#: ../thunar/thunar-location-buttons.c:214
+msgid "Spacing"
+msgstr "Espaciado"
+
+#: ../thunar/thunar-location-buttons.c:215
+msgid "The amount of space between the path buttons"
+msgstr "Espacio entre los botones del path"
+
+#: ../thunar/thunar-location-dialog.c:85
+msgid "Open Location"
+msgstr "Abrir dirección..."
+
+#: ../thunar/thunar-location-dialog.c:99
+msgid "_Location:"
+msgstr "_Dirección"
+
+#: ../thunar/thunar-navigator.c:137 ../thunar/thunar-window.c:205
+msgid "Current directory"
+msgstr "Directorio actual"
+
+#: ../thunar/thunar-navigator.c:138
+msgid "The directory currently displayed by the navigator"
+msgstr ""
+
+#: ../thunar/thunar-open-with-action.c:320
+#, c-format
+msgid "%s (default)"
+msgstr "%s (Por defecto)"
+
+#. add our custom children
+#: ../thunar/thunar-open-with-action.c:371
+msgid "Other Application..."
+msgstr "Otra aplicación..."
+
+#: ../thunar/thunar-path-entry.c:167
+msgid "Current file"
+msgstr "Archivo actual"
+
+#: ../thunar/thunar-path-entry.c:168
+msgid "The currently displayed file"
+msgstr ""
+
+#: ../thunar/thunar-path-entry.c:180
+msgid "The icon size for the path entry"
+msgstr ""
+
+#: ../thunar/thunar-preferences.c:178
+#, fuzzy, c-format
+msgid "Failed to create the Thunar configuration directory in %s"
+msgstr "Imposible crear el directorio %s."
+
+#: ../thunar/thunar-preferences.c:186
+#, fuzzy, c-format
+msgid "Failed to open preferences database in %s: %s"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar/thunar-progress-dialog.c:129
+msgid "Job"
+msgstr "Trabajo"
+
+#: ../thunar/thunar-progress-dialog.c:130
+msgid "The job whose progress to display"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:273
+msgid "Question"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:299
+msgid "_Yes"
+msgstr "_Si"
+
+#: ../thunar/thunar-progress-dialog.c:303
+msgid "Yes to _all"
+msgstr "Si a_todo"
+
+#: ../thunar/thunar-progress-dialog.c:307
+msgid "_No"
+msgstr "_No"
+
+#: ../thunar/thunar-progress-dialog.c:311
+msgid "_Cancel"
+msgstr "_Cancelar"
+
+#: ../thunar/thunar-progress-dialog.c:437
+#, c-format
+msgid "(%lu hour remaining)"
+msgid_plural "(%lu hours remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:442
+#, c-format
+msgid "(%lu minute remaining)"
+msgid_plural "(%lu minutes remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:447
+#, c-format
+msgid "(%lu second remaining)"
+msgid_plural "(%lu seconds remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-properties-dialog.c:143
+msgid "The file displayed by the dialog"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:180
+msgid "General"
+msgstr "General"
+
+#: ../thunar/thunar-properties-dialog.c:197
+msgid "Name:"
+msgstr "Nombre:"
+
+#.
+#. Second box (kind)
+#.
+#: ../thunar/thunar-properties-dialog.c:222
+msgid "Kind:"
+msgstr "Tipo:"
+
+#.
+#. Third box (modified, accessed)
+#.
+#: ../thunar/thunar-properties-dialog.c:247
+msgid "Modified:"
+msgstr "Modificado:"
+
+#: ../thunar/thunar-properties-dialog.c:260
+msgid "Accessed:"
+msgstr "Accedido:"
+
+#.
+#. Fourth box (volume, size)
+#.
+#: ../thunar/thunar-properties-dialog.c:284
+msgid "Volume:"
+msgstr "Volumen:"
+
+#: ../thunar/thunar-properties-dialog.c:307
+msgid "Size:"
+msgstr "Tamaño:"
+
+#.
+#. Emblem chooser
+#.
+#: ../thunar/thunar-properties-dialog.c:331
+msgid "Emblems"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:563
+#, c-format
+msgid "%s Info"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:644
+#, c-format
+msgid "%s (%u Bytes)"
+msgstr "%s (%u Bytes)"
+
+#. display an error message
+#: ../thunar/thunar-properties-dialog.c:690
+#: ../thunar/thunar-standard-view.c:2135
+#, fuzzy, c-format
+msgid "Failed to rename `%s'"
+msgstr "Imposible renombrar %s."
+
+#: ../thunar/thunar-standard-view.c:245
+msgid "File Context Menu"
+msgstr "Menú contextual de archivo"
+
+#: ../thunar/thunar-standard-view.c:246
+msgid "Folder Context Menu"
+msgstr "Menú contextual de carpeta"
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create _Folder..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create an empty folder within the current folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "_Properties"
+msgstr "_Propiedades"
+
+#: ../thunar/thunar-standard-view.c:248
+#, fuzzy
+msgid "View the properties of the selected file"
+msgstr "Ver las propiedades del elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "_Copy Files"
+msgstr "_Copiar archivos"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "Copy the selected files"
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cu_t Files"
+msgstr "Cor_tar archivos"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cut the selected files"
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:251
+#, fuzzy
+msgid "_Paste Files"
+msgstr "_Pegar archivos"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "_Delete Files"
+msgstr "Archivos seleccionados"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "Delete the selected files"
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:253
+#, fuzzy
+msgid "Paste Files into Folder"
+msgstr "Pegar archivos en la carpeta"
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste files into the selected folder"
+msgstr "Pegar archivos en la carpeta seleccionada"
+
+#: ../thunar/thunar-standard-view.c:254
+#, fuzzy
+msgid "Select _all Files"
+msgstr "Seleccionar _todos los archivos"
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select all files in this window"
+msgstr "Seleccionar todos los archivos en esta ventana"
+
+#: ../thunar/thunar-standard-view.c:255
+#, fuzzy
+msgid "Select by _Pattern"
+msgstr "Seleccionar por _patrón"
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select all files that match a certain pattern"
+msgstr "Selecciona todos los archivos que coinciden con un patrón"
+
+#: ../thunar/thunar-standard-view.c:256 ../thunar/thunar-standard-view.c:2414
+msgid "Du_plicate File"
+msgid_plural "Du_plicate Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:256
+#, fuzzy
+msgid "Duplicate each selected file"
+msgstr "Abrir el elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:257 ../thunar/thunar-standard-view.c:2420
+msgid "Ma_ke Link"
+msgid_plural "Ma_ke Links"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:257
+msgid "Create a symbolic link for each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "_Rename"
+msgstr "_Renombrar..."
+
+#: ../thunar/thunar-standard-view.c:258
+#, fuzzy
+msgid "Rename the selected file"
+msgstr "Renombra el elemento seleccionado"
+
+#: ../thunar/thunar-standard-view.c:358 ../thunar/thunar-view.c:83
+msgid "Whether the view is currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:853
+msgid "Loading folder contents..."
+msgstr "Cargando el contenido de la carpeta..."
+
+#: ../thunar/thunar-standard-view.c:1305
+#, fuzzy
+msgid "New Folder"
+msgstr "Carpeta"
+
+#: ../thunar/thunar-standard-view.c:1308
+#, fuzzy
+msgid "New Folder..."
+msgstr "Carpeta"
+
+#. display an error message
+#: ../thunar/thunar-standard-view.c:1322
+#, c-format
+msgid "Cannot convert filename `%s' to the local encoding"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1468
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to\n"
+"permanently delete \"%s\"?"
+msgstr "¿Esta seguro de que desea borrar todos los elementos de la papelera?"
+
+#: ../thunar/thunar-standard-view.c:1474
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to permanently\n"
+"delete the selected file?"
+msgid_plural ""
+"Are you sure that you want to permanently\n"
+"delete the %u selected files?"
+msgstr[0] ""
+"¿Esta seguro de que desea borrar todos los elementos de la papelera?"
+msgstr[1] ""
+"¿Esta seguro de que desea borrar todos los elementos de la papelera?"
+
+#: ../thunar/thunar-standard-view.c:1489
+msgid "If you delete a file, it is permanently lost."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1561
+#, fuzzy
+msgid "Select by Pattern"
+msgstr "Patrón de selección"
+
+#: ../thunar/thunar-standard-view.c:1576
+msgid "Pattern:"
+msgstr "Patrón:"
+
+#: ../thunar/thunar-standard-view.c:2087
+#, fuzzy, c-format
+msgid "Failed to open directory `%s'"
+msgstr "Imposible abrir el directorio %s."
+
+#: ../thunar/thunar-standard-view.c:2387
+#, fuzzy
+msgid "_Copy File"
+msgid_plural "_Copy Files"
+msgstr[0] "_Copiar archivo"
+msgstr[1] "_Copiar archivos"
+
+#: ../thunar/thunar-standard-view.c:2393
+#, fuzzy
+msgid "Cu_t File"
+msgid_plural "Cu_t Files"
+msgstr[0] "Cor_tar archivo"
+msgstr[1] "Cor_tar archivos"
+
+#: ../thunar/thunar-standard-view.c:2402
+#, fuzzy
+msgid "_Delete File"
+msgid_plural "_Delete Files"
+msgstr[0] "Archivos seleccionados"
+msgstr[1] "Archivos seleccionados"
+
+#: ../thunar/thunar-statusbar.c:191
+msgid "The file whose icon to display"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:205 ../thunar/thunar-statusbar.c:747
+msgid "Whether to display a loading animation"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:760 ../thunar/thunar-view.c:98
+msgid "Statusbar text"
+msgstr "Texto de la barra de estado"
+
+#: ../thunar/thunar-statusbar.c:761
+msgid "The main text to be displayed in the statusbar"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:185
+msgid "Text"
+msgstr "Texto"
+
+#: ../thunar/thunar-text-renderer.c:186
+msgid "The text to render"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:200
+msgid "Wrap mode"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:201
+msgid "The wrap mode"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:216
+msgid "Wrap width"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:217
+msgid "The wrap width"
+msgstr ""
+
+#: ../thunar/thunar-view.c:99
+msgid "Text to be displayed in the statusbar associated with this view"
+msgstr ""
+
+#: ../thunar/thunar-view.c:125 ../thunar/thunar-window.c:233
+msgid "UI manager"
+msgstr ""
+
+#: ../thunar/thunar-view.c:126
+msgid "UI manager of the surrounding window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:149
+msgid "_File"
+msgstr "_Archivo"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open New _Window"
+msgstr "Nueva _ventana"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open a new Thunar window for the displayed location"
+msgstr ""
+
+#: ../thunar/thunar-window.c:151
+msgid "Close _All Windows"
+msgstr "Cerrar _todas las ventanas"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close all Thunar windows"
+msgstr "Cerrar todas las ventanas de Thunar"
+
+#: ../thunar/thunar-window.c:152
+msgid "_Close"
+msgstr "_Cerrar"
+
+#: ../thunar/thunar-window.c:152
+msgid "Close this window"
+msgstr "Cerrar esta ventana"
+
+#: ../thunar/thunar-window.c:153
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../thunar/thunar-window.c:154
+msgid "_View"
+msgstr "_Ver"
+
+#: ../thunar/thunar-window.c:155
+msgid "_Location Bar"
+msgstr "Barra de _dirección"
+
+#: ../thunar/thunar-window.c:156
+msgid "_Side Pane"
+msgstr "Panel _lateral"
+
+#: ../thunar/thunar-window.c:157
+msgid "_Go"
+msgstr "_Ir a"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open _Parent"
+msgstr "Abrir _antecesor"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open the parent folder"
+msgstr "Abre la carpeta anterior"
+
+# msgstr "Sistema de archivos"
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "_Home"
+msgstr "Casa"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "Open the home folder"
+msgstr "Abre la carpeta anterior"
+
+#: ../thunar/thunar-window.c:160
+msgid "Open _Location..."
+msgstr "Abrir _dirección..."
+
+#: ../thunar/thunar-window.c:160
+msgid "Specify a location to open"
+msgstr "Especificar una dirección para abrir"
+
+#: ../thunar/thunar-window.c:161
+msgid "_Help"
+msgstr "A_yuda"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "_About"
+msgstr "_Acerca de"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "Display information about Thunar"
+msgstr "Muestra información acerca de Thunar"
+
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Show _Hidden Files"
+msgstr "Mostrar los archivos _ocultos"
+
+#: ../thunar/thunar-window.c:171
+msgid "Toggles the display of hidden files in the current window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:206
+msgid "The directory currently displayed within this window"
+msgstr ""
+
+#: ../thunar/thunar-window.c:234
+msgid "The UI manager used within this window"
+msgstr ""
+
+#.
+#. * add the side pane options
+#.
+#: ../thunar/thunar-window.c:289
+msgid "_Favourites"
+msgstr "_Marcadores"
+
+#: ../thunar/thunar-window.c:295 ../thunar/thunar-window.c:316
+msgid "_Hidden"
+msgstr "_Oculto/a"
+
+#.
+#. * add the location bar options
+#.
+#: ../thunar/thunar-window.c:304
+msgid "_Button Style"
+msgstr "Estilo _botón"
+
+#: ../thunar/thunar-window.c:310
+msgid "_Traditional Style"
+msgstr "Estilo _tradicional"
+
+#.
+#. * add view options
+#.
+#: ../thunar/thunar-window.c:325
+msgid "View as _Icons"
+msgstr "Ver como _Iconos"
+
+#: ../thunar/thunar-window.c:331
+msgid "View as _Detailed List"
+msgstr "Ver como _Lista"
+
+#. display an error to the user
+#: ../thunar/thunar-window.c:738
+#, fuzzy
+msgid "Failed to open home directory"
+msgstr "Imposible abrir el directorio %s."
+
+#: ../thunar/thunar-window.c:815
+msgid ""
+"Thunar is a fast and easy to use file manager\n"
+"for the Xfce Desktop Environment."
+msgstr ""
+"Thunar es un gestor de archivos rápido\n"
+"y fácil de usar para el escritorio Xfce"
+
+#: ../thunar/thunar-window.c:820
+msgid "translator-credits"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:104
+msgid "Label"
+msgstr "Etiqueta"
+
+#: ../thunarx/thunarx-property-page.c:105
+msgid "Text of the page's label"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:117
+msgid "Label widget"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:118
+msgid "A widget to display in place of the usual page label"
+msgstr ""
+
+#: ../Thunar.desktop.in.h:1
+msgid "Browse the filesystem with the file manager"
+msgstr "Explorar el sistema de archivos con el navegador"
+
+#: ../Thunar.desktop.in.h:2
+msgid "File Manager"
+msgstr "Gestor de archivos"
+
+#: ../Thunar.desktop.in.h:3
+msgid "Thunar File Manager"
+msgstr "Gestor de archivos Thunar"
+
+#~ msgid ""
+#~ "Unable to query information about\n"
+#~ "the file %s."
+#~ msgstr ""
+#~ "No se puede obtener información sobre\n"
+#~ "el archivo %s."
+
+#~ msgid "Unable to open file %s."
+#~ msgstr "Imposible abrir el archivo %s."
+
+#~ msgid "Files"
+#~ msgstr "Archivos"
+
+#~ msgid "Empty"
+#~ msgstr "Vacio"
+
+#~ msgid "The URI '%s' uses an unsupported scheme"
+#~ msgstr "La URI '%s' usa un scheme no soportado"
+
+#~ msgid "Only local directories can be listed"
+#~ msgstr "Solo los directorios locales pueden ser mostrados"
+
+#~ msgid "Computer"
+#~ msgstr "Equipo"
+
+#~ msgid "Model"
+#~ msgstr "Modelo"
+
+#~ msgid "The model to display"
+#~ msgstr "Modelo a mostrar"
+
+#~ msgid "File column"
+#~ msgstr "Columna de archivo"
+
+#~ msgid "The column which contains the file"
+#~ msgstr "La columna que contiene el archivo"
+
+#~ msgid "Position column"
+#~ msgstr "Columna de la posición"
+
+#~ msgid "The column which contains the position"
+#~ msgstr "La columna que contiene la posición"
+
+#~ msgid "Unable to rename file"
+#~ msgstr "No se puede renombrar el archivo"
+
+#~ msgid "unknown"
+#~ msgstr "Desconocido"
+
+#~ msgid "\"%s\" %s"
+#~ msgstr "\"%s\" %s"
+
+#~ msgid "Trash"
+#~ msgstr "Papelera"
+
+#~ msgid "_Empty Trash Bin"
+#~ msgstr "Vaciar la papelera de reciclaje"
+
+#~ msgid "Delete all items in the Trash"
+#~ msgstr "Borrar todos los elementos de la papelera"
+
+#~ msgid "This will delete %d file currently located in the trash bin."
+#~ msgid_plural "This will delete %d files currently located in the trash bin."
+#~ msgstr[0] "Esto borrará %d archivo de la papelera de reciclaje."
+#~ msgstr[1] "Esto borrará %d archivos de la papelera de reciclaje."

Added: desktop/trunk/thunar/branches/upstream/current/po/hu.gmo
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/po/hu.gmo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/hu.po
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/hu.po	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/hu.po	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1460 @@
+# Hungarian translations for Thunar.
+# Copyright (C) 2004-2005 Benedikt Meurer.
+# This file is distributed under the same license as the Thunar package.
+# SZERVÁC Attila <sas at 321.hu>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Thunar 0.1.2svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-14 15:38+0100\n"
+"PO-Revision-Date: 2005-10-06 22:02+0900\n"
+"Last-Translator: SZERVÁC Attila <sas at 321.hu>\n"
+"Language-Team: Hungarian <translation-team-hu at lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../thunar-vfs/thunar-vfs-info.c:261
+msgid "No Exec field specified"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:269
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Nem nyitható meg e fájl: %s"
+
+#: ../thunar-vfs/thunar-vfs-info.c:359
+msgid "Invalid file name"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:381
+msgid "Invalid desktop file"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-info.c:615
+#, fuzzy, c-format
+msgid "Failed to stat file `%s': %s"
+msgstr "Nem törölhető: %s"
+
+#. ask the user whether we should remove the target first
+#. ask the user whether to overwrite
+#: ../thunar-vfs/thunar-vfs-link-job.c:176
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:685
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to overwrite it?"
+msgstr ""
+"%s már létezik.\n"
+"\n"
+"Felülírod?"
+
+#: ../thunar-vfs/thunar-vfs-link-job.c:200
+#, fuzzy, c-format
+msgid "Failed to remove `%s': %s"
+msgstr "Nem törölhető: %s"
+
+#. ask the user whether to skip this file (used for cancellation only)
+#. ask the user whether to skip
+#: ../thunar-vfs/thunar-vfs-link-job.c:212
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:705
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"\n"
+"\n"
+"Kihagyod?"
+
+#: ../thunar-vfs/thunar-vfs-mime-database.c:1625
+#, c-format
+msgid "Failed to load application from file %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mime-info.c:228
+#, c-format
+msgid "%s document"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-mkdir-job.c:165
+#, fuzzy, c-format
+msgid "Unable to create directory `%s': %s"
+msgstr "Nem hozható létre ez a könyvtár: %s"
+
+#: ../thunar-vfs/thunar-vfs-path.c:657
+msgid "Path too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:761
+msgid "URI too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:144 ../thunar/thunar-details-view.c:150
+msgid "Size"
+msgstr "Méret"
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:145
+msgid "The desired thumbnail size"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:233
+msgid "Collecting files..."
+msgstr "Fájlok gyűjtése..."
+
+#. display info message
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:295
+#, fuzzy
+msgid "Deleting directories..."
+msgstr "Fájlok gyűjtése..."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:315
+#, fuzzy, c-format
+msgid "Unable to remove directory `%s': %s"
+msgstr "Nem hozható létre ez a könyvtár: %s"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:593
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:639
+#, fuzzy, c-format
+msgid "Unable to remove `%s': %s"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:831
+msgid "Cannot transfer the root directory"
+msgstr ""
+
+#. tell the user that we're preparing the unlink job
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:161
+msgid "Preparing..."
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:234
+#, c-format
+msgid ""
+"Unable to remove %s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"Nem törölhető: %s.\n"
+"\n"
+"Átugrod?"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:157
+#, c-format
+msgid "copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:658
+#: ../thunar/thunar-properties-dialog.c:588
+#, c-format
+msgid "link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:161
+#, c-format
+msgid "another copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:162
+#, c-format
+msgid "another link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:165
+#, c-format
+msgid "third copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:166
+#, c-format
+msgid "third link to %s"
+msgstr ""
+
+#. if we had no match on the NAMES, try the "%uth copy of %s" pattern
+#: ../thunar-vfs/thunar-vfs-xfer.c:205 ../thunar-vfs/thunar-vfs-xfer.c:221
+#, c-format
+msgid "%uth copy of %s"
+msgid_plural "%uth copy of %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:223
+#, c-format
+msgid "%uth link to %s"
+msgid_plural "%uth link to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#. setup the error return
+#: ../thunar-vfs/thunar-vfs-xfer.c:263
+#, fuzzy, c-format
+msgid "Failed to create directory `%s'"
+msgstr "Nem hozható létre ez a könyvtár: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:286
+#, fuzzy, c-format
+msgid "Failed to create named fifo `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:318
+#, c-format
+msgid "Failed to open `%s' for reading"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:330
+#, c-format
+msgid "Failed to open `%s' for writing"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:345
+#, fuzzy, c-format
+msgid "Failed to read data from `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:357
+#, fuzzy, c-format
+msgid "Failed to write data to `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:371
+#, fuzzy, c-format
+msgid "Failed to remove `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:415
+#, fuzzy, c-format
+msgid "Failed to read link target from `%s'"
+msgstr "Nem sikerült meghatározni a szülő URI-t ehhez: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:423
+#, fuzzy, c-format
+msgid "Failed to create symbolic link `%s'"
+msgstr "Nem hozható létre e szimlink: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:431
+#, fuzzy, c-format
+msgid "Failed to change mode of `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:465 ../thunar-vfs/thunar-vfs-xfer.c:525
+#, fuzzy, c-format
+msgid "Failed to determine file info for `%s'"
+msgstr "Nem sikerült meghatározni a szülő URI-t ehhez: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:494
+#, fuzzy, c-format
+msgid "Failed to copy special file `%s'"
+msgstr "Nem lehet másolni a fájlt: %s"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:536
+#, fuzzy, c-format
+msgid "Failed to create symbolic `%s'"
+msgstr "Nem hozható létre e szimlink: %s"
+
+#. setup application name
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:347
+msgid "Thunar"
+msgstr "Thunar"
+
+#. display an error message to the user
+#: ../thunar/thunar-application.c:190
+#, fuzzy
+msgid "Failed to launch operation"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar/thunar-application.c:411
+msgid "Copying files..."
+msgstr "Fájlok másolása..."
+
+#: ../thunar/thunar-application.c:445
+msgid "Creating symbolic links..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:480
+msgid "Moving files..."
+msgstr "Fájlok mozgatása..."
+
+#: ../thunar/thunar-application.c:515
+#, fuzzy
+msgid "Deleting files..."
+msgstr "Fájlok gyűjtése..."
+
+#: ../thunar/thunar-application.c:555
+#, fuzzy
+msgid "Creating directories..."
+msgstr "Jelenlegi könyvtár"
+
+#: ../thunar/thunar-chooser-dialog.c:137 ../thunar/thunar-emblem-chooser.c:115
+#: ../thunar/thunar-emblem-chooser.c:116 ../thunar/thunar-icon-renderer.c:129
+#: ../thunar/thunar-open-with-action.c:115
+#: ../thunar/thunar-open-with-action.c:116
+#: ../thunar/thunar-properties-dialog.c:142 ../thunar/thunar-statusbar.c:190
+msgid "File"
+msgstr "Fájl"
+
+#: ../thunar/thunar-chooser-dialog.c:138
+msgid "The file for which an application should be chosen"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:150
+msgid "Open"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:151
+msgid "Whether the chooser should open the specified file"
+msgstr ""
+
+#. the "Open with" action
+#: ../thunar/thunar-chooser-dialog.c:176 ../thunar/thunar-launcher.c:197
+msgid "Open With"
+msgstr ""
+
+#. create the "Custom command" expand
+#: ../thunar/thunar-chooser-dialog.c:238
+msgid "Use a _custom command:"
+msgstr ""
+
+#. create the "Custom command" button
+#: ../thunar/thunar-chooser-dialog.c:256
+#, fuzzy
+msgid "_Browse"
+msgstr "_Bezárás"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:429
+#, fuzzy, c-format
+msgid "Failed to add new application `%s'"
+msgstr "Nem törölhető: %s"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:451
+#, fuzzy, c-format
+msgid "Failed to set default application for `%s'"
+msgstr "Nem törölhető: %s"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:464
+#, fuzzy, c-format
+msgid "Failed to execute `%s'"
+msgstr "Nem törölhető: %s"
+
+#. update the header label
+#: ../thunar/thunar-chooser-dialog.c:580
+#, c-format
+msgid "Open <i>%s</i> and other files of type \"%s\" with:"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:602
+#, fuzzy
+msgid "Select an Application"
+msgstr "_Hely megnyitása..."
+
+#: ../thunar/thunar-chooser-dialog.c:612
+#, fuzzy
+msgid "All Files"
+msgstr "Fájlok"
+
+#: ../thunar/thunar-chooser-dialog.c:617
+#, fuzzy
+msgid "Executable Files"
+msgstr "Minden fájl kiválasztása"
+
+#: ../thunar/thunar-chooser-dialog.c:632
+msgid "Perl Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:638
+msgid "Python Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:644
+msgid "Ruby Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-dialog.c:650
+msgid "Shell Scripts"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:116 ../thunar/thunar-folder.c:134
+#: ../thunar/thunar-standard-view.c:357 ../thunar/thunar-statusbar.c:204
+#: ../thunar/thunar-statusbar.c:746 ../thunar/thunar-view.c:82
+msgid "Loading"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:117
+#, fuzzy
+msgid "Whether the model is currently being loaded"
+msgstr "A nézet betöltését adja meg"
+
+#: ../thunar/thunar-chooser-model.c:129
+msgid "Mime info"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:130
+msgid "The mime info for the model"
+msgstr ""
+
+#: ../thunar/thunar-chooser-model.c:306
+msgid "None available"
+msgstr ""
+
+#. append the "Recommended Applications:" category
+#: ../thunar/thunar-chooser-model.c:350
+msgid "Recommended Applications:"
+msgstr ""
+
+#. append the "Other Applications:" category
+#: ../thunar/thunar-chooser-model.c:353
+#, fuzzy
+msgid "Other Applications:"
+msgstr "_Hely megnyitása..."
+
+#: ../thunar/thunar-clipboard-manager.c:149
+msgid "Can paste"
+msgstr "Beilleszthető"
+
+#: ../thunar/thunar-clipboard-manager.c:150
+msgid "Whether the clipboard content can be pasted"
+msgstr "A vágólap tartalma beilleszthető"
+
+#. tell the user that we cannot paste
+#: ../thunar/thunar-clipboard-manager.c:333
+msgid "There is nothing on the clipboard to paste"
+msgstr "Nincs beillesztenivaló a vágólapon"
+
+#: ../thunar/thunar-create-dialog.c:100 ../thunar/thunar-create-dialog.c:101
+#, fuzzy
+msgid "Filename"
+msgstr "Fájlkezelő"
+
+#: ../thunar/thunar-create-dialog.c:113 ../thunar/thunar-create-dialog.c:114
+#, fuzzy
+msgid "Mime Info"
+msgstr "%s Info"
+
+#: ../thunar/thunar-create-dialog.c:148
+msgid "Enter the new name:"
+msgstr ""
+
+#: ../thunar/thunar-details-view.c:131
+msgid "Name"
+msgstr "Név"
+
+#: ../thunar/thunar-details-view.c:165
+msgid "Permissions"
+msgstr "Jogok"
+
+#: ../thunar/thunar-details-view.c:180
+msgid "Type"
+msgstr "Típus"
+
+#: ../thunar/thunar-details-view.c:192
+msgid "Date modified"
+msgstr "Módosítás ideje"
+
+#: ../thunar/thunar-details-view.c:221
+msgid "Details view"
+msgstr "Részletes nézet"
+
+#: ../thunar/thunar-details-view.c:222
+msgid "Detailed directory listing"
+msgstr "Részletes könyvtárlista"
+
+#: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#, c-format
+msgid "%s."
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+#, fuzzy
+msgid "_Copy here"
+msgstr "Fájl másolás"
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Move here"
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Link here"
+msgstr ""
+
+#. display an error to the user
+#. display an error message to the user
+#: ../thunar/thunar-dnd.c:190 ../thunar/thunar-launcher.c:314
+#, fuzzy, c-format
+msgid "Unable to execute file `%s'"
+msgstr "Nem lehet másolni a fájlt: %s"
+
+#: ../thunar/thunar-extension-manager.c:158
+msgid "Resident"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:159
+msgid "Ensures that an extension will never be unloaded."
+msgstr ""
+
+#. append the remove menu item
+#: ../thunar/thunar-favourites-view.c:292
+msgid "_Remove Favourite"
+msgstr ""
+
+#. append the rename menu item
+#: ../thunar/thunar-favourites-view.c:307
+msgid "Re_name Favourite"
+msgstr ""
+
+#: ../thunar/thunar-favourites-view.c:627
+#, c-format
+msgid "The path '%s' does not refer to a directory"
+msgstr ""
+
+#. display an error message to the user
+#: ../thunar/thunar-favourites-view.c:646
+#, fuzzy
+msgid "Failed to add new favourite"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar/thunar-file.c:681
+msgid "The root folder has no parent"
+msgstr ""
+
+#: ../thunar/thunar-file.c:873
+msgid "Filesystem"
+msgstr "Fájlrendszer"
+
+#: ../thunar/thunar-file.c:897
+msgid "Home"
+msgstr "Saját könyvtár"
+
+#: ../thunar/thunar-folder.c:135
+msgid "Whether the contents of the folder are currently being loaded"
+msgstr ""
+
+#: ../thunar/thunar-icon-factory.c:163
+msgid "Icon theme"
+msgstr "Ikon téma"
+
+#: ../thunar/thunar-icon-factory.c:164
+msgid "The icon theme used by the icon factory"
+msgstr "Az ikongyár által használt ikontéma"
+
+#: ../thunar/thunar-icon-renderer.c:116
+#, fuzzy
+msgid "Drop file"
+msgstr "Fájl másolás"
+
+#: ../thunar/thunar-icon-renderer.c:117
+msgid "The file which should be rendered in as drop acceptor"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:130
+msgid "The file whose icon to render"
+msgstr "A kirajzolandó ikon"
+
+#: ../thunar/thunar-icon-renderer.c:145 ../thunar/thunar-icon-renderer.c:146
+#: ../thunar/thunar-text-renderer.c:172 ../thunar/thunar-text-renderer.c:173
+msgid "Follow state"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:158 ../thunar/thunar-path-entry.c:179
+msgid "Icon size"
+msgstr "Ikon méret"
+
+#: ../thunar/thunar-icon-renderer.c:159
+msgid "The icon size in pixels"
+msgstr "Ikon méret pixelben"
+
+#: ../thunar/thunar-icon-view.c:111
+msgid "Arran_ge Items"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Sort By _Name"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Keep items sorted by their name in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Sort By _Size"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Keep items sorted by their size in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Sort By _Type"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Keep items sorted by their type in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Sort By Modification _Date"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Keep items sorted by their modification date in rows"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "_Ascending"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "Sort items in ascending order"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "_Descending"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "Sort items in descending order"
+msgstr ""
+
+#: ../thunar/thunar-icon-view.c:226
+msgid "Icon view"
+msgstr "Ikonnézet"
+
+#: ../thunar/thunar-icon-view.c:227
+msgid "Icon based directory listing"
+msgstr "Ikon alapú könyvtár lista"
+
+#: ../thunar/thunar-launcher.c:134 ../thunar/thunar-launcher.c:135
+msgid "Action group"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:147 ../thunar/thunar-launcher.c:148
+#, fuzzy
+msgid "Selected files"
+msgstr "Minden fájl kiválasztása"
+
+#: ../thunar/thunar-launcher.c:160 ../thunar/thunar-launcher.c:161
+msgid "Widget"
+msgstr ""
+
+#. the "Open" action
+#: ../thunar/thunar-launcher.c:189 ../thunar/thunar-launcher.c:521
+#: ../thunar/thunar-launcher.c:539
+msgid "_Open"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:189
+#, fuzzy
+msgid "Open the selected items"
+msgstr "A kijelölt elem tulajdonságai"
+
+#. the "Open in New Window" action
+#: ../thunar/thunar-launcher.c:193
+#, fuzzy
+msgid "Open in New Window"
+msgstr "Új _Ablak"
+
+#: ../thunar/thunar-launcher.c:193
+msgid "Open the selected directories in new Thunar windows"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:347
+#, fuzzy, c-format
+msgid "Unable to open \"%s\"."
+msgstr "Nem nyitható meg e fájl: %s"
+
+#: ../thunar/thunar-launcher.c:352
+#, fuzzy, c-format
+msgid "Unable to open %d file."
+msgid_plural "Unable to open %d files."
+msgstr[0] "Nem nyitható meg e fájl: %s"
+msgstr[1] "Nem nyitható meg e fájl: %s"
+
+#: ../thunar/thunar-launcher.c:458
+msgid "Are you sure you want to open all folders?"
+msgstr ""
+
+#: ../thunar/thunar-launcher.c:460
+#, c-format
+msgid "This will open %d separate window."
+msgid_plural "This will open %d separate windows."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-launcher.c:519
+#, fuzzy, c-format
+msgid "Open in %d New Window"
+msgid_plural "Open in %d New Windows"
+msgstr[0] "Új _Ablak"
+msgstr[1] "Új _Ablak"
+
+#: ../thunar/thunar-launcher.c:537
+msgid "_Execute"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:258
+msgid "Folder"
+msgstr "Mappa"
+
+#: ../thunar/thunar-list-model.c:259
+msgid "The stores folder"
+msgstr "A tároló mappák"
+
+#: ../thunar/thunar-list-model.c:271
+msgid "Folders first"
+msgstr "Mappák előre"
+
+#: ../thunar/thunar-list-model.c:272
+msgid "Folders first in sorting"
+msgstr "Mappák előre rendezéskor"
+
+#: ../thunar/thunar-list-model.c:284
+msgid "Number of files"
+msgstr "Fájlok száma"
+
+#: ../thunar/thunar-list-model.c:285
+msgid "Number of visible files"
+msgstr "Látható fájlok száma"
+
+#: ../thunar/thunar-list-model.c:297 ../thunar/thunar-view.c:111
+#: ../thunar/thunar-window.c:218
+msgid "Show hidden"
+msgstr "Rejtettek mutatása"
+
+#: ../thunar/thunar-list-model.c:298 ../thunar/thunar-view.c:112
+#: ../thunar/thunar-window.c:219
+msgid "Whether to display hidden files"
+msgstr "Mutassuk-e a rejtett fájlokat"
+
+#: ../thunar/thunar-list-model.c:656 ../thunar/thunar-properties-dialog.c:586
+msgid "broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1924
+#, fuzzy, c-format
+msgid "%d item, Free space: %s"
+msgid_plural "%d items, Free space: %s"
+msgstr[0] "%d elem, Szabad: %s"
+msgstr[1] "%d elem, Szabad: %s"
+
+#: ../thunar/thunar-list-model.c:1929
+#, fuzzy, c-format
+msgid "%d item"
+msgid_plural "%d items"
+msgstr[0] "%d elem"
+msgstr[1] "%d elem"
+
+#: ../thunar/thunar-list-model.c:1945
+#, c-format
+msgid "\"%s\" broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1949
+#, fuzzy, c-format
+msgid "\"%s\" (%s) link to %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1954
+#, c-format
+msgid "\"%s\" (%s) %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1971 ../thunar/thunar-list-model.c:1976
+#, fuzzy, c-format
+msgid "%d item selected"
+msgid_plural "%d items selected (%s)"
+msgstr[0] "%d elem kijelölve"
+msgstr[1] "%d elem kijelölve"
+
+#: ../thunar/thunar-location-buttons.c:214
+msgid "Spacing"
+msgstr "Távolság"
+
+#: ../thunar/thunar-location-buttons.c:215
+msgid "The amount of space between the path buttons"
+msgstr "Ösvénygombok közti táv"
+
+#: ../thunar/thunar-location-dialog.c:85
+msgid "Open Location"
+msgstr "Hely megnyitása"
+
+#: ../thunar/thunar-location-dialog.c:99
+msgid "_Location:"
+msgstr "_Hely:"
+
+#: ../thunar/thunar-navigator.c:137 ../thunar/thunar-window.c:205
+msgid "Current directory"
+msgstr "Jelenlegi könyvtár"
+
+#: ../thunar/thunar-navigator.c:138
+msgid "The directory currently displayed by the navigator"
+msgstr "A most megjelenített könyvtár"
+
+#: ../thunar/thunar-open-with-action.c:320
+#, c-format
+msgid "%s (default)"
+msgstr ""
+
+#. add our custom children
+#: ../thunar/thunar-open-with-action.c:371
+#, fuzzy
+msgid "Other Application..."
+msgstr "_Hely megnyitása..."
+
+#: ../thunar/thunar-path-entry.c:167
+msgid "Current file"
+msgstr "Jelenlegi fájl"
+
+#: ../thunar/thunar-path-entry.c:168
+msgid "The currently displayed file"
+msgstr "A most megjelenített fájl"
+
+#: ../thunar/thunar-path-entry.c:180
+msgid "The icon size for the path entry"
+msgstr "Az ösvényelem ikonmérete"
+
+#: ../thunar/thunar-preferences.c:178
+#, fuzzy, c-format
+msgid "Failed to create the Thunar configuration directory in %s"
+msgstr "Nem hozható létre ez a könyvtár: %s"
+
+#: ../thunar/thunar-preferences.c:186
+#, fuzzy, c-format
+msgid "Failed to open preferences database in %s: %s"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar/thunar-progress-dialog.c:129
+msgid "Job"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:130
+msgid "The job whose progress to display"
+msgstr ""
+
+#: ../thunar/thunar-progress-dialog.c:273
+msgid "Question"
+msgstr "Kérdés"
+
+#: ../thunar/thunar-progress-dialog.c:299
+msgid "_Yes"
+msgstr "_Igen"
+
+#: ../thunar/thunar-progress-dialog.c:303
+msgid "Yes to _all"
+msgstr "_Mind"
+
+#: ../thunar/thunar-progress-dialog.c:307
+msgid "_No"
+msgstr "_Nem"
+
+#: ../thunar/thunar-progress-dialog.c:311
+msgid "_Cancel"
+msgstr "_Csendet!"
+
+#: ../thunar/thunar-progress-dialog.c:437
+#, c-format
+msgid "(%lu hour remaining)"
+msgid_plural "(%lu hours remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:442
+#, c-format
+msgid "(%lu minute remaining)"
+msgid_plural "(%lu minutes remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:447
+#, c-format
+msgid "(%lu second remaining)"
+msgid_plural "(%lu seconds remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-properties-dialog.c:143
+msgid "The file displayed by the dialog"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:180
+msgid "General"
+msgstr "Általános"
+
+#: ../thunar/thunar-properties-dialog.c:197
+msgid "Name:"
+msgstr "Név"
+
+#.
+#. Second box (kind)
+#.
+#: ../thunar/thunar-properties-dialog.c:222
+msgid "Kind:"
+msgstr "Típus:"
+
+#.
+#. Third box (modified, accessed)
+#.
+#: ../thunar/thunar-properties-dialog.c:247
+msgid "Modified:"
+msgstr "Módosítva:"
+
+#: ../thunar/thunar-properties-dialog.c:260
+msgid "Accessed:"
+msgstr "Megnyitva:"
+
+#.
+#. Fourth box (volume, size)
+#.
+#: ../thunar/thunar-properties-dialog.c:284
+msgid "Volume:"
+msgstr "Kötet:"
+
+#: ../thunar/thunar-properties-dialog.c:307
+msgid "Size:"
+msgstr "Méret:"
+
+#.
+#. Emblem chooser
+#.
+#: ../thunar/thunar-properties-dialog.c:331
+msgid "Emblems"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:563
+#, c-format
+msgid "%s Info"
+msgstr "%s Info"
+
+#: ../thunar/thunar-properties-dialog.c:644
+#, c-format
+msgid "%s (%u Bytes)"
+msgstr "%s (%u bájt)"
+
+#. display an error message
+#: ../thunar/thunar-properties-dialog.c:690
+#: ../thunar/thunar-standard-view.c:2135
+#, fuzzy, c-format
+msgid "Failed to rename `%s'"
+msgstr "Nem törölhető: %s"
+
+#: ../thunar/thunar-standard-view.c:245
+#, fuzzy
+msgid "File Context Menu"
+msgstr "Helyi menü"
+
+#: ../thunar/thunar-standard-view.c:246
+#, fuzzy
+msgid "Folder Context Menu"
+msgstr "Helyi menü"
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create _Folder..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create an empty folder within the current folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "_Properties"
+msgstr "Tulajdonságok"
+
+#: ../thunar/thunar-standard-view.c:248
+#, fuzzy
+msgid "View the properties of the selected file"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "_Copy Files"
+msgstr "Fájlok másolása"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "Copy the selected files"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cu_t Files"
+msgstr "Fájlok kivágása"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cut the selected files"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:251
+#, fuzzy
+msgid "_Paste Files"
+msgstr "Fájlok beillesztése"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "_Delete Files"
+msgstr "Minden fájl kiválasztása"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "Delete the selected files"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:253
+#, fuzzy
+msgid "Paste Files into Folder"
+msgstr "Fájlok mappába illesztése"
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste files into the selected folder"
+msgstr "Fájlok beillesztése a kijelölt mappába"
+
+#: ../thunar/thunar-standard-view.c:254
+#, fuzzy
+msgid "Select _all Files"
+msgstr "Minden fájl kiválasztása"
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select all files in this window"
+msgstr "Minden fájlt kiválaszt ebből az ablakból"
+
+#: ../thunar/thunar-standard-view.c:255
+#, fuzzy
+msgid "Select by _Pattern"
+msgstr "Kijelölés mintával"
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select all files that match a certain pattern"
+msgstr "Egy adott mintára illő valamennyi fájl kiválasztása"
+
+#: ../thunar/thunar-standard-view.c:256 ../thunar/thunar-standard-view.c:2414
+msgid "Du_plicate File"
+msgid_plural "Du_plicate Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:256
+#, fuzzy
+msgid "Duplicate each selected file"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:257 ../thunar/thunar-standard-view.c:2420
+msgid "Ma_ke Link"
+msgid_plural "Ma_ke Links"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:257
+msgid "Create a symbolic link for each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "_Rename"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+#, fuzzy
+msgid "Rename the selected file"
+msgstr "A kijelölt elem tulajdonságai"
+
+#: ../thunar/thunar-standard-view.c:358 ../thunar/thunar-view.c:83
+msgid "Whether the view is currently being loaded"
+msgstr "A nézet betöltését adja meg"
+
+#: ../thunar/thunar-standard-view.c:853
+msgid "Loading folder contents..."
+msgstr "Mappa beolvasása..."
+
+#: ../thunar/thunar-standard-view.c:1305
+#, fuzzy
+msgid "New Folder"
+msgstr "Mappa"
+
+#: ../thunar/thunar-standard-view.c:1308
+#, fuzzy
+msgid "New Folder..."
+msgstr "Mappa"
+
+#. display an error message
+#: ../thunar/thunar-standard-view.c:1322
+#, c-format
+msgid "Cannot convert filename `%s' to the local encoding"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1468
+#, c-format
+msgid ""
+"Are you sure that you want to\n"
+"permanently delete \"%s\"?"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1474
+#, c-format
+msgid ""
+"Are you sure that you want to permanently\n"
+"delete the selected file?"
+msgid_plural ""
+"Are you sure that you want to permanently\n"
+"delete the %u selected files?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:1489
+msgid "If you delete a file, it is permanently lost."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1561
+#, fuzzy
+msgid "Select by Pattern"
+msgstr "Kijelölés mintával"
+
+#: ../thunar/thunar-standard-view.c:1576
+msgid "Pattern:"
+msgstr "Minta:"
+
+#: ../thunar/thunar-standard-view.c:2087
+#, fuzzy, c-format
+msgid "Failed to open directory `%s'"
+msgstr "Nem megnyitható könyvtár: %s"
+
+#: ../thunar/thunar-standard-view.c:2387
+#, fuzzy
+msgid "_Copy File"
+msgid_plural "_Copy Files"
+msgstr[0] "Fájl másolás"
+msgstr[1] "Fájl másolás"
+
+#: ../thunar/thunar-standard-view.c:2393
+#, fuzzy
+msgid "Cu_t File"
+msgid_plural "Cu_t Files"
+msgstr[0] "Fájl kivágás"
+msgstr[1] "Fájl kivágás"
+
+#: ../thunar/thunar-standard-view.c:2402
+#, fuzzy
+msgid "_Delete File"
+msgid_plural "_Delete Files"
+msgstr[0] "Minden fájl kiválasztása"
+msgstr[1] "Minden fájl kiválasztása"
+
+#: ../thunar/thunar-statusbar.c:191
+msgid "The file whose icon to display"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:205 ../thunar/thunar-statusbar.c:747
+msgid "Whether to display a loading animation"
+msgstr ""
+
+#: ../thunar/thunar-statusbar.c:760 ../thunar/thunar-view.c:98
+msgid "Statusbar text"
+msgstr "Állapotsor szöveg"
+
+#: ../thunar/thunar-statusbar.c:761
+msgid "The main text to be displayed in the statusbar"
+msgstr "Az állapotsor fő szövege"
+
+#: ../thunar/thunar-text-renderer.c:185
+msgid "Text"
+msgstr "Szöveg"
+
+#: ../thunar/thunar-text-renderer.c:186
+msgid "The text to render"
+msgstr "A kiírandó szöveg"
+
+#: ../thunar/thunar-text-renderer.c:200
+msgid "Wrap mode"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:201
+#, fuzzy
+msgid "The wrap mode"
+msgstr "A tároló mappák"
+
+#: ../thunar/thunar-text-renderer.c:216
+msgid "Wrap width"
+msgstr ""
+
+#: ../thunar/thunar-text-renderer.c:217
+msgid "The wrap width"
+msgstr ""
+
+#: ../thunar/thunar-view.c:99
+msgid "Text to be displayed in the statusbar associated with this view"
+msgstr "E nézet állapotsorának szövege"
+
+#: ../thunar/thunar-view.c:125 ../thunar/thunar-window.c:233
+msgid "UI manager"
+msgstr "UI kezelő"
+
+#: ../thunar/thunar-view.c:126
+msgid "UI manager of the surrounding window"
+msgstr "Adot ablak felhasználói felület kezelője"
+
+#: ../thunar/thunar-window.c:149
+msgid "_File"
+msgstr "_Fájl"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open New _Window"
+msgstr "Új _Ablak"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open a new Thunar window for the displayed location"
+msgstr "Új Thunar ablak az adott helyhez"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close _All Windows"
+msgstr "_Minden ablak bezárása"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close all Thunar windows"
+msgstr "Bezár minden Thunar ablakot"
+
+#: ../thunar/thunar-window.c:152
+msgid "_Close"
+msgstr "_Bezárás"
+
+#: ../thunar/thunar-window.c:152
+msgid "Close this window"
+msgstr "Bezárja ezt az ablakot"
+
+#: ../thunar/thunar-window.c:153
+msgid "_Edit"
+msgstr "Sz_erkesztés"
+
+#: ../thunar/thunar-window.c:154
+msgid "_View"
+msgstr "_Nézet"
+
+#: ../thunar/thunar-window.c:155
+msgid "_Location Bar"
+msgstr "_Címsor"
+
+#: ../thunar/thunar-window.c:156
+msgid "_Side Pane"
+msgstr ""
+
+#: ../thunar/thunar-window.c:157
+msgid "_Go"
+msgstr "_Ugrás"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open _Parent"
+msgstr "_Szülő megnyitása"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open the parent folder"
+msgstr "Szülőmappa megnyitása"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "_Home"
+msgstr "Saját könyvtár"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "Open the home folder"
+msgstr "Szülőmappa megnyitása"
+
+#: ../thunar/thunar-window.c:160
+msgid "Open _Location..."
+msgstr "_Hely megnyitása..."
+
+#: ../thunar/thunar-window.c:160
+msgid "Specify a location to open"
+msgstr "Adott hely megnyitása"
+
+#: ../thunar/thunar-window.c:161
+msgid "_Help"
+msgstr "_Súgó"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "_About"
+msgstr "_Névjegy"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "Display information about Thunar"
+msgstr "A Thunar adatainak megjelenítése"
+
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Show _Hidden Files"
+msgstr "Rejtett fájlok mutatása"
+
+#: ../thunar/thunar-window.c:171
+msgid "Toggles the display of hidden files in the current window"
+msgstr "A rejtett fájlok mutatását váltja a jelen ablakban"
+
+#: ../thunar/thunar-window.c:206
+msgid "The directory currently displayed within this window"
+msgstr "Ezen ablakban megjelenített könyvtár"
+
+#: ../thunar/thunar-window.c:234
+msgid "The UI manager used within this window"
+msgstr "Ezen ablakban használt UI kezelő"
+
+#.
+#. * add the side pane options
+#.
+#: ../thunar/thunar-window.c:289
+msgid "_Favourites"
+msgstr ""
+
+#: ../thunar/thunar-window.c:295 ../thunar/thunar-window.c:316
+msgid "_Hidden"
+msgstr "_Rejtett"
+
+#.
+#. * add the location bar options
+#.
+#: ../thunar/thunar-window.c:304
+msgid "_Button Style"
+msgstr "_Gomb stílus"
+
+#: ../thunar/thunar-window.c:310
+msgid "_Traditional Style"
+msgstr "_Hagyományos stílus"
+
+#.
+#. * add view options
+#.
+#: ../thunar/thunar-window.c:325
+msgid "View as _Icons"
+msgstr ""
+
+#: ../thunar/thunar-window.c:331
+msgid "View as _Detailed List"
+msgstr ""
+
+#. display an error to the user
+#: ../thunar/thunar-window.c:738
+#, fuzzy
+msgid "Failed to open home directory"
+msgstr "Nem megnyitható könyvtár: %s"
+
+#: ../thunar/thunar-window.c:815
+msgid ""
+"Thunar is a fast and easy to use file manager\n"
+"for the Xfce Desktop Environment."
+msgstr ""
+
+#: ../thunar/thunar-window.c:820
+msgid "translator-credits"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:104
+msgid "Label"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:105
+msgid "Text of the page's label"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:117
+msgid "Label widget"
+msgstr ""
+
+#: ../thunarx/thunarx-property-page.c:118
+msgid "A widget to display in place of the usual page label"
+msgstr ""
+
+#: ../Thunar.desktop.in.h:1
+msgid "Browse the filesystem with the file manager"
+msgstr ""
+
+#: ../Thunar.desktop.in.h:2
+msgid "File Manager"
+msgstr "Fájlkezelő"
+
+#: ../Thunar.desktop.in.h:3
+#, fuzzy
+msgid "Thunar File Manager"
+msgstr "Fájlkezelő"
+
+#~ msgid ""
+#~ "Unable to query information about\n"
+#~ "the file %s."
+#~ msgstr ""
+#~ "Nem lehet lekérni információt erről a fájlról:\n"
+#~ "%s."
+
+#~ msgid "Unable to open file %s."
+#~ msgstr "Nem nyitható meg e fájl: %s"
+
+#~ msgid "URI scheme not supported for transfer operations"
+#~ msgstr "URI séma nem támogatott az átviteli műveletekhez"
+
+#~ msgid "Files"
+#~ msgstr "Fájlok"
+
+#~ msgid "The list of files stored within this trash"
+#~ msgstr "E kuka fájljai"
+
+#~ msgid "Empty"
+#~ msgstr "Ãœres"
+
+#~ msgid "The URI '%s' is invalid"
+#~ msgstr "Rossz URI: '%s'"
+
+#~ msgid "The trash file URI '%s' may not include a '#'"
+#~ msgstr ""
+#~ "Nem használhatsz olyan kukafájl URI-t ('%s'), mely '#' jelet tartalmaz"
+
+#~ msgid "The URI '%s' uses an unsupported scheme"
+#~ msgstr "A '%s' URI nem támogatott sémát használ"
+
+#~ msgid "Only local directories can be listed"
+#~ msgstr "Csak a helyi könyvtárak listázhatók"
+
+#~ msgid "Computer"
+#~ msgstr "Számítógép"
+
+#~ msgid "Model"
+#~ msgstr "Modell"
+
+#~ msgid "The model to display"
+#~ msgstr "Megjelenítendő modell"
+
+#~ msgid "File column"
+#~ msgstr "Fájl oszlop"
+
+#~ msgid "The column which contains the file"
+#~ msgstr "A fájlt tartalmazó oszlop"
+
+#~ msgid "Position column"
+#~ msgstr "Helyzet oszlop"
+
+#~ msgid "The column which contains the position"
+#~ msgstr "A helyzetet tartalmazó oszlop"
+
+#, fuzzy
+#~ msgid "Unable to rename file"
+#~ msgstr "Nem nyitható meg e fájl: %s"
+
+#~ msgid "unknown"
+#~ msgstr "ismeretlen"
+
+#~ msgid "\"%s\" %s"
+#~ msgstr "\"%s\" %s"
+
+#~ msgid "Trash"
+#~ msgstr "Kuka"
+
+#, fuzzy
+#~ msgid "Delete all items in the Trash"
+#~ msgstr "Minden fájlt kiválaszt ebből az ablakból"
+
+#~ msgid "\"%s\" (%s)"
+#~ msgstr "\"%s\" (%s)"
+
+#~ msgid "\"%s\""
+#~ msgstr "\"%s\""
+
+#~ msgid "%d items selected (%s)"
+#~ msgstr "%d elem kijelölve (%s)"
+
+#~ msgid "Project leader"
+#~ msgstr "Projektvezető"

Added: desktop/trunk/thunar/branches/upstream/current/po/ja.gmo
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/po/ja.gmo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/po/ja.po
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/po/ja.po	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/po/ja.po	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1446 @@
+# $Id: ja.po 18844 2005-11-14 14:54:34Z benny $
+#
+# Japanese translations for Thunar package.
+# Copyright (C) 2004-2005 Benedikt Meurer.
+# This file is distributed under the same license as the Thunar package.
+# Daichi Kawahata <daichi at xfce.org>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Thunar 0.1.2svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-14 15:38+0100\n"
+"PO-Revision-Date: 2005-10-06 21:58+0900\n"
+"Last-Translator: Daichi Kawahata <daichi at xfce.org>\n"
+"Language-Team: Japanese <xfce-users-jp at ml.fdiary.net>\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"
+
+#: ../thunar-vfs/thunar-vfs-info.c:261
+msgid "No Exec field specified"
+msgstr "実行コマンドが指定されていません"
+
+#: ../thunar-vfs/thunar-vfs-info.c:269
+msgid "Unable to parse file"
+msgstr "ファイルを解析できません"
+
+#: ../thunar-vfs/thunar-vfs-info.c:359
+msgid "Invalid file name"
+msgstr "無効なファイル名です"
+
+#: ../thunar-vfs/thunar-vfs-info.c:381
+msgid "Invalid desktop file"
+msgstr "無効なデスクトップファイルです"
+
+#: ../thunar-vfs/thunar-vfs-info.c:615
+#, fuzzy, c-format
+msgid "Failed to stat file `%s': %s"
+msgstr "%s の名前変更に失敗しました。"
+
+#. ask the user whether we should remove the target first
+#. ask the user whether to overwrite
+#: ../thunar-vfs/thunar-vfs-link-job.c:176
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:685
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to overwrite it?"
+msgstr ""
+"%s は既に存在します。\n"
+"\n"
+"上書きしますか?"
+
+#: ../thunar-vfs/thunar-vfs-link-job.c:200
+#, fuzzy, c-format
+msgid "Failed to remove `%s': %s"
+msgstr "%s の名前変更に失敗しました。"
+
+#. ask the user whether to skip this file (used for cancellation only)
+#. ask the user whether to skip
+#: ../thunar-vfs/thunar-vfs-link-job.c:212
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:705
+#, fuzzy, c-format
+msgid ""
+"%s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"\n"
+"\n"
+"これを飛ばしますか?"
+
+#: ../thunar-vfs/thunar-vfs-mime-database.c:1625
+#, c-format
+msgid "Failed to load application from file %s"
+msgstr "ファイル %s からアプリケーションを読み込むのに失敗しました"
+
+#: ../thunar-vfs/thunar-vfs-mime-info.c:228
+#, c-format
+msgid "%s document"
+msgstr "%s 文書"
+
+#: ../thunar-vfs/thunar-vfs-mkdir-job.c:165
+#, fuzzy, c-format
+msgid "Unable to create directory `%s': %s"
+msgstr "フォルダ %s を作成できません。"
+
+#: ../thunar-vfs/thunar-vfs-path.c:657
+msgid "Path too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-path.c:761
+msgid "URI too long to fit into buffer"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:144 ../thunar/thunar-details-view.c:150
+msgid "Size"
+msgstr "サイズ"
+
+#: ../thunar-vfs/thunar-vfs-thumb.c:145
+msgid "The desired thumbnail size"
+msgstr "お望みのサムネイルサイズです"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:233
+msgid "Collecting files..."
+msgstr "ファイルを集めています..."
+
+#. display info message
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:295
+#, fuzzy
+msgid "Deleting directories..."
+msgstr "ファイルを削除しています..."
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:315
+#, fuzzy, c-format
+msgid "Unable to remove directory `%s': %s"
+msgstr "フォルダ %s を作成できません。"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:593
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:639
+#, fuzzy, c-format
+msgid "Unable to remove `%s': %s"
+msgstr "%s を削除できません。"
+
+#: ../thunar-vfs/thunar-vfs-transfer-job.c:831
+msgid "Cannot transfer the root directory"
+msgstr ""
+
+#. tell the user that we're preparing the unlink job
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:161
+msgid "Preparing..."
+msgstr "準備しています..."
+
+#: ../thunar-vfs/thunar-vfs-unlink-job.c:234
+#, c-format
+msgid ""
+"Unable to remove %s.\n"
+"\n"
+"Do you want to skip it?"
+msgstr ""
+"%s を削除できません。\n"
+"\n"
+"これを飛ばしますか?"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:157
+#, c-format
+msgid "copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:158 ../thunar/thunar-list-model.c:658
+#: ../thunar/thunar-properties-dialog.c:588
+#, c-format
+msgid "link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:161
+#, c-format
+msgid "another copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:162
+#, c-format
+msgid "another link to %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:165
+#, c-format
+msgid "third copy of %s"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:166
+#, c-format
+msgid "third link to %s"
+msgstr ""
+
+#. if we had no match on the NAMES, try the "%uth copy of %s" pattern
+#: ../thunar-vfs/thunar-vfs-xfer.c:205 ../thunar-vfs/thunar-vfs-xfer.c:221
+#, c-format
+msgid "%uth copy of %s"
+msgid_plural "%uth copy of %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:223
+#, c-format
+msgid "%uth link to %s"
+msgid_plural "%uth link to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#. setup the error return
+#: ../thunar-vfs/thunar-vfs-xfer.c:263
+#, fuzzy, c-format
+msgid "Failed to create directory `%s'"
+msgstr "フォルダ %s を作成できません。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:286
+#, fuzzy, c-format
+msgid "Failed to create named fifo `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:318
+#, c-format
+msgid "Failed to open `%s' for reading"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:330
+#, c-format
+msgid "Failed to open `%s' for writing"
+msgstr ""
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:345
+#, fuzzy, c-format
+msgid "Failed to read data from `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:357
+#, fuzzy, c-format
+msgid "Failed to write data to `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:371
+#, fuzzy, c-format
+msgid "Failed to remove `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:415
+#, fuzzy, c-format
+msgid "Failed to read link target from `%s'"
+msgstr "%s のリンク先を読み込めません。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:423
+#, fuzzy, c-format
+msgid "Failed to create symbolic link `%s'"
+msgstr "リンク %s を作成できません。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:431
+#, fuzzy, c-format
+msgid "Failed to change mode of `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:465 ../thunar-vfs/thunar-vfs-xfer.c:525
+#, fuzzy, c-format
+msgid "Failed to determine file info for `%s'"
+msgstr "'%s' の親 URI を確定するのに失敗しました"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:494
+#, fuzzy, c-format
+msgid "Failed to copy special file `%s'"
+msgstr "ファイル %s をコピーできません。"
+
+#: ../thunar-vfs/thunar-vfs-xfer.c:536
+#, fuzzy, c-format
+msgid "Failed to create symbolic `%s'"
+msgstr "リンク %s を作成できません。"
+
+#. setup application name
+#: ../thunar/main.c:47 ../thunar/thunar-window.c:347
+msgid "Thunar"
+msgstr "Thunar"
+
+#. display an error message to the user
+#: ../thunar/thunar-application.c:190
+#, fuzzy
+msgid "Failed to launch operation"
+msgstr "新しいアプリケーション %s を追加するのに失敗しました。"
+
+#: ../thunar/thunar-application.c:411
+msgid "Copying files..."
+msgstr "ファイルをコピーしています..."
+
+#: ../thunar/thunar-application.c:445
+msgid "Creating symbolic links..."
+msgstr ""
+
+#: ../thunar/thunar-application.c:480
+msgid "Moving files..."
+msgstr "ファイルを移動しています..."
+
+#: ../thunar/thunar-application.c:515
+msgid "Deleting files..."
+msgstr "ファイルを削除しています..."
+
+#: ../thunar/thunar-application.c:555
+#, fuzzy
+msgid "Creating directories..."
+msgstr "現在のフォルダ"
+
+#: ../thunar/thunar-chooser-dialog.c:137 ../thunar/thunar-emblem-chooser.c:115
+#: ../thunar/thunar-emblem-chooser.c:116 ../thunar/thunar-icon-renderer.c:129
+#: ../thunar/thunar-open-with-action.c:115
+#: ../thunar/thunar-open-with-action.c:116
+#: ../thunar/thunar-properties-dialog.c:142 ../thunar/thunar-statusbar.c:190
+msgid "File"
+msgstr "ファイル"
+
+#: ../thunar/thunar-chooser-dialog.c:138
+msgid "The file for which an application should be chosen"
+msgstr "アプリケーションによって開かれるファイルです"
+
+#: ../thunar/thunar-chooser-dialog.c:150
+msgid "Open"
+msgstr "開く"
+
+#: ../thunar/thunar-chooser-dialog.c:151
+msgid "Whether the chooser should open the specified file"
+msgstr "指定したファイルをチョーサーで開くかどうかを表します"
+
+#. the "Open with" action
+#: ../thunar/thunar-chooser-dialog.c:176 ../thunar/thunar-launcher.c:197
+msgid "Open With"
+msgstr "アプリで開く"
+
+#. create the "Custom command" expand
+#: ../thunar/thunar-chooser-dialog.c:238
+msgid "Use a _custom command:"
+msgstr "指定コマンドを使用(_C):"
+
+#. create the "Custom command" button
+#: ../thunar/thunar-chooser-dialog.c:256
+msgid "_Browse"
+msgstr "参照(_B)"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:429
+#, fuzzy, c-format
+msgid "Failed to add new application `%s'"
+msgstr "新しいアプリケーション %s を追加するのに失敗しました。"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:451
+#, fuzzy, c-format
+msgid "Failed to set default application for `%s'"
+msgstr "\"%s\" の標準アプリケーションをセットするのに失敗しました。"
+
+#. display an error to the user
+#: ../thunar/thunar-chooser-dialog.c:464
+#, fuzzy, c-format
+msgid "Failed to execute `%s'"
+msgstr "%s の実行に失敗しました。"
+
+#. update the header label
+#: ../thunar/thunar-chooser-dialog.c:580
+#, c-format
+msgid "Open <i>%s</i> and other files of type \"%s\" with:"
+msgstr "<i>%s</i> とタイプが \"%s\" の他のファイルを以下のアプリで開きます:"
+
+#: ../thunar/thunar-chooser-dialog.c:602
+msgid "Select an Application"
+msgstr "アプリケーションを選択して下さい"
+
+#: ../thunar/thunar-chooser-dialog.c:612
+msgid "All Files"
+msgstr "全てのファイル"
+
+#: ../thunar/thunar-chooser-dialog.c:617
+msgid "Executable Files"
+msgstr "実行可能ファイル"
+
+#: ../thunar/thunar-chooser-dialog.c:632
+msgid "Perl Scripts"
+msgstr "Perl スクリプト"
+
+#: ../thunar/thunar-chooser-dialog.c:638
+msgid "Python Scripts"
+msgstr "Python スクリプト"
+
+#: ../thunar/thunar-chooser-dialog.c:644
+msgid "Ruby Scripts"
+msgstr "Ruby スクリプト"
+
+#: ../thunar/thunar-chooser-dialog.c:650
+msgid "Shell Scripts"
+msgstr "シェルスクリプト"
+
+#: ../thunar/thunar-chooser-model.c:116 ../thunar/thunar-folder.c:134
+#: ../thunar/thunar-standard-view.c:357 ../thunar/thunar-statusbar.c:204
+#: ../thunar/thunar-statusbar.c:746 ../thunar/thunar-view.c:82
+msgid "Loading"
+msgstr "読み込み"
+
+#: ../thunar/thunar-chooser-model.c:117
+msgid "Whether the model is currently being loaded"
+msgstr "モデルが現在読み込まれているかどうかを表します"
+
+#: ../thunar/thunar-chooser-model.c:129
+msgid "Mime info"
+msgstr "MIME 情報"
+
+#: ../thunar/thunar-chooser-model.c:130
+msgid "The mime info for the model"
+msgstr "モデルの MIME 情報です"
+
+#: ../thunar/thunar-chooser-model.c:306
+msgid "None available"
+msgstr "利用できません"
+
+#. append the "Recommended Applications:" category
+#: ../thunar/thunar-chooser-model.c:350
+msgid "Recommended Applications:"
+msgstr "推奨アプリケーション:"
+
+#. append the "Other Applications:" category
+#: ../thunar/thunar-chooser-model.c:353
+msgid "Other Applications:"
+msgstr "他のアプリケーション:"
+
+#: ../thunar/thunar-clipboard-manager.c:149
+msgid "Can paste"
+msgstr "貼り付け可能"
+
+#: ../thunar/thunar-clipboard-manager.c:150
+msgid "Whether the clipboard content can be pasted"
+msgstr "クリップボードの内容が貼り付け可能であるかを表します"
+
+#. tell the user that we cannot paste
+#: ../thunar/thunar-clipboard-manager.c:333
+msgid "There is nothing on the clipboard to paste"
+msgstr "クリップボードに貼り付けるものはありません"
+
+#: ../thunar/thunar-create-dialog.c:100 ../thunar/thunar-create-dialog.c:101
+#, fuzzy
+msgid "Filename"
+msgstr "ファイルマネージャー"
+
+#: ../thunar/thunar-create-dialog.c:113 ../thunar/thunar-create-dialog.c:114
+#, fuzzy
+msgid "Mime Info"
+msgstr "MIME 情報"
+
+#: ../thunar/thunar-create-dialog.c:148
+msgid "Enter the new name:"
+msgstr ""
+
+#: ../thunar/thunar-details-view.c:131
+msgid "Name"
+msgstr "名前"
+
+#: ../thunar/thunar-details-view.c:165
+msgid "Permissions"
+msgstr "許可属性"
+
+#: ../thunar/thunar-details-view.c:180
+msgid "Type"
+msgstr "タイプ"
+
+#: ../thunar/thunar-details-view.c:192
+msgid "Date modified"
+msgstr "変更日"
+
+#: ../thunar/thunar-details-view.c:221
+msgid "Details view"
+msgstr "詳細表示"
+
+#: ../thunar/thunar-details-view.c:222
+msgid "Detailed directory listing"
+msgstr "詳細なフォルダ内容をリスト表示します"
+
+#: ../thunar/thunar-dialogs.c:74 ../thunar/thunar-dialogs.c:78
+#, c-format
+msgid "%s."
+msgstr ""
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Copy here"
+msgstr "ここにコピー(_C)"
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Move here"
+msgstr "ここに移動(_M)"
+
+#: ../thunar/thunar-dnd.c:62
+msgid "_Link here"
+msgstr "ここにリンク(_L)"
+
+#. display an error to the user
+#. display an error message to the user
+#: ../thunar/thunar-dnd.c:190 ../thunar/thunar-launcher.c:314
+#, fuzzy, c-format
+msgid "Unable to execute file `%s'"
+msgstr "ファイル \"%s\" を実行できません。"
+
+#: ../thunar/thunar-extension-manager.c:158
+msgid "Resident"
+msgstr ""
+
+#: ../thunar/thunar-extension-manager.c:159
+msgid "Ensures that an extension will never be unloaded."
+msgstr ""
+
+#. append the remove menu item
+#: ../thunar/thunar-favourites-view.c:292
+msgid "_Remove Favourite"
+msgstr "お気に入りを削除(_R)"
+
+#. append the rename menu item
+#: ../thunar/thunar-favourites-view.c:307
+msgid "Re_name Favourite"
+msgstr "お気に入りの名前を変更(_N)"
+
+#: ../thunar/thunar-favourites-view.c:627
+#, fuzzy, c-format
+msgid "The path '%s' does not refer to a directory"
+msgstr "URI '%s' はフォルダを参照していません"
+
+#. display an error message to the user
+#: ../thunar/thunar-favourites-view.c:646
+#, fuzzy
+msgid "Failed to add new favourite"
+msgstr "お気に入りを追加できませんでした"
+
+#: ../thunar/thunar-file.c:681
+msgid "The root folder has no parent"
+msgstr ""
+
+#: ../thunar/thunar-file.c:873
+msgid "Filesystem"
+msgstr "ファイルシステム"
+
+#: ../thunar/thunar-file.c:897
+msgid "Home"
+msgstr "ホーム"
+
+#: ../thunar/thunar-folder.c:135
+msgid "Whether the contents of the folder are currently being loaded"
+msgstr "フォルダの内容が現在読み込まれているかどうかを表します"
+
+#: ../thunar/thunar-icon-factory.c:163
+msgid "Icon theme"
+msgstr "アイコンテーマ"
+
+#: ../thunar/thunar-icon-factory.c:164
+msgid "The icon theme used by the icon factory"
+msgstr "アイコンファクトリに使用されるアイコンのテーマです"
+
+# FIXME: what's this? 'Dropped file' or 'File dropped'?
+#: ../thunar/thunar-icon-renderer.c:116
+msgid "Drop file"
+msgstr "ファイルをドロップ"
+
+#: ../thunar/thunar-icon-renderer.c:117
+msgid "The file which should be rendered in as drop acceptor"
+msgstr ""
+
+#: ../thunar/thunar-icon-renderer.c:130
+msgid "The file whose icon to render"
+msgstr "アイコンを表示するファイルです"
+
+# FIXME: what's this?
+#: ../thunar/thunar-icon-renderer.c:145 ../thunar/thunar-icon-renderer.c:146
+#: ../thunar/thunar-text-renderer.c:172 ../thunar/thunar-text-renderer.c:173
+msgid "Follow state"
+msgstr "状態に従う"
+
+#: ../thunar/thunar-icon-renderer.c:158 ../thunar/thunar-path-entry.c:179
+msgid "Icon size"
+msgstr "アイコンのサイズ"
+
+#: ../thunar/thunar-icon-renderer.c:159
+msgid "The icon size in pixels"
+msgstr "アイコンのサイズです (ピクセル単位)"
+
+#: ../thunar/thunar-icon-view.c:111
+msgid "Arran_ge Items"
+msgstr "アイテムを整頓(_G)"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Sort By _Name"
+msgstr "名前で並べ替え(_N)"
+
+#: ../thunar/thunar-icon-view.c:116
+msgid "Keep items sorted by their name in rows"
+msgstr "各行のアイテムを名前で並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Sort By _Size"
+msgstr "サイズで並べ替え(_S)"
+
+#: ../thunar/thunar-icon-view.c:117
+msgid "Keep items sorted by their size in rows"
+msgstr "各行のアイテムをサイズで並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Sort By _Type"
+msgstr "タイプで並べ替え(_T)"
+
+#: ../thunar/thunar-icon-view.c:118
+msgid "Keep items sorted by their type in rows"
+msgstr "各行のアイテムをタイプで並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Sort By Modification _Date"
+msgstr "変更日で並べ替え(_D)"
+
+#: ../thunar/thunar-icon-view.c:119
+msgid "Keep items sorted by their modification date in rows"
+msgstr "各行のアイテムを変更日で並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "_Ascending"
+msgstr "昇順(_A)"
+
+#: ../thunar/thunar-icon-view.c:124
+msgid "Sort items in ascending order"
+msgstr "アイテムを昇順で並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "_Descending"
+msgstr "降順(_D)"
+
+#: ../thunar/thunar-icon-view.c:125
+msgid "Sort items in descending order"
+msgstr "アイテムを降順で並べ替えます"
+
+#: ../thunar/thunar-icon-view.c:226
+msgid "Icon view"
+msgstr "アイコン表示"
+
+#: ../thunar/thunar-icon-view.c:227
+msgid "Icon based directory listing"
+msgstr "アイコンを基にフォルダをリスト表示します"
+
+#: ../thunar/thunar-launcher.c:134 ../thunar/thunar-launcher.c:135
+msgid "Action group"
+msgstr "アクショングループ"
+
+#: ../thunar/thunar-launcher.c:147 ../thunar/thunar-launcher.c:148
+msgid "Selected files"
+msgstr "選択されたファイル"
+
+#: ../thunar/thunar-launcher.c:160 ../thunar/thunar-launcher.c:161
+msgid "Widget"
+msgstr "ウィジット"
+
+#. the "Open" action
+#: ../thunar/thunar-launcher.c:189 ../thunar/thunar-launcher.c:521
+#: ../thunar/thunar-launcher.c:539
+msgid "_Open"
+msgstr "開く(_O)"
+
+#: ../thunar/thunar-launcher.c:189
+msgid "Open the selected items"
+msgstr "選択したアイテムを開きます"
+
+#. the "Open in New Window" action
+#: ../thunar/thunar-launcher.c:193
+msgid "Open in New Window"
+msgstr "新しいウィンドウで開く"
+
+#: ../thunar/thunar-launcher.c:193
+msgid "Open the selected directories in new Thunar windows"
+msgstr "選択したフォルダを新しい Thunar ウィンドウで開きます"
+
+#: ../thunar/thunar-launcher.c:347
+#, c-format
+msgid "Unable to open \"%s\"."
+msgstr "\"%s\" を開けません。"
+
+#: ../thunar/thunar-launcher.c:352
+#, c-format
+msgid "Unable to open %d file."
+msgid_plural "Unable to open %d files."
+msgstr[0] "%d 個のファイルを開けません。"
+
+#: ../thunar/thunar-launcher.c:458
+msgid "Are you sure you want to open all folders?"
+msgstr "全てのフォルダを開いてもよろしいですか?"
+
+#: ../thunar/thunar-launcher.c:460
+#, c-format
+msgid "This will open %d separate window."
+msgid_plural "This will open %d separate windows."
+msgstr[0] "%d のウィンドウを別々に開きます。"
+
+#: ../thunar/thunar-launcher.c:519
+#, c-format
+msgid "Open in %d New Window"
+msgid_plural "Open in %d New Windows"
+msgstr[0] "%d の新しいウィンドウで開きます。"
+
+#: ../thunar/thunar-launcher.c:537
+msgid "_Execute"
+msgstr "実行(_E)"
+
+#: ../thunar/thunar-list-model.c:258
+msgid "Folder"
+msgstr "フォルダ"
+
+#: ../thunar/thunar-list-model.c:259
+msgid "The stores folder"
+msgstr "保管フォルダです"
+
+#: ../thunar/thunar-list-model.c:271
+msgid "Folders first"
+msgstr "フォルダを先頭にする"
+
+#: ../thunar/thunar-list-model.c:272
+msgid "Folders first in sorting"
+msgstr "並べ替えでフォルダを先頭にします"
+
+#: ../thunar/thunar-list-model.c:284
+msgid "Number of files"
+msgstr "ファイルの数"
+
+#: ../thunar/thunar-list-model.c:285
+msgid "Number of visible files"
+msgstr "表示されるファイルの数です"
+
+#: ../thunar/thunar-list-model.c:297 ../thunar/thunar-view.c:111
+#: ../thunar/thunar-window.c:218
+msgid "Show hidden"
+msgstr "隠しファイルを表示"
+
+#: ../thunar/thunar-list-model.c:298 ../thunar/thunar-view.c:112
+#: ../thunar/thunar-window.c:219
+msgid "Whether to display hidden files"
+msgstr "隠しファイルを表示します"
+
+#: ../thunar/thunar-list-model.c:656 ../thunar/thunar-properties-dialog.c:586
+msgid "broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1924
+#, c-format
+msgid "%d item, Free space: %s"
+msgid_plural "%d items, Free space: %s"
+msgstr[0] "%d 個のアイテム, 空き領域: %s"
+
+#: ../thunar/thunar-list-model.c:1929
+#, c-format
+msgid "%d item"
+msgid_plural "%d items"
+msgstr[0] "%d 個のアイテム"
+
+#: ../thunar/thunar-list-model.c:1945
+#, c-format
+msgid "\"%s\" broken link"
+msgstr ""
+
+#: ../thunar/thunar-list-model.c:1949
+#, fuzzy, c-format
+msgid "\"%s\" (%s) link to %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1954
+#, c-format
+msgid "\"%s\" (%s) %s"
+msgstr "\"%s\" (%s) %s"
+
+#: ../thunar/thunar-list-model.c:1971 ../thunar/thunar-list-model.c:1976
+#, c-format
+msgid "%d item selected"
+msgid_plural "%d items selected (%s)"
+msgstr[0] "%d 個のアイテムが選択されています (%s)"
+
+#: ../thunar/thunar-location-buttons.c:214
+msgid "Spacing"
+msgstr "é–“éš”"
+
+#: ../thunar/thunar-location-buttons.c:215
+msgid "The amount of space between the path buttons"
+msgstr "パス・ボタン間のスペースです"
+
+#: ../thunar/thunar-location-dialog.c:85
+msgid "Open Location"
+msgstr "場所を開きます"
+
+#: ../thunar/thunar-location-dialog.c:99
+msgid "_Location:"
+msgstr "場所(_L):"
+
+#: ../thunar/thunar-navigator.c:137 ../thunar/thunar-window.c:205
+msgid "Current directory"
+msgstr "現在のフォルダ"
+
+#: ../thunar/thunar-navigator.c:138
+msgid "The directory currently displayed by the navigator"
+msgstr "ナビゲータに現在表示されているフォルダです"
+
+#: ../thunar/thunar-open-with-action.c:320
+#, c-format
+msgid "%s (default)"
+msgstr "%s (標準)"
+
+#. add our custom children
+#: ../thunar/thunar-open-with-action.c:371
+msgid "Other Application..."
+msgstr "他のアプリケーション..."
+
+#: ../thunar/thunar-path-entry.c:167
+msgid "Current file"
+msgstr "現在のファイル"
+
+#: ../thunar/thunar-path-entry.c:168
+msgid "The currently displayed file"
+msgstr "現在表示されているファイルです"
+
+#: ../thunar/thunar-path-entry.c:180
+msgid "The icon size for the path entry"
+msgstr "パス・エントリーのアイコン・サイズです"
+
+#: ../thunar/thunar-preferences.c:178
+#, fuzzy, c-format
+msgid "Failed to create the Thunar configuration directory in %s"
+msgstr "フォルダ %s を作成できません。"
+
+#: ../thunar/thunar-preferences.c:186
+#, fuzzy, c-format
+msgid "Failed to open preferences database in %s: %s"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar/thunar-progress-dialog.c:129
+msgid "Job"
+msgstr "ジョブ"
+
+#: ../thunar/thunar-progress-dialog.c:130
+msgid "The job whose progress to display"
+msgstr "途中経過を表示するジョブです"
+
+#: ../thunar/thunar-progress-dialog.c:273
+msgid "Question"
+msgstr "質問"
+
+#: ../thunar/thunar-progress-dialog.c:299
+msgid "_Yes"
+msgstr "はい(_Y)"
+
+#: ../thunar/thunar-progress-dialog.c:303
+msgid "Yes to _all"
+msgstr "全てにはい(_A)"
+
+#: ../thunar/thunar-progress-dialog.c:307
+msgid "_No"
+msgstr "いいえ(_N)"
+
+#: ../thunar/thunar-progress-dialog.c:311
+msgid "_Cancel"
+msgstr "キャンセル(_C)"
+
+#: ../thunar/thunar-progress-dialog.c:437
+#, c-format
+msgid "(%lu hour remaining)"
+msgid_plural "(%lu hours remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:442
+#, c-format
+msgid "(%lu minute remaining)"
+msgid_plural "(%lu minutes remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-progress-dialog.c:447
+#, c-format
+msgid "(%lu second remaining)"
+msgid_plural "(%lu seconds remaining)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-properties-dialog.c:143
+msgid "The file displayed by the dialog"
+msgstr "ダイアログに表示されているファイルです"
+
+#: ../thunar/thunar-properties-dialog.c:180
+msgid "General"
+msgstr "一般"
+
+#: ../thunar/thunar-properties-dialog.c:197
+msgid "Name:"
+msgstr "名前:"
+
+#.
+#. Second box (kind)
+#.
+#: ../thunar/thunar-properties-dialog.c:222
+msgid "Kind:"
+msgstr "種類:"
+
+#.
+#. Third box (modified, accessed)
+#.
+#: ../thunar/thunar-properties-dialog.c:247
+msgid "Modified:"
+msgstr "変更時間:"
+
+#: ../thunar/thunar-properties-dialog.c:260
+msgid "Accessed:"
+msgstr "アクセス時間:"
+
+#.
+#. Fourth box (volume, size)
+#.
+#: ../thunar/thunar-properties-dialog.c:284
+msgid "Volume:"
+msgstr "容量:"
+
+#: ../thunar/thunar-properties-dialog.c:307
+msgid "Size:"
+msgstr "サイズ:"
+
+#.
+#. Emblem chooser
+#.
+#: ../thunar/thunar-properties-dialog.c:331
+msgid "Emblems"
+msgstr ""
+
+#: ../thunar/thunar-properties-dialog.c:563
+#, c-format
+msgid "%s Info"
+msgstr "%s の情報"
+
+#: ../thunar/thunar-properties-dialog.c:644
+#, c-format
+msgid "%s (%u Bytes)"
+msgstr "%s (%u バイト)"
+
+#. display an error message
+#: ../thunar/thunar-properties-dialog.c:690
+#: ../thunar/thunar-standard-view.c:2135
+#, fuzzy, c-format
+msgid "Failed to rename `%s'"
+msgstr "%s の名前変更に失敗しました。"
+
+#: ../thunar/thunar-standard-view.c:245
+msgid "File Context Menu"
+msgstr "ファイル・コンテキスト・メニュー"
+
+#: ../thunar/thunar-standard-view.c:246
+msgid "Folder Context Menu"
+msgstr "フォルダ・コンテキスト・メニュー"
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create _Folder..."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:247
+msgid "Create an empty folder within the current folder"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:248
+msgid "_Properties"
+msgstr "プロパティ(_P)"
+
+#: ../thunar/thunar-standard-view.c:248
+#, fuzzy
+msgid "View the properties of the selected file"
+msgstr "選択したアイテムのプロパティを表示します"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "_Copy Files"
+msgstr "コピー(_C)"
+
+#: ../thunar/thunar-standard-view.c:249
+#, fuzzy
+msgid "Copy the selected files"
+msgstr "選択したアイテムを開きます"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cu_t Files"
+msgstr "切り取り(_T)"
+
+#: ../thunar/thunar-standard-view.c:250
+#, fuzzy
+msgid "Cut the selected files"
+msgstr "選択したアイテムを開きます"
+
+#: ../thunar/thunar-standard-view.c:251
+#, fuzzy
+msgid "_Paste Files"
+msgstr "貼り付け(_P)"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "_Delete Files"
+msgstr "選択されたファイル"
+
+#: ../thunar/thunar-standard-view.c:252
+#, fuzzy
+msgid "Delete the selected files"
+msgstr "選択したアイテムを開きます"
+
+#: ../thunar/thunar-standard-view.c:253
+#, fuzzy
+msgid "Paste Files into Folder"
+msgstr "ファイルをフォルダに貼り付け"
+
+#: ../thunar/thunar-standard-view.c:253
+msgid "Paste files into the selected folder"
+msgstr "選択したフォルダにファイルを貼り付けます"
+
+#: ../thunar/thunar-standard-view.c:254
+#, fuzzy
+msgid "Select _all Files"
+msgstr "全てのファイルを選択(_A)"
+
+#: ../thunar/thunar-standard-view.c:254
+msgid "Select all files in this window"
+msgstr "このウィンドウの全てのファイルを選択します"
+
+#: ../thunar/thunar-standard-view.c:255
+#, fuzzy
+msgid "Select by _Pattern"
+msgstr "パターンで選択(_P)"
+
+#: ../thunar/thunar-standard-view.c:255
+msgid "Select all files that match a certain pattern"
+msgstr "ある特定のパターンに一致する全てのファイルを選択します"
+
+#: ../thunar/thunar-standard-view.c:256 ../thunar/thunar-standard-view.c:2414
+msgid "Du_plicate File"
+msgid_plural "Du_plicate Files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:256
+#, fuzzy
+msgid "Duplicate each selected file"
+msgstr "選択したアイテムを開きます"
+
+#: ../thunar/thunar-standard-view.c:257 ../thunar/thunar-standard-view.c:2420
+msgid "Ma_ke Link"
+msgid_plural "Ma_ke Links"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../thunar/thunar-standard-view.c:257
+msgid "Create a symbolic link for each selected file"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:258
+msgid "_Rename"
+msgstr "名前変更(_R)"
+
+#: ../thunar/thunar-standard-view.c:258
+#, fuzzy
+msgid "Rename the selected file"
+msgstr "選択したアイテムの名前を変更します"
+
+#: ../thunar/thunar-standard-view.c:358 ../thunar/thunar-view.c:83
+msgid "Whether the view is currently being loaded"
+msgstr "表示ペインが現在読み込まれているかどうかを表します"
+
+#: ../thunar/thunar-standard-view.c:853
+msgid "Loading folder contents..."
+msgstr "フォルダの内容を読み込んでいます..."
+
+#: ../thunar/thunar-standard-view.c:1305
+#, fuzzy
+msgid "New Folder"
+msgstr "フォルダ"
+
+#: ../thunar/thunar-standard-view.c:1308
+#, fuzzy
+msgid "New Folder..."
+msgstr "フォルダ"
+
+#. display an error message
+#: ../thunar/thunar-standard-view.c:1322
+#, c-format
+msgid "Cannot convert filename `%s' to the local encoding"
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1468
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to\n"
+"permanently delete \"%s\"?"
+msgstr "ゴミ箱にある全てのファイルを削除してもよろしいですか?"
+
+#: ../thunar/thunar-standard-view.c:1474
+#, fuzzy, c-format
+msgid ""
+"Are you sure that you want to permanently\n"
+"delete the selected file?"
+msgid_plural ""
+"Are you sure that you want to permanently\n"
+"delete the %u selected files?"
+msgstr[0] "ゴミ箱にある全てのファイルを削除してもよろしいですか?"
+
+#: ../thunar/thunar-standard-view.c:1489
+msgid "If you delete a file, it is permanently lost."
+msgstr ""
+
+#: ../thunar/thunar-standard-view.c:1561
+#, fuzzy
+msgid "Select by Pattern"
+msgstr "パターンで選択"
+
+#: ../thunar/thunar-standard-view.c:1576
+msgid "Pattern:"
+msgstr "パターン:"
+
+#: ../thunar/thunar-standard-view.c:2087
+#, fuzzy, c-format
+msgid "Failed to open directory `%s'"
+msgstr "フォルダ %s を開けません。"
+
+#: ../thunar/thunar-standard-view.c:2387
+#, fuzzy
+msgid "_Copy File"
+msgid_plural "_Copy Files"
+msgstr[0] "コピー(_C)"
+
+#: ../thunar/thunar-standard-view.c:2393
+#, fuzzy
+msgid "Cu_t File"
+msgid_plural "Cu_t Files"
+msgstr[0] "切り取り(_T)"
+
+#: ../thunar/thunar-standard-view.c:2402
+#, fuzzy
+msgid "_Delete File"
+msgid_plural "_Delete Files"
+msgstr[0] "選択されたファイル"
+
+#: ../thunar/thunar-statusbar.c:191
+msgid "The file whose icon to display"
+msgstr "アイコンを表示するファイルです"
+
+#: ../thunar/thunar-statusbar.c:205 ../thunar/thunar-statusbar.c:747
+msgid "Whether to display a loading animation"
+msgstr "読み込みの際のアニメーションを表示するかどうかを表します"
+
+#: ../thunar/thunar-statusbar.c:760 ../thunar/thunar-view.c:98
+msgid "Statusbar text"
+msgstr "ステータスバーのテキスト"
+
+#: ../thunar/thunar-statusbar.c:761
+msgid "The main text to be displayed in the statusbar"
+msgstr "ステータスバーに表示されるメイン・テキストです"
+
+#: ../thunar/thunar-text-renderer.c:185
+msgid "Text"
+msgstr "テキスト"
+
+#: ../thunar/thunar-text-renderer.c:186
+msgid "The text to render"
+msgstr "表示するテキストです"
+
+#: ../thunar/thunar-text-renderer.c:200
+msgid "Wrap mode"
+msgstr "折り返しモード"
+
+#: ../thunar/thunar-text-renderer.c:201
+msgid "The wrap mode"
+msgstr "テキストを折り返します"
+
+#: ../thunar/thunar-text-renderer.c:216
+msgid "Wrap width"
+msgstr "折り返し幅"
+
+#: ../thunar/thunar-text-renderer.c:217
+msgid "The wrap width"
+msgstr "折り返し幅です"
+
+#: ../thunar/thunar-view.c:99
+msgid "Text to be displayed in the statusbar associated with this view"
+msgstr "この表示に関連付けられたステータスバーで表示されるテキストです"
+
+#: ../thunar/thunar-view.c:125 ../thunar/thunar-window.c:233
+msgid "UI manager"
+msgstr "UI マネージャ"
+
+#: ../thunar/thunar-view.c:126
+msgid "UI manager of the surrounding window"
+msgstr "ウィンドウを囲う UI マネージャです"
+
+#: ../thunar/thunar-window.c:149
+msgid "_File"
+msgstr "ファイル(_F)"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open New _Window"
+msgstr "新しいウィンドウを開く(_W)"
+
+#: ../thunar/thunar-window.c:150
+msgid "Open a new Thunar window for the displayed location"
+msgstr "表示されている場所の Thunar ウィンドウを新しく開きます"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close _All Windows"
+msgstr "全ウィンドウを閉じる(_A)"
+
+#: ../thunar/thunar-window.c:151
+msgid "Close all Thunar windows"
+msgstr "Thunar の全てのウィンドウを閉じます"
+
+#: ../thunar/thunar-window.c:152
+msgid "_Close"
+msgstr "閉じる(_C)"
+
+#: ../thunar/thunar-window.c:152
+msgid "Close this window"
+msgstr "このウィンドウを閉じます"
+
+#: ../thunar/thunar-window.c:153
+msgid "_Edit"
+msgstr "編集(_E)"
+
+#: ../thunar/thunar-window.c:154
+msgid "_View"
+msgstr "表示(_V)"
+
+#: ../thunar/thunar-window.c:155
+msgid "_Location Bar"
+msgstr "場所バー(_L)"
+
+#: ../thunar/thunar-window.c:156
+msgid "_Side Pane"
+msgstr "サイドペイン(_S)"
+
+#: ../thunar/thunar-window.c:157
+msgid "_Go"
+msgstr "移動(_G)"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open _Parent"
+msgstr "親フォルダを開く(_P)"
+
+#: ../thunar/thunar-window.c:158
+msgid "Open the parent folder"
+msgstr "親フォルダを開きます"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "_Home"
+msgstr "ホーム"
+
+#: ../thunar/thunar-window.c:159
+#, fuzzy
+msgid "Open the home folder"
+msgstr "親フォルダを開きます"
+
+#: ../thunar/thunar-window.c:160
+msgid "Open _Location..."
+msgstr "場所を開く(_L)..."
+
+#: ../thunar/thunar-window.c:160
+msgid "Specify a location to open"
+msgstr "開く場所を指定します"
+
+#: ../thunar/thunar-window.c:161
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "_About"
+msgstr "このプログラムについて(_A)"
+
+#: ../thunar/thunar-window.c:163 ../thunar/thunar-window.c:165
+msgid "Display information about Thunar"
+msgstr "Thunar についての情報を表示します"
+
+#: ../thunar/thunar-window.c:171
+#, fuzzy
+msgid "Show _Hidden Files"
+msgstr "隠しファイルを表示(_H)"
+
+#: ../thunar/thunar-window.c:171
+msgid "Toggles the display of hidden files in the current window"
+msgstr "現在のウィンドウで隠しファイルの表示/非表示を切り替えます"
+
+#: ../thunar/thunar-window.c:206
+msgid "The directory currently displayed within this window"
+msgstr "現在このウィンドウ内に表示されているフォルダです"
+
+#: ../thunar/thunar-window.c:234
+msgid "The UI manager used within this window"
+msgstr "このウィンドウ内で使用されている UI マネージャです"
+
+#.
+#. * add the side pane options
+#.
+#: ../thunar/thunar-window.c:289
+msgid "_Favourites"
+msgstr "お気に入り(_F)"
+
+#: ../thunar/thunar-window.c:295 ../thunar/thunar-window.c:316
+msgid "_Hidden"
+msgstr "隠す(_H)"
+
+#.
+#. * add the location bar options
+#.
+#: ../thunar/thunar-window.c:304
+msgid "_Button Style"
+msgstr "ボタン式(_B)"
+
+#: ../thunar/thunar-window.c:310
+msgid "_Traditional Style"
+msgstr "旧式(_T)"
+
+#.
+#. * add view options
+#.
+#: ../thunar/thunar-window.c:325
+msgid "View as _Icons"
+msgstr "アイコン表示(_I)"
+
+#: ../thunar/thunar-window.c:331
+msgid "View as _Detailed List"
+msgstr "詳細リスト表示(_D)"
+
+#. display an error to the user
+#: ../thunar/thunar-window.c:738
+#, fuzzy
+msgid "Failed to open home directory"
+msgstr "フォルダ %s を開けません。"
+
+#: ../thunar/thunar-window.c:815
+msgid ""
+"Thunar is a fast and easy to use file manager\n"
+"for the Xfce Desktop Environment."
+msgstr ""
+"Thunar は Xfce デスクトップ環境向けの\n"
+"使いやすい軽快なファイルマネージャーです"
+
+#: ../thunar/thunar-window.c:820
+msgid "translator-credits"
+msgstr "Daichi Kawahata <daichi at xfce.org>"
+
+#: ../thunarx/thunarx-property-page.c:104
+msgid "Label"
+msgstr "ラベル"
+
+#: ../thunarx/thunarx-property-page.c:105
+msgid "Text of the page's label"
+msgstr "ページのラベルのテキストです"
+
+#: ../thunarx/thunarx-property-page.c:117
+msgid "Label widget"
+msgstr "ラベル・ウィジット"
+
+#: ../thunarx/thunarx-property-page.c:118
+msgid "A widget to display in place of the usual page label"
+msgstr "通常のページ・ラベルの代わりに表示するウィジットです"
+
+#: ../Thunar.desktop.in.h:1
+msgid "Browse the filesystem with the file manager"
+msgstr "ファイルマネージャーでファイルシステムを閲覧します"
+
+#: ../Thunar.desktop.in.h:2
+msgid "File Manager"
+msgstr "ファイルマネージャー"
+
+#: ../Thunar.desktop.in.h:3
+msgid "Thunar File Manager"
+msgstr "Thunar ファイルマネージャー"
+
+#~ msgid "The application \"%s\" supports only local documents."
+#~ msgstr "アプリケーション \"%s\" はローカル文書のみサポートします。"
+
+#~ msgid ""
+#~ "Unable to query information about\n"
+#~ "the file %s."
+#~ msgstr ""
+#~ "ファイル %s についての情報を\n"
+#~ "問い合わせできません。"
+
+#~ msgid "Unable to open file %s."
+#~ msgstr "ファイル %s を開けません。"
+
+#~ msgid "URI scheme not supported for transfer operations"
+#~ msgstr "転送するための URI スキームはサポートされていません"
+
+#~ msgid "Files"
+#~ msgstr "ファイル"
+
+#~ msgid "The list of files stored within this trash"
+#~ msgstr "このゴミ箱に保管されているファイルのリストです"
+
+#~ msgid "Empty"
+#~ msgstr "空"
+
+#~ msgid "Whether all trashes are empty"
+#~ msgstr "全てのゴミ箱が空かどうかを表します"
+
+#~ msgid "Unable to unlink root nodes"
+#~ msgstr "ルートノードのリンクを解除できません"
+
+#~ msgid "URI scheme not supported for unlink operations"
+#~ msgstr "リンク解除のための URI スキームはサポートされていません"
+
+#~ msgid "The URI '%s' is invalid"
+#~ msgstr "この URI '%s' は無効です"
+
+#~ msgid "The trash file URI '%s' may not include a '#'"
+#~ msgstr "ゴミ箱ファイルの URI '%s' に '#' を入れてはいけません"
+
+#~ msgid "The URI '%s' uses an unsupported scheme"
+#~ msgstr "この URI '%s' はサポートされていないスキームを使用しています"
+
+#~ msgid "Only local directories can be listed"
+#~ msgstr "ローカルのフォルダのみがリストされます"
+
+#~ msgid "Computer"
+#~ msgstr "コンピューター"
+
+#~ msgid "Model"
+#~ msgstr "モデル"
+
+#~ msgid "The model to display"
+#~ msgstr "表示するモデルです"
+
+#~ msgid "File column"
+#~ msgstr "ファイル欄"
+
+#~ msgid "The column which contains the file"
+#~ msgstr "ファイルを含む表示欄です"
+
+#~ msgid "Position column"
+#~ msgstr "位置欄"
+
+#~ msgid "The column which contains the position"
+#~ msgstr "位置を含む表示欄です"
+
+#~ msgid "Creating links is not yet supported. This will be fixed soon!"
+#~ msgstr "リンクの作成はまだサポートされていません。これは間もなく直します!"
+
+#~ msgid "Unable to rename file"
+#~ msgstr "ファイル名を変更できません"
+
+#~ msgid "unknown"
+#~ msgstr "不明"
+
+#~ msgid "\"%s\" %s"
+#~ msgstr "\"%s\" %s"
+
+#~ msgid "Trash"
+#~ msgstr "ゴミ箱"
+
+#~ msgid "_Empty Trash Bin"
+#~ msgstr "ゴミ箱を空にする(_E)"
+
+#~ msgid "Delete all items in the Trash"
+#~ msgstr "このゴミ箱の全てのアイテムを削除します"
+
+#~ msgid "This will delete %d file currently located in the trash bin."
+#~ msgid_plural "This will delete %d files currently located in the trash bin."
+#~ msgstr[0] "現在ゴミ箱にある %d のファイルを削除します。"

Added: desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,69 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+INCLUDES =								\
+	-I$(top_srcdir)							\
+	$(PLATFORM_CFLAGS)
+
+noinst_LTLIBRARIES =							\
+	libtdb.la
+
+libtdb_la_CFLAGS =							\
+	-D_XOPEN_SOURCE=500
+
+libtdb_la_SOURCES =							\
+	spinlock.c							\
+	spinlock.h							\
+	tdb.c								\
+	tdb.h								\
+	tdbconfig.h
+
+noinst_PROGRAMS =							\
+	tdbtool
+
+tdbtool_SOURCES =							\
+	tdbtool.c
+
+tdbtool_DEPENDENCIES =							\
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtool_LDADD =								\
+	$(top_builddir)/tdb/libtdb.la
+
+TESTS =									\
+	tdbspeed							\
+	tdbtorture
+
+check_PROGRAMS =							\
+	tdbspeed							\
+	tdbtorture
+
+tdbspeed_SOURCES =							\
+	tdbspeed.c
+
+tdbspeed_DEPENDENCIES =							\
+	$(top_builddir)/tdb/libtdb.la
+
+tdbspeed_LDADD =							\
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtorture_CFLAGS =							\
+	-DNLOOPS=1000							\
+	-DNPROCS=10
+
+tdbtorture_SOURCES =							\
+	tdbtorture.c
+
+tdbtorture_DEPENDENCIES =						\
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtorture_LDADD =							\
+	$(top_builddir)/tdb/libtdb.la
+
+CLEANFILES =								\
+	test.tdb							\
+	torture.tdb
+
+EXTRA_DIST =								\
+	README
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,741 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+
+SOURCES = $(libtdb_la_SOURCES) $(tdbspeed_SOURCES) $(tdbtool_SOURCES) $(tdbtorture_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+noinst_PROGRAMS = tdbtool$(EXEEXT)
+check_PROGRAMS = tdbspeed$(EXEEXT) tdbtorture$(EXEEXT)
+subdir = tdb
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/tdbconfig.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 = tdbconfig.h
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libtdb_la_LIBADD =
+am_libtdb_la_OBJECTS = libtdb_la-spinlock.lo libtdb_la-tdb.lo
+libtdb_la_OBJECTS = $(am_libtdb_la_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am_tdbspeed_OBJECTS = tdbspeed.$(OBJEXT)
+tdbspeed_OBJECTS = $(am_tdbspeed_OBJECTS)
+am_tdbtool_OBJECTS = tdbtool.$(OBJEXT)
+tdbtool_OBJECTS = $(am_tdbtool_OBJECTS)
+am_tdbtorture_OBJECTS = tdbtorture-tdbtorture.$(OBJEXT)
+tdbtorture_OBJECTS = $(am_tdbtorture_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libtdb_la_SOURCES) $(tdbspeed_SOURCES) $(tdbtool_SOURCES) \
+	$(tdbtorture_SOURCES)
+DIST_SOURCES = $(libtdb_la_SOURCES) $(tdbspeed_SOURCES) \
+	$(tdbtool_SOURCES) $(tdbtorture_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = \
+	-I$(top_srcdir)							\
+	$(PLATFORM_CFLAGS)
+
+noinst_LTLIBRARIES = \
+	libtdb.la
+
+libtdb_la_CFLAGS = \
+	-D_XOPEN_SOURCE=500
+
+libtdb_la_SOURCES = \
+	spinlock.c							\
+	spinlock.h							\
+	tdb.c								\
+	tdb.h								\
+	tdbconfig.h
+
+tdbtool_SOURCES = \
+	tdbtool.c
+
+tdbtool_DEPENDENCIES = \
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtool_LDADD = \
+	$(top_builddir)/tdb/libtdb.la
+
+TESTS = \
+	tdbspeed							\
+	tdbtorture
+
+tdbspeed_SOURCES = \
+	tdbspeed.c
+
+tdbspeed_DEPENDENCIES = \
+	$(top_builddir)/tdb/libtdb.la
+
+tdbspeed_LDADD = \
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtorture_CFLAGS = \
+	-DNLOOPS=1000							\
+	-DNPROCS=10
+
+tdbtorture_SOURCES = \
+	tdbtorture.c
+
+tdbtorture_DEPENDENCIES = \
+	$(top_builddir)/tdb/libtdb.la
+
+tdbtorture_LDADD = \
+	$(top_builddir)/tdb/libtdb.la
+
+CLEANFILES = \
+	test.tdb							\
+	torture.tdb
+
+EXTRA_DIST = \
+	README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  tdb/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tdb/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
+tdbconfig.h: $(top_builddir)/config.status $(srcdir)/tdbconfig.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libtdb.la: $(libtdb_la_OBJECTS) $(libtdb_la_DEPENDENCIES) 
+	$(LINK)  $(libtdb_la_LDFLAGS) $(libtdb_la_OBJECTS) $(libtdb_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+tdbspeed$(EXEEXT): $(tdbspeed_OBJECTS) $(tdbspeed_DEPENDENCIES) 
+	@rm -f tdbspeed$(EXEEXT)
+	$(LINK) $(tdbspeed_LDFLAGS) $(tdbspeed_OBJECTS) $(tdbspeed_LDADD) $(LIBS)
+tdbtool$(EXEEXT): $(tdbtool_OBJECTS) $(tdbtool_DEPENDENCIES) 
+	@rm -f tdbtool$(EXEEXT)
+	$(LINK) $(tdbtool_LDFLAGS) $(tdbtool_OBJECTS) $(tdbtool_LDADD) $(LIBS)
+tdbtorture$(EXEEXT): $(tdbtorture_OBJECTS) $(tdbtorture_DEPENDENCIES) 
+	@rm -f tdbtorture$(EXEEXT)
+	$(LINK) $(tdbtorture_LDFLAGS) $(tdbtorture_OBJECTS) $(tdbtorture_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libtdb_la-spinlock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libtdb_la-tdb.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tdbspeed.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tdbtool.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tdbtorture-tdbtorture.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libtdb_la-spinlock.lo: spinlock.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtdb_la_CFLAGS) $(CFLAGS) -MT libtdb_la-spinlock.lo -MD -MP -MF "$(DEPDIR)/libtdb_la-spinlock.Tpo" -c -o libtdb_la-spinlock.lo `test -f 'spinlock.c' || echo '$(srcdir)/'`spinlock.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libtdb_la-spinlock.Tpo" "$(DEPDIR)/libtdb_la-spinlock.Plo"; else rm -f "$(DEPDIR)/libtdb_la-spinlock.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='spinlock.c' object='libtdb_la-spinlock.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtdb_la_CFLAGS) $(CFLAGS) -c -o libtdb_la-spinlock.lo `test -f 'spinlock.c' || echo '$(srcdir)/'`spinlock.c
+
+libtdb_la-tdb.lo: tdb.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtdb_la_CFLAGS) $(CFLAGS) -MT libtdb_la-tdb.lo -MD -MP -MF "$(DEPDIR)/libtdb_la-tdb.Tpo" -c -o libtdb_la-tdb.lo `test -f 'tdb.c' || echo '$(srcdir)/'`tdb.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libtdb_la-tdb.Tpo" "$(DEPDIR)/libtdb_la-tdb.Plo"; else rm -f "$(DEPDIR)/libtdb_la-tdb.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tdb.c' object='libtdb_la-tdb.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtdb_la_CFLAGS) $(CFLAGS) -c -o libtdb_la-tdb.lo `test -f 'tdb.c' || echo '$(srcdir)/'`tdb.c
+
+tdbtorture-tdbtorture.o: tdbtorture.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tdbtorture_CFLAGS) $(CFLAGS) -MT tdbtorture-tdbtorture.o -MD -MP -MF "$(DEPDIR)/tdbtorture-tdbtorture.Tpo" -c -o tdbtorture-tdbtorture.o `test -f 'tdbtorture.c' || echo '$(srcdir)/'`tdbtorture.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tdbtorture-tdbtorture.Tpo" "$(DEPDIR)/tdbtorture-tdbtorture.Po"; else rm -f "$(DEPDIR)/tdbtorture-tdbtorture.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tdbtorture.c' object='tdbtorture-tdbtorture.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tdbtorture_CFLAGS) $(CFLAGS) -c -o tdbtorture-tdbtorture.o `test -f 'tdbtorture.c' || echo '$(srcdir)/'`tdbtorture.c
+
+tdbtorture-tdbtorture.obj: tdbtorture.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tdbtorture_CFLAGS) $(CFLAGS) -MT tdbtorture-tdbtorture.obj -MD -MP -MF "$(DEPDIR)/tdbtorture-tdbtorture.Tpo" -c -o tdbtorture-tdbtorture.obj `if test -f 'tdbtorture.c'; then $(CYGPATH_W) 'tdbtorture.c'; else $(CYGPATH_W) '$(srcdir)/tdbtorture.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tdbtorture-tdbtorture.Tpo" "$(DEPDIR)/tdbtorture-tdbtorture.Po"; else rm -f "$(DEPDIR)/tdbtorture-tdbtorture.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tdbtorture.c' object='tdbtorture-tdbtorture.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tdbtorture_CFLAGS) $(CFLAGS) -c -o tdbtorture-tdbtorture.obj `if test -f 'tdbtorture.c'; then $(CYGPATH_W) 'tdbtorture.c'; else $(CYGPATH_W) '$(srcdir)/tdbtorture.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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-checkPROGRAMS clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+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 \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/tdb/README
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/README	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/README	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,167 @@
+tdb - a trivial database system
+tridge at linuxcare.com December 1999
+==================================
+
+This is a simple database API. It was inspired by the realisation that
+in Samba we have several ad-hoc bits of code that essentially
+implement small databases for sharing structures between parts of
+Samba. As I was about to add another I realised that a generic
+database module was called for to replace all the ad-hoc bits.
+
+I based the interface on gdbm. I couldn't use gdbm as we need to be
+able to have multiple writers to the databases at one time.
+
+Compilation
+-----------
+
+add HAVE_MMAP=1 to use mmap instead of read/write
+add TDB_DEBUG=1 for verbose debug info
+add NOLOCK=1 to disable locking code
+
+Testing
+-------
+
+Compile tdbtest.c and link with gdbm for testing. tdbtest will perform
+identical operations via tdb and gdbm then make sure the result is the
+same
+
+Also included is tdbtool, which allows simple database manipulation
+on the commandline.
+
+tdbtest and tdbtool are not built as part of Samba, but are included
+for completeness.
+
+Interface
+---------
+
+The interface is very similar to gdbm except for the following:
+
+- different open interface. The tdb_open call is more similar to a
+  traditional open()
+- no tdbm_reorganise() function
+- no tdbm_sync() function. No operations are cached in the library anyway
+- added a tdb_traverse() function for traversing the whole database
+
+A general rule for using tdb is that the caller frees any returned
+TDB_DATA structures. Just call free(p.dptr) to free a TDB_DATA
+return value called p. This is the same as gdbm.
+
+here is a full list of tdb functions with brief descriptions.
+
+
+----------------------------------------------------------------------
+TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
+		      int open_flags, mode_t mode)
+
+   open the database, creating it if necessary 
+
+   The open_flags and mode are passed straight to the open call on the database
+   file. A flags value of O_WRONLY is invalid
+
+   The hash size is advisory, use zero for a default value. 
+
+   return is NULL on error
+
+   possible tdb_flags are:
+    TDB_CLEAR_IF_FIRST - clear database if we are the only one with it open
+    TDB_INTERNAL - don't use a file, instaed store the data in
+                   memory. The filename is ignored in this case.
+    TDB_NOLOCK - don't do any locking
+    TDB_NOMMAP - don't use mmap
+
+----------------------------------------------------------------------
+char *tdb_error(TDB_CONTEXT *tdb);
+
+     return a error string for the last tdb error
+
+----------------------------------------------------------------------
+int tdb_close(TDB_CONTEXT *tdb);
+
+   close a database
+
+----------------------------------------------------------------------
+int tdb_update(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf);
+
+   update an entry in place - this only works if the new data size
+   is <= the old data size and the key exists.
+   on failure return -1
+
+----------------------------------------------------------------------
+TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   fetch an entry in the database given a key 
+   if the return value has a null dptr then a error occurred
+
+   caller must free the resulting data
+
+----------------------------------------------------------------------
+int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   check if an entry in the database exists 
+
+   note that 1 is returned if the key is found and 0 is returned if not found
+   this doesn't match the conventions in the rest of this module, but is
+   compatible with gdbm
+
+----------------------------------------------------------------------
+int tdb_traverse(TDB_CONTEXT *tdb, int (*fn)(TDB_CONTEXT *tdb,
+                 TDB_DATA key, TDB_DATA dbuf, void *state), void *state);
+
+   traverse the entire database - calling fn(tdb, key, data, state) on each 
+   element.
+
+   return -1 on error or the record count traversed
+
+   if fn is NULL then it is not called
+
+   a non-zero return value from fn() indicates that the traversal should stop
+
+----------------------------------------------------------------------
+TDB_DATA tdb_firstkey(TDB_CONTEXT *tdb);
+
+   find the first entry in the database and return its key
+
+   the caller must free the returned data
+
+----------------------------------------------------------------------
+TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   find the next entry in the database, returning its key
+
+   the caller must free the returned data
+
+----------------------------------------------------------------------
+int tdb_delete(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   delete an entry in the database given a key
+
+----------------------------------------------------------------------
+int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
+
+   store an element in the database, replacing any existing element
+   with the same key 
+
+   If flag==TDB_INSERT then don't overwrite an existing entry
+   If flag==TDB_MODIFY then don't create a new entry
+
+   return 0 on success, -1 on failure
+
+----------------------------------------------------------------------
+int tdb_writelock(TDB_CONTEXT *tdb);
+
+   lock the database. If we already have it locked then don't do anything
+
+----------------------------------------------------------------------
+int tdb_writeunlock(TDB_CONTEXT *tdb);
+   unlock the database
+
+----------------------------------------------------------------------
+int tdb_lockchain(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   lock one hash chain. This is meant to be used to reduce locking
+   contention - it cannot guarantee how many records will be locked
+
+----------------------------------------------------------------------
+int tdb_unlockchain(TDB_CONTEXT *tdb, TDB_DATA key);
+
+   unlock one hash chain

Added: desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,494 @@
+/* $Id: spinlock.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2001 Anton Blanchard <anton at samba.org>
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_SCHED_H
+#include <sched.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <tdb/spinlock.h>
+
+#ifdef USE_SPINLOCKS
+
+/*
+ * ARCH SPECIFIC
+ */
+
+#if defined(SPARC_SPINLOCKS)
+
+static inline int __spin_trylock(spinlock_t *lock)
+{
+	unsigned int result;
+
+	asm volatile("ldstub    [%1], %0"
+		: "=r" (result)
+		: "r" (lock)
+		: "memory");
+
+	return (result == 0) ? 0 : EBUSY;
+}
+
+static inline void __spin_unlock(spinlock_t *lock)
+{
+	asm volatile("":::"memory");
+	*lock = 0;
+}
+
+static inline void __spin_lock_init(spinlock_t *lock)
+{
+	*lock = 0;
+}
+
+static inline int __spin_is_locked(spinlock_t *lock)
+{
+	return (*lock != 0);
+}
+
+#elif defined(POWERPC_SPINLOCKS) 
+
+static inline int __spin_trylock(spinlock_t *lock)
+{
+	unsigned int result;
+
+	__asm__ __volatile__(
+"1:	lwarx		%0,0,%1\n\
+	cmpwi		0,%0,0\n\
+	li		%0,0\n\
+	bne-		2f\n\
+	li		%0,1\n\
+	stwcx.		%0,0,%1\n\
+	bne-		1b\n\
+	isync\n\
+2:"	: "=&r"(result)
+	: "r"(lock)
+	: "cr0", "memory");
+
+	return (result == 1) ? 0 : EBUSY;
+}
+
+static inline void __spin_unlock(spinlock_t *lock)
+{
+	asm volatile("eieio":::"memory");
+	*lock = 0;
+}
+
+static inline void __spin_lock_init(spinlock_t *lock)
+{
+	*lock = 0;
+}
+
+static inline int __spin_is_locked(spinlock_t *lock)
+{
+	return (*lock != 0);
+}
+
+#elif defined(INTEL_SPINLOCKS) 
+
+static inline int __spin_trylock(spinlock_t *lock)
+{
+	int oldval;
+
+	asm volatile("xchgl %0,%1"
+		: "=r" (oldval), "=m" (*lock)
+		: "0" (0)
+		: "memory");
+
+	return oldval > 0 ? 0 : EBUSY;
+}
+
+static inline void __spin_unlock(spinlock_t *lock)
+{
+	asm volatile("":::"memory");
+	*lock = 1;
+}
+
+static inline void __spin_lock_init(spinlock_t *lock)
+{
+	*lock = 1;
+}
+
+static inline int __spin_is_locked(spinlock_t *lock)
+{
+	return (*lock != 1);
+}
+
+#elif defined(MIPS_SPINLOCKS) && defined(sgi) && (_COMPILER_VERSION >= 730)
+
+/* Implement spinlocks on IRIX using the MIPSPro atomic fetch operations. See
+ * sync(3) for the details of the intrinsic operations.
+ *
+ * "sgi" and "_COMPILER_VERSION" are always defined by MIPSPro.
+ */
+
+#ifdef STANDALONE
+
+/* MIPSPro 7.3 has "__inline" as an extension, but not "inline. */
+#define inline __inline
+
+#endif /* STANDALONE */
+
+/* Returns 0 if the lock is acquired, EBUSY otherwise. */
+static inline int __spin_trylock(spinlock_t *lock)
+{
+        unsigned int val;
+        val = __lock_test_and_set(lock, 1);
+        return val == 0 ? 0 : EBUSY;
+}
+
+static inline void __spin_unlock(spinlock_t *lock)
+{
+        __lock_release(lock);
+}
+
+static inline void __spin_lock_init(spinlock_t *lock)
+{
+        __lock_release(lock);
+}
+
+/* Returns 1 if the lock is held, 0 otherwise. */
+static inline int __spin_is_locked(spinlock_t *lock)
+{
+        unsigned int val;
+        val = __add_and_fetch(lock, 0);
+	return val;
+}
+
+#elif defined(MIPS_SPINLOCKS) 
+
+static inline unsigned int load_linked(unsigned long addr)
+{
+	unsigned int res;
+
+	__asm__ __volatile__("ll\t%0,(%1)"
+		: "=r" (res)
+		: "r" (addr));
+
+	return res;
+}
+
+static inline unsigned int store_conditional(unsigned long addr, unsigned int value)
+{
+	unsigned int res;
+
+	__asm__ __volatile__("sc\t%0,(%2)"
+		: "=r" (res)
+		: "0" (value), "r" (addr));
+	return res;
+}
+
+static inline int __spin_trylock(spinlock_t *lock)
+{
+	unsigned int mw;
+
+	do {
+		mw = load_linked(lock);
+		if (mw) 
+			return EBUSY;
+	} while (!store_conditional(lock, 1));
+
+	asm volatile("":::"memory");
+
+	return 0;
+}
+
+static inline void __spin_unlock(spinlock_t *lock)
+{
+	asm volatile("":::"memory");
+	*lock = 0;
+}
+
+static inline void __spin_lock_init(spinlock_t *lock)
+{
+	*lock = 0;
+}
+
+static inline int __spin_is_locked(spinlock_t *lock)
+{
+	return (*lock != 0);
+}
+
+#else
+#error Need to implement spinlock code in spinlock.c
+#endif
+
+/*
+ * OS SPECIFIC
+ */
+
+static void yield_cpu(void)
+{
+	struct timespec tm;
+
+#ifdef HAVE_SCHED_YIELD
+	sched_yield();
+#else
+	/* Linux will busy loop for delays < 2ms on real time tasks */
+	tm.tv_sec = 0;
+	tm.tv_nsec = 2000000L + 1;
+	nanosleep(&tm, NULL);
+#endif
+}
+
+static int this_is_smp(void)
+{
+#if defined(HAVE_SYSCONF) && defined(SYSCONF_SC_NPROC_ONLN)
+        return (sysconf(_SC_NPROC_ONLN) > 1) ? 1 : 0;
+#else
+	return 0;
+#endif
+}
+
+/*
+ * GENERIC
+ */
+
+static int smp_machine = 0;
+
+static inline void __spin_lock(spinlock_t *lock)
+{
+	int ntries = 0;
+
+	while(__spin_trylock(lock)) {
+		while(__spin_is_locked(lock)) {
+			if (smp_machine && ntries++ < MAX_BUSY_LOOPS)
+				continue;
+			yield_cpu();
+		}
+	}
+}
+
+static void __read_lock(tdb_rwlock_t *rwlock)
+{
+	int ntries = 0;
+
+	while(1) {
+		__spin_lock(&rwlock->lock);
+
+		if (!(rwlock->count & RWLOCK_BIAS)) {
+			rwlock->count++;
+			__spin_unlock(&rwlock->lock);
+			return;
+		}
+	
+		__spin_unlock(&rwlock->lock);
+
+		while(rwlock->count & RWLOCK_BIAS) {
+			if (smp_machine && ntries++ < MAX_BUSY_LOOPS)
+				continue;
+			yield_cpu();
+		}
+	}
+}
+
+static void __write_lock(tdb_rwlock_t *rwlock)
+{
+	int ntries = 0;
+
+	while(1) {
+		__spin_lock(&rwlock->lock);
+
+		if (rwlock->count == 0) {
+			rwlock->count |= RWLOCK_BIAS;
+			__spin_unlock(&rwlock->lock);
+			return;
+		}
+
+		__spin_unlock(&rwlock->lock);
+
+		while(rwlock->count != 0) {
+			if (smp_machine && ntries++ < MAX_BUSY_LOOPS)
+				continue;
+			yield_cpu();
+		}
+	}
+}
+
+static void __write_unlock(tdb_rwlock_t *rwlock)
+{
+	__spin_lock(&rwlock->lock);
+
+#ifdef DEBUG
+	if (!(rwlock->count & RWLOCK_BIAS))
+		fprintf(stderr, "bug: write_unlock\n");
+#endif
+
+	rwlock->count &= ~RWLOCK_BIAS;
+	__spin_unlock(&rwlock->lock);
+}
+
+static void __read_unlock(tdb_rwlock_t *rwlock)
+{
+	__spin_lock(&rwlock->lock);
+
+#ifdef DEBUG
+	if (!rwlock->count)
+		fprintf(stderr, "bug: read_unlock\n");
+
+	if (rwlock->count & RWLOCK_BIAS)
+		fprintf(stderr, "bug: read_unlock\n");
+#endif
+
+	rwlock->count--;
+	__spin_unlock(&rwlock->lock);
+}
+
+/* TDB SPECIFIC */
+
+/* lock a list in the database. list -1 is the alloc list */
+int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type)
+{
+	tdb_rwlock_t *rwlocks;
+
+	if (!tdb->map_ptr) return -1;
+	rwlocks = (tdb_rwlock_t *)((char *)tdb->map_ptr + tdb->header.rwlocks);
+
+	switch(rw_type) {
+	case F_RDLCK:
+		__read_lock(&rwlocks[list+1]);
+		break;
+
+	case F_WRLCK:
+		__write_lock(&rwlocks[list+1]);
+		break;
+
+	default:
+		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
+	}
+	return 0;
+}
+
+/* unlock the database. */
+int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type)
+{
+	tdb_rwlock_t *rwlocks;
+
+	if (!tdb->map_ptr) return -1;
+	rwlocks = (tdb_rwlock_t *)((char *)tdb->map_ptr + tdb->header.rwlocks);
+
+	switch(rw_type) {
+	case F_RDLCK:
+		__read_unlock(&rwlocks[list+1]);
+		break;
+
+	case F_WRLCK:
+		__write_unlock(&rwlocks[list+1]);
+		break;
+
+	default:
+		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
+	}
+
+	return 0;
+}
+
+int tdb_create_rwlocks(int fd, unsigned int hash_size)
+{
+	unsigned size, i;
+	tdb_rwlock_t *rwlocks;
+
+	size = TDB_SPINLOCK_SIZE(hash_size);
+	rwlocks = malloc(size);
+	if (!rwlocks)
+		return -1;
+
+	for(i = 0; i < hash_size+1; i++) {
+		__spin_lock_init(&rwlocks[i].lock);
+		rwlocks[i].count = 0;
+	}
+
+	/* Write it out (appending to end) */
+	if (write(fd, rwlocks, size) != size) {
+		free(rwlocks);
+		return -1;
+	}
+	smp_machine = this_is_smp();
+	free(rwlocks);
+	return 0;
+}
+
+int tdb_clear_spinlocks(TDB_CONTEXT *tdb)
+{
+	tdb_rwlock_t *rwlocks;
+	unsigned i;
+
+	if (tdb->header.rwlocks == 0) return 0;
+	if (!tdb->map_ptr) return -1;
+
+	/* We're mmapped here */
+	rwlocks = (tdb_rwlock_t *)((char *)tdb->map_ptr + tdb->header.rwlocks);
+	for(i = 0; i < tdb->header.hash_size+1; i++) {
+		__spin_lock_init(&rwlocks[i].lock);
+		rwlocks[i].count = 0;
+	}
+	return 0;
+}
+#else
+int tdb_create_rwlocks(int fd, unsigned int hash_size) { return 0; }
+int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type) { return -1; }
+int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type) { return -1; }
+
+/* Non-spinlock version: remove spinlock pointer */
+int tdb_clear_spinlocks(TDB_CONTEXT *tdb)
+{
+	tdb_off off = (tdb_off)((char *)&tdb->header.rwlocks
+				- (char *)&tdb->header);
+
+	tdb->header.rwlocks = 0;
+	if (lseek(tdb->fd, off, SEEK_SET) != off
+	    || write(tdb->fd, (void *)&tdb->header.rwlocks,
+		     sizeof(tdb->header.rwlocks)) 
+	    != sizeof(tdb->header.rwlocks))
+		return -1;
+	return 0;
+}
+#endif

Added: desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/spinlock.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,77 @@
+/* $Id: spinlock.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2001 Anton Blanchard <anton at samba.org>
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#ifndef __SPINLOCK_H__
+#define __SPINLOCK_H__
+
+#include <tdb/tdb.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef USE_SPINLOCKS
+
+#define RWLOCK_BIAS 0x1000UL
+
+/* OS SPECIFIC */
+#define MAX_BUSY_LOOPS 1000
+
+/* ARCH SPECIFIC */
+/* We should make sure these are padded to a cache line */
+#if defined(SPARC_SPINLOCKS)
+typedef volatile char spinlock_t;
+#elif defined(POWERPC_SPINLOCKS)
+typedef volatile unsigned long spinlock_t;
+#elif defined(INTEL_SPINLOCKS)
+typedef volatile int spinlock_t;
+#elif defined(MIPS_SPINLOCKS)
+typedef volatile unsigned long spinlock_t;
+#else
+#error Need to implement spinlock code in spinlock.h
+#endif
+
+typedef struct {
+	spinlock_t lock;
+	volatile int count;
+} tdb_rwlock_t;
+
+#define TDB_SPINLOCK_SIZE(hash_size) (((hash_size) + 1) * sizeof(tdb_rwlock_t))
+
+#else /* !USE_SPINLOCKS */
+
+#define TDB_SPINLOCK_SIZE(hash_size) 0
+
+#endif /* !USE_SPINLOCKS */
+
+int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type);
+int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type);
+int tdb_create_rwlocks(int fd, unsigned int hash_size);
+int tdb_clear_spinlocks(TDB_CONTEXT *tdb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__SPINLOCK_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdb.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdb.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdb.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,2099 @@
+/* $Id: tdb.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 1999-2004 Andrew Tridgell <tridge at linuxcare.com>
+ * Copyright (c) 2000      Paul `Rusty' Russel <rusty at linuxcare.com>
+ * Copyright (c) 2000-2003 Jeremy Allison <jeremy at valinux.com>
+ * Copyright (c) 2005      Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+/* NOTE: If you use tdbs under valgrind, and in particular if you run
+ * tdbtorture, you may get spurious "uninitialized value" warnings.  I
+ * think this is because valgrind doesn't understand that the mmap'd
+ * area may be written to by other processes.  Memory can, from the
+ * point of view of the grinded process, spontaneously become
+ * initialized.
+ *
+ * I can think of a few solutions.  [mbp 20030311]
+ *
+ * 1 - Write suppressions for Valgrind so that it doesn't complain
+ * about this.  Probably the most reasonable but people need to
+ * remember to use them.
+ *
+ * 2 - Use IO not mmap when running under valgrind.  Not so nice.
+ *
+ * 3 - Use the special valgrind macros to mark memory as valid at the
+ * right time.  Probably too hard -- the process just doesn't know.
+ */ 
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_UI_H
+#include <sys/uio.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <tdb/spinlock.h>
+#include <tdb/tdb.h>
+
+#define TDB_MAGIC_FOOD "TDB file\n"
+#define TDB_VERSION (0x26011967 + 6)
+#define TDB_MAGIC (0x26011999U)
+#define TDB_FREE_MAGIC (~TDB_MAGIC)
+#define TDB_DEAD_MAGIC (0xFEE1DEAD)
+#define TDB_ALIGNMENT 4
+#define MIN_REC_SIZE (2*sizeof(struct list_struct) + TDB_ALIGNMENT)
+#define DEFAULT_HASH_SIZE 131
+#define TDB_PAGE_SIZE 0x2000
+#define FREELIST_TOP (sizeof(struct tdb_header))
+#define TDB_ALIGN(x,a) (((x) + (a)-1) & ~((a)-1))
+#define TDB_BYTEREV(x) (((((x)&0xff)<<24)|((x)&0xFF00)<<8)|(((x)>>8)&0xFF00)|((x)>>24))
+#define TDB_DEAD(r) ((r)->magic == TDB_DEAD_MAGIC)
+#define TDB_BAD_MAGIC(r) ((r)->magic != TDB_MAGIC && !TDB_DEAD(r))
+#define TDB_HASH_TOP(hash) (FREELIST_TOP + (BUCKET(hash)+1)*sizeof(tdb_off))
+#define TDB_DATA_START(hash_size) (TDB_HASH_TOP(hash_size-1) + TDB_SPINLOCK_SIZE(hash_size))
+
+
+/* NB assumes there is a local variable called "tdb" that is the
+ * current context, also takes doubly-parenthesized print-style
+ * argument. */
+#define TDB_LOG(x) (tdb->log_fn?((tdb->log_fn x),0) : 0)
+
+/* lock offsets */
+#define GLOBAL_LOCK 0
+#define ACTIVE_LOCK 4
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *)-1)
+#endif
+
+/* free memory if the pointer is valid and zero the pointer */
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do { if ((x) != NULL) {free((x)); (x)=NULL;} } while(0)
+#endif
+
+#define BUCKET(hash) ((hash) % tdb->header.hash_size)
+TDB_DATA tdb_null;
+
+/* all contexts, to ensure no double-opens (fcntl locks don't nest!) */
+static TDB_CONTEXT *tdbs = NULL;
+
+static int tdb_munmap(TDB_CONTEXT *tdb)
+{
+	if (tdb->flags & TDB_INTERNAL)
+		return 0;
+
+#ifdef HAVE_MMAP
+	if (tdb->map_ptr) {
+		int ret = munmap(tdb->map_ptr, tdb->map_size);
+		if (ret != 0)
+			return ret;
+	}
+#endif
+	tdb->map_ptr = NULL;
+	return 0;
+}
+
+static void tdb_mmap(TDB_CONTEXT *tdb)
+{
+	if (tdb->flags & TDB_INTERNAL)
+		return;
+
+#ifdef HAVE_MMAP
+	if (!(tdb->flags & TDB_NOMMAP)) {
+		tdb->map_ptr = mmap(NULL, tdb->map_size, 
+				    PROT_READ|(tdb->read_only? 0:PROT_WRITE), 
+				    MAP_SHARED|MAP_FILE, tdb->fd, 0);
+
+		/*
+		 * NB. When mmap fails it returns MAP_FAILED *NOT* NULL !!!!
+		 */
+
+		if (tdb->map_ptr == MAP_FAILED) {
+			tdb->map_ptr = NULL;
+			TDB_LOG((tdb, 2, "tdb_mmap failed for size %d (%s)\n", 
+				 tdb->map_size, strerror(errno)));
+		}
+	} else {
+		tdb->map_ptr = NULL;
+	}
+#else
+	tdb->map_ptr = NULL;
+#endif
+}
+
+/* Endian conversion: we only ever deal with 4 byte quantities */
+static void *convert(void *buf, u32 size)
+{
+	u32 i, *p = buf;
+	for (i = 0; i < size / 4; i++)
+		p[i] = TDB_BYTEREV(p[i]);
+	return buf;
+}
+#define DOCONV() (tdb->flags & TDB_CONVERT)
+#define CONVERT(x) (DOCONV() ? convert(&x, sizeof(x)) : &x)
+
+/* the body of the database is made of one list_struct for the free space
+   plus a separate data list for each hash value */
+struct list_struct {
+	tdb_off next; /* offset of the next record in the list */
+	tdb_len rec_len; /* total byte length of record */
+	tdb_len key_len; /* byte length of key */
+	tdb_len data_len; /* byte length of data */
+	u32 full_hash; /* the full 32 bit hash of the key */
+	u32 magic;   /* try to catch errors */
+	/* the following union is implied:
+		union {
+			char record[rec_len];
+			struct {
+				char key[key_len];
+				char data[data_len];
+			}
+			u32 totalsize; (tailer)
+		}
+	*/
+};
+
+/***************************************************************
+ Allow a caller to set a "alarm" flag that tdb can check to abort
+ a blocking lock on SIGALRM.
+***************************************************************/
+
+static sig_atomic_t *palarm_fired;
+
+void tdb_set_lock_alarm(sig_atomic_t *palarm)
+{
+	palarm_fired = palarm;
+}
+
+/* a byte range locking function - return 0 on success
+   this functions locks/unlocks 1 byte at the specified offset.
+
+   On error, errno is also set so that errors are passed back properly
+   through tdb_open(). */
+static int tdb_brlock(TDB_CONTEXT *tdb, tdb_off offset, 
+		      int rw_type, int lck_type, int probe)
+{
+	struct flock fl;
+	int ret;
+
+	if (tdb->flags & TDB_NOLOCK)
+		return 0;
+	if ((rw_type == F_WRLCK) && (tdb->read_only)) {
+		errno = EACCES;
+		return -1;
+	}
+
+	fl.l_type = rw_type;
+	fl.l_whence = SEEK_SET;
+	fl.l_start = offset;
+	fl.l_len = 1;
+	fl.l_pid = 0;
+
+	do {
+		ret = fcntl(tdb->fd,lck_type,&fl);
+		if (ret == -1 && errno == EINTR && palarm_fired && *palarm_fired)
+			break;
+	} while (ret == -1 && errno == EINTR);
+
+	if (ret == -1) {
+		if (!probe && lck_type != F_SETLK) {
+			/* Ensure error code is set for log fun to examine. */
+			if (errno == EINTR && palarm_fired && *palarm_fired)
+				tdb->ecode = TDB_ERR_LOCK_TIMEOUT;
+			else
+				tdb->ecode = TDB_ERR_LOCK;
+			TDB_LOG((tdb, 5,"tdb_brlock failed (fd=%d) at offset %d rw_type=%d lck_type=%d\n", 
+				 tdb->fd, offset, rw_type, lck_type));
+		}
+		/* Was it an alarm timeout ? */
+		if (errno == EINTR && palarm_fired && *palarm_fired) {
+			TDB_LOG((tdb, 5, "tdb_brlock timed out (fd=%d) at offset %d rw_type=%d lck_type=%d\n", 
+				 tdb->fd, offset, rw_type, lck_type));
+			return TDB_ERRCODE(TDB_ERR_LOCK_TIMEOUT, -1);
+		}
+		/* Otherwise - generic lock error. errno set by fcntl.
+		 * EAGAIN is an expected return from non-blocking
+		 * locks. */
+		if (errno != EAGAIN) {
+			TDB_LOG((tdb, 5, "tdb_brlock failed (fd=%d) at offset %d rw_type=%d lck_type=%d: %s\n", 
+				 tdb->fd, offset, rw_type, lck_type, 
+				 strerror(errno)));
+		}
+		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
+	}
+	return 0;
+}
+
+/* lock a list in the database. list -1 is the alloc list */
+static int tdb_lock(TDB_CONTEXT *tdb, int list, int ltype)
+{
+	if (list < -1 || list >= (int)tdb->header.hash_size) {
+		TDB_LOG((tdb, 0,"tdb_lock: invalid list %d for ltype=%d\n", 
+			   list, ltype));
+		return -1;
+	}
+	if (tdb->flags & TDB_NOLOCK)
+		return 0;
+
+	/* Since fcntl locks don't nest, we do a lock for the first one,
+	   and simply bump the count for future ones */
+	if (tdb->locked[list+1].count == 0) {
+		if (!tdb->read_only && tdb->header.rwlocks) {
+			if (tdb_spinlock(tdb, list, ltype)) {
+				TDB_LOG((tdb, 0, "tdb_lock spinlock failed on list %d ltype=%d\n", 
+					   list, ltype));
+				return -1;
+			}
+		} else if (tdb_brlock(tdb,FREELIST_TOP+4*list,ltype,F_SETLKW, 0)) {
+			TDB_LOG((tdb, 0,"tdb_lock failed on list %d ltype=%d (%s)\n", 
+					   list, ltype, strerror(errno)));
+			return -1;
+		}
+		tdb->locked[list+1].ltype = ltype;
+	}
+	tdb->locked[list+1].count++;
+	return 0;
+}
+
+/* unlock the database: returns void because it's too late for errors. */
+	/* changed to return int it may be interesting to know there
+	   has been an error  --simo */
+static int tdb_unlock(TDB_CONTEXT *tdb, int list, int ltype)
+{
+	int ret = -1;
+
+	if (tdb->flags & TDB_NOLOCK)
+		return 0;
+
+	/* Sanity checks */
+	if (list < -1 || list >= (int)tdb->header.hash_size) {
+		TDB_LOG((tdb, 0, "tdb_unlock: list %d invalid (%d)\n", list, tdb->header.hash_size));
+		return ret;
+	}
+
+	if (tdb->locked[list+1].count==0) {
+		TDB_LOG((tdb, 0, "tdb_unlock: count is 0\n"));
+		return ret;
+	}
+
+	if (tdb->locked[list+1].count == 1) {
+		/* Down to last nested lock: unlock underneath */
+		if (!tdb->read_only && tdb->header.rwlocks) {
+			ret = tdb_spinunlock(tdb, list, ltype);
+		} else {
+			ret = tdb_brlock(tdb, FREELIST_TOP+4*list, F_UNLCK, F_SETLKW, 0);
+		}
+	} else {
+		ret = 0;
+	}
+	tdb->locked[list+1].count--;
+
+	if (ret)
+		TDB_LOG((tdb, 0,"tdb_unlock: An error occurred unlocking!\n")); 
+	return ret;
+}
+
+/* check for an out of bounds access - if it is out of bounds then
+   see if the database has been expanded by someone else and expand
+   if necessary 
+   note that "len" is the minimum length needed for the db
+*/
+static int tdb_oob(TDB_CONTEXT *tdb, tdb_off len, int probe)
+{
+	struct stat st;
+	if (len <= tdb->map_size)
+		return 0;
+	if (tdb->flags & TDB_INTERNAL) {
+		if (!probe) {
+			/* Ensure ecode is set for log fn. */
+			tdb->ecode = TDB_ERR_IO;
+			TDB_LOG((tdb, 0,"tdb_oob len %d beyond internal malloc size %d\n",
+				 (int)len, (int)tdb->map_size));
+		}
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+	}
+
+	if (fstat(tdb->fd, &st) == -1)
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+
+	if (st.st_size < (size_t)len) {
+		if (!probe) {
+			/* Ensure ecode is set for log fn. */
+			tdb->ecode = TDB_ERR_IO;
+			TDB_LOG((tdb, 0,"tdb_oob len %d beyond eof at %d\n",
+				 (int)len, (int)st.st_size));
+		}
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+	}
+
+	/* Unmap, update size, remap */
+	if (tdb_munmap(tdb) == -1)
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+	tdb->map_size = st.st_size;
+	tdb_mmap(tdb);
+	return 0;
+}
+
+/* write a lump of data at a specified offset */
+static int tdb_write(TDB_CONTEXT *tdb, tdb_off off, void *buf, tdb_len len)
+{
+	if (tdb_oob(tdb, off + len, 0) != 0)
+		return -1;
+
+	if (tdb->map_ptr)
+		memcpy(off + (char *)tdb->map_ptr, buf, len);
+#ifdef HAVE_PWRITE
+	else if (pwrite(tdb->fd, buf, len, off) != (ssize_t)len) {
+#else
+	else if (lseek(tdb->fd, off, SEEK_SET) != off
+		 || write(tdb->fd, buf, len) != (ssize_t)len) {
+#endif
+		/* Ensure ecode is set for log fn. */
+		tdb->ecode = TDB_ERR_IO;
+		TDB_LOG((tdb, 0,"tdb_write failed at %d len=%d (%s)\n",
+			   off, len, strerror(errno)));
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+	}
+	return 0;
+}
+
+/* read a lump of data at a specified offset, maybe convert */
+static int tdb_read(TDB_CONTEXT *tdb,tdb_off off,void *buf,tdb_len len,int cv)
+{
+	if (tdb_oob(tdb, off + len, 0) != 0)
+		return -1;
+
+	if (tdb->map_ptr)
+		memcpy(buf, off + (char *)tdb->map_ptr, len);
+#ifdef HAVE_PREAD
+	else if (pread(tdb->fd, buf, len, off) != (ssize_t)len) {
+#else
+	else if (lseek(tdb->fd, off, SEEK_SET) != off
+		 || read(tdb->fd, buf, len) != (ssize_t)len) {
+#endif
+		/* Ensure ecode is set for log fn. */
+		tdb->ecode = TDB_ERR_IO;
+		TDB_LOG((tdb, 0,"tdb_read failed at %d len=%d (%s)\n",
+			   off, len, strerror(errno)));
+		return TDB_ERRCODE(TDB_ERR_IO, -1);
+	}
+	if (cv)
+		convert(buf, len);
+	return 0;
+}
+
+/* read a lump of data, allocating the space for it */
+static char *tdb_alloc_read(TDB_CONTEXT *tdb, tdb_off offset, tdb_len len)
+{
+	char *buf;
+
+	if (!(buf = malloc(len))) {
+		/* Ensure ecode is set for log fn. */
+		tdb->ecode = TDB_ERR_OOM;
+		TDB_LOG((tdb, 0,"tdb_alloc_read malloc failed len=%d (%s)\n",
+			   len, strerror(errno)));
+		return TDB_ERRCODE(TDB_ERR_OOM, buf);
+	}
+	if (tdb_read(tdb, offset, buf, len, 0) == -1) {
+		SAFE_FREE(buf);
+		return NULL;
+	}
+	return buf;
+}
+
+/* read/write a tdb_off */
+static int ofs_read(TDB_CONTEXT *tdb, tdb_off offset, tdb_off *d)
+{
+	return tdb_read(tdb, offset, (char*)d, sizeof(*d), DOCONV());
+}
+static int ofs_write(TDB_CONTEXT *tdb, tdb_off offset, tdb_off *d)
+{
+	tdb_off off = *d;
+	return tdb_write(tdb, offset, CONVERT(off), sizeof(*d));
+}
+
+/* read/write a record */
+static int rec_read(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
+{
+	if (tdb_read(tdb, offset, rec, sizeof(*rec),DOCONV()) == -1)
+		return -1;
+	if (TDB_BAD_MAGIC(rec)) {
+		/* Ensure ecode is set for log fn. */
+		tdb->ecode = TDB_ERR_CORRUPT;
+		TDB_LOG((tdb, 0,"rec_read bad magic 0x%x at offset=%d\n", rec->magic, offset));
+		return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
+	}
+	return tdb_oob(tdb, rec->next+sizeof(*rec), 0);
+}
+static int rec_write(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
+{
+	struct list_struct r = *rec;
+	return tdb_write(tdb, offset, CONVERT(r), sizeof(r));
+}
+
+/* read a freelist record and check for simple errors */
+static int rec_free_read(TDB_CONTEXT *tdb, tdb_off off, struct list_struct *rec)
+{
+	if (tdb_read(tdb, off, rec, sizeof(*rec),DOCONV()) == -1)
+		return -1;
+
+	if (rec->magic == TDB_MAGIC) {
+		/* this happens when a app is showdown while deleting a record - we should
+		   not completely fail when this happens */
+		TDB_LOG((tdb, 0,"rec_free_read non-free magic 0x%x at offset=%d - fixing\n", 
+			 rec->magic, off));
+		rec->magic = TDB_FREE_MAGIC;
+		if (tdb_write(tdb, off, rec, sizeof(*rec)) == -1)
+			return -1;
+	}
+
+	if (rec->magic != TDB_FREE_MAGIC) {
+		/* Ensure ecode is set for log fn. */
+		tdb->ecode = TDB_ERR_CORRUPT;
+		TDB_LOG((tdb, 0,"rec_free_read bad magic 0x%x at offset=%d\n", 
+			   rec->magic, off));
+		return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
+	}
+	if (tdb_oob(tdb, rec->next+sizeof(*rec), 0) != 0)
+		return -1;
+	return 0;
+}
+
+/* update a record tailer (must hold allocation lock) */
+static int update_tailer(TDB_CONTEXT *tdb, tdb_off offset,
+			 const struct list_struct *rec)
+{
+	tdb_off totalsize;
+
+	/* Offset of tailer from record header */
+	totalsize = sizeof(*rec) + rec->rec_len;
+	return ofs_write(tdb, offset + totalsize - sizeof(tdb_off),
+			 &totalsize);
+}
+
+static tdb_off tdb_dump_record(TDB_CONTEXT *tdb, tdb_off offset)
+{
+	struct list_struct rec;
+	tdb_off tailer_ofs, tailer;
+
+	if (tdb_read(tdb, offset, (char *)&rec, sizeof(rec), DOCONV()) == -1) {
+		printf("ERROR: failed to read record at %u\n", offset);
+		return 0;
+	}
+
+	printf(" rec: offset=%u next=%d rec_len=%d key_len=%d data_len=%d full_hash=0x%x magic=0x%x\n",
+	       offset, rec.next, rec.rec_len, rec.key_len, rec.data_len, rec.full_hash, rec.magic);
+
+	tailer_ofs = offset + sizeof(rec) + rec.rec_len - sizeof(tdb_off);
+	if (ofs_read(tdb, tailer_ofs, &tailer) == -1) {
+		printf("ERROR: failed to read tailer at %u\n", tailer_ofs);
+		return rec.next;
+	}
+
+	if (tailer != rec.rec_len + sizeof(rec)) {
+		printf("ERROR: tailer does not match record! tailer=%u totalsize=%u\n",
+				(unsigned)tailer, (unsigned)(rec.rec_len + sizeof(rec)));
+	}
+	return rec.next;
+}
+
+static int tdb_dump_chain(TDB_CONTEXT *tdb, int i)
+{
+	tdb_off rec_ptr, top;
+	int hash_length = 0;
+
+	top = TDB_HASH_TOP(i);
+
+	if (tdb_lock(tdb, i, F_WRLCK) != 0)
+		return -1;
+
+	if (ofs_read(tdb, top, &rec_ptr) == -1)
+		return tdb_unlock(tdb, i, F_WRLCK);
+
+	if (rec_ptr)
+		printf("hash=%d\n", i);
+
+	while (rec_ptr) {
+		rec_ptr = tdb_dump_record(tdb, rec_ptr);
+		hash_length += 1;
+	}
+
+	printf("chain %d length %d\n", i, hash_length);
+
+	return tdb_unlock(tdb, i, F_WRLCK);
+}
+
+void tdb_dump_all(TDB_CONTEXT *tdb)
+{
+	int i;
+	for (i=0;i<tdb->header.hash_size;i++) {
+		tdb_dump_chain(tdb, i);
+	}
+	tdb_printfreelist(tdb);
+}
+
+int tdb_printfreelist(TDB_CONTEXT *tdb)
+{
+	int ret;
+	long total_free = 0;
+	tdb_off offset, rec_ptr;
+	struct list_struct rec;
+
+	if ((ret = tdb_lock(tdb, -1, F_WRLCK)) != 0)
+		return ret;
+
+	offset = FREELIST_TOP;
+
+	/* read in the freelist top */
+	if (ofs_read(tdb, offset, &rec_ptr) == -1) {
+		tdb_unlock(tdb, -1, F_WRLCK);
+		return 0;
+	}
+
+	printf("freelist top=[0x%08x]\n", rec_ptr );
+	while (rec_ptr) {
+		if (tdb_read(tdb, rec_ptr, (char *)&rec, sizeof(rec), DOCONV()) == -1) {
+			tdb_unlock(tdb, -1, F_WRLCK);
+			return -1;
+		}
+
+		if (rec.magic != TDB_FREE_MAGIC) {
+			printf("bad magic 0x%08x in free list\n", rec.magic);
+			tdb_unlock(tdb, -1, F_WRLCK);
+			return -1;
+		}
+
+		printf("entry offset=[0x%08x], rec.rec_len = [0x%08x (%d)]\n", rec.next, rec.rec_len, rec.rec_len );
+		total_free += rec.rec_len;
+
+		/* move to the next record */
+		rec_ptr = rec.next;
+	}
+	printf("total rec_len = [0x%08x (%d)]\n", (int)total_free, 
+               (int)total_free);
+
+	return tdb_unlock(tdb, -1, F_WRLCK);
+}
+
+/* Remove an element from the freelist.  Must have alloc lock. */
+static int remove_from_freelist(TDB_CONTEXT *tdb, tdb_off off, tdb_off next)
+{
+	tdb_off last_ptr, i;
+
+	/* read in the freelist top */
+	last_ptr = FREELIST_TOP;
+	while (ofs_read(tdb, last_ptr, &i) != -1 && i != 0) {
+		if (i == off) {
+			/* We've found it! */
+			return ofs_write(tdb, last_ptr, &next);
+		}
+		/* Follow chain (next offset is at start of record) */
+		last_ptr = i;
+	}
+	TDB_LOG((tdb, 0,"remove_from_freelist: not on list at off=%d\n", off));
+	return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
+}
+
+/* Add an element into the freelist. Merge adjacent records if
+   neccessary. */
+static int tdb_free(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
+{
+	tdb_off right, left;
+
+	/* Allocation and tailer lock */
+	if (tdb_lock(tdb, -1, F_WRLCK) != 0)
+		return -1;
+
+	/* set an initial tailer, so if we fail we don't leave a bogus record */
+	if (update_tailer(tdb, offset, rec) != 0) {
+		TDB_LOG((tdb, 0, "tdb_free: upfate_tailer failed!\n"));
+		goto fail;
+	}
+
+	/* Look right first (I'm an Australian, dammit) */
+	right = offset + sizeof(*rec) + rec->rec_len;
+	if (right + sizeof(*rec) <= tdb->map_size) {
+		struct list_struct r;
+
+		if (tdb_read(tdb, right, &r, sizeof(r), DOCONV()) == -1) {
+			TDB_LOG((tdb, 0, "tdb_free: right read failed at %u\n", right));
+			goto left;
+		}
+
+		/* If it's free, expand to include it. */
+		if (r.magic == TDB_FREE_MAGIC) {
+			if (remove_from_freelist(tdb, right, r.next) == -1) {
+				TDB_LOG((tdb, 0, "tdb_free: right free failed at %u\n", right));
+				goto left;
+			}
+			rec->rec_len += sizeof(r) + r.rec_len;
+		}
+	}
+
+left:
+	/* Look left */
+	left = offset - sizeof(tdb_off);
+	if (left > TDB_DATA_START(tdb->header.hash_size)) {
+		struct list_struct l;
+		tdb_off leftsize;
+		
+		/* Read in tailer and jump back to header */
+		if (ofs_read(tdb, left, &leftsize) == -1) {
+			TDB_LOG((tdb, 0, "tdb_free: left offset read failed at %u\n", left));
+			goto update;
+		}
+		left = offset - leftsize;
+
+		/* Now read in record */
+		if (tdb_read(tdb, left, &l, sizeof(l), DOCONV()) == -1) {
+			TDB_LOG((tdb, 0, "tdb_free: left read failed at %u (%u)\n", left, leftsize));
+			goto update;
+		}
+
+		/* If it's free, expand to include it. */
+		if (l.magic == TDB_FREE_MAGIC) {
+			if (remove_from_freelist(tdb, left, l.next) == -1) {
+				TDB_LOG((tdb, 0, "tdb_free: left free failed at %u\n", left));
+				goto update;
+			} else {
+				offset = left;
+				rec->rec_len += leftsize;
+			}
+		}
+	}
+
+update:
+	if (update_tailer(tdb, offset, rec) == -1) {
+		TDB_LOG((tdb, 0, "tdb_free: update_tailer failed at %u\n", offset));
+		goto fail;
+	}
+
+	/* Now, prepend to free list */
+	rec->magic = TDB_FREE_MAGIC;
+
+	if (ofs_read(tdb, FREELIST_TOP, &rec->next) == -1 ||
+	    rec_write(tdb, offset, rec) == -1 ||
+	    ofs_write(tdb, FREELIST_TOP, &offset) == -1) {
+		TDB_LOG((tdb, 0, "tdb_free record write failed at offset=%d\n", offset));
+		goto fail;
+	}
+
+	/* And we're done. */
+	tdb_unlock(tdb, -1, F_WRLCK);
+	return 0;
+
+ fail:
+	tdb_unlock(tdb, -1, F_WRLCK);
+	return -1;
+}
+
+
+/* expand a file.  we prefer to use ftruncate, as that is what posix
+  says to use for mmap expansion */
+static int expand_file(TDB_CONTEXT *tdb, tdb_off size, tdb_off addition)
+{
+	char buf[1024];
+#if HAVE_FTRUNCATE_EXTEND
+	if (ftruncate(tdb->fd, size+addition) != 0) {
+		TDB_LOG((tdb, 0, "expand_file ftruncate to %d failed (%s)\n", 
+			   size+addition, strerror(errno)));
+		return -1;
+	}
+#else
+	char b = 0;
+
+#ifdef HAVE_PWRITE
+	if (pwrite(tdb->fd,  &b, 1, (size+addition) - 1) != 1) {
+#else
+	if (lseek(tdb->fd, (size+addition) - 1, SEEK_SET) != (size+addition) - 1 || 
+	    write(tdb->fd, &b, 1) != 1) {
+#endif
+		TDB_LOG((tdb, 0, "expand_file to %d failed (%s)\n", 
+			   size+addition, strerror(errno)));
+		return -1;
+	}
+#endif
+
+	/* now fill the file with something. This ensures that the file isn't sparse, which would be
+	   very bad if we ran out of disk. This must be done with write, not via mmap */
+	memset(buf, 0x42, sizeof(buf));
+	while (addition) {
+		int n = addition>sizeof(buf)?sizeof(buf):addition;
+#ifdef HAVE_PWRITE
+		int ret = pwrite(tdb->fd, buf, n, size);
+#else
+		int ret;
+		if (lseek(tdb->fd, size, SEEK_SET) != size)
+			return -1;
+		ret = write(tdb->fd, buf, n);
+#endif
+		if (ret != n) {
+			TDB_LOG((tdb, 0, "expand_file write of %d failed (%s)\n", 
+				   n, strerror(errno)));
+			return -1;
+		}
+		addition -= n;
+		size += n;
+	}
+	return 0;
+}
+
+
+/* expand the database at least size bytes by expanding the underlying
+   file and doing the mmap again if necessary */
+static int tdb_expand(TDB_CONTEXT *tdb, tdb_off size)
+{
+	struct list_struct rec;
+	tdb_off offset;
+
+	if (tdb_lock(tdb, -1, F_WRLCK) == -1) {
+		TDB_LOG((tdb, 0, "lock failed in tdb_expand\n"));
+		return -1;
+	}
+
+	/* must know about any previous expansions by another process */
+	tdb_oob(tdb, tdb->map_size + 1, 1);
+
+	/* always make room for at least 10 more records, and round
+           the database up to a multiple of TDB_PAGE_SIZE */
+	size = TDB_ALIGN(tdb->map_size + size*10, TDB_PAGE_SIZE) - tdb->map_size;
+
+	if (!(tdb->flags & TDB_INTERNAL))
+		tdb_munmap(tdb);
+
+	/*
+	 * We must ensure the file is unmapped before doing this
+	 * to ensure consistency with systems like OpenBSD where
+	 * writes and mmaps are not consistent.
+	 */
+
+	/* expand the file itself */
+	if (!(tdb->flags & TDB_INTERNAL)) {
+		if (expand_file(tdb, tdb->map_size, size) != 0)
+			goto fail;
+	}
+
+	tdb->map_size += size;
+
+	if (tdb->flags & TDB_INTERNAL) {
+		char *new_map_ptr = realloc(tdb->map_ptr, tdb->map_size);
+		if (!new_map_ptr) {
+			tdb->map_size -= size;
+			goto fail;
+		}
+		tdb->map_ptr = new_map_ptr;
+	} else {
+		/*
+		 * We must ensure the file is remapped before adding the space
+		 * to ensure consistency with systems like OpenBSD where
+		 * writes and mmaps are not consistent.
+		 */
+
+		/* We're ok if the mmap fails as we'll fallback to read/write */
+		tdb_mmap(tdb);
+	}
+
+	/* form a new freelist record */
+	memset(&rec,'\0',sizeof(rec));
+	rec.rec_len = size - sizeof(rec);
+
+	/* link it into the free list */
+	offset = tdb->map_size - size;
+	if (tdb_free(tdb, offset, &rec) == -1)
+		goto fail;
+
+	tdb_unlock(tdb, -1, F_WRLCK);
+	return 0;
+ fail:
+	tdb_unlock(tdb, -1, F_WRLCK);
+	return -1;
+}
+
+/* allocate some space from the free list. The offset returned points
+   to a unconnected list_struct within the database with room for at
+   least length bytes of total data
+
+   0 is returned if the space could not be allocated
+ */
+static tdb_off tdb_allocate(TDB_CONTEXT *tdb, tdb_len length,
+			    struct list_struct *rec)
+{
+	tdb_off rec_ptr, last_ptr, newrec_ptr;
+	struct list_struct newrec;
+
+	memset(&newrec, '\0', sizeof(newrec));
+
+	if (tdb_lock(tdb, -1, F_WRLCK) == -1)
+		return 0;
+
+	/* Extra bytes required for tailer */
+	length += sizeof(tdb_off);
+
+ again:
+	last_ptr = FREELIST_TOP;
+
+	/* read in the freelist top */
+	if (ofs_read(tdb, FREELIST_TOP, &rec_ptr) == -1)
+		goto fail;
+
+	/* keep looking until we find a freelist record big enough */
+	while (rec_ptr) {
+		if (rec_free_read(tdb, rec_ptr, rec) == -1)
+			goto fail;
+
+		if (rec->rec_len >= length) {
+			/* found it - now possibly split it up  */
+			if (rec->rec_len > length + MIN_REC_SIZE) {
+				/* Length of left piece */
+				length = TDB_ALIGN(length, TDB_ALIGNMENT);
+
+				/* Right piece to go on free list */
+				newrec.rec_len = rec->rec_len
+					- (sizeof(*rec) + length);
+				newrec_ptr = rec_ptr + sizeof(*rec) + length;
+
+				/* And left record is shortened */
+				rec->rec_len = length;
+			} else
+				newrec_ptr = 0;
+
+			/* Remove allocated record from the free list */
+			if (ofs_write(tdb, last_ptr, &rec->next) == -1)
+				goto fail;
+
+			/* Update header: do this before we drop alloc
+                           lock, otherwise tdb_free() might try to
+                           merge with us, thinking we're free.
+                           (Thanks Jeremy Allison). */
+			rec->magic = TDB_MAGIC;
+			if (rec_write(tdb, rec_ptr, rec) == -1)
+				goto fail;
+
+			/* Did we create new block? */
+			if (newrec_ptr) {
+				/* Update allocated record tailer (we
+                                   shortened it). */
+				if (update_tailer(tdb, rec_ptr, rec) == -1)
+					goto fail;
+
+				/* Free new record */
+				if (tdb_free(tdb, newrec_ptr, &newrec) == -1)
+					goto fail;
+			}
+
+			/* all done - return the new record offset */
+			tdb_unlock(tdb, -1, F_WRLCK);
+			return rec_ptr;
+		}
+		/* move to the next record */
+		last_ptr = rec_ptr;
+		rec_ptr = rec->next;
+	}
+	/* we didn't find enough space. See if we can expand the
+	   database and if we can then try again */
+	if (tdb_expand(tdb, length + sizeof(*rec)) == 0)
+		goto again;
+ fail:
+	tdb_unlock(tdb, -1, F_WRLCK);
+	return 0;
+}
+
+/* initialise a new database with a specified hash size */
+static int tdb_new_database(TDB_CONTEXT *tdb, int hash_size)
+{
+	struct tdb_header *newdb;
+	int size, ret = -1;
+
+	/* We make it up in memory, then write it out if not internal */
+	size = sizeof(struct tdb_header) + (hash_size+1)*sizeof(tdb_off);
+	if (!(newdb = calloc(size, 1)))
+		return TDB_ERRCODE(TDB_ERR_OOM, -1);
+
+	/* Fill in the header */
+	newdb->version = TDB_VERSION;
+	newdb->hash_size = hash_size;
+#ifdef USE_SPINLOCKS
+	newdb->rwlocks = size;
+#endif
+	if (tdb->flags & TDB_INTERNAL) {
+		tdb->map_size = size;
+		tdb->map_ptr = (char *)newdb;
+		memcpy(&tdb->header, newdb, sizeof(tdb->header));
+		/* Convert the `ondisk' version if asked. */
+		CONVERT(*newdb);
+		return 0;
+	}
+	if (lseek(tdb->fd, 0, SEEK_SET) == -1)
+		goto fail;
+
+	if (ftruncate(tdb->fd, 0) == -1)
+		goto fail;
+
+	/* This creates an endian-converted header, as if read from disk */
+	CONVERT(*newdb);
+	memcpy(&tdb->header, newdb, sizeof(tdb->header));
+	/* Don't endian-convert the magic food! */
+	memcpy(newdb->magic_food, TDB_MAGIC_FOOD, strlen(TDB_MAGIC_FOOD)+1);
+	if (write(tdb->fd, newdb, size) != size)
+		ret = -1;
+	else
+		ret = tdb_create_rwlocks(tdb->fd, hash_size);
+
+  fail:
+	SAFE_FREE(newdb);
+	return ret;
+}
+
+/* Returns 0 on fail.  On success, return offset of record, and fills
+   in rec */
+static tdb_off tdb_find(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash,
+			struct list_struct *r)
+{
+	tdb_off rec_ptr;
+	
+	/* read in the hash top */
+	if (ofs_read(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1)
+		return 0;
+
+	/* keep looking until we find the right record */
+	while (rec_ptr) {
+		if (rec_read(tdb, rec_ptr, r) == -1)
+			return 0;
+
+		if (!TDB_DEAD(r) && hash==r->full_hash && key.dsize==r->key_len) {
+			char *k;
+			/* a very likely hit - read the key */
+			k = tdb_alloc_read(tdb, rec_ptr + sizeof(*r), 
+					   r->key_len);
+			if (!k)
+				return 0;
+
+			if (memcmp(key.dptr, k, key.dsize) == 0) {
+				SAFE_FREE(k);
+				return rec_ptr;
+			}
+			SAFE_FREE(k);
+		}
+		rec_ptr = r->next;
+	}
+	return TDB_ERRCODE(TDB_ERR_NOEXIST, 0);
+}
+
+/* As tdb_find, but if you succeed, keep the lock */
+static tdb_off tdb_find_lock_hash(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash, int locktype,
+			     struct list_struct *rec)
+{
+	u32 rec_ptr;
+
+	if (tdb_lock(tdb, BUCKET(hash), locktype) == -1)
+		return 0;
+	if (!(rec_ptr = tdb_find(tdb, key, hash, rec)))
+		tdb_unlock(tdb, BUCKET(hash), locktype);
+	return rec_ptr;
+}
+
+enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb)
+{
+	return tdb->ecode;
+}
+
+static struct tdb_errname {
+	enum TDB_ERROR ecode; const char *estring;
+} emap[] = { {TDB_SUCCESS, "Success"},
+	     {TDB_ERR_CORRUPT, "Corrupt database"},
+	     {TDB_ERR_IO, "IO Error"},
+	     {TDB_ERR_LOCK, "Locking error"},
+	     {TDB_ERR_OOM, "Out of memory"},
+	     {TDB_ERR_EXISTS, "Record exists"},
+	     {TDB_ERR_NOLOCK, "Lock exists on other keys"},
+	     {TDB_ERR_NOEXIST, "Record does not exist"} };
+
+/* Error string for the last tdb error */
+const char *tdb_errorstr(TDB_CONTEXT *tdb)
+{
+	u32 i;
+	for (i = 0; i < sizeof(emap) / sizeof(struct tdb_errname); i++)
+		if (tdb->ecode == emap[i].ecode)
+			return emap[i].estring;
+	return "Invalid error code";
+}
+
+/* update an entry in place - this only works if the new data size
+   is <= the old data size and the key exists.
+   on failure return -1.
+*/
+
+static int tdb_update_hash(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash, TDB_DATA dbuf)
+{
+	struct list_struct rec;
+	tdb_off rec_ptr;
+
+	/* find entry */
+	if (!(rec_ptr = tdb_find(tdb, key, hash, &rec)))
+		return -1;
+
+	/* must be long enough key, data and tailer */
+	if (rec.rec_len < key.dsize + dbuf.dsize + sizeof(tdb_off)) {
+		tdb->ecode = TDB_SUCCESS; /* Not really an error */
+		return -1;
+	}
+
+	if (tdb_write(tdb, rec_ptr + sizeof(rec) + rec.key_len,
+		      dbuf.dptr, dbuf.dsize) == -1)
+		return -1;
+
+	if (dbuf.dsize != rec.data_len) {
+		/* update size */
+		rec.data_len = dbuf.dsize;
+		return rec_write(tdb, rec_ptr, &rec);
+	}
+ 
+	return 0;
+}
+
+/* find an entry in the database given a key */
+/* If an entry doesn't exist tdb_err will be set to
+ * TDB_ERR_NOEXIST. If a key has no data attached
+ * tdb_err will not be set. Both will return a
+ * zero pptr and zero dsize.
+ */
+
+TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	tdb_off rec_ptr;
+	struct list_struct rec;
+	TDB_DATA ret;
+	u32 hash;
+
+	/* find which hash bucket it is in */
+	hash = tdb->hash_fn(&key);
+	if (!(rec_ptr = tdb_find_lock_hash(tdb,key,hash,F_RDLCK,&rec)))
+		return tdb_null;
+
+	if (rec.data_len)
+		ret.dptr = tdb_alloc_read(tdb, rec_ptr + sizeof(rec) + rec.key_len,
+					  rec.data_len);
+	else
+		ret.dptr = NULL;
+	ret.dsize = rec.data_len;
+	tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK);
+	return ret;
+}
+
+/* check if an entry in the database exists 
+
+   note that 1 is returned if the key is found and 0 is returned if not found
+   this doesn't match the conventions in the rest of this module, but is
+   compatible with gdbm
+*/
+static int tdb_exists_hash(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash)
+{
+	struct list_struct rec;
+	
+	if (tdb_find_lock_hash(tdb, key, hash, F_RDLCK, &rec) == 0)
+		return 0;
+	tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK);
+	return 1;
+}
+
+int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	u32 hash = tdb->hash_fn(&key);
+	return tdb_exists_hash(tdb, key, hash);
+}
+
+/* record lock stops delete underneath */
+static int lock_record(TDB_CONTEXT *tdb, tdb_off off)
+{
+	return off ? tdb_brlock(tdb, off, F_RDLCK, F_SETLKW, 0) : 0;
+}
+/*
+  Write locks override our own fcntl readlocks, so check it here.
+  Note this is meant to be F_SETLK, *not* F_SETLKW, as it's not
+  an error to fail to get the lock here.
+*/
+ 
+static int write_lock_record(TDB_CONTEXT *tdb, tdb_off off)
+{
+	struct tdb_traverse_lock *i;
+	for (i = &tdb->travlocks; i; i = i->next)
+		if (i->off == off)
+			return -1;
+	return tdb_brlock(tdb, off, F_WRLCK, F_SETLK, 1);
+}
+
+/*
+  Note this is meant to be F_SETLK, *not* F_SETLKW, as it's not
+  an error to fail to get the lock here.
+*/
+
+static int write_unlock_record(TDB_CONTEXT *tdb, tdb_off off)
+{
+	return tdb_brlock(tdb, off, F_UNLCK, F_SETLK, 0);
+}
+/* fcntl locks don't stack: avoid unlocking someone else's */
+static int unlock_record(TDB_CONTEXT *tdb, tdb_off off)
+{
+	struct tdb_traverse_lock *i;
+	u32 count = 0;
+
+	if (off == 0)
+		return 0;
+	for (i = &tdb->travlocks; i; i = i->next)
+		if (i->off == off)
+			count++;
+	return (count == 1 ? tdb_brlock(tdb, off, F_UNLCK, F_SETLKW, 0) : 0);
+}
+
+/* actually delete an entry in the database given the offset */
+static int do_delete(TDB_CONTEXT *tdb, tdb_off rec_ptr, struct list_struct*rec)
+{
+	tdb_off last_ptr, i;
+	struct list_struct lastrec;
+
+	if (tdb->read_only) return -1;
+
+	if (write_lock_record(tdb, rec_ptr) == -1) {
+		/* Someone traversing here: mark it as dead */
+		rec->magic = TDB_DEAD_MAGIC;
+		return rec_write(tdb, rec_ptr, rec);
+	}
+	if (write_unlock_record(tdb, rec_ptr) != 0)
+		return -1;
+
+	/* find previous record in hash chain */
+	if (ofs_read(tdb, TDB_HASH_TOP(rec->full_hash), &i) == -1)
+		return -1;
+	for (last_ptr = 0; i != rec_ptr; last_ptr = i, i = lastrec.next)
+		if (rec_read(tdb, i, &lastrec) == -1)
+			return -1;
+
+	/* unlink it: next ptr is at start of record. */
+	if (last_ptr == 0)
+		last_ptr = TDB_HASH_TOP(rec->full_hash);
+	if (ofs_write(tdb, last_ptr, &rec->next) == -1)
+		return -1;
+
+	/* recover the space */
+	if (tdb_free(tdb, rec_ptr, rec) == -1)
+		return -1;
+	return 0;
+}
+
+/* Uses traverse lock: 0 = finish, -1 = error, other = record offset */
+static int tdb_next_lock(TDB_CONTEXT *tdb, struct tdb_traverse_lock *tlock,
+			 struct list_struct *rec)
+{
+	int want_next = (tlock->off != 0);
+
+	/* Lock each chain from the start one. */
+	for (; tlock->hash < tdb->header.hash_size; tlock->hash++) {
+
+		/* this is an optimisation for the common case where
+		   the hash chain is empty, which is particularly
+		   common for the use of tdb with ldb, where large
+		   hashes are used. In that case we spend most of our
+		   time in tdb_brlock(), locking empty hash chains.
+
+		   To avoid this, we do an unlocked pre-check to see
+		   if the hash chain is empty before starting to look
+		   inside it. If it is empty then we can avoid that
+		   hash chain. If it isn't empty then we can't believe
+		   the value we get back, as we read it without a
+		   lock, so instead we get the lock and re-fetch the
+		   value below.
+
+		   Notice that not doing this optimisation on the
+		   first hash chain is critical. We must guarantee
+		   that we have done at least one fcntl lock at the
+		   start of a search to guarantee that memory is
+		   coherent on SMP systems. If records are added by
+		   others during the search then thats OK, and we
+		   could possibly miss those with this trick, but we
+		   could miss them anyway without this trick, so the
+		   semantics don't change.
+
+		   With a non-indexed ldb search this trick gains us a
+		   factor of around 80 in speed on a linux 2.6.x
+		   system (testing using ldbtest).
+		 */
+		if (!tlock->off && tlock->hash != 0) {
+			u32 off;
+			if (tdb->map_ptr) {
+				for (;tlock->hash < tdb->header.hash_size;tlock->hash++) {
+					if (0 != *(u32 *)(TDB_HASH_TOP(tlock->hash) + (unsigned char *)tdb->map_ptr)) {
+						break;
+					}
+				}
+				if (tlock->hash == tdb->header.hash_size) {
+					continue;
+				}
+			} else {
+				if (ofs_read(tdb, TDB_HASH_TOP(tlock->hash), &off) == 0 &&
+				    off == 0) {
+					continue;
+				}
+			}
+		}
+
+		if (tdb_lock(tdb, tlock->hash, F_WRLCK) == -1)
+			return -1;
+
+		/* No previous record?  Start at top of chain. */
+		if (!tlock->off) {
+			if (ofs_read(tdb, TDB_HASH_TOP(tlock->hash),
+				     &tlock->off) == -1)
+				goto fail;
+		} else {
+			/* Otherwise unlock the previous record. */
+			if (unlock_record(tdb, tlock->off) != 0)
+				goto fail;
+		}
+
+		if (want_next) {
+			/* We have offset of old record: grab next */
+			if (rec_read(tdb, tlock->off, rec) == -1)
+				goto fail;
+			tlock->off = rec->next;
+		}
+
+		/* Iterate through chain */
+		while( tlock->off) {
+			tdb_off current;
+			if (rec_read(tdb, tlock->off, rec) == -1)
+				goto fail;
+
+			/* Detect infinite loops. From "Shlomi Yaakobovich" <Shlomi at exanet.com>. */
+			if (tlock->off == rec->next) {
+				TDB_LOG((tdb, 0, "tdb_next_lock: loop detected.\n"));
+				goto fail;
+			}
+
+			if (!TDB_DEAD(rec)) {
+				/* Woohoo: we found one! */
+				if (lock_record(tdb, tlock->off) != 0)
+					goto fail;
+				return tlock->off;
+			}
+
+			/* Try to clean dead ones from old traverses */
+			current = tlock->off;
+			tlock->off = rec->next;
+			if (!tdb->read_only && 
+			    do_delete(tdb, current, rec) != 0)
+				goto fail;
+		}
+		tdb_unlock(tdb, tlock->hash, F_WRLCK);
+		want_next = 0;
+	}
+	/* We finished iteration without finding anything */
+	return TDB_ERRCODE(TDB_SUCCESS, 0);
+
+ fail:
+	tlock->off = 0;
+	if (tdb_unlock(tdb, tlock->hash, F_WRLCK) != 0)
+		TDB_LOG((tdb, 0, "tdb_next_lock: On error unlock failed!\n"));
+	return -1;
+}
+
+/* traverse the entire database - calling fn(tdb, key, data) on each element.
+   return -1 on error or the record count traversed
+   if fn is NULL then it is not called
+   a non-zero return value from fn() indicates that the traversal should stop
+  */
+int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *private_val)
+{
+	TDB_DATA key, dbuf;
+	struct list_struct rec;
+	struct tdb_traverse_lock tl = { NULL, 0, 0 };
+	int ret, count = 0;
+
+	/* This was in the initializaton, above, but the IRIX compiler
+	 * did not like it.  crh
+	 */
+	tl.next = tdb->travlocks.next;
+
+	/* fcntl locks don't stack: beware traverse inside traverse */
+	tdb->travlocks.next = &tl;
+
+	/* tdb_next_lock places locks on the record returned, and its chain */
+	while ((ret = tdb_next_lock(tdb, &tl, &rec)) > 0) {
+		count++;
+		/* now read the full record */
+		key.dptr = tdb_alloc_read(tdb, tl.off + sizeof(rec), 
+					  rec.key_len + rec.data_len);
+		if (!key.dptr) {
+			ret = -1;
+			if (tdb_unlock(tdb, tl.hash, F_WRLCK) != 0)
+				goto out;
+			if (unlock_record(tdb, tl.off) != 0)
+				TDB_LOG((tdb, 0, "tdb_traverse: key.dptr == NULL and unlock_record failed!\n"));
+			goto out;
+		}
+		key.dsize = rec.key_len;
+		dbuf.dptr = key.dptr + rec.key_len;
+		dbuf.dsize = rec.data_len;
+
+		/* Drop chain lock, call out */
+		if (tdb_unlock(tdb, tl.hash, F_WRLCK) != 0) {
+			ret = -1;
+			goto out;
+		}
+		if (fn && fn(tdb, key, dbuf, private_val)) {
+			/* They want us to terminate traversal */
+			ret = count;
+			if (unlock_record(tdb, tl.off) != 0) {
+				TDB_LOG((tdb, 0, "tdb_traverse: unlock_record failed!\n"));;
+				ret = -1;
+			}
+			tdb->travlocks.next = tl.next;
+			SAFE_FREE(key.dptr);
+			return count;
+		}
+		SAFE_FREE(key.dptr);
+	}
+out:
+	tdb->travlocks.next = tl.next;
+	if (ret < 0)
+		return -1;
+	else
+		return count;
+}
+
+/* find the first entry in the database and return its key */
+TDB_DATA tdb_firstkey(TDB_CONTEXT *tdb)
+{
+	TDB_DATA key;
+	struct list_struct rec;
+
+	/* release any old lock */
+	if (unlock_record(tdb, tdb->travlocks.off) != 0)
+		return tdb_null;
+	tdb->travlocks.off = tdb->travlocks.hash = 0;
+
+	if (tdb_next_lock(tdb, &tdb->travlocks, &rec) <= 0)
+		return tdb_null;
+	/* now read the key */
+	key.dsize = rec.key_len;
+	key.dptr =tdb_alloc_read(tdb,tdb->travlocks.off+sizeof(rec),key.dsize);
+	if (tdb_unlock(tdb, BUCKET(tdb->travlocks.hash), F_WRLCK) != 0)
+		TDB_LOG((tdb, 0, "tdb_firstkey: error occurred while tdb_unlocking!\n"));
+	return key;
+}
+
+/* find the next entry in the database, returning its key */
+TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA oldkey)
+{
+	u32 oldhash;
+	TDB_DATA key = tdb_null;
+	struct list_struct rec;
+	char *k = NULL;
+
+	/* Is locked key the old key?  If so, traverse will be reliable. */
+	if (tdb->travlocks.off) {
+		if (tdb_lock(tdb,tdb->travlocks.hash,F_WRLCK))
+			return tdb_null;
+		if (rec_read(tdb, tdb->travlocks.off, &rec) == -1
+		    || !(k = tdb_alloc_read(tdb,tdb->travlocks.off+sizeof(rec),
+					    rec.key_len))
+		    || memcmp(k, oldkey.dptr, oldkey.dsize) != 0) {
+			/* No, it wasn't: unlock it and start from scratch */
+			if (unlock_record(tdb, tdb->travlocks.off) != 0)
+				return tdb_null;
+			if (tdb_unlock(tdb, tdb->travlocks.hash, F_WRLCK) != 0)
+				return tdb_null;
+			tdb->travlocks.off = 0;
+		}
+
+		SAFE_FREE(k);
+	}
+
+	if (!tdb->travlocks.off) {
+		/* No previous element: do normal find, and lock record */
+		tdb->travlocks.off = tdb_find_lock_hash(tdb, oldkey, tdb->hash_fn(&oldkey), F_WRLCK, &rec);
+		if (!tdb->travlocks.off)
+			return tdb_null;
+		tdb->travlocks.hash = BUCKET(rec.full_hash);
+		if (lock_record(tdb, tdb->travlocks.off) != 0) {
+			TDB_LOG((tdb, 0, "tdb_nextkey: lock_record failed (%s)!\n", strerror(errno)));
+			return tdb_null;
+		}
+	}
+	oldhash = tdb->travlocks.hash;
+
+	/* Grab next record: locks chain and returned record,
+	   unlocks old record */
+	if (tdb_next_lock(tdb, &tdb->travlocks, &rec) > 0) {
+		key.dsize = rec.key_len;
+		key.dptr = tdb_alloc_read(tdb, tdb->travlocks.off+sizeof(rec),
+					  key.dsize);
+		/* Unlock the chain of this new record */
+		if (tdb_unlock(tdb, tdb->travlocks.hash, F_WRLCK) != 0)
+			TDB_LOG((tdb, 0, "tdb_nextkey: WARNING tdb_unlock failed!\n"));
+	}
+	/* Unlock the chain of old record */
+	if (tdb_unlock(tdb, BUCKET(oldhash), F_WRLCK) != 0)
+		TDB_LOG((tdb, 0, "tdb_nextkey: WARNING tdb_unlock failed!\n"));
+	return key;
+}
+
+/* delete an entry in the database given a key */
+static int tdb_delete_hash(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash)
+{
+	tdb_off rec_ptr;
+	struct list_struct rec;
+	int ret;
+
+	if (!(rec_ptr = tdb_find_lock_hash(tdb, key, hash, F_WRLCK, &rec)))
+		return -1;
+	ret = do_delete(tdb, rec_ptr, &rec);
+	if (tdb_unlock(tdb, BUCKET(rec.full_hash), F_WRLCK) != 0)
+		TDB_LOG((tdb, 0, "tdb_delete: WARNING tdb_unlock failed!\n"));
+	return ret;
+}
+
+int tdb_delete(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	u32 hash = tdb->hash_fn(&key);
+	return tdb_delete_hash(tdb, key, hash);
+}
+
+/* store an element in the database, replacing any existing element
+   with the same key 
+
+   return 0 on success, -1 on failure
+*/
+int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
+{
+	struct list_struct rec;
+	u32 hash;
+	tdb_off rec_ptr;
+	char *p = NULL;
+	int ret = 0;
+
+	/* find which hash bucket it is in */
+	hash = tdb->hash_fn(&key);
+	if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1)
+		return -1;
+
+	/* check for it existing, on insert. */
+	if (flag == TDB_INSERT) {
+		if (tdb_exists_hash(tdb, key, hash)) {
+			tdb->ecode = TDB_ERR_EXISTS;
+			goto fail;
+		}
+	} else {
+		/* first try in-place update, on modify or replace. */
+		if (tdb_update_hash(tdb, key, hash, dbuf) == 0)
+			goto out;
+		if (tdb->ecode == TDB_ERR_NOEXIST &&
+		    flag == TDB_MODIFY) {
+			/* if the record doesn't exist and we are in TDB_MODIFY mode then
+			 we should fail the store */
+			goto fail;
+	}
+	}
+	/* reset the error code potentially set by the tdb_update() */
+	tdb->ecode = TDB_SUCCESS;
+
+	/* delete any existing record - if it doesn't exist we don't
+           care.  Doing this first reduces fragmentation, and avoids
+           coalescing with `allocated' block before it's updated. */
+	if (flag != TDB_INSERT)
+		tdb_delete_hash(tdb, key, hash);
+
+	/* Copy key+value *before* allocating free space in case malloc
+	   fails and we are left with a dead spot in the tdb. */
+
+	if (!(p = (char *)malloc(key.dsize + dbuf.dsize))) {
+		tdb->ecode = TDB_ERR_OOM;
+		goto fail;
+	}
+
+	memcpy(p, key.dptr, key.dsize);
+	if (dbuf.dsize)
+		memcpy(p+key.dsize, dbuf.dptr, dbuf.dsize);
+
+	/* we have to allocate some space */
+	if (!(rec_ptr = tdb_allocate(tdb, key.dsize + dbuf.dsize, &rec)))
+		goto fail;
+
+	/* Read hash top into next ptr */
+	if (ofs_read(tdb, TDB_HASH_TOP(hash), &rec.next) == -1)
+		goto fail;
+
+	rec.key_len = key.dsize;
+	rec.data_len = dbuf.dsize;
+	rec.full_hash = hash;
+	rec.magic = TDB_MAGIC;
+
+	/* write out and point the top of the hash chain at it */
+	if (rec_write(tdb, rec_ptr, &rec) == -1
+	    || tdb_write(tdb, rec_ptr+sizeof(rec), p, key.dsize+dbuf.dsize)==-1
+	    || ofs_write(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1) {
+		/* Need to tdb_unallocate() here */
+		goto fail;
+	}
+ out:
+	SAFE_FREE(p); 
+	tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
+	return ret;
+fail:
+	ret = -1;
+	goto out;
+}
+
+/* Attempt to append data to an entry in place - this only works if the new data size
+   is <= the old data size and the key exists.
+   on failure return -1. Record must be locked before calling.
+*/
+static int tdb_append_inplace(TDB_CONTEXT *tdb, TDB_DATA key, u32 hash, TDB_DATA new_dbuf)
+{
+	struct list_struct rec;
+	tdb_off rec_ptr;
+
+	/* find entry */
+	if (!(rec_ptr = tdb_find(tdb, key, hash, &rec)))
+		return -1;
+
+	/* Append of 0 is always ok. */
+	if (new_dbuf.dsize == 0)
+		return 0;
+
+	/* must be long enough for key, old data + new data and tailer */
+	if (rec.rec_len < key.dsize + rec.data_len + new_dbuf.dsize + sizeof(tdb_off)) {
+		/* No room. */
+		tdb->ecode = TDB_SUCCESS; /* Not really an error */
+		return -1;
+	}
+
+	if (tdb_write(tdb, rec_ptr + sizeof(rec) + rec.key_len + rec.data_len,
+		      new_dbuf.dptr, new_dbuf.dsize) == -1)
+		return -1;
+
+	/* update size */
+	rec.data_len += new_dbuf.dsize;
+	return rec_write(tdb, rec_ptr, &rec);
+}
+
+/* Append to an entry. Create if not exist. */
+
+int tdb_append(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA new_dbuf)
+{
+	struct list_struct rec;
+	u32 hash;
+	tdb_off rec_ptr;
+	char *p = NULL;
+	int ret = 0;
+	size_t new_data_size = 0;
+
+	/* find which hash bucket it is in */
+	hash = tdb->hash_fn(&key);
+	if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1)
+		return -1;
+
+	/* first try in-place. */
+	if (tdb_append_inplace(tdb, key, hash, new_dbuf) == 0)
+		goto out;
+
+	/* reset the error code potentially set by the tdb_append_inplace() */
+	tdb->ecode = TDB_SUCCESS;
+
+	/* find entry */
+	if (!(rec_ptr = tdb_find(tdb, key, hash, &rec))) {
+		if (tdb->ecode != TDB_ERR_NOEXIST)
+			goto fail;
+
+		/* Not found - create. */
+
+		ret = tdb_store(tdb, key, new_dbuf, TDB_INSERT);
+		goto out;
+	}
+
+	new_data_size = rec.data_len + new_dbuf.dsize;
+
+	/* Copy key+old_value+value *before* allocating free space in case malloc
+	   fails and we are left with a dead spot in the tdb. */
+
+	if (!(p = (char *)malloc(key.dsize + new_data_size))) {
+		tdb->ecode = TDB_ERR_OOM;
+		goto fail;
+	}
+
+	/* Copy the key in place. */
+	memcpy(p, key.dptr, key.dsize);
+
+	/* Now read the old data into place. */
+	if (rec.data_len &&
+		tdb_read(tdb, rec_ptr + sizeof(rec) + rec.key_len, p + key.dsize, rec.data_len, 0) == -1)
+			goto fail;
+
+	/* Finally append the new data. */
+	if (new_dbuf.dsize)
+		memcpy(p+key.dsize+rec.data_len, new_dbuf.dptr, new_dbuf.dsize);
+
+	/* delete any existing record - if it doesn't exist we don't
+           care.  Doing this first reduces fragmentation, and avoids
+           coalescing with `allocated' block before it's updated. */
+
+	tdb_delete_hash(tdb, key, hash);
+
+	if (!(rec_ptr = tdb_allocate(tdb, key.dsize + new_data_size, &rec)))
+		goto fail;
+
+	/* Read hash top into next ptr */
+	if (ofs_read(tdb, TDB_HASH_TOP(hash), &rec.next) == -1)
+		goto fail;
+
+	rec.key_len = key.dsize;
+	rec.data_len = new_data_size;
+	rec.full_hash = hash;
+	rec.magic = TDB_MAGIC;
+
+	/* write out and point the top of the hash chain at it */
+	if (rec_write(tdb, rec_ptr, &rec) == -1
+	    || tdb_write(tdb, rec_ptr+sizeof(rec), p, key.dsize+new_data_size)==-1
+	    || ofs_write(tdb, TDB_HASH_TOP(hash), &rec_ptr) == -1) {
+		/* Need to tdb_unallocate() here */
+		goto fail;
+	}
+
+ out:
+	SAFE_FREE(p); 
+	tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
+	return ret;
+
+fail:
+	ret = -1;
+	goto out;
+}
+
+static int tdb_already_open(dev_t device,
+			    ino_t ino)
+{
+	TDB_CONTEXT *i;
+	
+	for (i = tdbs; i; i = i->next) {
+		if (i->device == device && i->inode == ino) {
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+/* This is based on the hash algorithm from gdbm */
+static u32 default_tdb_hash(TDB_DATA *key)
+{
+	u32 value;	/* Used to compute the hash value.  */
+	u32   i;	/* Used to cycle through random values. */
+
+	/* Set the initial value from the key size. */
+	for (value = 0x238F13AF * key->dsize, i=0; i < key->dsize; i++)
+		value = (value + (key->dptr[i] << (i*5 % 24)));
+
+	return (1103515243 * value + 12345);  
+}
+
+/* open the database, creating it if necessary 
+
+   The open_flags and mode are passed straight to the open call on the
+   database file. A flags value of O_WRONLY is invalid. The hash size
+   is advisory, use zero for a default value.
+
+   Return is NULL on error, in which case errno is also set.  Don't 
+   try to call tdb_error or tdb_errname, just do strerror(errno).
+
+   @param name may be NULL for internal databases. */
+TDB_CONTEXT *tdb_open(const char *name, int hash_size, int tdb_flags,
+		      int open_flags, mode_t mode)
+{
+	return tdb_open_ex(name, hash_size, tdb_flags, open_flags, mode, NULL, NULL);
+}
+
+
+TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
+			 int open_flags, mode_t mode,
+			 tdb_log_func log_fn,
+			 tdb_hash_func hash_fn)
+{
+	TDB_CONTEXT *tdb;
+	struct stat st;
+	int rev = 0, locked = 0;
+	unsigned char *vp;
+	u32 vertest;
+
+	if (!(tdb = calloc(1, sizeof *tdb))) {
+		/* Can't log this */
+		errno = ENOMEM;
+		goto fail;
+	}
+	tdb->fd = -1;
+	tdb->name = NULL;
+	tdb->map_ptr = NULL;
+	tdb->flags = tdb_flags;
+	tdb->open_flags = open_flags;
+	tdb->log_fn = log_fn;
+	tdb->hash_fn = hash_fn ? hash_fn : default_tdb_hash;
+
+	if ((open_flags & O_ACCMODE) == O_WRONLY) {
+		TDB_LOG((tdb, 0, "tdb_open_ex: can't open tdb %s write-only\n",
+			 name));
+		errno = EINVAL;
+		goto fail;
+	}
+	
+	if (hash_size == 0)
+		hash_size = DEFAULT_HASH_SIZE;
+	if ((open_flags & O_ACCMODE) == O_RDONLY) {
+		tdb->read_only = 1;
+		/* read only databases don't do locking or clear if first */
+		tdb->flags |= TDB_NOLOCK;
+		tdb->flags &= ~TDB_CLEAR_IF_FIRST;
+	}
+
+	/* internal databases don't mmap or lock, and start off cleared */
+	if (tdb->flags & TDB_INTERNAL) {
+		tdb->flags |= (TDB_NOLOCK | TDB_NOMMAP);
+		tdb->flags &= ~TDB_CLEAR_IF_FIRST;
+		if (tdb_new_database(tdb, hash_size) != 0) {
+			TDB_LOG((tdb, 0, "tdb_open_ex: tdb_new_database failed!"));
+			goto fail;
+		}
+		goto internal;
+	}
+
+	if ((tdb->fd = open(name, open_flags, mode)) == -1) {
+		TDB_LOG((tdb, 5, "tdb_open_ex: could not open file %s: %s\n",
+			 name, strerror(errno)));
+		goto fail;	/* errno set by open(2) */
+	}
+
+	/* ensure there is only one process initialising at once */
+	if (tdb_brlock(tdb, GLOBAL_LOCK, F_WRLCK, F_SETLKW, 0) == -1) {
+		TDB_LOG((tdb, 0, "tdb_open_ex: failed to get global lock on %s: %s\n",
+			 name, strerror(errno)));
+		goto fail;	/* errno set by tdb_brlock */
+	}
+
+	/* we need to zero database if we are the only one with it open */
+	if ((tdb_flags & TDB_CLEAR_IF_FIRST) &&
+		(locked = (tdb_brlock(tdb, ACTIVE_LOCK, F_WRLCK, F_SETLK, 0) == 0))) {
+		open_flags |= O_CREAT;
+		if (ftruncate(tdb->fd, 0) == -1) {
+			TDB_LOG((tdb, 0, "tdb_open_ex: "
+				 "failed to truncate %s: %s\n",
+				 name, strerror(errno)));
+			goto fail; /* errno set by ftruncate */
+		}
+	}
+
+	if (read(tdb->fd, &tdb->header, sizeof(tdb->header)) != sizeof(tdb->header)
+	    || strcmp(tdb->header.magic_food, TDB_MAGIC_FOOD) != 0
+	    || (tdb->header.version != TDB_VERSION
+		&& !(rev = (tdb->header.version==TDB_BYTEREV(TDB_VERSION))))) {
+		/* its not a valid database - possibly initialise it */
+		if (!(open_flags & O_CREAT) || tdb_new_database(tdb, hash_size) == -1) {
+			errno = EIO; /* ie bad format or something */
+			goto fail;
+		}
+		rev = (tdb->flags & TDB_CONVERT);
+	}
+	vp = (unsigned char *)&tdb->header.version;
+	vertest = (((u32)vp[0]) << 24) | (((u32)vp[1]) << 16) |
+		  (((u32)vp[2]) << 8) | (u32)vp[3];
+	tdb->flags |= (vertest==TDB_VERSION) ? TDB_BIGENDIAN : 0;
+	if (!rev)
+		tdb->flags &= ~TDB_CONVERT;
+	else {
+		tdb->flags |= TDB_CONVERT;
+		convert(&tdb->header, sizeof(tdb->header));
+	}
+	if (fstat(tdb->fd, &st) == -1)
+		goto fail;
+
+	/* Is it already in the open list?  If so, fail. */
+	if (tdb_already_open(st.st_dev, st.st_ino)) {
+		TDB_LOG((tdb, 2, "tdb_open_ex: "
+			 "%s (%d,%d) is already open in this process\n",
+			 name, (int)st.st_dev, (int)st.st_ino));
+		errno = EBUSY;
+		goto fail;
+	}
+
+	if (!(tdb->name = (char *)strdup(name))) {
+		errno = ENOMEM;
+		goto fail;
+	}
+
+	tdb->map_size = st.st_size;
+	tdb->device = st.st_dev;
+	tdb->inode = st.st_ino;
+	tdb->locked = calloc(tdb->header.hash_size+1, sizeof(tdb->locked[0]));
+	if (!tdb->locked) {
+		TDB_LOG((tdb, 2, "tdb_open_ex: "
+			 "failed to allocate lock structure for %s\n",
+			 name));
+		errno = ENOMEM;
+		goto fail;
+	}
+	tdb_mmap(tdb);
+	if (locked) {
+		if (!tdb->read_only)
+			if (tdb_clear_spinlocks(tdb) != 0) {
+				TDB_LOG((tdb, 0, "tdb_open_ex: "
+				"failed to clear spinlock\n"));
+				goto fail;
+			}
+		if (tdb_brlock(tdb, ACTIVE_LOCK, F_UNLCK, F_SETLK, 0) == -1) {
+			TDB_LOG((tdb, 0, "tdb_open_ex: "
+				 "failed to take ACTIVE_LOCK on %s: %s\n",
+				 name, strerror(errno)));
+			goto fail;
+		}
+
+	}
+
+	/* We always need to do this if the CLEAR_IF_FIRST flag is set, even if
+	   we didn't get the initial exclusive lock as we need to let all other
+	   users know we're using it. */
+
+	if (tdb_flags & TDB_CLEAR_IF_FIRST) {
+		/* leave this lock in place to indicate it's in use */
+		if (tdb_brlock(tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW, 0) == -1)
+			goto fail;
+	}
+
+
+ internal:
+	/* Internal (memory-only) databases skip all the code above to
+	 * do with disk files, and resume here by releasing their
+	 * global lock and hooking into the active list. */
+	if (tdb_brlock(tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0) == -1)
+		goto fail;
+	tdb->next = tdbs;
+	tdbs = tdb;
+	return tdb;
+
+ fail:
+	{ int save_errno = errno;
+
+	if (!tdb)
+		return NULL;
+	
+	if (tdb->map_ptr) {
+		if (tdb->flags & TDB_INTERNAL)
+			SAFE_FREE(tdb->map_ptr);
+		else
+			tdb_munmap(tdb);
+	}
+	SAFE_FREE(tdb->name);
+	if (tdb->fd != -1)
+		if (close(tdb->fd) != 0)
+			TDB_LOG((tdb, 5, "tdb_open_ex: failed to close tdb->fd on error!\n"));
+	SAFE_FREE(tdb->locked);
+	SAFE_FREE(tdb);
+	errno = save_errno;
+	return NULL;
+	}
+}
+
+/**
+ * Close a database.
+ *
+ * @returns -1 for error; 0 for success.
+ **/
+int tdb_close(TDB_CONTEXT *tdb)
+{
+	TDB_CONTEXT **i;
+	int ret = 0;
+
+	if (tdb->map_ptr) {
+		if (tdb->flags & TDB_INTERNAL)
+			SAFE_FREE(tdb->map_ptr);
+		else
+			tdb_munmap(tdb);
+	}
+	SAFE_FREE(tdb->name);
+	if (tdb->fd != -1)
+		ret = close(tdb->fd);
+	SAFE_FREE(tdb->locked);
+
+	/* Remove from contexts list */
+	for (i = &tdbs; *i; i = &(*i)->next) {
+		if (*i == tdb) {
+			*i = tdb->next;
+			break;
+		}
+	}
+
+	memset(tdb, 0, sizeof(*tdb));
+	SAFE_FREE(tdb);
+
+	return ret;
+}
+
+/* lock/unlock entire database */
+int tdb_lockall(TDB_CONTEXT *tdb)
+{
+	u32 i;
+
+	/* There are no locks on read-only dbs */
+	if (tdb->read_only)
+		return TDB_ERRCODE(TDB_ERR_LOCK, -1);
+	for (i = 0; i < tdb->header.hash_size; i++) 
+		if (tdb_lock(tdb, i, F_WRLCK))
+			break;
+
+	/* If error, release locks we have... */
+	if (i < tdb->header.hash_size) {
+		u32 j;
+
+		for ( j = 0; j < i; j++)
+			tdb_unlock(tdb, j, F_WRLCK);
+		return TDB_ERRCODE(TDB_ERR_NOLOCK, -1);
+	}
+
+	return 0;
+}
+void tdb_unlockall(TDB_CONTEXT *tdb)
+{
+	u32 i;
+	for (i=0; i < tdb->header.hash_size; i++)
+		tdb_unlock(tdb, i, F_WRLCK);
+}
+
+/* lock/unlock one hash chain. This is meant to be used to reduce
+   contention - it cannot guarantee how many records will be locked */
+int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	return tdb_lock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
+}
+
+int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	return tdb_unlock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
+}
+
+int tdb_chainlock_read(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	return tdb_lock(tdb, BUCKET(tdb->hash_fn(&key)), F_RDLCK);
+}
+
+int tdb_chainunlock_read(TDB_CONTEXT *tdb, TDB_DATA key)
+{
+	return tdb_unlock(tdb, BUCKET(tdb->hash_fn(&key)), F_RDLCK);
+}
+
+
+/* register a loging function */
+void tdb_logging_function(TDB_CONTEXT *tdb, void (*fn)(TDB_CONTEXT *, int , const char *, ...))
+{
+	tdb->log_fn = fn;
+}
+
+/* reopen a tdb - this can be used after a fork to ensure that we have an independent
+   seek pointer from our parent and to re-establish locks */
+int tdb_reopen(TDB_CONTEXT *tdb)
+{
+	struct stat st;
+
+	if (tdb->flags & TDB_INTERNAL)
+		return 0; /* Nothing to do. */
+	if (tdb_munmap(tdb) != 0) {
+		TDB_LOG((tdb, 0, "tdb_reopen: munmap failed (%s)\n", strerror(errno)));
+		goto fail;
+	}
+	if (close(tdb->fd) != 0)
+		TDB_LOG((tdb, 0, "tdb_reopen: WARNING closing tdb->fd failed!\n"));
+	tdb->fd = open(tdb->name, tdb->open_flags & ~(O_CREAT|O_TRUNC), 0);
+	if (tdb->fd == -1) {
+		TDB_LOG((tdb, 0, "tdb_reopen: open failed (%s)\n", strerror(errno)));
+		goto fail;
+	}
+	if ((tdb->flags & TDB_CLEAR_IF_FIRST) &&
+			(tdb_brlock(tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW, 0) == -1)) {
+		TDB_LOG((tdb, 0, "tdb_reopen: failed to obtain active lock\n"));
+		goto fail;
+	}
+	if (fstat(tdb->fd, &st) != 0) {
+		TDB_LOG((tdb, 0, "tdb_reopen: fstat failed (%s)\n", strerror(errno)));
+		goto fail;
+	}
+	if (st.st_ino != tdb->inode || st.st_dev != tdb->device) {
+		TDB_LOG((tdb, 0, "tdb_reopen: file dev/inode has changed!\n"));
+		goto fail;
+	}
+	tdb_mmap(tdb);
+
+	return 0;
+
+fail:
+	tdb_close(tdb);
+	return -1;
+}
+
+/* reopen all tdb's */
+int tdb_reopen_all(void)
+{
+	TDB_CONTEXT *tdb;
+
+	for (tdb=tdbs; tdb; tdb = tdb->next) {
+		if (tdb_reopen(tdb) != 0)
+			return -1;
+	}
+
+	return 0;
+}

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdb.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdb.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdb.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,161 @@
+/* $Id: tdb.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 1999-2004 Andrew Tridgell <tridge at linuxcare.com>
+ * Copyright (c) 2005      Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#ifndef __TDB_H__
+#define __TDB_H__
+
+#include <tdb/tdbconfig.h>
+
+#include <signal.h>
+#include <unistd.h>
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#ifndef PRINTF_ATTRIBUTE
+/** Use gcc attribute to check printf fns.  a1 is the 1-based index of
+ * the parameter containing the format, and a2 the index of the first
+ * argument. Note that some gcc 2.x versions don't handle this
+ * properly **/
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
+#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
+#else
+#define PRINTF_ATTRIBUTE(a1, a2)
+#endif
+#endif
+
+/* flags to tdb_store() */
+#define TDB_REPLACE 1
+#define TDB_INSERT 2
+#define TDB_MODIFY 3
+
+/* flags for tdb_open() */
+#define TDB_DEFAULT 0 /* just a readability place holder */
+#define TDB_CLEAR_IF_FIRST 1
+#define TDB_INTERNAL 2 /* don't store on disk */
+#define TDB_NOLOCK   4 /* don't do any locking */
+#define TDB_NOMMAP   8 /* don't use mmap */
+#define TDB_CONVERT 16 /* convert endian (internal use) */
+#define TDB_BIGENDIAN 32 /* header is big-endian (internal use) */
+
+#define TDB_ERRCODE(code, ret) ((tdb->ecode = (code)), ret)
+
+/* error codes */
+enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK, 
+		TDB_ERR_OOM, TDB_ERR_EXISTS, TDB_ERR_NOLOCK, TDB_ERR_LOCK_TIMEOUT,
+		TDB_ERR_NOEXIST};
+
+typedef struct {
+	char *dptr;
+	size_t dsize;
+} TDB_DATA;
+
+typedef u32 tdb_len;
+typedef u32 tdb_off;
+
+/* this is stored at the front of every database */
+struct tdb_header {
+	char magic_food[32]; /* for /etc/magic */
+	u32 version; /* version of the code */
+	u32 hash_size; /* number of hash entries */
+	tdb_off rwlocks;
+	tdb_off reserved[31];
+};
+
+struct tdb_lock_type {
+	u32 count;
+	u32 ltype;
+};
+
+struct tdb_traverse_lock {
+	struct tdb_traverse_lock *next;
+	u32 off;
+	u32 hash;
+};
+
+/* this is the context structure that is returned from a db open */
+typedef struct tdb_context {
+	char *name; /* the name of the database */
+	void *map_ptr; /* where it is currently mapped */
+	int fd; /* open file descriptor for the database */
+	tdb_len map_size; /* how much space has been mapped */
+	int read_only; /* opened read-only */
+	struct tdb_lock_type *locked; /* array of chain locks */
+	enum TDB_ERROR ecode; /* error code for last tdb error */
+	struct tdb_header header; /* a cached copy of the header */
+	u32 flags; /* the flags passed to tdb_open */
+	struct tdb_traverse_lock travlocks; /* current traversal locks */
+	struct tdb_context *next; /* all tdbs to avoid multiple opens */
+	dev_t device;	/* uniquely identifies this tdb */
+	ino_t inode;	/* uniquely identifies this tdb */
+	void (*log_fn)(struct tdb_context *tdb, int level, const char *, ...) PRINTF_ATTRIBUTE(3,4); /* logging function */
+	u32 (*hash_fn)(TDB_DATA *key);
+	int open_flags; /* flags used in the open - needed by reopen */
+} TDB_CONTEXT;
+
+typedef int (*tdb_traverse_func)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *);
+typedef void (*tdb_log_func)(TDB_CONTEXT *, int , const char *, ...);
+typedef u32 (*tdb_hash_func)(TDB_DATA *key);
+
+TDB_CONTEXT *tdb_open(const char *name, int hash_size, int tdb_flags,
+		      int open_flags, mode_t mode);
+TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
+			 int open_flags, mode_t mode,
+			 tdb_log_func log_fn,
+			 tdb_hash_func hash_fn);
+
+int tdb_reopen(TDB_CONTEXT *tdb);
+int tdb_reopen_all(void);
+void tdb_logging_function(TDB_CONTEXT *tdb, tdb_log_func);
+enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb);
+const char *tdb_errorstr(TDB_CONTEXT *tdb);
+TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_delete(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
+int tdb_append(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA new_dbuf);
+int tdb_close(TDB_CONTEXT *tdb);
+TDB_DATA tdb_firstkey(TDB_CONTEXT *tdb);
+TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *);
+int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_lockall(TDB_CONTEXT *tdb);
+void tdb_unlockall(TDB_CONTEXT *tdb);
+
+/* Low level locking functions: use with care */
+void tdb_set_lock_alarm(sig_atomic_t *palarm);
+int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key);
+
+/* Debug functions. Not used in production. */
+void tdb_dump_all(TDB_CONTEXT *tdb);
+int tdb_printfreelist(TDB_CONTEXT *tdb);
+
+extern TDB_DATA tdb_null;
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* !__TDB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+/* $Id: tdbconfig.h.in 131 2005-11-04 15:15:34Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TDBCONFIG_H__
+#define __TDBCONFIG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned int u32;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__TDBCONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdbconfig.h.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+/* $Id: tdbconfig.h.in 131 2005-11-04 15:15:34Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TDBCONFIG_H__
+#define __TDBCONFIG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef @TDB_U32_TYPE@ u32;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__TDBCONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdbspeed.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdbspeed.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdbspeed.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,208 @@
+/* $Id: tdbspeed.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 1999-2004 Andrew Tridgell <tridge at linuxcare.com>
+ * Copyright (c) 2005      Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+
+#include <tdb/tdb.h>
+
+/* Turn off if error returns from TDB are sane (before v1.0.2) */
+#if 1
+#define TDB_ERROR(tdb, code) ((tdb)->ecode == code)
+#else
+#define TDB_ERROR(tdb, code) 1
+#endif
+/* a test program for tdb - the trivial database */
+
+static TDB_DATA *randdata, *randkeys;
+
+#define DELETE_PROB 7
+#define STORE_PROB 5
+
+static TDB_CONTEXT *db;
+
+struct timeval tp1,tp2;
+
+static void start_timer()
+{
+	gettimeofday(&tp1,NULL);
+}
+
+static double end_timer()
+{
+	gettimeofday(&tp2,NULL);
+	return((tp2.tv_sec - tp1.tv_sec) + 
+	       (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
+}
+
+static void fatal(TDB_CONTEXT *tdb, const char *why)
+{
+	perror(why);
+	if (tdb) fprintf(stderr, "TDB: (%u)\n", tdb->ecode);
+	exit(1);
+}
+
+static char *randbuf(int len)
+{
+	char *buf;
+	int i;
+	buf = (char *)malloc(len+1);
+
+	for (i=0;i<len;i++) {
+		buf[i] = 'a' + (rand() % 26);
+	}
+	buf[i] = 0;
+	return buf;
+}
+
+static void addrec_db(int i)
+{
+	TDB_DATA key, data;
+
+	key.dptr = randkeys[i].dptr;
+	key.dsize = randkeys[i].dsize+1;
+
+	data.dptr = randdata[i].dptr;
+	data.dsize = randdata[i].dsize+1;
+
+	if (rand() % DELETE_PROB == 0) {
+		if (tdb_delete(db, key) == -1
+		    && !TDB_ERROR(db, TDB_ERR_NOEXIST))
+			fatal(db, "tdb_delete failed");
+	} else if (rand() % STORE_PROB == 0) {
+		if (tdb_store(db, key, data, TDB_REPLACE) != 0) {
+			fatal(db, "tdb_store failed");
+		}
+	} else {
+		data = tdb_fetch(db, key);
+		if (data.dptr) free(data.dptr);
+		else {
+			if (db->ecode && !TDB_ERROR(db,TDB_ERR_NOEXIST))
+				fatal(db, "tdb_fetch failed");
+		}
+	}
+}
+
+struct db_size {
+	const char *name;
+	int size;
+} db_sizes[]
+= { { "default", 0 },
+    { "307", 307 },
+    { "512", 512 },
+    { "1024", 1024 },
+    { "4096", 4096 },
+    { "16384", 16384 },
+    { "65536", 65536 } };
+
+unsigned int num_loops[]  /* 10,000 each */
+= { 1, 5, 25 };
+
+struct tdb_flag {
+	const char *name;
+	int flags;
+} tdb_flags[]
+= { { "normal", TDB_CLEAR_IF_FIRST },
+#ifdef TDB_CONVERT
+    { "byte-reversed", TDB_CLEAR_IF_FIRST|TDB_CONVERT }
+#endif
+};
+
+int main(int argc, char *argv[])
+{
+	int i, j, seed=0;
+	int k;
+
+	/* Precook random buffers */
+	randdata = malloc(10000 * sizeof(randdata[0]));
+	randkeys = malloc(10000 * sizeof(randkeys[0]));
+
+	srand(seed);
+	for (i=0;i<10000;i++) {
+		randkeys[i].dsize = 1 + (rand() % 4);
+		randdata[i].dsize = 1 + (rand() % 100);
+		randkeys[i].dptr = randbuf(randkeys[i].dsize);
+		randdata[i].dptr = randbuf(randdata[i].dsize);
+	}
+
+	for (k = 0; k < sizeof(tdb_flags)/sizeof(struct tdb_flag); k++) {
+		printf("Operations per second for %s database:\n",
+		       tdb_flags[k].name);
+
+		printf("Hashsize:   ");
+		for (i = 0; i < sizeof(db_sizes)/sizeof(struct db_size); i++)
+			printf("%-8s ", db_sizes[i].name);
+		printf("\n");
+		
+		for (i = 0; i < sizeof(num_loops)/sizeof(int); i++) {
+			printf("%7u:    ", num_loops[i]*10000);
+			for (j = 0; j < sizeof(db_sizes)/sizeof(struct db_size); j++) {
+				unsigned int l = 0, l2;
+				db = tdb_open("test.tdb", db_sizes[j].size,
+					      tdb_flags[k].flags,
+					      O_RDWR | O_CREAT | O_TRUNC, 0600);
+				srand(seed);
+				start_timer();
+				for (l2=0; l2 < num_loops[i]; l2++)
+					for (l=0;l<10000;l++) addrec_db(l);
+				printf("%-7u  ", (int)(l*l2/end_timer()));
+				tdb_close(db);
+			}
+			printf("\n");
+		}
+		printf("\n");
+	}
+	return 0;
+}

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdbtool.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdbtool.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdbtool.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,514 @@
+/* $Id: tdbtool.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 1999-2000 Andrew Tridgell
+ * Copyright (c) 2000      Paul `Rusty' Russell
+ * Copyright (c) 2000      Jeremy Allison
+ * Copyright (c) 2001      Andrew Esh
+ * Copyright (c) 2005      Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <tdb/tdb.h>
+
+/* a tdb tool for manipulating a tdb database */
+
+#define FSTRING_LEN 256
+typedef char fstring[FSTRING_LEN];
+
+typedef struct connections_key {
+  pid_t pid;
+  int cnum;
+  fstring name;
+} connections_key;
+
+typedef struct connections_data {
+  int magic;
+  pid_t pid;
+  int cnum;
+  uid_t uid;
+  gid_t gid;
+  char name[24];
+  char addr[24];
+  char machine[128];
+  time_t start;
+} connections_data;
+
+static TDB_CONTEXT *tdb;
+FILE *pDumpFile;
+
+static int print_rec(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state);
+
+static char *get_token(int startover)
+{
+        static char tmp[1024];
+  static char *cont = NULL;
+  char *insert, *start;
+  char *k = strtok(NULL, " ");
+
+  if (!k)
+    return NULL;
+
+  if (startover)
+    start = tmp;
+  else
+    start = cont;
+
+  strcpy(start, k);
+  insert = start + strlen(start) - 1;
+  while (*insert == '\\') {
+    *insert++ = ' ';
+    k = strtok(NULL, " ");
+    if (!k)
+      break;
+    strcpy(insert, k);
+    insert = start + strlen(start) - 1;
+  }
+
+  /* Get ready for next call */
+  cont = start + strlen(start) + 1;
+  return start;
+}
+
+static int open_dump_file()
+{
+  int retval = 0;
+  char *tok = get_token(0);
+  if (!tok) {
+    pDumpFile = stdout;
+  } else {
+    pDumpFile = fopen(tok, "w");
+    
+    if (pDumpFile == NULL) {
+      printf("File Open Failed! --  %s", tok);
+      retval = 1;
+    } else {
+      printf("Writing to file: %s\n", tok);
+    }
+  }
+    return(retval);
+}
+
+static void close_dump_file()
+{
+  if(pDumpFile != NULL && pDumpFile != stdout) {
+    fclose(pDumpFile);
+  }
+}
+
+ static void print_asc(unsigned char *buf,int len)
+{
+  int i;
+
+  /* We're probably printing ASCII strings so don't try to display
+     the trailing NULL character. */
+
+  if (buf[len - 1] == 0)
+          len--;
+
+  for (i=0;i<len;i++)
+    fprintf(pDumpFile,"%c",isprint(buf[i])?buf[i]:'.');
+}
+
+static void print_data(unsigned char *buf,int len)
+{
+  int i=0;
+  if (len<=0) return;
+  fprintf(pDumpFile,"[%03X] ",i);
+  for (i=0;i<len;) {
+    fprintf(pDumpFile,"%02X ",(int)buf[i]);
+    i++;
+    if (i%8 == 0) fprintf(pDumpFile," ");
+    if (i%16 == 0) {      
+      print_asc(&buf[i-16],8); fprintf(pDumpFile," ");
+      print_asc(&buf[i-8],8); fprintf(pDumpFile,"\n");
+      if (i<len) fprintf(pDumpFile,"[%03X] ",i);
+    }
+  }
+  if (i%16) {
+    int n;
+    
+    n = 16 - (i%16);
+    fprintf(pDumpFile," ");
+    if (n>8) fprintf(pDumpFile," ");
+    while (n--) fprintf(pDumpFile,"   ");
+    
+    n = i%16;
+    if (n > 8) n = 8;
+    print_asc(&buf[i-(i%16)],n); fprintf(pDumpFile," ");
+    n = (i%16) - n;
+    if (n>0) print_asc(&buf[i-n],n); 
+    fprintf(pDumpFile,"\n");    
+  }
+}
+
+static void help(void)
+{
+  printf(
+"tdbtool:\n"
+"  create    dbname     : create a database\n"
+"  open      dbname     : open an existing database\n"
+"  erase                : erase the database\n"
+"  dump      dumpname   : dump the database as strings\n"
+"  insert    key  data  : insert a record\n"
+"  store     key  data  : store a record (replace)\n"
+"  show      key        : show a record by key\n"
+"  delete    key        : delete a record by key\n"
+"  list                 : print the database hash table and freelist\n"
+"  free                 : print the database freelist\n"
+"  1 | first            : print the first record\n"
+"  n | next             : print the next record\n"
+"  q | quit             : terminate\n"
+"  \\n                   : repeat 'next' command\n");
+}
+
+static void terror(char *why)
+{
+  printf("%s\n", why);
+}
+
+static void create_tdb(void)
+{
+  char *tok = get_token(1);
+  if (!tok) {
+    help();
+    return;
+  }
+  if (tdb) tdb_close(tdb);
+  tdb = tdb_open(tok, 0, TDB_CLEAR_IF_FIRST,
+           O_RDWR | O_CREAT | O_TRUNC, 0600);
+  if (!tdb) {
+    printf("Could not create %s: %s\n", tok, strerror(errno));
+  }
+}
+
+static void open_tdb(void)
+{
+  char *tok = get_token(1);
+  if (!tok) {
+    help();
+    return;
+  }
+  if (tdb) tdb_close(tdb);
+  tdb = tdb_open(tok, 0, 0, O_RDWR, 0600);
+  if (!tdb) {
+    printf("Could not open %s: %s\n", tok, strerror(errno));
+  }
+}
+
+static void insert_tdb(void)
+{
+  char *k = get_token(1);
+  char *d = get_token(0);
+  TDB_DATA key, dbuf;
+
+  if (!k || !d) {
+    help();
+    return;
+  }
+
+  key.dptr = k;
+  key.dsize = strlen(k)+1;
+  dbuf.dptr = d;
+  dbuf.dsize = strlen(d)+1;
+
+  if (tdb_store(tdb, key, dbuf, TDB_INSERT) == -1) {
+    terror("insert failed");
+  }
+}
+
+static void store_tdb(void)
+{
+  char *k = get_token(1);
+  char *d = get_token(0);
+  TDB_DATA key, dbuf;
+
+  if (!k || !d) {
+    help();
+    return;
+  }
+
+  key.dptr = k;
+  key.dsize = strlen(k)+1;
+  dbuf.dptr = d;
+  dbuf.dsize = strlen(d)+1;
+
+  printf("Storing key:\n");
+  print_rec(tdb, key, dbuf, NULL);
+
+  if (tdb_store(tdb, key, dbuf, TDB_REPLACE) == -1) {
+    terror("store failed");
+  }
+}
+
+static void show_tdb(void)
+{
+  char *k = get_token(1);
+  TDB_DATA key, dbuf;
+
+  if (!k) {
+    help();
+    return;
+  }
+
+  key.dptr = k;
+  key.dsize = strlen(k)+1;
+
+  dbuf = tdb_fetch(tdb, key);
+  if (!dbuf.dptr) {
+    terror("fetch failed");
+    return;
+  }
+  /* printf("%s : %*.*s\n", k, (int)dbuf.dsize, (int)dbuf.dsize, dbuf.dptr); */
+  print_rec(tdb, key, dbuf, NULL);
+}
+
+static void delete_tdb(void)
+{
+  char *k = get_token(1);
+  TDB_DATA key;
+
+  if (!k) {
+    help();
+    return;
+  }
+
+  key.dptr = k;
+  key.dsize = strlen(k)+1;
+
+  if (tdb_delete(tdb, key) != 0) {
+    terror("delete failed");
+  }
+}
+
+static int print_rec(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
+{
+  fprintf(pDumpFile,"\nkey %d bytes\n", key.dsize);
+  print_asc((unsigned char*)key.dptr, key.dsize);
+  fprintf(pDumpFile,"\ndata %d bytes\n", dbuf.dsize);
+  print_data((unsigned char*)dbuf.dptr, dbuf.dsize);
+  return 0;
+}
+
+static int print_key(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
+{
+  print_asc((unsigned char*)key.dptr, key.dsize);
+  printf("\n");
+  return 0;
+}
+
+static int total_bytes;
+
+static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
+{
+  total_bytes += dbuf.dsize;
+  return 0;
+}
+
+static void info_tdb(void)
+{
+  int count;
+  total_bytes = 0;
+  if ((count = tdb_traverse(tdb, traverse_fn, NULL) == -1))
+    printf("Error = %s\n", tdb_errorstr(tdb));
+  else
+    printf("%d records totalling %d bytes\n", count, total_bytes);
+}
+
+static char *tdb_getline(char *prompt)
+{
+  static char line[1024];
+  char *p;
+  fputs(prompt, stdout);
+  line[0] = 0;
+  p = fgets(line, sizeof(line)-1, stdin);
+  if (p) p = strchr(p, '\n');
+  if (p) *p = 0;
+  pDumpFile = stdout;
+  return p?line:NULL;
+}
+
+static int do_delete_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf,
+                     void *state)
+{
+    return tdb_delete(tdb, key);
+}
+
+static void first_record(TDB_CONTEXT *tdb, TDB_DATA *pkey)
+{
+  TDB_DATA dbuf;
+  *pkey = tdb_firstkey(tdb);
+  
+  dbuf = tdb_fetch(tdb, *pkey);
+  if (!dbuf.dptr) terror("fetch failed");
+  /* printf("%s : %*.*s\n", k, (int)dbuf.dsize, (int)dbuf.dsize, dbuf.dptr); */
+  print_rec(tdb, *pkey, dbuf, NULL);
+}
+
+static void next_record(TDB_CONTEXT *tdb, TDB_DATA *pkey)
+{
+  TDB_DATA dbuf;
+  *pkey = tdb_nextkey(tdb, *pkey);
+  
+  dbuf = tdb_fetch(tdb, *pkey);
+  if (!dbuf.dptr) 
+    terror("fetch failed");
+  else
+    /* printf("%s : %*.*s\n", k, (int)dbuf.dsize, (int)dbuf.dsize, dbuf.dptr); */
+    print_rec(tdb, *pkey, dbuf, NULL);
+}
+
+int main(int argc, char *argv[])
+{
+    int bIterate = 0;
+    char *line;
+    char *tok;
+  TDB_DATA iterate_kbuf;
+
+    if (argv[1]) {
+  static char tmp[1024];
+        sprintf(tmp, "open %s", argv[1]);
+        tok=strtok(tmp," ");
+        open_tdb();
+    }
+
+    while ((line = tdb_getline("tdb> "))) {
+
+        /* Shell command */
+        
+        if (line[0] == '!') {
+            system(line + 1);
+            continue;
+        }
+        
+        if ((tok = strtok(line," "))==NULL) {
+           if (bIterate)
+              next_record(tdb, &iterate_kbuf);
+           continue;
+        }
+        if (strcmp(tok,"create") == 0) {
+            bIterate = 0;
+            create_tdb();
+            continue;
+        } else if (strcmp(tok,"open") == 0) {
+            open_tdb();
+            continue;
+        } else if ((strcmp(tok, "q") == 0) ||
+                   (strcmp(tok, "quit") == 0)) {
+            break;
+  }
+            
+        /* all the rest require a open database */
+        if (!tdb) {
+            bIterate = 0;
+            terror("database not open");
+            help();
+            continue;
+        }
+            
+        if (strcmp(tok,"insert") == 0) {
+            bIterate = 0;
+            insert_tdb();
+        } else if (strcmp(tok,"store") == 0) {
+            bIterate = 0;
+            store_tdb();
+        } else if (strcmp(tok,"show") == 0) {
+            bIterate = 0;
+            show_tdb();
+        } else if (strcmp(tok,"erase") == 0) {
+            bIterate = 0;
+            tdb_traverse(tdb, do_delete_fn, NULL);
+        } else if (strcmp(tok,"delete") == 0) {
+            bIterate = 0;
+            delete_tdb();
+        } else if (strcmp(tok,"dump") == 0) {
+            bIterate = 0;
+      if(open_dump_file() == 0) { //open file
+        tdb_traverse(tdb, print_rec, NULL);
+        close_dump_file(); //close file
+      }
+      pDumpFile = stdout;
+        } else if (strcmp(tok,"list") == 0) {
+            tdb_dump_all(tdb);
+        } else if (strcmp(tok, "free") == 0) {
+            tdb_printfreelist(tdb);
+        } else if (strcmp(tok,"info") == 0) {
+            info_tdb();
+        } else if ( (strcmp(tok, "1") == 0) ||
+                    (strcmp(tok, "first") == 0)) {
+            bIterate = 1;
+            first_record(tdb, &iterate_kbuf);
+        } else if ((strcmp(tok, "n") == 0) ||
+                   (strcmp(tok, "next") == 0)) {
+            next_record(tdb, &iterate_kbuf);
+        } else if ((strcmp(tok, "keys") == 0)) {
+                bIterate = 0;
+                tdb_traverse(tdb, print_key, NULL);
+        } else {
+            help();
+        }
+    }
+
+    if (tdb) tdb_close(tdb);
+
+    return 0;
+}

Added: desktop/trunk/thunar/branches/upstream/current/tdb/tdbtorture.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tdb/tdbtorture.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tdb/tdbtorture.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,278 @@
+/* $Id: tdbtorture.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 1999-2004 Andrew Tridgell <tridge at linuxcare.com>
+ * Copyright (c) 2005      Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * This file was originally part of the tdb library, which in turn is
+ * part of the Samba suite, a Unix SMB/CIFS implementation.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_h
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <tdb/tdb.h>
+
+/* this tests tdb by doing lots of ops from several simultaneous
+   writers - that stresses the locking code. Build with TDB_DEBUG=1
+   for best effect */
+
+
+
+#define REOPEN_PROB 30
+#define DELETE_PROB 8
+#define STORE_PROB 4
+#define APPEND_PROB 6
+#define LOCKSTORE_PROB 0
+#define TRAVERSE_PROB 20
+#define CULL_PROB 100
+#define KEYLEN 3
+#define DATALEN 100
+#define LOCKLEN 20
+
+static TDB_CONTEXT *db;
+
+static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...)
+{
+	va_list ap;
+    
+	va_start(ap, format);
+	vfprintf(stdout, format, ap);
+	va_end(ap);
+	fflush(stdout);
+#if 0
+	{
+		char *ptr;
+		asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid());
+		system(ptr);
+		free(ptr);
+	}
+#endif	
+}
+
+static void fatal(char *why)
+{
+	perror(why);
+	exit(1);
+}
+
+static char *randbuf(int len)
+{
+	char *buf;
+	int i;
+	buf = (char *)malloc(len+1);
+
+	for (i=0;i<len;i++) {
+		buf[i] = 'a' + (rand() % 26);
+	}
+	buf[i] = 0;
+	return buf;
+}
+
+static int cull_traverse(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf,
+			 void *state)
+{
+	if (random() % CULL_PROB == 0) {
+		tdb_delete(tdb, key);
+	}
+	return 0;
+}
+
+static void addrec_db(void)
+{
+	int klen, dlen, slen;
+	char *k, *d, *s;
+	TDB_DATA key, data, lockkey;
+
+	klen = 1 + (rand() % KEYLEN);
+	dlen = 1 + (rand() % DATALEN);
+	slen = 1 + (rand() % LOCKLEN);
+
+	k = randbuf(klen);
+	d = randbuf(dlen);
+	s = randbuf(slen);
+
+	key.dptr = k;
+	key.dsize = klen+1;
+
+	data.dptr = d;
+	data.dsize = dlen+1;
+
+	lockkey.dptr = s;
+	lockkey.dsize = slen+1;
+
+#if REOPEN_PROB
+	if (random() % REOPEN_PROB == 0) {
+		tdb_reopen_all();
+		goto next;
+	} 
+#endif
+
+#if DELETE_PROB
+	if (random() % DELETE_PROB == 0) {
+		tdb_delete(db, key);
+		goto next;
+	}
+#endif
+
+#if STORE_PROB
+	if (random() % STORE_PROB == 0) {
+		if (tdb_store(db, key, data, TDB_REPLACE) != 0) {
+			fatal("tdb_store failed");
+		}
+		goto next;
+	}
+#endif
+
+#if APPEND_PROB
+	if (random() % APPEND_PROB == 0) {
+		if (tdb_append(db, key, data) != 0) {
+			fatal("tdb_append failed");
+		}
+		goto next;
+	}
+#endif
+
+#if LOCKSTORE_PROB
+	if (random() % LOCKSTORE_PROB == 0) {
+		tdb_chainlock(db, lockkey);
+		data = tdb_fetch(db, key);
+		if (tdb_store(db, key, data, TDB_REPLACE) != 0) {
+			fatal("tdb_store failed");
+		}
+		if (data.dptr) free(data.dptr);
+		tdb_chainunlock(db, lockkey);
+		goto next;
+	} 
+#endif
+
+#if TRAVERSE_PROB
+	if (random() % TRAVERSE_PROB == 0) {
+		tdb_traverse(db, cull_traverse, NULL);
+		goto next;
+	}
+#endif
+
+	data = tdb_fetch(db, key);
+	if (data.dptr) free(data.dptr);
+
+next:
+	free(k);
+	free(d);
+	free(s);
+}
+
+static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf,
+                       void *state)
+{
+	tdb_delete(tdb, key);
+	return 0;
+}
+
+#ifndef NPROC
+#define NPROC 6
+#endif
+
+#ifndef NLOOPS
+#define NLOOPS 200000
+#endif
+
+int main(int argc, char *argv[])
+{
+	int i, seed=0;
+	int loops = NLOOPS;
+	pid_t pids[NPROC];
+
+	pids[0] = getpid();
+
+	for (i=0;i<NPROC-1;i++) {
+		if ((pids[i+1]=fork()) == 0) break;
+	}
+
+	db = tdb_open("torture.tdb", 2, TDB_CLEAR_IF_FIRST, 
+		      O_RDWR | O_CREAT, 0600);
+	if (!db) {
+		fatal("db open failed");
+	}
+	tdb_logging_function(db, tdb_log);
+
+	srand(seed + getpid());
+	srandom(seed + getpid() + time(NULL));
+	for (i=0;i<loops;i++) addrec_db();
+
+	tdb_traverse(db, NULL, NULL);
+	tdb_traverse(db, traverse_fn, NULL);
+	tdb_traverse(db, traverse_fn, NULL);
+
+	tdb_close(db);
+
+	if (getpid() == pids[0]) {
+		for (i=0;i<NPROC-1;i++) {
+			int status;
+			if (waitpid(pids[i+1], &status, 0) != pids[i+1]) {
+				printf("failed to wait for %d\n",
+				       (int)pids[i+1]);
+				exit(1);
+			}
+			if (WEXITSTATUS(status) != 0) {
+				printf("child %d exited with status %d\n",
+				       (int)pids[i+1], WEXITSTATUS(status));
+				exit(1);
+			}
+		}
+		printf("OK\n");
+	}
+
+	return 0;
+}

Added: desktop/trunk/thunar/branches/upstream/current/tests/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SUBDIRS =								\
+	data
+
+INCLUDES =								\
+	-I$(top_srcdir)							\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"tests\"					\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)
+
+TESTS_ENVIRONMENT =							\
+	PATH_FSTAB=$(srcdir)/data/test-thunar-vfs-volume-bsd.fstab
+
+TESTS =									\
+	test-thunar-vfs-path						\
+	test-thunar-vfs-volume-bsd
+
+check_PROGRAMS =							\
+	test-thunar-vfs-path						\
+	test-thunar-vfs-volume-bsd
+
+test_thunar_vfs_path_SOURCES =						\
+	test-thunar-vfs-path.c
+
+test_thunar_vfs_path_DEPENDENCIES =					\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_path_LDADD =						\
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_volume_bsd_SOURCES =					\
+	test-thunar-vfs-volume-bsd.c
+
+test_thunar_vfs_volume_bsd_DEPENDENCIES =				\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_volume_bsd_LDADD =					\
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+clean-local:
+	rm -f *.core core core.*
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/tests/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,759 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+SOURCES = $(test_thunar_vfs_path_SOURCES) $(test_thunar_vfs_volume_bsd_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+check_PROGRAMS = test-thunar-vfs-path$(EXEEXT) \
+	test-thunar-vfs-volume-bsd$(EXEEXT)
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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_test_thunar_vfs_path_OBJECTS = test-thunar-vfs-path.$(OBJEXT)
+test_thunar_vfs_path_OBJECTS = $(am_test_thunar_vfs_path_OBJECTS)
+am__DEPENDENCIES_1 =
+am_test_thunar_vfs_volume_bsd_OBJECTS =  \
+	test-thunar-vfs-volume-bsd.$(OBJEXT)
+test_thunar_vfs_volume_bsd_OBJECTS =  \
+	$(am_test_thunar_vfs_volume_bsd_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(test_thunar_vfs_path_SOURCES) \
+	$(test_thunar_vfs_volume_bsd_SOURCES)
+DIST_SOURCES = $(test_thunar_vfs_path_SOURCES) \
+	$(test_thunar_vfs_volume_bsd_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-exec-recursive install-info-recursive \
+	install-recursive installcheck-recursive installdirs-recursive \
+	pdf-recursive ps-recursive uninstall-info-recursive \
+	uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+SUBDIRS = \
+	data
+
+INCLUDES = \
+	-I$(top_srcdir)							\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"tests\"					\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)
+
+TESTS_ENVIRONMENT = \
+	PATH_FSTAB=$(srcdir)/data/test-thunar-vfs-volume-bsd.fstab
+
+TESTS = \
+	test-thunar-vfs-path						\
+	test-thunar-vfs-volume-bsd
+
+test_thunar_vfs_path_SOURCES = \
+	test-thunar-vfs-path.c
+
+test_thunar_vfs_path_DEPENDENCIES = \
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_path_LDADD = \
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_volume_bsd_SOURCES = \
+	test-thunar-vfs-volume-bsd.c
+
+test_thunar_vfs_volume_bsd_DEPENDENCIES = \
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+test_thunar_vfs_volume_bsd_LDADD = \
+	$(GTHREAD_LIBS)							\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  tests/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/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
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+test-thunar-vfs-path$(EXEEXT): $(test_thunar_vfs_path_OBJECTS) $(test_thunar_vfs_path_DEPENDENCIES) 
+	@rm -f test-thunar-vfs-path$(EXEEXT)
+	$(LINK) $(test_thunar_vfs_path_LDFLAGS) $(test_thunar_vfs_path_OBJECTS) $(test_thunar_vfs_path_LDADD) $(LIBS)
+test-thunar-vfs-volume-bsd$(EXEEXT): $(test_thunar_vfs_volume_bsd_OBJECTS) $(test_thunar_vfs_volume_bsd_DEPENDENCIES) 
+	@rm -f test-thunar-vfs-volume-bsd$(EXEEXT)
+	$(LINK) $(test_thunar_vfs_volume_bsd_LDFLAGS) $(test_thunar_vfs_volume_bsd_OBJECTS) $(test_thunar_vfs_volume_bsd_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-thunar-vfs-path.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-thunar-vfs-volume-bsd.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	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: ctags-recursive $(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
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(mkdir_p) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \
+	check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+	clean-local clean-recursive ctags ctags-recursive distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic maintainer-clean-recursive \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am uninstall-info-am
+
+
+clean-local:
+	rm -f *.core core core.*
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,9 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+noinst_DATA =								\
+	test-thunar-vfs-volume-bsd.fstab
+
+EXTRA_DIST =								\
+	$(noinst_DATA)
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/data/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,433 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = tests/data
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 =
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+noinst_DATA = \
+	test-thunar-vfs-volume-bsd.fstab
+
+EXTRA_DIST = \
+	$(noinst_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(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  tests/data/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/data/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
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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 $(DATA)
+installdirs:
+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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-am
+
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/tests/data/test-thunar-vfs-volume-bsd.fstab
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/data/test-thunar-vfs-volume-bsd.fstab	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/data/test-thunar-vfs-volume-bsd.fstab	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,4 @@
+/dev/ad8s1e	/usr		ufs	rw	2	2
+/dev/da4s2f	/usr/bin	ufs	rw	2	2
+/dev/cd5	/usr/lib	cd9660	ro	0	0
+/dev/ad4s7b	none		swap	sw	0	0

Added: desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-path.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-path.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-path.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,128 @@
+/* $Id: test-thunar-vfs-path.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs.h>
+
+
+
+int
+main (int argc, char **argv)
+{
+  ThunarVfsPath *a;
+  ThunarVfsPath *b;
+  gchar          buffer[THUNAR_VFS_PATH_MAXURILEN];
+  gchar         *s;
+  gint           n;
+
+  /* initialize GThreads (required for Thunar-VFS initialization) */
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  /* initialize Gtk+ (required for Thunar-VFS initialization) */
+  gtk_init (&argc, &argv);
+
+  /* initialize the thunar-vfs library */
+  thunar_vfs_init ();
+
+  /* verify the root path */
+  a = thunar_vfs_path_new ("/", NULL);
+  b = thunar_vfs_path_get_for_root ();
+  s = thunar_vfs_path_dup_string (a);
+  n = thunar_vfs_path_to_string (b, buffer, sizeof (buffer), NULL);
+  g_assert (a == b);
+  g_assert (thunar_vfs_path_equal (a, b));
+  g_assert (thunar_vfs_path_get_parent (a) == NULL);
+  g_assert (thunar_vfs_path_get_parent (b) == NULL);
+  g_assert (thunar_vfs_path_hash (a) == thunar_vfs_path_hash (b));
+  g_assert (strcmp (s, buffer) == 0);
+  g_assert (strcmp (s, "/") == 0);
+  g_assert (n == strlen (buffer) + 1);
+  thunar_vfs_path_unref (b);
+  thunar_vfs_path_unref (a);
+  g_free (s);
+
+  /* verify the home path */
+  a = thunar_vfs_path_new (xfce_get_homedir (), NULL);
+  b = thunar_vfs_path_get_for_home ();
+  s = thunar_vfs_path_dup_uri (a);
+  n = thunar_vfs_path_to_uri (b, buffer, sizeof (buffer), NULL);
+  g_assert (a == b);
+  g_assert (thunar_vfs_path_equal (a, b));
+  g_assert (thunar_vfs_path_hash (a) == thunar_vfs_path_hash (b));
+  g_assert (strcmp (s, buffer) == 0);
+  g_assert (strncmp (s, "file:///", 8) == 0);
+  g_assert (n == strlen (buffer) + 1);
+  thunar_vfs_path_unref (b);
+  thunar_vfs_path_unref (a);
+  g_free (s);
+
+  /* verify the URI handling */
+  a = thunar_vfs_path_new ("/%test ", NULL);
+  b = thunar_vfs_path_new ("file:///%25test%20//", NULL);
+  s = thunar_vfs_path_dup_uri (a);
+  n = thunar_vfs_path_to_string (b, buffer, sizeof (buffer), NULL);
+  g_assert (thunar_vfs_path_equal (a, b));
+  g_assert (thunar_vfs_path_hash (a) == thunar_vfs_path_hash (b));
+  g_assert (strcmp (s, "file:///%25test%20") == 0);
+  g_assert (strcmp (buffer, "/%test ") == 0);
+  g_assert (n == strlen (buffer) + 1);
+  thunar_vfs_path_unref (b);
+  thunar_vfs_path_unref (a);
+  g_free (s);
+
+  /* verify the thunar_vfs_path_relative method */
+  a = thunar_vfs_path_get_for_home ();
+  b = thunar_vfs_path_get_parent (a);
+  g_assert (b != NULL);
+  thunar_vfs_path_ref (b);
+  thunar_vfs_path_unref (a);
+  s = g_path_get_basename (xfce_get_homedir ());
+  a = thunar_vfs_path_relative (b, s);
+  thunar_vfs_path_unref (b);
+  g_free (s);
+  b = thunar_vfs_path_get_for_home ();
+  s = thunar_vfs_path_dup_string (a);
+  g_assert (a == b);
+  g_assert (thunar_vfs_path_equal (a, b));
+  g_assert (thunar_vfs_path_hash (a) == thunar_vfs_path_hash (b));
+  g_assert (strcmp (s, xfce_get_homedir ()) == 0);
+  thunar_vfs_path_unref (b);
+  thunar_vfs_path_unref (a);
+  g_free (s);
+
+  /* shutdown the Thunar-VFS library */
+  thunar_vfs_shutdown ();
+
+  return EXIT_SUCCESS;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-volume-bsd.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-volume-bsd.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/tests/test-thunar-vfs-volume-bsd.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,84 @@
+/* $Id: test-thunar-vfs-volume-bsd.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs.h>
+
+
+
+int
+main (int argc, char **argv)
+{
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+  ThunarVfsVolumeManager *manager;
+  ThunarVfsVolume        *volume;
+  GList                  *volumes;
+
+  /* initialize GThread (required for Thunar-VFS initialization) */
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  /* initialize Gtk+ (required for Thunar-VFS initialization) */
+  gtk_init (&argc, &argv);
+
+  /* initialize Thunar-VFS */
+  thunar_vfs_init ();
+
+  manager = thunar_vfs_volume_manager_get_default ();
+  g_assert (THUNAR_VFS_IS_VOLUME_MANAGER (manager));
+
+  volumes = thunar_vfs_volume_manager_get_volumes (manager);
+  g_assert (g_list_length (volumes) == 3);
+
+  volume = g_list_nth_data (volumes, 0);
+  g_assert (THUNAR_VFS_IS_VOLUME (volume));
+  g_assert (!thunar_vfs_volume_is_mounted (volume));
+  g_assert (thunar_vfs_volume_get_mount_point (volume) != NULL);
+
+  volume = g_list_nth_data (volumes, 1);
+  g_assert (THUNAR_VFS_IS_VOLUME (volume));
+  g_assert (!thunar_vfs_volume_is_mounted (volume));
+  g_assert (thunar_vfs_volume_get_mount_point (volume) != NULL);
+
+  volume = g_list_nth_data (volumes, 2);
+  g_assert (THUNAR_VFS_IS_VOLUME (volume));
+  g_assert (!thunar_vfs_volume_is_mounted (volume));
+  g_assert (thunar_vfs_volume_get_mount_point (volume) != NULL);
+
+  g_object_unref (G_OBJECT (manager));
+
+  /* shutdown Thunar-VFS */
+  thunar_vfs_shutdown ();
+
+  return EXIT_SUCCESS;
+#else
+  /* only BSD systems will pass this test */
+  return 77;
+#endif
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,213 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+INCLUDES =								\
+	-I$(top_builddir)						\
+	-I$(top_srcdir)							\
+	-DBINDIR=\"$(bindir)\"						\
+	-DDATADIR=\"$(datadir)\"					\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"Thunar\"					\
+	-DLIBDIR=\"$(libdir)\"						\
+	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"				\
+	-DTHUNAR_VERSION_API=\"$(THUNAR_VERSION_API)\"			\
+	$(PLATFORM_CPPFLAGS)
+
+bin_PROGRAMS =								\
+	Thunar
+
+thunar_built_sources =							\
+	thunar-marshal.c						\
+	thunar-marshal.h
+
+Thunar_SOURCES =							\
+	$(thunar_include_HEADERS)					\
+	$(thunar_built_sources)						\
+	main.c								\
+	thunar-application.c						\
+	thunar-application.h						\
+	thunar-chooser-dialog.c						\
+	thunar-chooser-dialog.h						\
+	thunar-chooser-model.c						\
+	thunar-chooser-model.h						\
+	thunar-clipboard-manager.c					\
+	thunar-clipboard-manager.h					\
+	thunar-create-dialog.c						\
+	thunar-create-dialog.h						\
+	thunar-details-view.c						\
+	thunar-details-view.h						\
+	thunar-dialogs.c						\
+	thunar-dialogs.h						\
+	thunar-dnd.c							\
+	thunar-dnd.h							\
+	thunar-emblem-chooser.c						\
+	thunar-emblem-chooser.h						\
+	thunar-extension-manager.c					\
+	thunar-extension-manager.h					\
+	thunar-fallback-icon.c						\
+	thunar-fallback-icon.h						\
+	thunar-favourites-model.c					\
+	thunar-favourites-model.h					\
+	thunar-favourites-pane.c					\
+	thunar-favourites-pane.h					\
+	thunar-favourites-view.c					\
+	thunar-favourites-view.h					\
+	thunar-file.c							\
+	thunar-file.h							\
+	thunar-folder.c							\
+	thunar-folder.h							\
+	thunar-gdk-pixbuf-extensions.c					\
+	thunar-gdk-pixbuf-extensions.h					\
+	thunar-gobject-extensions.c					\
+	thunar-gobject-extensions.h					\
+	thunar-gtk-extensions.c						\
+	thunar-gtk-extensions.h						\
+	thunar-history.c						\
+	thunar-history.h						\
+	thunar-icon-factory.c						\
+	thunar-icon-factory.h						\
+	thunar-icon-renderer.c						\
+	thunar-icon-renderer.h						\
+	thunar-icon-view.c						\
+	thunar-icon-view.h						\
+	thunar-icon-view-ui.h						\
+	thunar-launcher.c						\
+	thunar-launcher.h						\
+	thunar-list-model.c						\
+	thunar-list-model.h						\
+	thunar-location-bar.c						\
+	thunar-location-bar.h						\
+	thunar-location-buttons.c					\
+	thunar-location-buttons.h					\
+	thunar-location-dialog.c					\
+	thunar-location-dialog.h					\
+	thunar-location-entry.c						\
+	thunar-location-entry.h						\
+	thunar-metafile.c						\
+	thunar-metafile.h						\
+	thunar-navigator.c						\
+	thunar-navigator.h						\
+	thunar-open-with-action.c					\
+	thunar-open-with-action.h					\
+	thunar-path-entry.c						\
+	thunar-path-entry.h						\
+	thunar-preferences.c						\
+	thunar-preferences.h						\
+	thunar-progress-dialog.c					\
+	thunar-progress-dialog.h					\
+	thunar-properties-dialog.c					\
+	thunar-properties-dialog.h					\
+	thunar-side-pane.c						\
+	thunar-side-pane.h						\
+	thunar-standard-view.c						\
+	thunar-standard-view.h						\
+	thunar-standard-view-ui.h					\
+	thunar-statusbar.c						\
+	thunar-statusbar.h						\
+	thunar-text-renderer.c						\
+	thunar-text-renderer.h						\
+	thunar-thumbnail-frame.c					\
+	thunar-thumbnail-frame.h					\
+	thunar-thumbnail-generator.c					\
+	thunar-thumbnail-generator.h					\
+	thunar-view.c							\
+	thunar-view.h							\
+	thunar-window.c							\
+	thunar-window.h							\
+	thunar-window-ui.h
+
+Thunar_CFLAGS =								\
+	$(CAIRO_CFLAGS)							\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)						\
+	$(PLATFORM_CFLAGS)
+
+Thunar_LDFLAGS =							\
+	-no-undefined							\
+	$(PLATFORM_LDFLAGS)
+
+Thunar_LDADD =								\
+	$(top_builddir)/tdb/libtdb.la					\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la	\
+	$(CAIRO_LIBS)							\
+	$(EXO_LIBS)							\
+	$(GTHREAD_LIBS)
+
+Thunar_DEPENDENCIES =							\
+	$(top_builddir)/tdb/libtdb.la					\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+# install symlink to 'thunar'
+install-data-local:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	( cd $(DESTDIR)$(bindir) ; ln -sf Thunar thunar )
+
+clean-local:
+	rm -f *.core core core.*
+
+if MAINTAINER_MODE
+CLEANFILES =								\
+	xgen-tvmc							\
+	xgen-tvmh
+
+DISTCLEANFILES =							\
+	$(thunar_built_sources)						\
+	stamp-thunar-marshal.h						\
+	thunar-fallback-icon.c						\
+	thunar-icon-view-ui.h						\
+	thunar-standard-view-ui.h					\
+	thunar-thumbnail-frame.c					\
+	thunar-window-ui.h
+
+BUILT_SOURCES =								\
+	$(thunar_built_sources)						\
+	thunar-fallback-icon.c						\
+	thunar-icon-view-ui.h						\
+	thunar-standard-view-ui.h					\
+	thunar-thumbnail-frame.c					\
+	thunar-window-ui.h
+
+thunar-fallback-icon.c: $(srcdir)/thunar-fallback-icon.png Makefile
+	(echo "#include <thunar/thunar-fallback-icon.h>" && gdk-pixbuf-csource --extern --raw --stream --name=thunar_fallback_icon $(srcdir)/thunar-fallback-icon.png) > thunar-fallback-icon.c
+
+thunar-thumbnail-frame.c: $(srcdir)/thunar-thumbnail-frame.png Makefile
+	(echo "#include <thunar/thunar-thumbnail-frame.h>" && gdk-pixbuf-csource --extern --raw --stream --name=thunar_thumbnail_frame $(srcdir)/thunar-thumbnail-frame.png) > thunar-thumbnail-frame.c
+
+thunar-icon-view-ui.h: Makefile $(srcdir)/thunar-icon-view-ui.xml
+	exo-csource --static --name=thunar_icon_view_ui $(srcdir)/thunar-icon-view-ui.xml > thunar-icon-view-ui.h
+
+thunar-standard-view-ui.h: Makefile $(srcdir)/thunar-standard-view-ui.xml
+	exo-csource --static --name=thunar_standard_view_ui $(srcdir)/thunar-standard-view-ui.xml > thunar-standard-view-ui.h
+
+thunar-window-ui.h: Makefile $(srcdir)/thunar-window-ui.xml
+	exo-csource --static --name=thunar_window_ui $(srcdir)/thunar-window-ui.xml > thunar-window-ui.h
+
+thunar-marshal.h: stamp-thunar-marshal.h
+	@true
+stamp-thunar-marshal.h: thunar-marshal.list Makefile
+	( cd $(srcdir) && glib-genmarshal \
+		--prefix=_thunar_marshal \
+		--header thunar-marshal.list ) >> xgen-tmh \
+	&& ( cmp -s xgen-tmh thunar-marshal.h || cp xgen-tmh thunar-marshal.h ) \
+	&& rm -f xgen-tmh \
+	&& echo timestamp > $(@F)
+
+thunar-marshal.c: thunar-marshal.list Makefile
+	( cd $(srcdir) && glib-genmarshal \
+		--prefix=_thunar_marshal \
+		--body thunar-marshal.list ) >> xgen-tmc \
+	&& cp xgen-tmc thunar-marshal.c \
+	&& rm -f xgen-tmc
+endif
+
+EXTRA_DIST =								\
+	thunar-fallback-icon.png					\
+	thunar-icon-view-ui.xml						\
+	thunar-marshal.list						\
+	thunar-standard-view-ui.xml					\
+	thunar-thumbnail-frame.png					\
+	thunar-window-ui.xml
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1504 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+SOURCES = $(Thunar_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+bin_PROGRAMS = Thunar$(EXEEXT)
+subdir = thunar
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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__objects_1 = Thunar-thunar-marshal.$(OBJEXT)
+am_Thunar_OBJECTS = $(am__objects_1) Thunar-main.$(OBJEXT) \
+	Thunar-thunar-application.$(OBJEXT) \
+	Thunar-thunar-chooser-dialog.$(OBJEXT) \
+	Thunar-thunar-chooser-model.$(OBJEXT) \
+	Thunar-thunar-clipboard-manager.$(OBJEXT) \
+	Thunar-thunar-create-dialog.$(OBJEXT) \
+	Thunar-thunar-details-view.$(OBJEXT) \
+	Thunar-thunar-dialogs.$(OBJEXT) Thunar-thunar-dnd.$(OBJEXT) \
+	Thunar-thunar-emblem-chooser.$(OBJEXT) \
+	Thunar-thunar-extension-manager.$(OBJEXT) \
+	Thunar-thunar-fallback-icon.$(OBJEXT) \
+	Thunar-thunar-favourites-model.$(OBJEXT) \
+	Thunar-thunar-favourites-pane.$(OBJEXT) \
+	Thunar-thunar-favourites-view.$(OBJEXT) \
+	Thunar-thunar-file.$(OBJEXT) Thunar-thunar-folder.$(OBJEXT) \
+	Thunar-thunar-gdk-pixbuf-extensions.$(OBJEXT) \
+	Thunar-thunar-gobject-extensions.$(OBJEXT) \
+	Thunar-thunar-gtk-extensions.$(OBJEXT) \
+	Thunar-thunar-history.$(OBJEXT) \
+	Thunar-thunar-icon-factory.$(OBJEXT) \
+	Thunar-thunar-icon-renderer.$(OBJEXT) \
+	Thunar-thunar-icon-view.$(OBJEXT) \
+	Thunar-thunar-launcher.$(OBJEXT) \
+	Thunar-thunar-list-model.$(OBJEXT) \
+	Thunar-thunar-location-bar.$(OBJEXT) \
+	Thunar-thunar-location-buttons.$(OBJEXT) \
+	Thunar-thunar-location-dialog.$(OBJEXT) \
+	Thunar-thunar-location-entry.$(OBJEXT) \
+	Thunar-thunar-metafile.$(OBJEXT) \
+	Thunar-thunar-navigator.$(OBJEXT) \
+	Thunar-thunar-open-with-action.$(OBJEXT) \
+	Thunar-thunar-path-entry.$(OBJEXT) \
+	Thunar-thunar-preferences.$(OBJEXT) \
+	Thunar-thunar-progress-dialog.$(OBJEXT) \
+	Thunar-thunar-properties-dialog.$(OBJEXT) \
+	Thunar-thunar-side-pane.$(OBJEXT) \
+	Thunar-thunar-standard-view.$(OBJEXT) \
+	Thunar-thunar-statusbar.$(OBJEXT) \
+	Thunar-thunar-text-renderer.$(OBJEXT) \
+	Thunar-thunar-thumbnail-frame.$(OBJEXT) \
+	Thunar-thunar-thumbnail-generator.$(OBJEXT) \
+	Thunar-thunar-view.$(OBJEXT) Thunar-thunar-window.$(OBJEXT)
+Thunar_OBJECTS = $(am_Thunar_OBJECTS)
+am__DEPENDENCIES_1 =
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(Thunar_SOURCES)
+DIST_SOURCES = $(Thunar_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = \
+	-I$(top_builddir)						\
+	-I$(top_srcdir)							\
+	-DBINDIR=\"$(bindir)\"						\
+	-DDATADIR=\"$(datadir)\"					\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"Thunar\"					\
+	-DLIBDIR=\"$(libdir)\"						\
+	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"				\
+	-DTHUNAR_VERSION_API=\"$(THUNAR_VERSION_API)\"			\
+	$(PLATFORM_CPPFLAGS)
+
+thunar_built_sources = \
+	thunar-marshal.c						\
+	thunar-marshal.h
+
+Thunar_SOURCES = \
+	$(thunar_include_HEADERS)					\
+	$(thunar_built_sources)						\
+	main.c								\
+	thunar-application.c						\
+	thunar-application.h						\
+	thunar-chooser-dialog.c						\
+	thunar-chooser-dialog.h						\
+	thunar-chooser-model.c						\
+	thunar-chooser-model.h						\
+	thunar-clipboard-manager.c					\
+	thunar-clipboard-manager.h					\
+	thunar-create-dialog.c						\
+	thunar-create-dialog.h						\
+	thunar-details-view.c						\
+	thunar-details-view.h						\
+	thunar-dialogs.c						\
+	thunar-dialogs.h						\
+	thunar-dnd.c							\
+	thunar-dnd.h							\
+	thunar-emblem-chooser.c						\
+	thunar-emblem-chooser.h						\
+	thunar-extension-manager.c					\
+	thunar-extension-manager.h					\
+	thunar-fallback-icon.c						\
+	thunar-fallback-icon.h						\
+	thunar-favourites-model.c					\
+	thunar-favourites-model.h					\
+	thunar-favourites-pane.c					\
+	thunar-favourites-pane.h					\
+	thunar-favourites-view.c					\
+	thunar-favourites-view.h					\
+	thunar-file.c							\
+	thunar-file.h							\
+	thunar-folder.c							\
+	thunar-folder.h							\
+	thunar-gdk-pixbuf-extensions.c					\
+	thunar-gdk-pixbuf-extensions.h					\
+	thunar-gobject-extensions.c					\
+	thunar-gobject-extensions.h					\
+	thunar-gtk-extensions.c						\
+	thunar-gtk-extensions.h						\
+	thunar-history.c						\
+	thunar-history.h						\
+	thunar-icon-factory.c						\
+	thunar-icon-factory.h						\
+	thunar-icon-renderer.c						\
+	thunar-icon-renderer.h						\
+	thunar-icon-view.c						\
+	thunar-icon-view.h						\
+	thunar-icon-view-ui.h						\
+	thunar-launcher.c						\
+	thunar-launcher.h						\
+	thunar-list-model.c						\
+	thunar-list-model.h						\
+	thunar-location-bar.c						\
+	thunar-location-bar.h						\
+	thunar-location-buttons.c					\
+	thunar-location-buttons.h					\
+	thunar-location-dialog.c					\
+	thunar-location-dialog.h					\
+	thunar-location-entry.c						\
+	thunar-location-entry.h						\
+	thunar-metafile.c						\
+	thunar-metafile.h						\
+	thunar-navigator.c						\
+	thunar-navigator.h						\
+	thunar-open-with-action.c					\
+	thunar-open-with-action.h					\
+	thunar-path-entry.c						\
+	thunar-path-entry.h						\
+	thunar-preferences.c						\
+	thunar-preferences.h						\
+	thunar-progress-dialog.c					\
+	thunar-progress-dialog.h					\
+	thunar-properties-dialog.c					\
+	thunar-properties-dialog.h					\
+	thunar-side-pane.c						\
+	thunar-side-pane.h						\
+	thunar-standard-view.c						\
+	thunar-standard-view.h						\
+	thunar-standard-view-ui.h					\
+	thunar-statusbar.c						\
+	thunar-statusbar.h						\
+	thunar-text-renderer.c						\
+	thunar-text-renderer.h						\
+	thunar-thumbnail-frame.c					\
+	thunar-thumbnail-frame.h					\
+	thunar-thumbnail-generator.c					\
+	thunar-thumbnail-generator.h					\
+	thunar-view.c							\
+	thunar-view.h							\
+	thunar-window.c							\
+	thunar-window.h							\
+	thunar-window-ui.h
+
+Thunar_CFLAGS = \
+	$(CAIRO_CFLAGS)							\
+	$(EXO_CFLAGS)							\
+	$(GTHREAD_CFLAGS)						\
+	$(PLATFORM_CFLAGS)
+
+Thunar_LDFLAGS = \
+	-no-undefined							\
+	$(PLATFORM_LDFLAGS)
+
+Thunar_LDADD = \
+	$(top_builddir)/tdb/libtdb.la					\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la	\
+	$(CAIRO_LIBS)							\
+	$(EXO_LIBS)							\
+	$(GTHREAD_LIBS)
+
+Thunar_DEPENDENCIES = \
+	$(top_builddir)/tdb/libtdb.la					\
+	$(top_builddir)/thunar-vfs/libthunar-vfs-$(THUNAR_VERSION_API).la \
+	$(top_builddir)/thunarx/libthunarx-$(THUNAR_VERSION_API).la
+
+ at MAINTAINER_MODE_TRUE@CLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	xgen-tvmc							\
+ at MAINTAINER_MODE_TRUE@	xgen-tvmh
+
+ at MAINTAINER_MODE_TRUE@DISTCLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	$(thunar_built_sources)						\
+ at MAINTAINER_MODE_TRUE@	stamp-thunar-marshal.h						\
+ at MAINTAINER_MODE_TRUE@	thunar-fallback-icon.c						\
+ at MAINTAINER_MODE_TRUE@	thunar-icon-view-ui.h						\
+ at MAINTAINER_MODE_TRUE@	thunar-standard-view-ui.h					\
+ at MAINTAINER_MODE_TRUE@	thunar-thumbnail-frame.c					\
+ at MAINTAINER_MODE_TRUE@	thunar-window-ui.h
+
+ at MAINTAINER_MODE_TRUE@BUILT_SOURCES = \
+ at MAINTAINER_MODE_TRUE@	$(thunar_built_sources)						\
+ at MAINTAINER_MODE_TRUE@	thunar-fallback-icon.c						\
+ at MAINTAINER_MODE_TRUE@	thunar-icon-view-ui.h						\
+ at MAINTAINER_MODE_TRUE@	thunar-standard-view-ui.h					\
+ at MAINTAINER_MODE_TRUE@	thunar-thumbnail-frame.c					\
+ at MAINTAINER_MODE_TRUE@	thunar-window-ui.h
+
+EXTRA_DIST = \
+	thunar-fallback-icon.png					\
+	thunar-icon-view-ui.xml						\
+	thunar-marshal.list						\
+	thunar-standard-view-ui.xml					\
+	thunar-thumbnail-frame.png					\
+	thunar-window-ui.xml
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  thunar/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  thunar/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 \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(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:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+Thunar$(EXEEXT): $(Thunar_OBJECTS) $(Thunar_DEPENDENCIES) 
+	@rm -f Thunar$(EXEEXT)
+	$(LINK) $(Thunar_LDFLAGS) $(Thunar_OBJECTS) $(Thunar_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-main.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-application.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-chooser-dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-chooser-model.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-clipboard-manager.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-create-dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-details-view.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-dialogs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-dnd.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-emblem-chooser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-extension-manager.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-fallback-icon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-favourites-model.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-favourites-pane.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-favourites-view.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-file.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-folder.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-gobject-extensions.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-gtk-extensions.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-history.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-icon-factory.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-icon-renderer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-icon-view.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-launcher.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-list-model.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-location-bar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-location-buttons.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-location-dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-location-entry.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-marshal.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-metafile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-navigator.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-open-with-action.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-path-entry.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-preferences.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-progress-dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-properties-dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-side-pane.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-standard-view.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-statusbar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-text-renderer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-thumbnail-frame.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-thumbnail-generator.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-view.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Thunar-thunar-window.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+Thunar-thunar-marshal.o: thunar-marshal.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-marshal.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-marshal.Tpo" -c -o Thunar-thunar-marshal.o `test -f 'thunar-marshal.c' || echo '$(srcdir)/'`thunar-marshal.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-marshal.Tpo" "$(DEPDIR)/Thunar-thunar-marshal.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-marshal.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-marshal.c' object='Thunar-thunar-marshal.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-marshal.o `test -f 'thunar-marshal.c' || echo '$(srcdir)/'`thunar-marshal.c
+
+Thunar-thunar-marshal.obj: thunar-marshal.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-marshal.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-marshal.Tpo" -c -o Thunar-thunar-marshal.obj `if test -f 'thunar-marshal.c'; then $(CYGPATH_W) 'thunar-marshal.c'; else $(CYGPATH_W) '$(srcdir)/thunar-marshal.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-marshal.Tpo" "$(DEPDIR)/Thunar-thunar-marshal.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-marshal.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-marshal.c' object='Thunar-thunar-marshal.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-marshal.obj `if test -f 'thunar-marshal.c'; then $(CYGPATH_W) 'thunar-marshal.c'; else $(CYGPATH_W) '$(srcdir)/thunar-marshal.c'; fi`
+
+Thunar-main.o: main.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-main.o -MD -MP -MF "$(DEPDIR)/Thunar-main.Tpo" -c -o Thunar-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-main.Tpo" "$(DEPDIR)/Thunar-main.Po"; else rm -f "$(DEPDIR)/Thunar-main.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='main.c' object='Thunar-main.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+Thunar-main.obj: main.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-main.obj -MD -MP -MF "$(DEPDIR)/Thunar-main.Tpo" -c -o Thunar-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-main.Tpo" "$(DEPDIR)/Thunar-main.Po"; else rm -f "$(DEPDIR)/Thunar-main.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='main.c' object='Thunar-main.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+Thunar-thunar-application.o: thunar-application.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-application.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-application.Tpo" -c -o Thunar-thunar-application.o `test -f 'thunar-application.c' || echo '$(srcdir)/'`thunar-application.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-application.Tpo" "$(DEPDIR)/Thunar-thunar-application.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-application.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-application.c' object='Thunar-thunar-application.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-application.o `test -f 'thunar-application.c' || echo '$(srcdir)/'`thunar-application.c
+
+Thunar-thunar-application.obj: thunar-application.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-application.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-application.Tpo" -c -o Thunar-thunar-application.obj `if test -f 'thunar-application.c'; then $(CYGPATH_W) 'thunar-application.c'; else $(CYGPATH_W) '$(srcdir)/thunar-application.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-application.Tpo" "$(DEPDIR)/Thunar-thunar-application.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-application.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-application.c' object='Thunar-thunar-application.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-application.obj `if test -f 'thunar-application.c'; then $(CYGPATH_W) 'thunar-application.c'; else $(CYGPATH_W) '$(srcdir)/thunar-application.c'; fi`
+
+Thunar-thunar-chooser-dialog.o: thunar-chooser-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-chooser-dialog.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo" -c -o Thunar-thunar-chooser-dialog.o `test -f 'thunar-chooser-dialog.c' || echo '$(srcdir)/'`thunar-chooser-dialog.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-chooser-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-chooser-dialog.c' object='Thunar-thunar-chooser-dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-chooser-dialog.o `test -f 'thunar-chooser-dialog.c' || echo '$(srcdir)/'`thunar-chooser-dialog.c
+
+Thunar-thunar-chooser-dialog.obj: thunar-chooser-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-chooser-dialog.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo" -c -o Thunar-thunar-chooser-dialog.obj `if test -f 'thunar-chooser-dialog.c'; then $(CYGPATH_W) 'thunar-chooser-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-chooser-dialog.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-chooser-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-chooser-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-chooser-dialog.c' object='Thunar-thunar-chooser-dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-chooser-dialog.obj `if test -f 'thunar-chooser-dialog.c'; then $(CYGPATH_W) 'thunar-chooser-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-chooser-dialog.c'; fi`
+
+Thunar-thunar-chooser-model.o: thunar-chooser-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-chooser-model.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo" -c -o Thunar-thunar-chooser-model.o `test -f 'thunar-chooser-model.c' || echo '$(srcdir)/'`thunar-chooser-model.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo" "$(DEPDIR)/Thunar-thunar-chooser-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-chooser-model.c' object='Thunar-thunar-chooser-model.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-chooser-model.o `test -f 'thunar-chooser-model.c' || echo '$(srcdir)/'`thunar-chooser-model.c
+
+Thunar-thunar-chooser-model.obj: thunar-chooser-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-chooser-model.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo" -c -o Thunar-thunar-chooser-model.obj `if test -f 'thunar-chooser-model.c'; then $(CYGPATH_W) 'thunar-chooser-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-chooser-model.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo" "$(DEPDIR)/Thunar-thunar-chooser-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-chooser-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-chooser-model.c' object='Thunar-thunar-chooser-model.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-chooser-model.obj `if test -f 'thunar-chooser-model.c'; then $(CYGPATH_W) 'thunar-chooser-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-chooser-model.c'; fi`
+
+Thunar-thunar-clipboard-manager.o: thunar-clipboard-manager.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-clipboard-manager.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo" -c -o Thunar-thunar-clipboard-manager.o `test -f 'thunar-clipboard-manager.c' || echo '$(srcdir)/'`thunar-clipboard-manager.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo" "$(DEPDIR)/Thunar-thunar-clipboard-manager.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-clipboard-manager.c' object='Thunar-thunar-clipboard-manager.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-clipboard-manager.o `test -f 'thunar-clipboard-manager.c' || echo '$(srcdir)/'`thunar-clipboard-manager.c
+
+Thunar-thunar-clipboard-manager.obj: thunar-clipboard-manager.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-clipboard-manager.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo" -c -o Thunar-thunar-clipboard-manager.obj `if test -f 'thunar-clipboard-manager.c'; then $(CYGPATH_W) 'thunar-clipboard-manager.c'; else $(CYGPATH_W) '$(srcdir)/thunar-clipboard-manager.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo" "$(DEPDIR)/Thunar-thunar-clipboard-manager.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-clipboard-manager.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-clipboard-manager.c' object='Thunar-thunar-clipboard-manager.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-clipboard-manager.obj `if test -f 'thunar-clipboard-manager.c'; then $(CYGPATH_W) 'thunar-clipboard-manager.c'; else $(CYGPATH_W) '$(srcdir)/thunar-clipboard-manager.c'; fi`
+
+Thunar-thunar-create-dialog.o: thunar-create-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-create-dialog.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo" -c -o Thunar-thunar-create-dialog.o `test -f 'thunar-create-dialog.c' || echo '$(srcdir)/'`thunar-create-dialog.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-create-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-create-dialog.c' object='Thunar-thunar-create-dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-create-dialog.o `test -f 'thunar-create-dialog.c' || echo '$(srcdir)/'`thunar-create-dialog.c
+
+Thunar-thunar-create-dialog.obj: thunar-create-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-create-dialog.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo" -c -o Thunar-thunar-create-dialog.obj `if test -f 'thunar-create-dialog.c'; then $(CYGPATH_W) 'thunar-create-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-create-dialog.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-create-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-create-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-create-dialog.c' object='Thunar-thunar-create-dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-create-dialog.obj `if test -f 'thunar-create-dialog.c'; then $(CYGPATH_W) 'thunar-create-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-create-dialog.c'; fi`
+
+Thunar-thunar-details-view.o: thunar-details-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-details-view.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-details-view.Tpo" -c -o Thunar-thunar-details-view.o `test -f 'thunar-details-view.c' || echo '$(srcdir)/'`thunar-details-view.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-details-view.Tpo" "$(DEPDIR)/Thunar-thunar-details-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-details-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-details-view.c' object='Thunar-thunar-details-view.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-details-view.o `test -f 'thunar-details-view.c' || echo '$(srcdir)/'`thunar-details-view.c
+
+Thunar-thunar-details-view.obj: thunar-details-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-details-view.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-details-view.Tpo" -c -o Thunar-thunar-details-view.obj `if test -f 'thunar-details-view.c'; then $(CYGPATH_W) 'thunar-details-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-details-view.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-details-view.Tpo" "$(DEPDIR)/Thunar-thunar-details-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-details-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-details-view.c' object='Thunar-thunar-details-view.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-details-view.obj `if test -f 'thunar-details-view.c'; then $(CYGPATH_W) 'thunar-details-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-details-view.c'; fi`
+
+Thunar-thunar-dialogs.o: thunar-dialogs.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-dialogs.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-dialogs.Tpo" -c -o Thunar-thunar-dialogs.o `test -f 'thunar-dialogs.c' || echo '$(srcdir)/'`thunar-dialogs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-dialogs.Tpo" "$(DEPDIR)/Thunar-thunar-dialogs.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-dialogs.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-dialogs.c' object='Thunar-thunar-dialogs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-dialogs.o `test -f 'thunar-dialogs.c' || echo '$(srcdir)/'`thunar-dialogs.c
+
+Thunar-thunar-dialogs.obj: thunar-dialogs.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-dialogs.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-dialogs.Tpo" -c -o Thunar-thunar-dialogs.obj `if test -f 'thunar-dialogs.c'; then $(CYGPATH_W) 'thunar-dialogs.c'; else $(CYGPATH_W) '$(srcdir)/thunar-dialogs.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-dialogs.Tpo" "$(DEPDIR)/Thunar-thunar-dialogs.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-dialogs.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-dialogs.c' object='Thunar-thunar-dialogs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-dialogs.obj `if test -f 'thunar-dialogs.c'; then $(CYGPATH_W) 'thunar-dialogs.c'; else $(CYGPATH_W) '$(srcdir)/thunar-dialogs.c'; fi`
+
+Thunar-thunar-dnd.o: thunar-dnd.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-dnd.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-dnd.Tpo" -c -o Thunar-thunar-dnd.o `test -f 'thunar-dnd.c' || echo '$(srcdir)/'`thunar-dnd.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-dnd.Tpo" "$(DEPDIR)/Thunar-thunar-dnd.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-dnd.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-dnd.c' object='Thunar-thunar-dnd.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-dnd.o `test -f 'thunar-dnd.c' || echo '$(srcdir)/'`thunar-dnd.c
+
+Thunar-thunar-dnd.obj: thunar-dnd.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-dnd.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-dnd.Tpo" -c -o Thunar-thunar-dnd.obj `if test -f 'thunar-dnd.c'; then $(CYGPATH_W) 'thunar-dnd.c'; else $(CYGPATH_W) '$(srcdir)/thunar-dnd.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-dnd.Tpo" "$(DEPDIR)/Thunar-thunar-dnd.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-dnd.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-dnd.c' object='Thunar-thunar-dnd.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-dnd.obj `if test -f 'thunar-dnd.c'; then $(CYGPATH_W) 'thunar-dnd.c'; else $(CYGPATH_W) '$(srcdir)/thunar-dnd.c'; fi`
+
+Thunar-thunar-emblem-chooser.o: thunar-emblem-chooser.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-emblem-chooser.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo" -c -o Thunar-thunar-emblem-chooser.o `test -f 'thunar-emblem-chooser.c' || echo '$(srcdir)/'`thunar-emblem-chooser.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo" "$(DEPDIR)/Thunar-thunar-emblem-chooser.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-emblem-chooser.c' object='Thunar-thunar-emblem-chooser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-emblem-chooser.o `test -f 'thunar-emblem-chooser.c' || echo '$(srcdir)/'`thunar-emblem-chooser.c
+
+Thunar-thunar-emblem-chooser.obj: thunar-emblem-chooser.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-emblem-chooser.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo" -c -o Thunar-thunar-emblem-chooser.obj `if test -f 'thunar-emblem-chooser.c'; then $(CYGPATH_W) 'thunar-emblem-chooser.c'; else $(CYGPATH_W) '$(srcdir)/thunar-emblem-chooser.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo" "$(DEPDIR)/Thunar-thunar-emblem-chooser.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-emblem-chooser.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-emblem-chooser.c' object='Thunar-thunar-emblem-chooser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-emblem-chooser.obj `if test -f 'thunar-emblem-chooser.c'; then $(CYGPATH_W) 'thunar-emblem-chooser.c'; else $(CYGPATH_W) '$(srcdir)/thunar-emblem-chooser.c'; fi`
+
+Thunar-thunar-extension-manager.o: thunar-extension-manager.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-extension-manager.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo" -c -o Thunar-thunar-extension-manager.o `test -f 'thunar-extension-manager.c' || echo '$(srcdir)/'`thunar-extension-manager.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo" "$(DEPDIR)/Thunar-thunar-extension-manager.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-extension-manager.c' object='Thunar-thunar-extension-manager.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-extension-manager.o `test -f 'thunar-extension-manager.c' || echo '$(srcdir)/'`thunar-extension-manager.c
+
+Thunar-thunar-extension-manager.obj: thunar-extension-manager.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-extension-manager.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo" -c -o Thunar-thunar-extension-manager.obj `if test -f 'thunar-extension-manager.c'; then $(CYGPATH_W) 'thunar-extension-manager.c'; else $(CYGPATH_W) '$(srcdir)/thunar-extension-manager.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo" "$(DEPDIR)/Thunar-thunar-extension-manager.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-extension-manager.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-extension-manager.c' object='Thunar-thunar-extension-manager.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-extension-manager.obj `if test -f 'thunar-extension-manager.c'; then $(CYGPATH_W) 'thunar-extension-manager.c'; else $(CYGPATH_W) '$(srcdir)/thunar-extension-manager.c'; fi`
+
+Thunar-thunar-fallback-icon.o: thunar-fallback-icon.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-fallback-icon.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo" -c -o Thunar-thunar-fallback-icon.o `test -f 'thunar-fallback-icon.c' || echo '$(srcdir)/'`thunar-fallback-icon.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo" "$(DEPDIR)/Thunar-thunar-fallback-icon.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-fallback-icon.c' object='Thunar-thunar-fallback-icon.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-fallback-icon.o `test -f 'thunar-fallback-icon.c' || echo '$(srcdir)/'`thunar-fallback-icon.c
+
+Thunar-thunar-fallback-icon.obj: thunar-fallback-icon.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-fallback-icon.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo" -c -o Thunar-thunar-fallback-icon.obj `if test -f 'thunar-fallback-icon.c'; then $(CYGPATH_W) 'thunar-fallback-icon.c'; else $(CYGPATH_W) '$(srcdir)/thunar-fallback-icon.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo" "$(DEPDIR)/Thunar-thunar-fallback-icon.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-fallback-icon.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-fallback-icon.c' object='Thunar-thunar-fallback-icon.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-fallback-icon.obj `if test -f 'thunar-fallback-icon.c'; then $(CYGPATH_W) 'thunar-fallback-icon.c'; else $(CYGPATH_W) '$(srcdir)/thunar-fallback-icon.c'; fi`
+
+Thunar-thunar-favourites-model.o: thunar-favourites-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-model.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo" -c -o Thunar-thunar-favourites-model.o `test -f 'thunar-favourites-model.c' || echo '$(srcdir)/'`thunar-favourites-model.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-model.c' object='Thunar-thunar-favourites-model.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-model.o `test -f 'thunar-favourites-model.c' || echo '$(srcdir)/'`thunar-favourites-model.c
+
+Thunar-thunar-favourites-model.obj: thunar-favourites-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-model.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo" -c -o Thunar-thunar-favourites-model.obj `if test -f 'thunar-favourites-model.c'; then $(CYGPATH_W) 'thunar-favourites-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-model.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-model.c' object='Thunar-thunar-favourites-model.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-model.obj `if test -f 'thunar-favourites-model.c'; then $(CYGPATH_W) 'thunar-favourites-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-model.c'; fi`
+
+Thunar-thunar-favourites-pane.o: thunar-favourites-pane.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-pane.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo" -c -o Thunar-thunar-favourites-pane.o `test -f 'thunar-favourites-pane.c' || echo '$(srcdir)/'`thunar-favourites-pane.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-pane.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-pane.c' object='Thunar-thunar-favourites-pane.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-pane.o `test -f 'thunar-favourites-pane.c' || echo '$(srcdir)/'`thunar-favourites-pane.c
+
+Thunar-thunar-favourites-pane.obj: thunar-favourites-pane.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-pane.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo" -c -o Thunar-thunar-favourites-pane.obj `if test -f 'thunar-favourites-pane.c'; then $(CYGPATH_W) 'thunar-favourites-pane.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-pane.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-pane.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-pane.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-pane.c' object='Thunar-thunar-favourites-pane.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-pane.obj `if test -f 'thunar-favourites-pane.c'; then $(CYGPATH_W) 'thunar-favourites-pane.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-pane.c'; fi`
+
+Thunar-thunar-favourites-view.o: thunar-favourites-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-view.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo" -c -o Thunar-thunar-favourites-view.o `test -f 'thunar-favourites-view.c' || echo '$(srcdir)/'`thunar-favourites-view.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-view.c' object='Thunar-thunar-favourites-view.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-view.o `test -f 'thunar-favourites-view.c' || echo '$(srcdir)/'`thunar-favourites-view.c
+
+Thunar-thunar-favourites-view.obj: thunar-favourites-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-favourites-view.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo" -c -o Thunar-thunar-favourites-view.obj `if test -f 'thunar-favourites-view.c'; then $(CYGPATH_W) 'thunar-favourites-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-view.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo" "$(DEPDIR)/Thunar-thunar-favourites-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-favourites-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-favourites-view.c' object='Thunar-thunar-favourites-view.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-favourites-view.obj `if test -f 'thunar-favourites-view.c'; then $(CYGPATH_W) 'thunar-favourites-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-favourites-view.c'; fi`
+
+Thunar-thunar-file.o: thunar-file.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-file.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-file.Tpo" -c -o Thunar-thunar-file.o `test -f 'thunar-file.c' || echo '$(srcdir)/'`thunar-file.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-file.Tpo" "$(DEPDIR)/Thunar-thunar-file.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-file.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-file.c' object='Thunar-thunar-file.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-file.o `test -f 'thunar-file.c' || echo '$(srcdir)/'`thunar-file.c
+
+Thunar-thunar-file.obj: thunar-file.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-file.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-file.Tpo" -c -o Thunar-thunar-file.obj `if test -f 'thunar-file.c'; then $(CYGPATH_W) 'thunar-file.c'; else $(CYGPATH_W) '$(srcdir)/thunar-file.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-file.Tpo" "$(DEPDIR)/Thunar-thunar-file.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-file.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-file.c' object='Thunar-thunar-file.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-file.obj `if test -f 'thunar-file.c'; then $(CYGPATH_W) 'thunar-file.c'; else $(CYGPATH_W) '$(srcdir)/thunar-file.c'; fi`
+
+Thunar-thunar-folder.o: thunar-folder.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-folder.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-folder.Tpo" -c -o Thunar-thunar-folder.o `test -f 'thunar-folder.c' || echo '$(srcdir)/'`thunar-folder.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-folder.Tpo" "$(DEPDIR)/Thunar-thunar-folder.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-folder.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-folder.c' object='Thunar-thunar-folder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-folder.o `test -f 'thunar-folder.c' || echo '$(srcdir)/'`thunar-folder.c
+
+Thunar-thunar-folder.obj: thunar-folder.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-folder.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-folder.Tpo" -c -o Thunar-thunar-folder.obj `if test -f 'thunar-folder.c'; then $(CYGPATH_W) 'thunar-folder.c'; else $(CYGPATH_W) '$(srcdir)/thunar-folder.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-folder.Tpo" "$(DEPDIR)/Thunar-thunar-folder.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-folder.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-folder.c' object='Thunar-thunar-folder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-folder.obj `if test -f 'thunar-folder.c'; then $(CYGPATH_W) 'thunar-folder.c'; else $(CYGPATH_W) '$(srcdir)/thunar-folder.c'; fi`
+
+Thunar-thunar-gdk-pixbuf-extensions.o: thunar-gdk-pixbuf-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gdk-pixbuf-extensions.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo" -c -o Thunar-thunar-gdk-pixbuf-extensions.o `test -f 'thunar-gdk-pixbuf-extensions.c' || echo '$(srcdir)/'`thunar-gdk-pixbuf-extensions.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gdk-pixbuf-extensions.c' object='Thunar-thunar-gdk-pixbuf-extensions.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gdk-pixbuf-extensions.o `test -f 'thunar-gdk-pixbuf-extensions.c' || echo '$(srcdir)/'`thunar-gdk-pixbuf-extensions.c
+
+Thunar-thunar-gdk-pixbuf-extensions.obj: thunar-gdk-pixbuf-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gdk-pixbuf-extensions.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo" -c -o Thunar-thunar-gdk-pixbuf-extensions.obj `if test -f 'thunar-gdk-pixbuf-extensions.c'; then $(CYGPATH_W) 'thunar-gdk-pixbuf-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gdk-pixbuf-extensions.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gdk-pixbuf-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gdk-pixbuf-extensions.c' object='Thunar-thunar-gdk-pixbuf-extensions.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gdk-pixbuf-extensions.obj `if test -f 'thunar-gdk-pixbuf-extensions.c'; then $(CYGPATH_W) 'thunar-gdk-pixbuf-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gdk-pixbuf-extensions.c'; fi`
+
+Thunar-thunar-gobject-extensions.o: thunar-gobject-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gobject-extensions.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo" -c -o Thunar-thunar-gobject-extensions.o `test -f 'thunar-gobject-extensions.c' || echo '$(srcdir)/'`thunar-gobject-extensions.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gobject-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gobject-extensions.c' object='Thunar-thunar-gobject-extensions.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gobject-extensions.o `test -f 'thunar-gobject-extensions.c' || echo '$(srcdir)/'`thunar-gobject-extensions.c
+
+Thunar-thunar-gobject-extensions.obj: thunar-gobject-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gobject-extensions.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo" -c -o Thunar-thunar-gobject-extensions.obj `if test -f 'thunar-gobject-extensions.c'; then $(CYGPATH_W) 'thunar-gobject-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gobject-extensions.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gobject-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gobject-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gobject-extensions.c' object='Thunar-thunar-gobject-extensions.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gobject-extensions.obj `if test -f 'thunar-gobject-extensions.c'; then $(CYGPATH_W) 'thunar-gobject-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gobject-extensions.c'; fi`
+
+Thunar-thunar-gtk-extensions.o: thunar-gtk-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gtk-extensions.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo" -c -o Thunar-thunar-gtk-extensions.o `test -f 'thunar-gtk-extensions.c' || echo '$(srcdir)/'`thunar-gtk-extensions.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gtk-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gtk-extensions.c' object='Thunar-thunar-gtk-extensions.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gtk-extensions.o `test -f 'thunar-gtk-extensions.c' || echo '$(srcdir)/'`thunar-gtk-extensions.c
+
+Thunar-thunar-gtk-extensions.obj: thunar-gtk-extensions.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-gtk-extensions.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo" -c -o Thunar-thunar-gtk-extensions.obj `if test -f 'thunar-gtk-extensions.c'; then $(CYGPATH_W) 'thunar-gtk-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gtk-extensions.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo" "$(DEPDIR)/Thunar-thunar-gtk-extensions.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-gtk-extensions.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-gtk-extensions.c' object='Thunar-thunar-gtk-extensions.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-gtk-extensions.obj `if test -f 'thunar-gtk-extensions.c'; then $(CYGPATH_W) 'thunar-gtk-extensions.c'; else $(CYGPATH_W) '$(srcdir)/thunar-gtk-extensions.c'; fi`
+
+Thunar-thunar-history.o: thunar-history.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-history.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-history.Tpo" -c -o Thunar-thunar-history.o `test -f 'thunar-history.c' || echo '$(srcdir)/'`thunar-history.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-history.Tpo" "$(DEPDIR)/Thunar-thunar-history.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-history.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-history.c' object='Thunar-thunar-history.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-history.o `test -f 'thunar-history.c' || echo '$(srcdir)/'`thunar-history.c
+
+Thunar-thunar-history.obj: thunar-history.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-history.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-history.Tpo" -c -o Thunar-thunar-history.obj `if test -f 'thunar-history.c'; then $(CYGPATH_W) 'thunar-history.c'; else $(CYGPATH_W) '$(srcdir)/thunar-history.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-history.Tpo" "$(DEPDIR)/Thunar-thunar-history.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-history.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-history.c' object='Thunar-thunar-history.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-history.obj `if test -f 'thunar-history.c'; then $(CYGPATH_W) 'thunar-history.c'; else $(CYGPATH_W) '$(srcdir)/thunar-history.c'; fi`
+
+Thunar-thunar-icon-factory.o: thunar-icon-factory.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-factory.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo" -c -o Thunar-thunar-icon-factory.o `test -f 'thunar-icon-factory.c' || echo '$(srcdir)/'`thunar-icon-factory.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo" "$(DEPDIR)/Thunar-thunar-icon-factory.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-factory.c' object='Thunar-thunar-icon-factory.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-factory.o `test -f 'thunar-icon-factory.c' || echo '$(srcdir)/'`thunar-icon-factory.c
+
+Thunar-thunar-icon-factory.obj: thunar-icon-factory.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-factory.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo" -c -o Thunar-thunar-icon-factory.obj `if test -f 'thunar-icon-factory.c'; then $(CYGPATH_W) 'thunar-icon-factory.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-factory.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo" "$(DEPDIR)/Thunar-thunar-icon-factory.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-factory.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-factory.c' object='Thunar-thunar-icon-factory.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-factory.obj `if test -f 'thunar-icon-factory.c'; then $(CYGPATH_W) 'thunar-icon-factory.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-factory.c'; fi`
+
+Thunar-thunar-icon-renderer.o: thunar-icon-renderer.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-renderer.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo" -c -o Thunar-thunar-icon-renderer.o `test -f 'thunar-icon-renderer.c' || echo '$(srcdir)/'`thunar-icon-renderer.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo" "$(DEPDIR)/Thunar-thunar-icon-renderer.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-renderer.c' object='Thunar-thunar-icon-renderer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-renderer.o `test -f 'thunar-icon-renderer.c' || echo '$(srcdir)/'`thunar-icon-renderer.c
+
+Thunar-thunar-icon-renderer.obj: thunar-icon-renderer.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-renderer.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo" -c -o Thunar-thunar-icon-renderer.obj `if test -f 'thunar-icon-renderer.c'; then $(CYGPATH_W) 'thunar-icon-renderer.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-renderer.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo" "$(DEPDIR)/Thunar-thunar-icon-renderer.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-renderer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-renderer.c' object='Thunar-thunar-icon-renderer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-renderer.obj `if test -f 'thunar-icon-renderer.c'; then $(CYGPATH_W) 'thunar-icon-renderer.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-renderer.c'; fi`
+
+Thunar-thunar-icon-view.o: thunar-icon-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-view.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-view.Tpo" -c -o Thunar-thunar-icon-view.o `test -f 'thunar-icon-view.c' || echo '$(srcdir)/'`thunar-icon-view.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-view.Tpo" "$(DEPDIR)/Thunar-thunar-icon-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-view.c' object='Thunar-thunar-icon-view.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-view.o `test -f 'thunar-icon-view.c' || echo '$(srcdir)/'`thunar-icon-view.c
+
+Thunar-thunar-icon-view.obj: thunar-icon-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-icon-view.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-icon-view.Tpo" -c -o Thunar-thunar-icon-view.obj `if test -f 'thunar-icon-view.c'; then $(CYGPATH_W) 'thunar-icon-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-view.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-icon-view.Tpo" "$(DEPDIR)/Thunar-thunar-icon-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-icon-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-icon-view.c' object='Thunar-thunar-icon-view.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-icon-view.obj `if test -f 'thunar-icon-view.c'; then $(CYGPATH_W) 'thunar-icon-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-icon-view.c'; fi`
+
+Thunar-thunar-launcher.o: thunar-launcher.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-launcher.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-launcher.Tpo" -c -o Thunar-thunar-launcher.o `test -f 'thunar-launcher.c' || echo '$(srcdir)/'`thunar-launcher.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-launcher.Tpo" "$(DEPDIR)/Thunar-thunar-launcher.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-launcher.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-launcher.c' object='Thunar-thunar-launcher.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-launcher.o `test -f 'thunar-launcher.c' || echo '$(srcdir)/'`thunar-launcher.c
+
+Thunar-thunar-launcher.obj: thunar-launcher.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-launcher.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-launcher.Tpo" -c -o Thunar-thunar-launcher.obj `if test -f 'thunar-launcher.c'; then $(CYGPATH_W) 'thunar-launcher.c'; else $(CYGPATH_W) '$(srcdir)/thunar-launcher.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-launcher.Tpo" "$(DEPDIR)/Thunar-thunar-launcher.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-launcher.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-launcher.c' object='Thunar-thunar-launcher.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-launcher.obj `if test -f 'thunar-launcher.c'; then $(CYGPATH_W) 'thunar-launcher.c'; else $(CYGPATH_W) '$(srcdir)/thunar-launcher.c'; fi`
+
+Thunar-thunar-list-model.o: thunar-list-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-list-model.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-list-model.Tpo" -c -o Thunar-thunar-list-model.o `test -f 'thunar-list-model.c' || echo '$(srcdir)/'`thunar-list-model.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-list-model.Tpo" "$(DEPDIR)/Thunar-thunar-list-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-list-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-list-model.c' object='Thunar-thunar-list-model.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-list-model.o `test -f 'thunar-list-model.c' || echo '$(srcdir)/'`thunar-list-model.c
+
+Thunar-thunar-list-model.obj: thunar-list-model.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-list-model.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-list-model.Tpo" -c -o Thunar-thunar-list-model.obj `if test -f 'thunar-list-model.c'; then $(CYGPATH_W) 'thunar-list-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-list-model.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-list-model.Tpo" "$(DEPDIR)/Thunar-thunar-list-model.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-list-model.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-list-model.c' object='Thunar-thunar-list-model.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-list-model.obj `if test -f 'thunar-list-model.c'; then $(CYGPATH_W) 'thunar-list-model.c'; else $(CYGPATH_W) '$(srcdir)/thunar-list-model.c'; fi`
+
+Thunar-thunar-location-bar.o: thunar-location-bar.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-bar.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-bar.Tpo" -c -o Thunar-thunar-location-bar.o `test -f 'thunar-location-bar.c' || echo '$(srcdir)/'`thunar-location-bar.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-bar.Tpo" "$(DEPDIR)/Thunar-thunar-location-bar.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-bar.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-bar.c' object='Thunar-thunar-location-bar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-bar.o `test -f 'thunar-location-bar.c' || echo '$(srcdir)/'`thunar-location-bar.c
+
+Thunar-thunar-location-bar.obj: thunar-location-bar.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-bar.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-bar.Tpo" -c -o Thunar-thunar-location-bar.obj `if test -f 'thunar-location-bar.c'; then $(CYGPATH_W) 'thunar-location-bar.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-bar.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-bar.Tpo" "$(DEPDIR)/Thunar-thunar-location-bar.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-bar.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-bar.c' object='Thunar-thunar-location-bar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-bar.obj `if test -f 'thunar-location-bar.c'; then $(CYGPATH_W) 'thunar-location-bar.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-bar.c'; fi`
+
+Thunar-thunar-location-buttons.o: thunar-location-buttons.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-buttons.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo" -c -o Thunar-thunar-location-buttons.o `test -f 'thunar-location-buttons.c' || echo '$(srcdir)/'`thunar-location-buttons.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo" "$(DEPDIR)/Thunar-thunar-location-buttons.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-buttons.c' object='Thunar-thunar-location-buttons.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-buttons.o `test -f 'thunar-location-buttons.c' || echo '$(srcdir)/'`thunar-location-buttons.c
+
+Thunar-thunar-location-buttons.obj: thunar-location-buttons.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-buttons.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo" -c -o Thunar-thunar-location-buttons.obj `if test -f 'thunar-location-buttons.c'; then $(CYGPATH_W) 'thunar-location-buttons.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-buttons.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo" "$(DEPDIR)/Thunar-thunar-location-buttons.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-buttons.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-buttons.c' object='Thunar-thunar-location-buttons.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-buttons.obj `if test -f 'thunar-location-buttons.c'; then $(CYGPATH_W) 'thunar-location-buttons.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-buttons.c'; fi`
+
+Thunar-thunar-location-dialog.o: thunar-location-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-dialog.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo" -c -o Thunar-thunar-location-dialog.o `test -f 'thunar-location-dialog.c' || echo '$(srcdir)/'`thunar-location-dialog.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-location-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-dialog.c' object='Thunar-thunar-location-dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-dialog.o `test -f 'thunar-location-dialog.c' || echo '$(srcdir)/'`thunar-location-dialog.c
+
+Thunar-thunar-location-dialog.obj: thunar-location-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-dialog.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo" -c -o Thunar-thunar-location-dialog.obj `if test -f 'thunar-location-dialog.c'; then $(CYGPATH_W) 'thunar-location-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-dialog.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-location-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-dialog.c' object='Thunar-thunar-location-dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-dialog.obj `if test -f 'thunar-location-dialog.c'; then $(CYGPATH_W) 'thunar-location-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-dialog.c'; fi`
+
+Thunar-thunar-location-entry.o: thunar-location-entry.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-entry.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-entry.Tpo" -c -o Thunar-thunar-location-entry.o `test -f 'thunar-location-entry.c' || echo '$(srcdir)/'`thunar-location-entry.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-entry.Tpo" "$(DEPDIR)/Thunar-thunar-location-entry.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-entry.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-entry.c' object='Thunar-thunar-location-entry.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-entry.o `test -f 'thunar-location-entry.c' || echo '$(srcdir)/'`thunar-location-entry.c
+
+Thunar-thunar-location-entry.obj: thunar-location-entry.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-location-entry.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-location-entry.Tpo" -c -o Thunar-thunar-location-entry.obj `if test -f 'thunar-location-entry.c'; then $(CYGPATH_W) 'thunar-location-entry.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-entry.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-location-entry.Tpo" "$(DEPDIR)/Thunar-thunar-location-entry.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-location-entry.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-location-entry.c' object='Thunar-thunar-location-entry.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-location-entry.obj `if test -f 'thunar-location-entry.c'; then $(CYGPATH_W) 'thunar-location-entry.c'; else $(CYGPATH_W) '$(srcdir)/thunar-location-entry.c'; fi`
+
+Thunar-thunar-metafile.o: thunar-metafile.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-metafile.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-metafile.Tpo" -c -o Thunar-thunar-metafile.o `test -f 'thunar-metafile.c' || echo '$(srcdir)/'`thunar-metafile.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-metafile.Tpo" "$(DEPDIR)/Thunar-thunar-metafile.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-metafile.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-metafile.c' object='Thunar-thunar-metafile.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-metafile.o `test -f 'thunar-metafile.c' || echo '$(srcdir)/'`thunar-metafile.c
+
+Thunar-thunar-metafile.obj: thunar-metafile.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-metafile.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-metafile.Tpo" -c -o Thunar-thunar-metafile.obj `if test -f 'thunar-metafile.c'; then $(CYGPATH_W) 'thunar-metafile.c'; else $(CYGPATH_W) '$(srcdir)/thunar-metafile.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-metafile.Tpo" "$(DEPDIR)/Thunar-thunar-metafile.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-metafile.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-metafile.c' object='Thunar-thunar-metafile.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-metafile.obj `if test -f 'thunar-metafile.c'; then $(CYGPATH_W) 'thunar-metafile.c'; else $(CYGPATH_W) '$(srcdir)/thunar-metafile.c'; fi`
+
+Thunar-thunar-navigator.o: thunar-navigator.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-navigator.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-navigator.Tpo" -c -o Thunar-thunar-navigator.o `test -f 'thunar-navigator.c' || echo '$(srcdir)/'`thunar-navigator.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-navigator.Tpo" "$(DEPDIR)/Thunar-thunar-navigator.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-navigator.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-navigator.c' object='Thunar-thunar-navigator.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-navigator.o `test -f 'thunar-navigator.c' || echo '$(srcdir)/'`thunar-navigator.c
+
+Thunar-thunar-navigator.obj: thunar-navigator.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-navigator.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-navigator.Tpo" -c -o Thunar-thunar-navigator.obj `if test -f 'thunar-navigator.c'; then $(CYGPATH_W) 'thunar-navigator.c'; else $(CYGPATH_W) '$(srcdir)/thunar-navigator.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-navigator.Tpo" "$(DEPDIR)/Thunar-thunar-navigator.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-navigator.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-navigator.c' object='Thunar-thunar-navigator.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-navigator.obj `if test -f 'thunar-navigator.c'; then $(CYGPATH_W) 'thunar-navigator.c'; else $(CYGPATH_W) '$(srcdir)/thunar-navigator.c'; fi`
+
+Thunar-thunar-open-with-action.o: thunar-open-with-action.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-open-with-action.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo" -c -o Thunar-thunar-open-with-action.o `test -f 'thunar-open-with-action.c' || echo '$(srcdir)/'`thunar-open-with-action.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo" "$(DEPDIR)/Thunar-thunar-open-with-action.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-open-with-action.c' object='Thunar-thunar-open-with-action.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-open-with-action.o `test -f 'thunar-open-with-action.c' || echo '$(srcdir)/'`thunar-open-with-action.c
+
+Thunar-thunar-open-with-action.obj: thunar-open-with-action.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-open-with-action.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo" -c -o Thunar-thunar-open-with-action.obj `if test -f 'thunar-open-with-action.c'; then $(CYGPATH_W) 'thunar-open-with-action.c'; else $(CYGPATH_W) '$(srcdir)/thunar-open-with-action.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo" "$(DEPDIR)/Thunar-thunar-open-with-action.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-open-with-action.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-open-with-action.c' object='Thunar-thunar-open-with-action.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-open-with-action.obj `if test -f 'thunar-open-with-action.c'; then $(CYGPATH_W) 'thunar-open-with-action.c'; else $(CYGPATH_W) '$(srcdir)/thunar-open-with-action.c'; fi`
+
+Thunar-thunar-path-entry.o: thunar-path-entry.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-path-entry.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-path-entry.Tpo" -c -o Thunar-thunar-path-entry.o `test -f 'thunar-path-entry.c' || echo '$(srcdir)/'`thunar-path-entry.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-path-entry.Tpo" "$(DEPDIR)/Thunar-thunar-path-entry.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-path-entry.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-path-entry.c' object='Thunar-thunar-path-entry.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-path-entry.o `test -f 'thunar-path-entry.c' || echo '$(srcdir)/'`thunar-path-entry.c
+
+Thunar-thunar-path-entry.obj: thunar-path-entry.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-path-entry.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-path-entry.Tpo" -c -o Thunar-thunar-path-entry.obj `if test -f 'thunar-path-entry.c'; then $(CYGPATH_W) 'thunar-path-entry.c'; else $(CYGPATH_W) '$(srcdir)/thunar-path-entry.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-path-entry.Tpo" "$(DEPDIR)/Thunar-thunar-path-entry.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-path-entry.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-path-entry.c' object='Thunar-thunar-path-entry.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-path-entry.obj `if test -f 'thunar-path-entry.c'; then $(CYGPATH_W) 'thunar-path-entry.c'; else $(CYGPATH_W) '$(srcdir)/thunar-path-entry.c'; fi`
+
+Thunar-thunar-preferences.o: thunar-preferences.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-preferences.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-preferences.Tpo" -c -o Thunar-thunar-preferences.o `test -f 'thunar-preferences.c' || echo '$(srcdir)/'`thunar-preferences.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-preferences.Tpo" "$(DEPDIR)/Thunar-thunar-preferences.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-preferences.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-preferences.c' object='Thunar-thunar-preferences.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-preferences.o `test -f 'thunar-preferences.c' || echo '$(srcdir)/'`thunar-preferences.c
+
+Thunar-thunar-preferences.obj: thunar-preferences.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-preferences.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-preferences.Tpo" -c -o Thunar-thunar-preferences.obj `if test -f 'thunar-preferences.c'; then $(CYGPATH_W) 'thunar-preferences.c'; else $(CYGPATH_W) '$(srcdir)/thunar-preferences.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-preferences.Tpo" "$(DEPDIR)/Thunar-thunar-preferences.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-preferences.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-preferences.c' object='Thunar-thunar-preferences.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-preferences.obj `if test -f 'thunar-preferences.c'; then $(CYGPATH_W) 'thunar-preferences.c'; else $(CYGPATH_W) '$(srcdir)/thunar-preferences.c'; fi`
+
+Thunar-thunar-progress-dialog.o: thunar-progress-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-progress-dialog.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo" -c -o Thunar-thunar-progress-dialog.o `test -f 'thunar-progress-dialog.c' || echo '$(srcdir)/'`thunar-progress-dialog.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-progress-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-progress-dialog.c' object='Thunar-thunar-progress-dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-progress-dialog.o `test -f 'thunar-progress-dialog.c' || echo '$(srcdir)/'`thunar-progress-dialog.c
+
+Thunar-thunar-progress-dialog.obj: thunar-progress-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-progress-dialog.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo" -c -o Thunar-thunar-progress-dialog.obj `if test -f 'thunar-progress-dialog.c'; then $(CYGPATH_W) 'thunar-progress-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-progress-dialog.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-progress-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-progress-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-progress-dialog.c' object='Thunar-thunar-progress-dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-progress-dialog.obj `if test -f 'thunar-progress-dialog.c'; then $(CYGPATH_W) 'thunar-progress-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-progress-dialog.c'; fi`
+
+Thunar-thunar-properties-dialog.o: thunar-properties-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-properties-dialog.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo" -c -o Thunar-thunar-properties-dialog.o `test -f 'thunar-properties-dialog.c' || echo '$(srcdir)/'`thunar-properties-dialog.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-properties-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-properties-dialog.c' object='Thunar-thunar-properties-dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-properties-dialog.o `test -f 'thunar-properties-dialog.c' || echo '$(srcdir)/'`thunar-properties-dialog.c
+
+Thunar-thunar-properties-dialog.obj: thunar-properties-dialog.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-properties-dialog.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo" -c -o Thunar-thunar-properties-dialog.obj `if test -f 'thunar-properties-dialog.c'; then $(CYGPATH_W) 'thunar-properties-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-properties-dialog.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo" "$(DEPDIR)/Thunar-thunar-properties-dialog.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-properties-dialog.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-properties-dialog.c' object='Thunar-thunar-properties-dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-properties-dialog.obj `if test -f 'thunar-properties-dialog.c'; then $(CYGPATH_W) 'thunar-properties-dialog.c'; else $(CYGPATH_W) '$(srcdir)/thunar-properties-dialog.c'; fi`
+
+Thunar-thunar-side-pane.o: thunar-side-pane.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-side-pane.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-side-pane.Tpo" -c -o Thunar-thunar-side-pane.o `test -f 'thunar-side-pane.c' || echo '$(srcdir)/'`thunar-side-pane.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-side-pane.Tpo" "$(DEPDIR)/Thunar-thunar-side-pane.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-side-pane.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-side-pane.c' object='Thunar-thunar-side-pane.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-side-pane.o `test -f 'thunar-side-pane.c' || echo '$(srcdir)/'`thunar-side-pane.c
+
+Thunar-thunar-side-pane.obj: thunar-side-pane.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-side-pane.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-side-pane.Tpo" -c -o Thunar-thunar-side-pane.obj `if test -f 'thunar-side-pane.c'; then $(CYGPATH_W) 'thunar-side-pane.c'; else $(CYGPATH_W) '$(srcdir)/thunar-side-pane.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-side-pane.Tpo" "$(DEPDIR)/Thunar-thunar-side-pane.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-side-pane.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-side-pane.c' object='Thunar-thunar-side-pane.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-side-pane.obj `if test -f 'thunar-side-pane.c'; then $(CYGPATH_W) 'thunar-side-pane.c'; else $(CYGPATH_W) '$(srcdir)/thunar-side-pane.c'; fi`
+
+Thunar-thunar-standard-view.o: thunar-standard-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-standard-view.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-standard-view.Tpo" -c -o Thunar-thunar-standard-view.o `test -f 'thunar-standard-view.c' || echo '$(srcdir)/'`thunar-standard-view.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-standard-view.Tpo" "$(DEPDIR)/Thunar-thunar-standard-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-standard-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-standard-view.c' object='Thunar-thunar-standard-view.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-standard-view.o `test -f 'thunar-standard-view.c' || echo '$(srcdir)/'`thunar-standard-view.c
+
+Thunar-thunar-standard-view.obj: thunar-standard-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-standard-view.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-standard-view.Tpo" -c -o Thunar-thunar-standard-view.obj `if test -f 'thunar-standard-view.c'; then $(CYGPATH_W) 'thunar-standard-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-standard-view.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-standard-view.Tpo" "$(DEPDIR)/Thunar-thunar-standard-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-standard-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-standard-view.c' object='Thunar-thunar-standard-view.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-standard-view.obj `if test -f 'thunar-standard-view.c'; then $(CYGPATH_W) 'thunar-standard-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-standard-view.c'; fi`
+
+Thunar-thunar-statusbar.o: thunar-statusbar.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-statusbar.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-statusbar.Tpo" -c -o Thunar-thunar-statusbar.o `test -f 'thunar-statusbar.c' || echo '$(srcdir)/'`thunar-statusbar.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-statusbar.Tpo" "$(DEPDIR)/Thunar-thunar-statusbar.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-statusbar.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-statusbar.c' object='Thunar-thunar-statusbar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-statusbar.o `test -f 'thunar-statusbar.c' || echo '$(srcdir)/'`thunar-statusbar.c
+
+Thunar-thunar-statusbar.obj: thunar-statusbar.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-statusbar.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-statusbar.Tpo" -c -o Thunar-thunar-statusbar.obj `if test -f 'thunar-statusbar.c'; then $(CYGPATH_W) 'thunar-statusbar.c'; else $(CYGPATH_W) '$(srcdir)/thunar-statusbar.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-statusbar.Tpo" "$(DEPDIR)/Thunar-thunar-statusbar.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-statusbar.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-statusbar.c' object='Thunar-thunar-statusbar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-statusbar.obj `if test -f 'thunar-statusbar.c'; then $(CYGPATH_W) 'thunar-statusbar.c'; else $(CYGPATH_W) '$(srcdir)/thunar-statusbar.c'; fi`
+
+Thunar-thunar-text-renderer.o: thunar-text-renderer.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-text-renderer.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo" -c -o Thunar-thunar-text-renderer.o `test -f 'thunar-text-renderer.c' || echo '$(srcdir)/'`thunar-text-renderer.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo" "$(DEPDIR)/Thunar-thunar-text-renderer.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-text-renderer.c' object='Thunar-thunar-text-renderer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-text-renderer.o `test -f 'thunar-text-renderer.c' || echo '$(srcdir)/'`thunar-text-renderer.c
+
+Thunar-thunar-text-renderer.obj: thunar-text-renderer.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-text-renderer.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo" -c -o Thunar-thunar-text-renderer.obj `if test -f 'thunar-text-renderer.c'; then $(CYGPATH_W) 'thunar-text-renderer.c'; else $(CYGPATH_W) '$(srcdir)/thunar-text-renderer.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo" "$(DEPDIR)/Thunar-thunar-text-renderer.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-text-renderer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-text-renderer.c' object='Thunar-thunar-text-renderer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-text-renderer.obj `if test -f 'thunar-text-renderer.c'; then $(CYGPATH_W) 'thunar-text-renderer.c'; else $(CYGPATH_W) '$(srcdir)/thunar-text-renderer.c'; fi`
+
+Thunar-thunar-thumbnail-frame.o: thunar-thumbnail-frame.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-thumbnail-frame.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo" -c -o Thunar-thunar-thumbnail-frame.o `test -f 'thunar-thumbnail-frame.c' || echo '$(srcdir)/'`thunar-thumbnail-frame.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo" "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-thumbnail-frame.c' object='Thunar-thunar-thumbnail-frame.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-thumbnail-frame.o `test -f 'thunar-thumbnail-frame.c' || echo '$(srcdir)/'`thunar-thumbnail-frame.c
+
+Thunar-thunar-thumbnail-frame.obj: thunar-thumbnail-frame.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-thumbnail-frame.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo" -c -o Thunar-thunar-thumbnail-frame.obj `if test -f 'thunar-thumbnail-frame.c'; then $(CYGPATH_W) 'thunar-thumbnail-frame.c'; else $(CYGPATH_W) '$(srcdir)/thunar-thumbnail-frame.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo" "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-thumbnail-frame.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-thumbnail-frame.c' object='Thunar-thunar-thumbnail-frame.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-thumbnail-frame.obj `if test -f 'thunar-thumbnail-frame.c'; then $(CYGPATH_W) 'thunar-thumbnail-frame.c'; else $(CYGPATH_W) '$(srcdir)/thunar-thumbnail-frame.c'; fi`
+
+Thunar-thunar-thumbnail-generator.o: thunar-thumbnail-generator.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-thumbnail-generator.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo" -c -o Thunar-thunar-thumbnail-generator.o `test -f 'thunar-thumbnail-generator.c' || echo '$(srcdir)/'`thunar-thumbnail-generator.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo" "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-thumbnail-generator.c' object='Thunar-thunar-thumbnail-generator.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-thumbnail-generator.o `test -f 'thunar-thumbnail-generator.c' || echo '$(srcdir)/'`thunar-thumbnail-generator.c
+
+Thunar-thunar-thumbnail-generator.obj: thunar-thumbnail-generator.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-thumbnail-generator.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo" -c -o Thunar-thunar-thumbnail-generator.obj `if test -f 'thunar-thumbnail-generator.c'; then $(CYGPATH_W) 'thunar-thumbnail-generator.c'; else $(CYGPATH_W) '$(srcdir)/thunar-thumbnail-generator.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo" "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-thumbnail-generator.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-thumbnail-generator.c' object='Thunar-thunar-thumbnail-generator.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-thumbnail-generator.obj `if test -f 'thunar-thumbnail-generator.c'; then $(CYGPATH_W) 'thunar-thumbnail-generator.c'; else $(CYGPATH_W) '$(srcdir)/thunar-thumbnail-generator.c'; fi`
+
+Thunar-thunar-view.o: thunar-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-view.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-view.Tpo" -c -o Thunar-thunar-view.o `test -f 'thunar-view.c' || echo '$(srcdir)/'`thunar-view.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-view.Tpo" "$(DEPDIR)/Thunar-thunar-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-view.c' object='Thunar-thunar-view.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-view.o `test -f 'thunar-view.c' || echo '$(srcdir)/'`thunar-view.c
+
+Thunar-thunar-view.obj: thunar-view.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-view.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-view.Tpo" -c -o Thunar-thunar-view.obj `if test -f 'thunar-view.c'; then $(CYGPATH_W) 'thunar-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-view.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-view.Tpo" "$(DEPDIR)/Thunar-thunar-view.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-view.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-view.c' object='Thunar-thunar-view.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-view.obj `if test -f 'thunar-view.c'; then $(CYGPATH_W) 'thunar-view.c'; else $(CYGPATH_W) '$(srcdir)/thunar-view.c'; fi`
+
+Thunar-thunar-window.o: thunar-window.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-window.o -MD -MP -MF "$(DEPDIR)/Thunar-thunar-window.Tpo" -c -o Thunar-thunar-window.o `test -f 'thunar-window.c' || echo '$(srcdir)/'`thunar-window.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-window.Tpo" "$(DEPDIR)/Thunar-thunar-window.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-window.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-window.c' object='Thunar-thunar-window.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-window.o `test -f 'thunar-window.c' || echo '$(srcdir)/'`thunar-window.c
+
+Thunar-thunar-window.obj: thunar-window.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -MT Thunar-thunar-window.obj -MD -MP -MF "$(DEPDIR)/Thunar-thunar-window.Tpo" -c -o Thunar-thunar-window.obj `if test -f 'thunar-window.c'; then $(CYGPATH_W) 'thunar-window.c'; else $(CYGPATH_W) '$(srcdir)/thunar-window.c'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/Thunar-thunar-window.Tpo" "$(DEPDIR)/Thunar-thunar-window.Po"; else rm -f "$(DEPDIR)/Thunar-thunar-window.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-window.c' object='Thunar-thunar-window.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Thunar_CFLAGS) $(CFLAGS) -c -o Thunar-thunar-window.obj `if test -f 'thunar-window.c'; then $(CYGPATH_W) 'thunar-window.c'; else $(CYGPATH_W) '$(srcdir)/thunar-window.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+
+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)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) 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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+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 \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool clean-local ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-data-local install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am
+
+
+# install symlink to 'thunar'
+install-data-local:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	( cd $(DESTDIR)$(bindir) ; ln -sf Thunar thunar )
+
+clean-local:
+	rm -f *.core core core.*
+
+ at MAINTAINER_MODE_TRUE@thunar-fallback-icon.c: $(srcdir)/thunar-fallback-icon.png Makefile
+ at MAINTAINER_MODE_TRUE@	(echo "#include <thunar/thunar-fallback-icon.h>" && gdk-pixbuf-csource --extern --raw --stream --name=thunar_fallback_icon $(srcdir)/thunar-fallback-icon.png) > thunar-fallback-icon.c
+
+ at MAINTAINER_MODE_TRUE@thunar-thumbnail-frame.c: $(srcdir)/thunar-thumbnail-frame.png Makefile
+ at MAINTAINER_MODE_TRUE@	(echo "#include <thunar/thunar-thumbnail-frame.h>" && gdk-pixbuf-csource --extern --raw --stream --name=thunar_thumbnail_frame $(srcdir)/thunar-thumbnail-frame.png) > thunar-thumbnail-frame.c
+
+ at MAINTAINER_MODE_TRUE@thunar-icon-view-ui.h: Makefile $(srcdir)/thunar-icon-view-ui.xml
+ at MAINTAINER_MODE_TRUE@	exo-csource --static --name=thunar_icon_view_ui $(srcdir)/thunar-icon-view-ui.xml > thunar-icon-view-ui.h
+
+ at MAINTAINER_MODE_TRUE@thunar-standard-view-ui.h: Makefile $(srcdir)/thunar-standard-view-ui.xml
+ at MAINTAINER_MODE_TRUE@	exo-csource --static --name=thunar_standard_view_ui $(srcdir)/thunar-standard-view-ui.xml > thunar-standard-view-ui.h
+
+ at MAINTAINER_MODE_TRUE@thunar-window-ui.h: Makefile $(srcdir)/thunar-window-ui.xml
+ at MAINTAINER_MODE_TRUE@	exo-csource --static --name=thunar_window_ui $(srcdir)/thunar-window-ui.xml > thunar-window-ui.h
+
+ at MAINTAINER_MODE_TRUE@thunar-marshal.h: stamp-thunar-marshal.h
+ at MAINTAINER_MODE_TRUE@	@true
+ at MAINTAINER_MODE_TRUE@stamp-thunar-marshal.h: thunar-marshal.list Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-genmarshal \
+ at MAINTAINER_MODE_TRUE@		--prefix=_thunar_marshal \
+ at MAINTAINER_MODE_TRUE@		--header thunar-marshal.list ) >> xgen-tmh \
+ at MAINTAINER_MODE_TRUE@	&& ( cmp -s xgen-tmh thunar-marshal.h || cp xgen-tmh thunar-marshal.h ) \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tmh \
+ at MAINTAINER_MODE_TRUE@	&& echo timestamp > $(@F)
+
+ at MAINTAINER_MODE_TRUE@thunar-marshal.c: thunar-marshal.list Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-genmarshal \
+ at MAINTAINER_MODE_TRUE@		--prefix=_thunar_marshal \
+ at MAINTAINER_MODE_TRUE@		--body thunar-marshal.list ) >> xgen-tmc \
+ at MAINTAINER_MODE_TRUE@	&& cp xgen-tmc thunar-marshal.c \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tmc
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/thunar/main.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/main.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/main.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,99 @@
+/* $Id: main.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 os-cillation e.K.
+ *
+ * Written by Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <thunar/thunar-application.h>
+
+
+
+int
+main (int argc, char **argv)
+{
+  ThunarApplication *application;
+  ThunarVfsPath     *path;
+  ThunarFile        *file = NULL;
+  GError            *error = NULL;
+
+  /* setup translation domain */
+  xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+  /* setup application name */
+  g_set_application_name (_("Thunar"));
+
+#ifndef G_DISABLE_CHECKS
+  /* Do NOT remove this line for now, If something doesn't work,
+   * fix your code instead!
+   */
+  g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING);
+#endif
+
+  /* initialize the GLib thread support */
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  /* initialize Gtk+ */
+  gtk_init (&argc, &argv);
+
+  /* initialize the ThunarVFS library */
+  thunar_vfs_init ();
+
+  /* acquire a reference on the global application */
+  application = thunar_application_get ();
+
+  path = (argc > 1) ? thunar_vfs_path_new (argv[1], &error) : thunar_vfs_path_get_for_home ();
+  if (G_LIKELY (path != NULL))
+    {
+      file = thunar_file_get_for_path (path, &error);
+      thunar_vfs_path_unref (path);
+    }
+
+  if (path == NULL || file == NULL)
+    {
+      fprintf (stderr, "%s: Failed to open `%s': %s\n",
+               argv[0], (argc > 1) ? argv[1] : xfce_get_homedir (),
+               error->message);
+      g_error_free (error);
+      return EXIT_FAILURE;
+    }
+
+  /* open the first window */
+  thunar_application_open_window (application, file, NULL);
+
+  g_object_unref (G_OBJECT (file));
+
+  gtk_main ();
+
+  /* release the application reference */
+  g_object_unref (G_OBJECT (application));
+
+  /* shutdown the VFS library */
+  thunar_vfs_shutdown ();
+
+  return EXIT_SUCCESS;
+}

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,559 @@
+/* $Id: thunar-application.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ * Copyright (c) 2005 Jeff Franks <jcfranks at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-preferences.h>
+#include <thunar/thunar-progress-dialog.h>
+
+
+
+/* Prototype for the Thunar-VFS job launchers */
+typedef ThunarVfsJob *(*Launcher) (GList   *source_path_list,
+                                   GList   *target_path_list,
+                                   GError **error);
+
+
+
+static void     thunar_application_class_init           (ThunarApplicationClass *klass);
+static void     thunar_application_init                 (ThunarApplication      *application);
+static void     thunar_application_finalize             (GObject                *object);
+static void     thunar_application_collect_and_launch   (ThunarApplication      *application,
+                                                         GtkWidget              *widget,
+                                                         const gchar            *icon_name,
+                                                         const gchar            *title,
+                                                         Launcher                launcher,
+                                                         GList                  *source_path_list,
+                                                         ThunarVfsPath          *target_path,
+                                                         GClosure               *new_files_closure);
+static void     thunar_application_launch               (ThunarApplication      *application,
+                                                         GtkWidget              *widget,
+                                                         const gchar            *icon_name,
+                                                         const gchar            *title,
+                                                         Launcher                launcher,
+                                                         GList                  *source_path_list,
+                                                         GList                  *target_path_list,
+                                                         GClosure               *new_files_closure);
+static void     thunar_application_window_destroyed     (GtkWidget              *window,
+                                                         ThunarApplication      *application);
+static gboolean thunar_application_show_dialogs         (gpointer                user_data);
+static void     thunar_application_show_dialogs_destroy (gpointer                user_data);
+
+
+
+struct _ThunarApplicationClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarApplication
+{
+  GObject __parent__;
+
+  ThunarPreferences *preferences;
+  GList             *windows;
+
+  gint               show_dialogs_timer_id;
+};
+
+
+
+G_DEFINE_TYPE (ThunarApplication, thunar_application, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_application_class_init (ThunarApplicationClass *klass)
+{
+  GObjectClass *gobject_class;
+ 
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_application_finalize;
+}
+
+
+
+static void
+thunar_application_init (ThunarApplication *application)
+{
+  application->preferences = thunar_preferences_get ();
+  application->show_dialogs_timer_id = -1;
+}
+
+
+
+static void
+thunar_application_finalize (GObject *object)
+{
+  ThunarApplication *application = THUNAR_APPLICATION (object);
+  GList             *lp;
+
+  /* drop any running "show dialogs" timer */
+  if (G_UNLIKELY (application->show_dialogs_timer_id >= 0))
+    g_source_remove (application->show_dialogs_timer_id);
+
+  /* drop the open windows */
+  for (lp = application->windows; lp != NULL; lp = lp->next)
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (lp->data), G_CALLBACK (thunar_application_window_destroyed), application);
+      gtk_widget_destroy (GTK_WIDGET (lp->data));
+    }
+  g_list_free (application->windows);
+
+  /* release our reference on the preferences */
+  g_object_unref (G_OBJECT (application->preferences));
+  
+  (*G_OBJECT_CLASS (thunar_application_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_application_collect_and_launch (ThunarApplication *application,
+                                       GtkWidget         *widget,
+                                       const gchar       *icon_name,
+                                       const gchar       *title,
+                                       Launcher           launcher,
+                                       GList             *source_path_list,
+                                       ThunarVfsPath     *target_path,
+                                       GClosure          *new_files_closure)
+{
+  ThunarVfsPath *path;
+  GList         *target_path_list = NULL;
+  GList         *lp;
+
+  /* check if we have anything to operate on */
+  if (G_UNLIKELY (source_path_list == NULL))
+    return;
+
+  /* generate the target path list */
+  for (lp = g_list_last (source_path_list); lp != NULL; lp = lp->prev)
+    {
+      path = thunar_vfs_path_relative (target_path, thunar_vfs_path_get_name (lp->data));
+      target_path_list = g_list_prepend (target_path_list, path);
+    }
+
+  /* launch the operation */
+  thunar_application_launch (application, widget, icon_name, title, launcher,
+                             source_path_list, target_path_list, new_files_closure);
+
+  /* release the target path list */
+  thunar_vfs_path_list_free (target_path_list);
+}
+
+
+
+static void
+thunar_application_launch (ThunarApplication *application,
+                           GtkWidget         *widget,
+                           const gchar       *icon_name,
+                           const gchar       *title,
+                           Launcher           launcher,
+                           GList             *source_path_list,
+                           GList             *target_path_list,
+                           GClosure          *new_files_closure)
+{
+  ThunarVfsJob *job;
+  GtkWidget    *dialog;
+  GtkWindow    *window;
+  GError       *error = NULL;
+
+  /* determine the toplevel window for the widget */
+  window = (widget != NULL) ? (GtkWindow *) gtk_widget_get_toplevel (widget) : NULL;
+
+  /* try to allocate a new job for the operation */
+  job = (*launcher) (source_path_list, target_path_list, &error);
+  if (G_UNLIKELY (job == NULL))
+    {
+      /* display an error message to the user */
+      thunar_dialogs_show_error (widget, error, _("Failed to launch operation"));
+
+      /* release the error */
+      g_error_free (error);
+    }
+  else
+    {
+      /* connect the "new-files" closure (if any) */
+      if (G_LIKELY (new_files_closure != NULL))
+        g_signal_connect_closure (G_OBJECT (job), "new-files", new_files_closure, FALSE);
+
+      /* allocate a progress dialog for the job */
+      dialog = g_object_new (THUNAR_TYPE_PROGRESS_DIALOG,
+                             "icon-name", icon_name,
+                             "title", title,
+                             "job", job,
+                             NULL);
+
+      /* connect to the parent (if any) */
+      if (G_LIKELY (window != NULL))
+        gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
+
+      /* be sure to destroy the dialog when the job is done */
+      g_signal_connect_after (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), dialog);
+
+      /* hook up the dialog window */
+      g_signal_connect (G_OBJECT (dialog), "destroy", G_CALLBACK (thunar_application_window_destroyed), application);
+      application->windows = g_list_prepend (application->windows, dialog);
+
+      /* Set up a timer to show the dialog, to make sure we don't
+       * just popup and destroy a dialog for a very short job.
+       */
+      if (G_LIKELY (application->show_dialogs_timer_id < 0))
+        {
+          application->show_dialogs_timer_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 750, thunar_application_show_dialogs,
+                                                                   application, thunar_application_show_dialogs_destroy);
+        }
+
+      /* drop our reference on the job */
+      g_object_unref (G_OBJECT (job));
+    }
+}
+
+
+
+static void
+thunar_application_window_destroyed (GtkWidget         *window,
+                                     ThunarApplication *application)
+{
+  g_return_if_fail (GTK_IS_WINDOW (window));
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (g_list_find (application->windows, window) != NULL);
+
+  application->windows = g_list_remove (application->windows, window);
+
+  /* terminate the application if we don't have any more
+   * windows and we don't manage the desktop.
+   */
+  if (G_UNLIKELY (application->windows == NULL
+        /*&& application->desktop_view == NULL*/))
+    {
+      gtk_main_quit ();
+    }
+}
+
+
+
+static gboolean
+thunar_application_show_dialogs (gpointer user_data)
+{
+  ThunarApplication *application = THUNAR_APPLICATION (user_data);
+  GList             *lp;
+
+  GDK_THREADS_ENTER ();
+
+  /* show all progress dialogs */
+  for (lp = application->windows; lp != NULL; lp = lp->next)
+    if (THUNAR_IS_PROGRESS_DIALOG (lp->data))
+      gtk_widget_show (GTK_WIDGET (lp->data));
+
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_application_show_dialogs_destroy (gpointer user_data)
+{
+  THUNAR_APPLICATION (user_data)->show_dialogs_timer_id = -1;
+}
+
+
+
+/**
+ * thunar_application_get:
+ *
+ * Returns the global shared #ThunarApplication instance.
+ * This method takes a reference on the global instance
+ * for the caller, so you must call g_object_unref()
+ * on it when done.
+ *
+ * Return value: the shared #ThunarApplication instance.
+ **/
+ThunarApplication*
+thunar_application_get (void)
+{
+  static ThunarApplication *application = NULL;
+
+  if (G_UNLIKELY (application == NULL))
+    {
+      application = g_object_new (THUNAR_TYPE_APPLICATION, NULL);
+      g_object_add_weak_pointer (G_OBJECT (application), (gpointer) &application);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (application));
+    }
+
+  return application;
+}
+
+
+
+/**
+ * thunar_application_get_windows:
+ * @application : a #ThunarApplication.
+ *
+ * Returns the list of regular #ThunarWindows currently handled by
+ * @application. The returned list is owned by the caller and
+ * must be freed using g_list_free().
+ *
+ * Return value: the list of regular #ThunarWindows in @application.
+ **/
+GList*
+thunar_application_get_windows (ThunarApplication *application)
+{
+  GList *windows = NULL;
+  GList *lp;
+
+  g_return_val_if_fail (THUNAR_IS_APPLICATION (application), NULL);
+
+  for (lp = application->windows; lp != NULL; lp = lp->next)
+    if (G_LIKELY (THUNAR_IS_WINDOW (lp->data)))
+      windows = g_list_prepend (windows, lp->data);
+
+  return windows;
+}
+
+
+
+/**
+ * thunar_application_open_window:
+ * @application : a #ThunarApplication.
+ * @directory   : the directory to open.
+ * @screen      : the #GdkScreen on which to open the window or %NULL
+ *                to open on the default screen.
+ *
+ * Opens a new #ThunarWindow for @application, displaying the
+ * given @directory.
+ **/
+void
+thunar_application_open_window (ThunarApplication *application,
+                                ThunarFile        *directory,
+                                GdkScreen         *screen)
+{
+  GtkWidget *window;
+
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (THUNAR_IS_FILE (directory));
+  g_return_if_fail (screen == NULL || GDK_IS_SCREEN (screen));
+
+  if (G_UNLIKELY (screen == NULL))
+    screen = gdk_screen_get_default ();
+
+  /* allocate the window */
+  window = g_object_new (THUNAR_TYPE_WINDOW,
+                         "screen", screen,
+                         NULL);
+
+  /* hook up the window */
+  g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (thunar_application_window_destroyed), application);
+  application->windows = g_list_prepend (application->windows, window);
+
+  /* show the new window */
+  gtk_widget_show (window);
+
+  /* change the directory */
+  thunar_window_set_current_directory (THUNAR_WINDOW (window), directory);
+}
+
+
+
+/**
+ * thunar_application_copy_into:
+ * @application       : a #ThunarApplication.
+ * @widget            : the associated widget or %NULL.
+ * @source_path_list  : the list of #ThunarVfsPath<!---->s that should be copied.
+ * @target_path       : the #ThunarVfsPath to the target directory.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Copies all files referenced by the @source_path_list to the directory
+ * referenced by @target_path. This method takes care of all user interaction.
+ **/
+void
+thunar_application_copy_into (ThunarApplication *application,
+                              GtkWidget         *widget,
+                              GList             *source_path_list,
+                              ThunarVfsPath     *target_path,
+                              GClosure          *new_files_closure)
+{
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+  g_return_if_fail (target_path != NULL);
+
+  /* collect the target paths and launch the job */
+  thunar_application_collect_and_launch (application, widget, "stock_folder-copy",
+                                         _("Copying files..."), thunar_vfs_copy_files,
+                                         source_path_list, target_path, new_files_closure);
+}
+
+
+
+/**
+ * thunar_application_link_into:
+ * @application       : a #ThunarApplication.
+ * @widget            : the associated #GtkWidget or %NULL.
+ * @source_path_list  : the list of #ThunarVfsPath<!---->s that should be symlinked.
+ * @target_path       : the target directory.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Symlinks all files referenced by the @source_path_list to the directory
+ * referenced by @target_path. This method takes care of all user
+ * interaction.
+ **/
+void
+thunar_application_link_into (ThunarApplication *application,
+                              GtkWidget         *widget,
+                              GList             *source_path_list,
+                              ThunarVfsPath     *target_path,
+                              GClosure          *new_files_closure)
+{
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+  g_return_if_fail (target_path != NULL);
+
+  /* collect the target paths and launch the job */
+  thunar_application_collect_and_launch (application, widget, "stock_link",
+                                         _("Creating symbolic links..."),
+                                         thunar_vfs_link_files, source_path_list,
+                                         target_path, new_files_closure);
+}
+
+
+
+/**
+ * thunar_application_move_into:
+ * @application       : a #ThunarApplication.
+ * @widget            : the associated #GtkWidget or %NULL.
+ * @source_path_list  : the list of #ThunarVfsPath<!---->s that should be moved.
+ * @target_path       : the target directory.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Moves all files referenced by the @source_path_list to the directory
+ * referenced by @target_path. This method takes care of all user
+ * interaction.
+ **/
+void
+thunar_application_move_into (ThunarApplication *application,
+                              GtkWidget         *widget,
+                              GList             *source_path_list,
+                              ThunarVfsPath     *target_path,
+                              GClosure          *new_files_closure)
+{
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+  g_return_if_fail (target_path != NULL);
+
+  /* launch the operation */
+  thunar_application_collect_and_launch (application, widget, "stock_folder-move",
+                                         _("Moving files..."), thunar_vfs_move_files,
+                                         source_path_list, target_path, new_files_closure);
+}
+
+
+
+static ThunarVfsJob*
+unlink_stub (GList   *source_path_list,
+             GList   *target_path_list,
+             GError **error)
+{
+  return thunar_vfs_unlink_files (source_path_list, error);
+}
+
+
+
+/**
+ * thunar_application_unlink:
+ * @application : a #ThunarApplication.
+ * @widget      : the associated #GtkWidget or %NULL.
+ * @path_list   : the list of #ThunarVfsPath<!---->s that should be deleted.
+ *
+ * Deletes all files referenced by the @path_list and takes care of all user
+ * interaction.
+ **/
+void
+thunar_application_unlink (ThunarApplication *application,
+                           GtkWidget         *widget,
+                           GList             *path_list)
+{
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+
+  /* launch the operation */
+  thunar_application_launch (application, widget, "stock_delete",
+                              _("Deleting files..."), unlink_stub,
+                              path_list, path_list, NULL);
+}
+
+
+
+static ThunarVfsJob*
+mkdir_stub (GList   *source_path_list,
+            GList   *target_path_list,
+            GError **error)
+{
+  return thunar_vfs_make_directories (source_path_list, error);
+}
+
+
+
+/**
+ * thunar_application_mkdir:
+ * @application       : a #ThunarApplication.
+ * @widget            : the associated #GtkWidget or %NULL.
+ * @path_list         : the list of directories to create.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Creates all directories referenced by the @path_list. This method takes care of all user
+ * interaction.
+ **/
+void
+thunar_application_mkdir (ThunarApplication *application,
+                          GtkWidget         *widget,
+                          GList             *path_list,
+                          GClosure          *new_files_closure)
+{
+  g_return_if_fail (THUNAR_IS_APPLICATION (application));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+
+  /* launch the operation */
+  thunar_application_launch (application, widget, "stock_folder",
+                             _("Creating directories..."), mkdir_stub,
+                             path_list, path_list, new_files_closure);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-application.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,77 @@
+/* $Id: thunar-application.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ * Copyright (c) 2005 Jeff Franks <jcfranks at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_APPLICATION_H__
+#define __THUNAR_APPLICATION_H__
+
+#include <thunar/thunar-window.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarApplicationClass ThunarApplicationClass;
+typedef struct _ThunarApplication      ThunarApplication;
+
+#define THUNAR_TYPE_APPLICATION             (thunar_application_get_type ())
+#define THUNAR_APPLICATION(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_APPLICATION, ThunarApplication))
+#define THUNAR_APPLICATION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_APPLICATION, ThunarApplicationClass))
+#define THUNAR_IS_APPLICATION(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_APPLICATION))
+#define THUNAR_IS_APPLICATION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_APPLICATION))
+#define THUNAR_APPLICATION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_APPLICATION, ThunarApplicationClass))
+
+GType              thunar_application_get_type      (void) G_GNUC_CONST;
+
+ThunarApplication *thunar_application_get           (void);
+
+GList             *thunar_application_get_windows   (ThunarApplication *application);
+
+void               thunar_application_open_window   (ThunarApplication *application,
+                                                     ThunarFile        *directory,
+                                                     GdkScreen         *screen);
+
+void               thunar_application_copy_into     (ThunarApplication *application,
+                                                     GtkWidget         *widget,
+                                                     GList             *source_path_list,
+                                                     ThunarVfsPath     *target_path,
+                                                     GClosure          *new_files_closure);
+
+void               thunar_application_link_into     (ThunarApplication *application,
+                                                     GtkWidget         *widget,
+                                                     GList             *source_path_list,
+                                                     ThunarVfsPath     *target_path,
+                                                     GClosure          *new_files_closure);
+
+void               thunar_application_move_into     (ThunarApplication *application,
+                                                     GtkWidget         *widget,
+                                                     GList             *source_path_list,
+                                                     ThunarVfsPath     *target_path,
+                                                     GClosure          *new_files_closure);
+
+void               thunar_application_unlink        (ThunarApplication *application,
+                                                     GtkWidget         *widget,
+                                                     GList             *path_list);
+
+void               thunar_application_mkdir         (ThunarApplication *application,
+                                                     GtkWidget         *widget,
+                                                     GList             *path_list,
+                                                     GClosure          *new_files_closure);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_APPLICATION_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,939 @@
+/* $Id: thunar-chooser-dialog.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-chooser-dialog.h>
+#include <thunar/thunar-chooser-model.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-icon-factory.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_FILE,
+  PROP_OPEN,
+};
+
+
+
+static void     thunar_chooser_dialog_class_init      (ThunarChooserDialogClass *klass);
+static void     thunar_chooser_dialog_init            (ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_dispose         (GObject                  *object);
+static void     thunar_chooser_dialog_get_property    (GObject                  *object,
+                                                       guint                     prop_id,
+                                                       GValue                   *value,
+                                                       GParamSpec               *pspec);
+static void     thunar_chooser_dialog_set_property    (GObject                  *object,
+                                                       guint                     prop_id,
+                                                       const GValue             *value,
+                                                       GParamSpec               *pspec);
+static void     thunar_chooser_dialog_realize         (GtkWidget                *widget);
+static void     thunar_chooser_dialog_response        (GtkDialog                *widget,
+                                                       gint                      response);
+static gboolean thunar_chooser_dialog_selection_func  (GtkTreeSelection         *selection,
+                                                       GtkTreeModel             *model,
+                                                       GtkTreePath              *path,
+                                                       gboolean                  path_currently_selected,
+                                                       gpointer                  user_data);
+static void     thunar_chooser_dialog_update_accept   (ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_update_header   (ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_browse          (GtkWidget                *button,
+                                                       ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_notify_expanded (GtkExpander              *expander,
+                                                       GParamSpec               *pspec,
+                                                       ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_notify_loading  (ThunarChooserModel       *model,
+                                                       GParamSpec               *pspec,
+                                                       ThunarChooserDialog      *dialog);
+static void     thunar_chooser_dialog_row_activated   (GtkTreeView              *treeview,
+                                                       GtkTreePath              *path,
+                                                       GtkTreeViewColumn        *column,
+                                                       ThunarChooserDialog      *dialog);
+
+
+
+struct _ThunarChooserDialogClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarChooserDialog
+{
+  GtkDialog __parent__;
+
+  ThunarFile *file;
+  gboolean    open;
+
+  GtkWidget  *header_image;
+  GtkWidget  *header_label;
+  GtkWidget  *tree_view;
+  GtkWidget  *custom_expander;
+  GtkWidget  *custom_entry;
+  GtkWidget  *cancel_button;
+  GtkWidget  *accept_button;
+};
+
+
+
+G_DEFINE_TYPE (ThunarChooserDialog, thunar_chooser_dialog, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_chooser_dialog_class_init (ThunarChooserDialogClass *klass)
+{
+  GtkDialogClass *gtkdialog_class;
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_chooser_dialog_dispose;
+  gobject_class->get_property = thunar_chooser_dialog_get_property;
+  gobject_class->set_property = thunar_chooser_dialog_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->realize = thunar_chooser_dialog_realize;
+
+  gtkdialog_class = GTK_DIALOG_CLASS (klass);
+  gtkdialog_class->response = thunar_chooser_dialog_response;
+
+  /**
+   * ThunarChooserDialog::file:
+   *
+   * The #ThunarFile for which an application should be chosen.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("The file for which an application should be chosen"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarChooserDialog::open:
+   *
+   * Whether the chooser should open the specified file.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_OPEN,
+                                   g_param_spec_boolean ("open",
+                                                         _("Open"),
+                                                         _("Whether the chooser should open the specified file"),
+                                                         FALSE,
+                                                         G_PARAM_CONSTRUCT | EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_chooser_dialog_init (ThunarChooserDialog *dialog)
+{
+  GtkTreeViewColumn *column;
+  GtkTreeSelection  *selection;
+  GtkCellRenderer   *renderer;
+  GtkWidget         *header;
+  GtkWidget         *button;
+  GtkWidget         *image;
+  GtkWidget         *hbox;
+  GtkWidget         *vbox;
+  GtkWidget         *box;
+  GtkWidget         *swin;
+
+  /* setup basic window properties */
+  gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+  gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+  gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+  gtk_window_set_title (GTK_WINDOW (dialog), _("Open With"));
+
+  /* create the main widget box */
+  vbox = g_object_new (GTK_TYPE_VBOX, "border-width", 6, "spacing", 12, NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, TRUE, TRUE, 0);
+  gtk_widget_show (vbox);
+
+  /* create the header box */
+  header = gtk_hbox_new (FALSE, 6);
+  gtk_box_pack_start (GTK_BOX (vbox), header, FALSE, FALSE, 0);
+  gtk_widget_show (header);
+
+  /* create the header image */
+  dialog->header_image = gtk_image_new ();
+  gtk_box_pack_start (GTK_BOX (header), dialog->header_image, FALSE, FALSE, 0);
+  gtk_widget_show (dialog->header_image);
+
+  /* create the header label */
+  dialog->header_label = gtk_label_new ("");
+  gtk_misc_set_alignment (GTK_MISC (dialog->header_label), 0.0f, 0.5f);
+  gtk_label_set_line_wrap (GTK_LABEL (dialog->header_label), TRUE);
+  gtk_widget_set_size_request (dialog->header_label, 350, -1);
+  gtk_box_pack_start (GTK_BOX (header), dialog->header_label, FALSE, FALSE, 0);
+  gtk_widget_show (dialog->header_label);
+
+  /* create the view box */
+  box = gtk_vbox_new (FALSE, 6);
+  gtk_box_pack_start (GTK_BOX (vbox), box, TRUE, TRUE, 0);
+  gtk_widget_show (box);
+
+  /* create the scrolled window for the tree view */
+  swin = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_size_request (swin, -1, 275);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swin), GTK_SHADOW_IN);
+  gtk_box_pack_start (GTK_BOX (box), swin, TRUE, TRUE, 0);
+  gtk_widget_show (swin);
+
+  /* create the tree view */
+  dialog->tree_view = g_object_new (GTK_TYPE_TREE_VIEW, "headers-visible", FALSE, NULL);
+  g_signal_connect (G_OBJECT (dialog->tree_view), "row-activated", G_CALLBACK (thunar_chooser_dialog_row_activated), dialog);
+  gtk_container_add (GTK_CONTAINER (swin), dialog->tree_view);
+  gtk_widget_show (dialog->tree_view);
+
+  /* append the tree view column */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN, "expand", TRUE, NULL);
+  renderer = gtk_cell_renderer_pixbuf_new ();
+  gtk_tree_view_column_pack_start (column, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "pixbuf", THUNAR_CHOOSER_MODEL_COLUMN_ICON,
+                                       NULL);
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "style", THUNAR_CHOOSER_MODEL_COLUMN_STYLE,
+                                       "style-set", THUNAR_CHOOSER_MODEL_COLUMN_STYLE_SET,
+                                       "text", THUNAR_CHOOSER_MODEL_COLUMN_NAME,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_CHOOSER_MODEL_COLUMN_NAME);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->tree_view), column);
+
+  /* create the "Custom command" expand */
+  dialog->custom_expander = gtk_expander_new_with_mnemonic (_("Use a _custom command:"));
+  exo_binding_new_with_negation (G_OBJECT (dialog->custom_expander), "expanded", G_OBJECT (dialog->tree_view), "sensitive");
+  g_signal_connect (G_OBJECT (dialog->custom_expander), "notify::expanded", G_CALLBACK (thunar_chooser_dialog_notify_expanded), dialog);
+  gtk_box_pack_start (GTK_BOX (box), dialog->custom_expander, FALSE, FALSE, 0);
+  gtk_widget_show (dialog->custom_expander);
+
+  /* create the "Custom command" box */
+  hbox = gtk_hbox_new (FALSE, 6);
+  gtk_container_add (GTK_CONTAINER (dialog->custom_expander), hbox);
+  gtk_widget_show (hbox);
+
+  /* create the "Custom command" entry */
+  dialog->custom_entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  g_signal_connect_swapped (G_OBJECT (dialog->custom_entry), "changed", G_CALLBACK (thunar_chooser_dialog_update_accept), dialog);
+  gtk_box_pack_start (GTK_BOX (hbox), dialog->custom_entry, TRUE, TRUE, 0);
+  gtk_widget_show (dialog->custom_entry);
+
+  /* create the "Custom command" button */
+  button = gtk_button_new_with_mnemonic (_("_Browse"));
+  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (thunar_chooser_dialog_browse), dialog);
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+  gtk_widget_show (button);
+
+  /* create the image for the browse button */
+  image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON);
+  gtk_button_set_image (GTK_BUTTON (button), image);
+  gtk_widget_show (image);
+
+  /* add the "Cancel" button */
+  dialog->cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+  /* add the "Ok"/"Open" button */
+  dialog->accept_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
+  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, FALSE);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+
+  /* update the "Ok"/"Open" button whenever the tree selection changes */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+  gtk_tree_selection_set_select_function (selection, thunar_chooser_dialog_selection_func, dialog, NULL);
+  g_signal_connect_swapped (G_OBJECT (selection), "changed", G_CALLBACK (thunar_chooser_dialog_update_accept), dialog);
+}
+
+
+
+static void
+thunar_chooser_dialog_dispose (GObject *object)
+{
+  ThunarChooserDialog *dialog = THUNAR_CHOOSER_DIALOG (object);
+
+  /* drop the reference on the file */
+  thunar_chooser_dialog_set_file (dialog, NULL);
+
+  (*G_OBJECT_CLASS (thunar_chooser_dialog_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_chooser_dialog_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  ThunarChooserDialog *dialog = THUNAR_CHOOSER_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      g_value_set_object (value, thunar_chooser_dialog_get_file (dialog));
+      break;
+
+    case PROP_OPEN:
+      g_value_set_boolean (value, thunar_chooser_dialog_get_open (dialog));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_chooser_dialog_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  ThunarChooserDialog *dialog = THUNAR_CHOOSER_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      thunar_chooser_dialog_set_file (dialog, g_value_get_object (value));
+      break;
+
+    case PROP_OPEN:
+      thunar_chooser_dialog_set_open (dialog, g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_chooser_dialog_realize (GtkWidget *widget)
+{
+  ThunarChooserDialog *dialog = THUNAR_CHOOSER_DIALOG (widget);
+  GtkTreeModel        *model;
+  GdkCursor           *cursor;
+
+  /* let the GtkWindow class realize the dialog */
+  (*GTK_WIDGET_CLASS (thunar_chooser_dialog_parent_class)->realize) (widget);
+
+  /* update the dialog header */
+  thunar_chooser_dialog_update_header (dialog);
+
+  /* setup a watch cursor if we're currently loading the model */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->tree_view));
+  if (thunar_chooser_model_get_loading (THUNAR_CHOOSER_MODEL (model)))
+    {
+      cursor = gdk_cursor_new (GDK_WATCH);
+      gdk_window_set_cursor (widget->window, cursor);
+      gdk_cursor_unref (cursor);
+    }
+}
+
+
+
+static void
+thunar_chooser_dialog_response (GtkDialog *widget,
+                                gint       response)
+{
+  ThunarVfsMimeApplication *application = NULL;
+  ThunarVfsMimeDatabase    *mime_database;
+  ThunarChooserDialog      *dialog = THUNAR_CHOOSER_DIALOG (widget);
+  ThunarVfsMimeInfo        *mime_info;
+  GtkTreeSelection         *selection;
+  GtkTreeModel             *model;
+  GtkTreeIter               iter;
+  const gchar              *exec;
+  gboolean                  succeed;
+  GError                   *error = NULL;
+  gchar                    *path;
+  gchar                    *name;
+  gchar                    *s;
+  GList                     list;
+
+  /* no special processing for non-accept responses */
+  if (G_UNLIKELY (response != GTK_RESPONSE_ACCEPT))
+    return;
+
+  /* grab a reference on the mime database */
+  mime_database = thunar_vfs_mime_database_get_default ();
+
+  /* determine the mime info for the file */
+  mime_info = thunar_file_get_mime_info (dialog->file);
+
+  /* determine the application that was chosen by the user */
+  if (!gtk_expander_get_expanded (GTK_EXPANDER (dialog->custom_expander)))
+    {
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+      if (gtk_tree_selection_get_selected (selection, &model, &iter))
+        gtk_tree_model_get (model, &iter, THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION, &application, -1);
+    }
+  else
+    {
+      /* determine the command line for the custom command */
+      exec = gtk_entry_get_text (GTK_ENTRY (dialog->custom_entry));
+
+      /* determine the path for the custom command */
+      path = g_strdup (exec);
+      s = strchr (path, ' ');
+      if (G_UNLIKELY (s != NULL))
+        *s = '\0';
+
+      /* determine the name from the path of the custom command */
+      name = g_path_get_basename (path);
+
+      /* try to add an application for the custom command */
+      application = thunar_vfs_mime_database_add_application (mime_database, mime_info, name, exec, &error);
+
+      /* verify the application */
+      if (G_UNLIKELY (application == NULL))
+        {
+          /* display an error to the user */
+          thunar_dialogs_show_error (GTK_WIDGET (dialog), error, _("Failed to add new application `%s'"), name);
+
+          /* release the error */
+          g_error_free (error);
+        }
+
+      /* cleanup */
+      g_free (path);
+      g_free (name);
+    }
+
+  /* verify that we have a valid application */
+  if (G_UNLIKELY (application == NULL))
+    goto cleanup;
+
+  /* remember the application as default for these kind of file */
+  succeed = thunar_vfs_mime_database_set_default_application (mime_database, mime_info, application, &error);
+
+  /* verify that we were successfull */
+  if (G_UNLIKELY (!succeed))
+    {
+      /* display an error to the user */
+      thunar_dialogs_show_error (GTK_WIDGET (dialog), error, _("Failed to set default application for `%s'"),
+                                 thunar_file_get_display_name (dialog->file));
+
+      /* release the error */
+      g_error_free (error);
+    }
+  else if (G_LIKELY (dialog->open))
+    {
+      /* open the file using the specified application */
+      list.data = thunar_file_get_path (dialog->file); list.next = list.prev = NULL;
+      if (!thunar_vfs_mime_application_exec (application, gtk_widget_get_screen (GTK_WIDGET (dialog)), &list, &error))
+        {
+          /* display an error to the user */
+          thunar_dialogs_show_error (GTK_WIDGET (dialog), error, _("Failed to execute `%s'"),
+                                     thunar_vfs_mime_application_get_name (application));
+
+          /* release the error */
+          g_error_free (error);
+        }
+    }
+
+  /* cleanup */
+  thunar_vfs_mime_application_unref (application);
+cleanup:
+  g_object_unref (G_OBJECT (mime_database));
+}
+
+
+
+static gboolean
+thunar_chooser_dialog_selection_func (GtkTreeSelection *selection,
+                                      GtkTreeModel     *model,
+                                      GtkTreePath      *path,
+                                      gboolean          path_currently_selected,
+                                      gpointer          user_data)
+{
+  GtkTreeIter iter;
+  gboolean    permitted = TRUE;
+  GValue      value = { 0, };
+
+  /* we can always change the selection if the path is already selected */
+  if (G_UNLIKELY (!path_currently_selected))
+    {
+      /* check if there's an application for the path */
+      gtk_tree_model_get_iter (model, &iter, path);
+      gtk_tree_model_get_value (model, &iter, THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION, &value);
+      permitted = (g_value_get_boxed (&value) != NULL);
+      g_value_unset (&value);
+    }
+
+  return permitted;
+}
+
+
+
+static void
+thunar_chooser_dialog_update_accept (ThunarChooserDialog *dialog)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreeIter       iter;
+  const gchar      *text;
+  gboolean          sensitive = FALSE;
+  GValue            value = { 0, };
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+
+  if (gtk_expander_get_expanded (GTK_EXPANDER (dialog->custom_expander)))
+    {
+      /* check if the user entered a valid custom command */
+      text = gtk_entry_get_text (GTK_ENTRY (dialog->custom_entry));
+      sensitive = (text != NULL && *text != '\0');
+    }
+  else
+    {
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+      if (gtk_tree_selection_get_selected (selection, &model, &iter))
+        {
+          /* check if the selected row refers to a valid application */
+          gtk_tree_model_get_value (model, &iter, THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION, &value);
+          sensitive = (g_value_get_boxed (&value) != NULL);
+          g_value_unset (&value);
+        }
+    }
+
+  /* update the "Ok"/"Open" button sensitivity */
+  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT, sensitive);
+}
+
+
+
+static void
+thunar_chooser_dialog_update_header (ThunarChooserDialog *dialog)
+{
+  ThunarVfsMimeInfo *mime_info;
+  ThunarIconFactory *icon_factory;
+  GtkIconTheme      *icon_theme;
+  const gchar       *icon_name;
+  GdkPixbuf         *icon;
+  gchar             *text;
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+  g_return_if_fail (GTK_WIDGET_REALIZED (dialog));
+
+  /* check if we have a valid file set */
+  if (G_UNLIKELY (dialog->file == NULL))
+    {
+#if GTK_CHECK_VERSION(2,8,0)
+      gtk_image_clear (GTK_IMAGE (dialog->header_image));
+#endif
+      gtk_label_set_text (GTK_LABEL (dialog->header_label), NULL);
+    }
+  else
+    {
+      /* determine the mime info for the file */
+      mime_info = thunar_file_get_mime_info (dialog->file);
+
+      /* determine the icon theme/factory for the widget */
+      icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (dialog)));
+      icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+      /* update the header image with the icon for the mime type */
+      icon_name = thunar_vfs_mime_info_lookup_icon_name (mime_info, icon_theme);
+      icon = thunar_icon_factory_load_icon (icon_factory, icon_name, 48, NULL, FALSE);
+      gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->header_image), icon);
+      if (G_LIKELY (icon != NULL))
+        g_object_unref (G_OBJECT (icon));
+
+      /* update the header label */
+      text = g_strdup_printf (_("Open <i>%s</i> and other files of type \"%s\" with:"),
+                              thunar_file_get_display_name (dialog->file),
+                              thunar_vfs_mime_info_get_comment (mime_info));
+      gtk_label_set_markup (GTK_LABEL (dialog->header_label), text);
+      g_free (text);
+
+      /* cleanup */
+      g_object_unref (G_OBJECT (icon_factory));
+    }
+}
+
+
+
+static void
+thunar_chooser_dialog_browse (GtkWidget           *button,
+                              ThunarChooserDialog *dialog)
+{
+  GtkFileFilter *filter;
+  GtkWidget     *chooser;
+  gchar         *filename;
+  gchar         *s;
+
+  chooser = gtk_file_chooser_dialog_new (_("Select an Application"),
+                                         GTK_WINDOW (dialog),
+                                         GTK_FILE_CHOOSER_ACTION_OPEN,
+                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                         NULL);
+  gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
+
+  /* add file chooser filters */
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("All Files"));
+  gtk_file_filter_add_pattern (filter, "*");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Executable Files"));
+  gtk_file_filter_add_mime_type (filter, "application/x-csh");
+  gtk_file_filter_add_mime_type (filter, "application/x-executable");
+  gtk_file_filter_add_mime_type (filter, "application/x-perl");
+  gtk_file_filter_add_mime_type (filter, "application/x-python");
+  gtk_file_filter_add_mime_type (filter, "application/x-ruby");
+  gtk_file_filter_add_mime_type (filter, "application/x-shellscript");
+  gtk_file_filter_add_pattern (filter, "*.pl");
+  gtk_file_filter_add_pattern (filter, "*.py");
+  gtk_file_filter_add_pattern (filter, "*.rb");
+  gtk_file_filter_add_pattern (filter, "*.sh");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+  gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Perl Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-perl");
+  gtk_file_filter_add_pattern (filter, "*.pl");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Python Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-python");
+  gtk_file_filter_add_pattern (filter, "*.py");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Ruby Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-ruby");
+  gtk_file_filter_add_pattern (filter, "*.rb");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  filter = gtk_file_filter_new ();
+  gtk_file_filter_set_name (filter, _("Shell Scripts"));
+  gtk_file_filter_add_mime_type (filter, "application/x-csh");
+  gtk_file_filter_add_mime_type (filter, "application/x-shellscript");
+  gtk_file_filter_add_pattern (filter, "*.sh");
+  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+  /* use the bindir as default folder */
+  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), BINDIR);
+
+  /* setup the currently selected file */
+  filename = gtk_editable_get_chars (GTK_EDITABLE (dialog->custom_entry), 0, -1);
+  if (G_LIKELY (filename != NULL))
+    {
+      /* use only the first argument */
+      s = strchr (filename, ' ');
+      if (G_UNLIKELY (s != NULL))
+        *s = '\0';
+
+      if (G_LIKELY (*filename != '\0'))
+        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), filename);
+      g_free (filename);
+    }
+
+  /* run the chooser dialog */
+  if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_ACCEPT)
+    {
+      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+      gtk_entry_set_text (GTK_ENTRY (dialog->custom_entry), filename);
+      g_free (filename);
+    }
+
+  gtk_widget_destroy (chooser);
+}
+
+
+
+static void
+thunar_chooser_dialog_notify_expanded (GtkExpander         *expander,
+                                       GParamSpec          *pspec,
+                                       ThunarChooserDialog *dialog)
+{
+  GtkTreeSelection *selection;
+
+  g_return_if_fail (GTK_IS_EXPANDER (expander));
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+
+  /* clear the application selection whenever the expander
+   * is expanded to avoid confusion for the user.
+   */
+  if (gtk_expander_get_expanded (expander))
+    {
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
+      gtk_tree_selection_unselect_all (selection);
+    }
+
+  /* update the sensitivity of the "Ok"/"Open" button */
+  thunar_chooser_dialog_update_accept (dialog);
+}
+
+
+
+static void
+thunar_chooser_dialog_notify_loading (ThunarChooserModel  *model,
+                                      GParamSpec          *pspec,
+                                      ThunarChooserDialog *dialog)
+{
+  GtkTreePath *path;
+  GtkTreeIter  iter;
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_MODEL (model));
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+
+  /* expand the first tree view row (the recommended applications) */
+  if (G_LIKELY (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter)))
+    {
+      path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
+      gtk_tree_view_expand_to_path (GTK_TREE_VIEW (dialog->tree_view), path);
+      gtk_tree_path_free (path);
+    }
+
+  /* reset the cursor */
+  if (G_LIKELY (GTK_WIDGET_REALIZED (dialog)))
+    gdk_window_set_cursor (GTK_WIDGET (dialog)->window, NULL);
+
+  /* grab focus to the tree view widget */
+  if (G_LIKELY (GTK_WIDGET_REALIZED (dialog->tree_view)))
+    gtk_widget_grab_focus (dialog->tree_view);
+}
+
+
+
+static void
+thunar_chooser_dialog_row_activated (GtkTreeView         *treeview,
+                                     GtkTreePath         *path,
+                                     GtkTreeViewColumn   *column,
+                                     ThunarChooserDialog *dialog)
+{
+  GtkTreeModel *model;
+  GtkTreeIter   iter;
+  GValue        value = { 0, };
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+  g_return_if_fail (GTK_IS_TREE_VIEW (treeview));
+
+  /* determine the current chooser model */
+  model = gtk_tree_view_get_model (treeview);
+  if (G_UNLIKELY (model == NULL))
+    return;
+
+  /* determine the application for the tree path */
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_get_value (model, &iter, THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION, &value);
+
+  /* check if the row refers to a valid application */
+  if (G_LIKELY (g_value_get_boxed (&value) != NULL))
+    {
+      /* emit the accept dialog response */
+      gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+    }
+  else if (gtk_tree_view_row_expanded (treeview, path))
+    {
+      /* collapse the path that were double clicked */
+      gtk_tree_view_collapse_row (treeview, path);
+    }
+  else
+    {
+      /* expand the path that were double clicked */
+      gtk_tree_view_expand_to_path (treeview, path);
+    }
+
+  /* cleanup */
+  g_value_unset (&value);
+}
+
+
+
+/**
+ * thunar_chooser_dialog_new:
+ * @parent : transient parent of the dialog or %NULL.
+ * @file   : the #ThunarFile for which an application should be chosen.
+ * @open   : whether to also open the @file.
+ *
+ * Allocates a new #ThunarChooserDialog with the given parameters.
+ *
+ * Return value: the newly allocated #ThunarChooserDialog.
+ **/
+GtkWidget*
+thunar_chooser_dialog_new (GtkWindow  *parent,
+                           ThunarFile *file,
+                           gboolean    open)
+{
+  GtkWidget *dialog;
+
+  g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  dialog = g_object_new (THUNAR_TYPE_CHOOSER_DIALOG,
+                         "file", file,
+                         "open", open,
+                         NULL);
+
+  if (G_LIKELY (parent != NULL))
+    gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
+  return dialog;
+}
+
+
+
+/**
+ * thunar_chooser_dialog_get_file:
+ * @dialog : a #ThunarChooserDialog.
+ *
+ * Returns the #ThunarFile currently associated with @dialog or
+ * %NULL if there's no such association.
+ *
+ * Return value: the #ThunarFile associated with @dialog.
+ **/
+ThunarFile*
+thunar_chooser_dialog_get_file (ThunarChooserDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog), NULL);
+  return dialog->file;
+}
+
+
+
+/**
+ * thunar_chooser_dialog_set_file:
+ * @dialog : a #ThunarChooserDialog.
+ * @file   : a #ThunarFile or %NULL.
+ *
+ * Associates @dialog with @file.
+ **/
+void
+thunar_chooser_dialog_set_file (ThunarChooserDialog *dialog,
+                                ThunarFile          *file)
+{
+  ThunarChooserModel *model;
+  ThunarVfsMimeInfo  *mime_info;
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+  g_return_if_fail (file == NULL || THUNAR_IS_FILE (file));
+
+  /* disconnect from the previous file */
+  if (G_LIKELY (dialog->file != NULL))
+    {
+      /* unset the chooser model */
+      gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view), NULL);
+
+      /* disconnect us from the file */
+      g_signal_handlers_disconnect_by_func (G_OBJECT (dialog->file), gtk_widget_destroy, dialog);
+      thunar_file_unwatch (THUNAR_FILE (dialog->file));
+      g_object_unref (G_OBJECT (dialog->file));
+    }
+
+  /* activate the new file */
+  dialog->file = file;
+
+  /* connect to the new file */
+  if (G_LIKELY (file != NULL))
+    {
+      /* take a reference on the file */
+      g_object_ref (G_OBJECT (file));
+
+      /* watch the file for changes */
+      thunar_file_watch (dialog->file);
+
+      /* destroy the chooser dialog if the file is deleted */
+      g_signal_connect_swapped (G_OBJECT (file), "destroy", G_CALLBACK (gtk_widget_destroy), dialog);
+
+      /* allocate the new chooser model */
+      mime_info = thunar_file_get_mime_info (file);
+      model = thunar_chooser_model_new (mime_info);
+      gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view), GTK_TREE_MODEL (model));
+      g_signal_connect (G_OBJECT (model), "notify::loading", G_CALLBACK (thunar_chooser_dialog_notify_loading), dialog);
+      g_object_unref (G_OBJECT (model));
+    }
+
+  /* update the header */
+  if (GTK_WIDGET_REALIZED (dialog))
+    thunar_chooser_dialog_update_header (dialog);
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (dialog), "file");
+}
+
+
+
+/**
+ * thunar_chooser_dialog_get_open:
+ * @dialog : a #ThunarChooserDialog.
+ *
+ * Tells whether the chooser @dialog should open the file.
+ *
+ * Return value: %TRUE if @dialog should open the file.
+ **/
+gboolean
+thunar_chooser_dialog_get_open (ThunarChooserDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog), FALSE);
+  return dialog->open;
+}
+
+
+
+/**
+ * thunar_chooser_dialog_set_open:
+ * @dialog : a #ThunarChooserDialog.
+ * @open   : %TRUE if the chooser @dialog should open the file.
+ *
+ * Sets whether the chooser @dialog should open the file.
+ **/
+void
+thunar_chooser_dialog_set_open (ThunarChooserDialog *dialog,
+                                gboolean             open)
+{
+  g_return_if_fail (THUNAR_IS_CHOOSER_DIALOG (dialog));
+
+  /* apply the new state */
+  dialog->open = open;
+
+  /* change the accept button label text */
+  gtk_button_set_label (GTK_BUTTON (dialog->accept_button), open ? GTK_STOCK_OPEN : GTK_STOCK_OK);
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (dialog), "open");
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-dialog.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,53 @@
+/* $Id: thunar-chooser-dialog.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_CHOOSER_DIALOG_H__
+#define __THUNAR_CHOOSER_DIALOG_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarChooserDialogClass ThunarChooserDialogClass;
+typedef struct _ThunarChooserDialog      ThunarChooserDialog;
+
+#define THUNAR_TYPE_CHOOSER_DIALOG            (thunar_chooser_dialog_get_type ())
+#define THUNAR_CHOOSER_DIALOG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_CHOOSER_DIALOG, ThunarChooserDialog))
+#define THUNAR_CHOOSER_DIALOG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_CHOOSER_DIALOG, ThunarChooserDialogClass))
+#define THUNAR_IS_CHOOSER_DIALOG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_CHOOSER_DIALOG))
+#define THUNAR_IS_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_CHOOSER_DIALOG))
+#define THUNAR_CHOOSER_DIALOG_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_CHOOSER_DIALOG, ThunarChooserDialogClass))
+
+GType       thunar_chooser_dialog_get_type  (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_chooser_dialog_new       (GtkWindow           *parent,
+                                             ThunarFile          *file,
+                                             gboolean             open) G_GNUC_MALLOC;
+
+ThunarFile *thunar_chooser_dialog_get_file  (ThunarChooserDialog *dialog);
+void        thunar_chooser_dialog_set_file  (ThunarChooserDialog *dialog,
+                                             ThunarFile          *file);
+
+gboolean    thunar_chooser_dialog_get_open  (ThunarChooserDialog *dialog);
+void        thunar_chooser_dialog_set_open  (ThunarChooserDialog *dialog,
+                                             gboolean             open);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_CHOOSER_DIALOG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,599 @@
+/* $Id: thunar-chooser-model.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-chooser-model.h>
+#include <thunar/thunar-icon-factory.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_LOADING,
+  PROP_MIME_INFO,
+};
+
+
+
+static void     thunar_chooser_model_class_init     (ThunarChooserModelClass  *klass);
+static void     thunar_chooser_model_init           (ThunarChooserModel       *model);
+static void     thunar_chooser_model_finalize       (GObject                  *object);
+static void     thunar_chooser_model_get_property   (GObject                  *object,
+                                                     guint                     prop_id,
+                                                     GValue                   *value,
+                                                     GParamSpec               *pspec);
+static void     thunar_chooser_model_set_property   (GObject                  *object,
+                                                     guint                     prop_id,
+                                                     const GValue             *value,
+                                                     GParamSpec               *pspec);
+static void     thunar_chooser_model_append         (ThunarChooserModel       *model,
+                                                     const gchar              *title,
+                                                     const gchar              *icon_name,
+                                                     GList                    *applications);
+static void     thunar_chooser_model_import         (ThunarChooserModel       *model,
+                                                     GList                    *applications);
+static GList   *thunar_chooser_model_readdir        (ThunarChooserModel       *model,
+                                                     const gchar              *absdir,
+                                                     const gchar              *reldir);
+static gpointer thunar_chooser_model_thread         (gpointer                  user_data);
+static gboolean thunar_chooser_model_timer          (gpointer                  user_data);
+static void     thunar_chooser_model_timer_destroy  (gpointer                  user_data);
+
+
+
+
+struct _ThunarChooserModelClass
+{
+  GtkTreeStoreClass __parent__;
+};
+
+struct _ThunarChooserModel
+{
+  GtkTreeStore __parent__;
+
+  ThunarVfsMimeInfo *mime_info;
+
+  /* thread interaction */
+  gint               timer_id;
+  GThread           *thread;
+  volatile gboolean  finished;
+  volatile gboolean  cancelled;
+};
+
+
+
+G_DEFINE_TYPE (ThunarChooserModel, thunar_chooser_model, GTK_TYPE_TREE_STORE);
+
+
+
+static void
+thunar_chooser_model_class_init (ThunarChooserModelClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_chooser_model_finalize;
+  gobject_class->get_property = thunar_chooser_model_get_property;
+  gobject_class->set_property = thunar_chooser_model_set_property;
+
+  /**
+   * ThunarChooserModel::loading:
+   *
+   * Whether the contents of the #ThunarChooserModel are
+   * currently being loaded from disk.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LOADING,
+                                   g_param_spec_boolean ("loading",
+                                                         _("Loading"),
+                                                         _("Whether the model is currently being loaded"),
+                                                         FALSE,
+                                                         EXO_PARAM_READABLE));
+
+  /**
+   * ThunarChooserModel::mime-info:
+   *
+   * The #ThunarVfsMimeInfo info for the model.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_MIME_INFO,
+                                   g_param_spec_boxed ("mime-info",
+                                                       _("Mime info"),
+                                                       _("The mime info for the model"),
+                                                       THUNAR_VFS_TYPE_MIME_INFO,
+                                                       G_PARAM_CONSTRUCT_ONLY | EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_chooser_model_init (ThunarChooserModel *model)
+{
+  /* allocate the types array for the columns */
+  GType column_types[THUNAR_CHOOSER_MODEL_N_COLUMNS] =
+  {
+    G_TYPE_STRING,
+    GDK_TYPE_PIXBUF,
+    THUNAR_VFS_TYPE_MIME_APPLICATION,
+    PANGO_TYPE_STYLE,
+    G_TYPE_BOOLEAN,
+  };
+
+  /* register the column types */
+  gtk_tree_store_set_column_types (GTK_TREE_STORE (model), G_N_ELEMENTS (column_types), column_types);
+
+  /* start to load the applications installed on the system */
+  model->thread = g_thread_create (thunar_chooser_model_thread, model, TRUE, NULL);
+
+  /* start the timer to monitor the thread */
+  model->timer_id = g_timeout_add_full (G_PRIORITY_LOW, 200, thunar_chooser_model_timer,
+                                        model, thunar_chooser_model_timer_destroy);
+}
+
+
+
+static void
+thunar_chooser_model_finalize (GObject *object)
+{
+  ThunarChooserModel *model = THUNAR_CHOOSER_MODEL (object);
+  GList              *applications;
+
+  /* drop any pending timer */
+  if (G_UNLIKELY (model->timer_id >= 0))
+    g_source_remove (model->timer_id);
+
+  /* cancel the thread (if running) */
+  if (G_UNLIKELY (model->thread != NULL))
+    {
+      /* set the cancellation flag */
+      model->cancelled = TRUE;
+
+      /* join the thread */
+      applications = g_thread_join (model->thread);
+
+      /* ditch the returned application list */
+      g_list_foreach (applications, (GFunc) thunar_vfs_mime_application_unref, NULL);
+      g_list_free (applications);
+    }
+
+  /* drop the mime info (if any) */
+  if (G_LIKELY (model->mime_info != NULL))
+    thunar_vfs_mime_info_unref (model->mime_info);
+
+  (*G_OBJECT_CLASS (thunar_chooser_model_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_chooser_model_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  ThunarChooserModel *model = THUNAR_CHOOSER_MODEL (object);
+
+  switch (prop_id)
+    {
+    case PROP_LOADING:
+      g_value_set_boolean (value, thunar_chooser_model_get_loading (model));
+      break;
+
+    case PROP_MIME_INFO:
+      g_value_set_boxed (value, thunar_chooser_model_get_mime_info (model));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_chooser_model_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  ThunarChooserModel *model = THUNAR_CHOOSER_MODEL (object);
+
+  switch (prop_id)
+    {
+    case PROP_MIME_INFO:
+      if (G_LIKELY (model->mime_info == NULL))
+        model->mime_info = g_value_dup_boxed (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_chooser_model_append (ThunarChooserModel *model,
+                             const gchar        *title,
+                             const gchar        *icon_name,
+                             GList              *applications)
+{
+  ThunarIconFactory *icon_factory;
+  GtkIconTheme      *icon_theme;
+  GtkTreeIter        parent_iter;
+  GtkTreeIter        child_iter;
+  GdkPixbuf         *icon;
+  GList             *lp;
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_MODEL (model));
+  g_return_if_fail (title != NULL);
+  g_return_if_fail (icon_name != NULL);
+
+  /* query the default icon theme/factory */
+  icon_theme = gtk_icon_theme_get_default ();
+  icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+  /* insert the section title */
+  icon = gtk_icon_theme_load_icon (icon_theme, icon_name, 24, 0, NULL);
+  gtk_tree_store_append (GTK_TREE_STORE (model), &parent_iter, NULL);
+  gtk_tree_store_set (GTK_TREE_STORE (model), &parent_iter,
+                      THUNAR_CHOOSER_MODEL_COLUMN_NAME, title,
+                      THUNAR_CHOOSER_MODEL_COLUMN_ICON, icon,
+                      -1);
+  if (G_LIKELY (icon != NULL))
+    g_object_unref (G_OBJECT (icon));
+
+  /* check if we have any program items */
+  if (G_LIKELY (applications != NULL))
+    {
+      /* insert the program items */
+      for (lp = applications; lp != NULL; lp = lp->next)
+        {
+          /* determine the icon name for the application */
+          icon_name = thunar_vfs_mime_application_lookup_icon_name (lp->data, icon_theme);
+
+          /* try to load the themed icon for the program */
+          icon = thunar_icon_factory_load_icon (icon_factory, icon_name, 24, NULL, FALSE);
+
+          /* append the tree row with the program data */
+          gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &parent_iter);
+          gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
+                              THUNAR_CHOOSER_MODEL_COLUMN_NAME, thunar_vfs_mime_application_get_name (lp->data),
+                              THUNAR_CHOOSER_MODEL_COLUMN_ICON, icon,
+                              THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION, lp->data,
+                              -1);
+
+          /* release the icon (if any) */
+          if (G_LIKELY (icon != NULL))
+            g_object_unref (G_OBJECT (icon));
+        }
+    }
+  else
+    {
+      /* tell the user that we don't have any applications for this category */
+      gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &parent_iter);
+      gtk_tree_store_set (GTK_TREE_STORE (model), &child_iter,
+                          THUNAR_CHOOSER_MODEL_COLUMN_NAME, _("None available"),
+                          THUNAR_CHOOSER_MODEL_COLUMN_STYLE, PANGO_STYLE_ITALIC,
+                          THUNAR_CHOOSER_MODEL_COLUMN_STYLE_SET, TRUE,
+                          -1);
+    }
+
+  /* cleanup */
+  g_object_unref (G_OBJECT (icon_factory));
+}
+
+
+
+static void
+thunar_chooser_model_import (ThunarChooserModel *model,
+                             GList              *applications)
+{
+  ThunarVfsMimeDatabase *mime_database;
+  GList                 *recommended;
+  GList                 *other = NULL;
+  GList                 *lp;
+  GList                 *p;
+
+  g_return_if_fail (THUNAR_IS_CHOOSER_MODEL (model));
+  g_return_if_fail (model->mime_info != NULL);
+
+  /* determine the recommended applications for the mime info */
+  mime_database = thunar_vfs_mime_database_get_default ();
+  recommended = thunar_vfs_mime_database_get_applications (mime_database, model->mime_info);
+  g_object_unref (G_OBJECT (mime_database));
+
+  /* add all applications to other that are not already on recommended */
+  for (lp = applications; lp != NULL; lp = lp->next)
+    {
+      /* check if this application is already on the recommended list */
+      for (p = recommended; p != NULL; p = p->next)
+        if (thunar_vfs_mime_application_equal (p->data, lp->data))
+          break;
+
+      /* add to the list of other applications if it's not on recommended */
+      if (G_LIKELY (p == NULL))
+        other = g_list_append (other, lp->data);
+    }
+
+  /* append the "Recommended Applications:" category */
+  thunar_chooser_model_append (model, _("Recommended Applications:"), "gnome-settings-default-applications", recommended);
+
+  /* append the "Other Applications:" category */
+  thunar_chooser_model_append (model, _("Other Applications:"), "gnome-applications", other);
+
+  /* cleanup */
+  g_list_foreach (recommended, (GFunc) thunar_vfs_mime_application_unref, NULL);
+  g_list_free (recommended);
+  g_list_free (other);
+}
+
+
+
+static GList*
+thunar_chooser_model_readdir (ThunarChooserModel *model,
+                              const gchar        *absdir,
+                              const gchar        *reldir)
+{
+  ThunarVfsMimeApplication *application;
+  const gchar              *name;
+  GList                    *applications = NULL;
+  gchar                    *abspath;
+  gchar                    *relpath;
+  gchar                    *p;
+  GDir                     *dp;
+
+  g_return_val_if_fail (THUNAR_IS_CHOOSER_MODEL (model), NULL);
+  g_return_val_if_fail (reldir == NULL || !g_path_is_absolute (reldir), NULL);
+  g_return_val_if_fail (g_path_is_absolute (absdir), NULL);
+
+  /* try to open the directory */
+  dp = g_dir_open (absdir, 0, NULL);
+  if (G_LIKELY (dp != NULL))
+    {
+      /* process the files within the directory */
+      while (!model->cancelled)
+        {
+          /* read the next file entry */
+          name = g_dir_read_name (dp);
+          if (G_UNLIKELY (name == NULL))
+            break;
+
+          /* generate the absolute path to the file entry */
+          abspath = g_build_filename (absdir, name, NULL);
+
+          /* generate the relative path to the file entry */
+          relpath = (reldir != NULL) ? g_build_filename (reldir, name, NULL) : g_strdup (name);
+
+          /* check if we have a directory or a regular file here */
+          if (g_file_test (abspath, G_FILE_TEST_IS_DIR))
+            {
+              /* recurse for directories */
+              applications = g_list_concat (applications, thunar_chooser_model_readdir (model, abspath, relpath));
+            }
+          else if (g_file_test (abspath, G_FILE_TEST_IS_REGULAR) && g_str_has_suffix (name, ".desktop"))
+            {
+              /* generate the desktop-id from the relative path */
+              for (p = relpath; *p != '\0'; ++p)
+                if (*p == G_DIR_SEPARATOR)
+                  *p = '-';
+
+              /* try to load the application for the given desktop-id */
+              application = thunar_vfs_mime_application_new_from_file (abspath, relpath);
+
+              /* check if we have successfully loaded the application */
+              if (G_LIKELY (application != NULL))
+                {
+                  /* check if the application supports atleast one mime-type */
+                  if (thunar_vfs_mime_application_get_mime_types (application) != NULL)
+                    applications = g_list_append (applications, application);
+                  else
+                    thunar_vfs_mime_application_unref (application);
+                }
+            }
+
+          /* cleanup */
+          g_free (abspath);
+          g_free (relpath);
+        }
+
+      /* close the directory handle */
+      g_dir_close (dp);
+    }
+
+  return applications;
+}
+
+
+
+static gint
+compare_application_by_name (gconstpointer a,
+                             gconstpointer b)
+{
+  return strcmp (thunar_vfs_mime_application_get_name (a),
+                 thunar_vfs_mime_application_get_name (b));
+}
+
+
+
+static gpointer
+thunar_chooser_model_thread (gpointer user_data)
+{
+  ThunarChooserModel *model = THUNAR_CHOOSER_MODEL (user_data);
+  GList              *applications = NULL;
+  GList              *list;
+  GList              *lp;
+  GList              *p;
+  gchar             **paths;
+  guint               n;
+
+  /* determine the available applications/ directories */
+  paths = xfce_resource_lookup_all (XFCE_RESOURCE_DATA, "applications/");
+  for (n = 0; !model->cancelled && paths[n] != NULL; ++n)
+    {
+      /* lookup the applications in this directory */
+      list = thunar_chooser_model_readdir (model, paths[n], NULL);
+
+      /* merge the applications with what we already have */
+      for (lp = list; lp != NULL; lp = lp->next)
+        {
+          /* ignore hidden applications to be compatible with the Nautilus mess */
+          if ((thunar_vfs_mime_application_get_flags (lp->data) & THUNAR_VFS_MIME_APPLICATION_HIDDEN) != 0)
+            {
+              thunar_vfs_mime_application_unref (lp->data);
+              continue;
+            }
+
+          /* check if we have that application already */
+          for (p = applications; p != NULL; p = p->next)
+            {
+              /* compare the desktop-ids */
+              if (thunar_vfs_mime_application_equal (p->data, lp->data))
+                break;
+            }
+
+          /* no need to add if we have it already */
+          if (G_UNLIKELY (p != NULL))
+            {
+              thunar_vfs_mime_application_unref (lp->data);
+              continue;
+            }
+
+          /* insert the application into the list */
+          applications = g_list_insert_sorted (applications, lp->data, compare_application_by_name);
+        }
+      
+      /* free the temporary list */
+      g_list_free (list);
+    }
+  g_strfreev (paths);
+
+  /* tell the model that we're done */
+  model->finished = TRUE;
+
+  return applications;
+}
+
+
+
+static gboolean
+thunar_chooser_model_timer (gpointer user_data)
+{
+  ThunarChooserModel *model = THUNAR_CHOOSER_MODEL (user_data);
+  gboolean            finished;
+  GList              *applications;
+
+  /* check if the applications are loaded */
+  GDK_THREADS_ENTER ();
+  finished = model->finished;
+  if (G_LIKELY (finished))
+    {
+      /* grab the application list from the thread */
+      applications = g_thread_join (model->thread);
+      model->thread = NULL;
+
+      /* process the applications list */
+      thunar_chooser_model_import (model, applications);
+
+      /* tell everybody that the model is loaded */
+      g_object_notify (G_OBJECT (model), "loading");
+
+      /* free the application list */
+      g_list_foreach (applications, (GFunc) thunar_vfs_mime_application_unref, NULL);
+      g_list_free (applications);
+    }
+  GDK_THREADS_LEAVE ();
+
+  return !finished;
+}
+
+
+
+static void
+thunar_chooser_model_timer_destroy (gpointer user_data)
+{
+  THUNAR_CHOOSER_MODEL (user_data)->timer_id = -1;
+}
+
+
+
+/**
+ * thunar_chooser_model_new:
+ * @mime_info : a #ThunarVfsMimeInfo.
+ *
+ * Allocates a new #ThunarChooserModel for @mime_info.
+ *
+ * Return value: the newly allocated #ThunarChooserModel.
+ **/
+ThunarChooserModel*
+thunar_chooser_model_new (ThunarVfsMimeInfo *mime_info)
+{
+  return g_object_new (THUNAR_TYPE_CHOOSER_MODEL,
+                       "mime-info", mime_info,
+                       NULL);
+}
+
+
+
+/**
+ * thunar_chooser_model_get_loading:
+ * @model : a #ThunarChooserModel.
+ *
+ * Returns %TRUE if @model is currently being loaded.
+ *
+ * Return value: %TRUE if @model is currently being loaded.
+ **/
+gboolean
+thunar_chooser_model_get_loading (ThunarChooserModel *model)
+{
+  g_return_val_if_fail (THUNAR_IS_CHOOSER_MODEL (model), FALSE);
+  return (model->thread != NULL);
+}
+
+
+
+/**
+ * thunar_chooser_model_get_mime_info:
+ * @model : a #ThunarChooserModel.
+ *
+ * Returns the #ThunarVfsMimeInfo for @model.
+ *
+ * Return value: the #ThunarVfsMimeInfo for @model.
+ **/
+ThunarVfsMimeInfo*
+thunar_chooser_model_get_mime_info (ThunarChooserModel *model)
+{
+  g_return_val_if_fail (THUNAR_IS_CHOOSER_MODEL (model), NULL);
+  return model->mime_info;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-chooser-model.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,68 @@
+/* $Id: thunar-chooser-model.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_CHOOSER_MODEL_H__
+#define __THUNAR_CHOOSER_MODEL_H__
+
+#include <thunar-vfs/thunar-vfs.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarChooserModelClass ThunarChooserModelClass;
+typedef struct _ThunarChooserModel      ThunarChooserModel;
+
+#define THUNAR_TYPE_CHOOSER_MODEL            (thunar_chooser_model_get_type ())
+#define THUNAR_CHOOSER_MODEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_CHOOSER_MODEL, ThunarChooserModel))
+#define THUNAR_CHOOSER_MODEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_CHOOSER_MODEL, ThunarChooserModelClass))
+#define THUNAR_IS_CHOOSER_MODEL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_CHOOSER_MODEL))
+#define THUNAR_IS_CHOOSER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_CHOOSER_MODEL))
+#define THUNAR_CHOOSER_MODEL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_CHOOSER_MODEL, ThunarChooserModelClass))
+
+/**
+ * ThunarChooserModelColumn:
+ * @THUNAR_CHOOSER_MODEL_COLUMN_NAME        : the name of the application.
+ * @THUNAR_CHOOSER_MODEL_COLUMN_ICON        : the icon of the application.
+ * @THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION : the #ThunarVfsMimeApplication object.
+ * @THUNAR_CHOOSER_MODEL_COLUMN_STYLE       : custom font style.
+ * @THUNAR_CHOOSER_MODEL_COLUMN_STYLE_SET   : whether to actually use the custom font style.
+ * @THUNAR_CHOOSER_MODEL_N_COLUMNS          : the number of columns in #ThunarChooserModel.
+ *
+ * The identifiers for the columns provided by the #ThunarChooserModel.
+ **/
+typedef enum
+{
+  THUNAR_CHOOSER_MODEL_COLUMN_NAME,
+  THUNAR_CHOOSER_MODEL_COLUMN_ICON,
+  THUNAR_CHOOSER_MODEL_COLUMN_APPLICATION,
+  THUNAR_CHOOSER_MODEL_COLUMN_STYLE,
+  THUNAR_CHOOSER_MODEL_COLUMN_STYLE_SET,
+  THUNAR_CHOOSER_MODEL_N_COLUMNS,
+} ThunarChooserModelColumn;
+
+GType               thunar_chooser_model_get_type       (void) G_GNUC_CONST;
+
+ThunarChooserModel *thunar_chooser_model_new            (ThunarVfsMimeInfo  *mime_info) G_GNUC_MALLOC;
+
+gboolean            thunar_chooser_model_get_loading    (ThunarChooserModel *model);
+
+ThunarVfsMimeInfo  *thunar_chooser_model_get_mime_info  (ThunarChooserModel *model);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_CHOOSER_MODEL_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,680 @@
+/* $Id: thunar-clipboard-manager.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-clipboard-manager.h>
+#include <thunar/thunar-dialogs.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CAN_PASTE,
+};
+
+enum
+{
+  CHANGED,
+  LAST_SIGNAL,
+};
+
+enum
+{
+  TARGET_GNOME_COPIED_FILES,
+  TARGET_UTF8_STRING,
+};
+
+
+
+static void thunar_clipboard_manager_class_init         (ThunarClipboardManagerClass *klass);
+static void thunar_clipboard_manager_finalize           (GObject                     *object);
+static void thunar_clipboard_manager_get_property       (GObject                     *object,
+                                                         guint                        prop_id,
+                                                         GValue                      *value,
+                                                         GParamSpec                  *pspec);
+static void thunar_clipboard_manager_file_destroyed     (ThunarFile                  *file,
+                                                         ThunarClipboardManager      *manager);
+static void thunar_clipboard_manager_owner_changed      (GtkClipboard                *clipboard,
+                                                         GdkEventOwnerChange         *event,
+                                                         ThunarClipboardManager      *manager);
+static void thunar_clipboard_manager_contents_received  (GtkClipboard                *clipboard,
+                                                         GtkSelectionData            *selection_data,
+                                                         gpointer                     user_data);
+static void thunar_clipboard_manager_targets_received   (GtkClipboard                *clipboard,
+                                                         GtkSelectionData            *selection_data,
+                                                         gpointer                     user_data);
+static void thunar_clipboard_manager_get_callback       (GtkClipboard                *clipboard,
+                                                         GtkSelectionData            *selection_data,
+                                                         guint                        info,
+                                                         gpointer                     user_data);
+static void thunar_clipboard_manager_clear_callback     (GtkClipboard                *clipboard,
+                                                         gpointer                     user_data);
+static void thunar_clipboard_manager_transfer_files     (ThunarClipboardManager      *manager,
+                                                         gboolean                     copy,
+                                                         GList                       *files);
+
+
+
+struct _ThunarClipboardManagerClass
+{
+  GObjectClass __parent__;
+
+  void (*changed) (ThunarClipboardManager *manager);
+};
+
+struct _ThunarClipboardManager
+{
+  GObject __parent__;
+
+  GtkClipboard *clipboard;
+  gboolean      can_paste;
+  GdkAtom       x_special_gnome_copied_files;
+
+  gboolean      files_cutted;
+  GList        *files;
+};
+
+typedef struct
+{
+  ThunarClipboardManager *manager;
+  ThunarVfsPath          *target_path;
+  GtkWidget              *widget;
+  GClosure               *new_files_closure;
+} ThunarClipboardPasteRequest;
+
+
+
+static const GtkTargetEntry clipboard_targets[] =
+{
+  { "x-special/gnome-copied-files", 0, TARGET_GNOME_COPIED_FILES },
+  { "UTF8_STRING", 0, TARGET_UTF8_STRING }
+};
+
+static GQuark thunar_clipboard_manager_quark = 0;
+static guint  manager_signals[LAST_SIGNAL];
+
+
+
+G_DEFINE_TYPE (ThunarClipboardManager, thunar_clipboard_manager, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_clipboard_manager_class_init (ThunarClipboardManagerClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_clipboard_manager_finalize;
+  gobject_class->get_property = thunar_clipboard_manager_get_property;
+
+  /**
+   * ThunarClipboardManager:can-paste:
+   *
+   * This property tells whether the current clipboard content of
+   * this #ThunarClipboardManager can be pasted into a folder
+   * displayed by a #ThunarView.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_CAN_PASTE,
+                                   g_param_spec_boolean ("can-paste",
+                                                         _("Can paste"),
+                                                         _("Whether the clipboard content can be pasted"),
+                                                         FALSE,
+                                                         EXO_PARAM_READABLE));
+
+  /**
+   * ThunarClipboardManager::changed:
+   * @manager : a #ThunarClipboardManager.
+   *
+   * This signal is emitted whenever the contents of the
+   * clipboard associated with @manager changes.
+   **/
+  manager_signals[CHANGED] =
+    g_signal_new ("changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (ThunarClipboardManagerClass, changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+}
+
+
+
+static void
+thunar_clipboard_manager_init (ThunarClipboardManager *manager)
+{
+  manager->can_paste = FALSE;
+  manager->x_special_gnome_copied_files = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
+}
+
+
+
+static void
+thunar_clipboard_manager_finalize (GObject *object)
+{
+  ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (object);
+  GList                  *lp;
+
+  /* release any pending files */
+  for (lp = manager->files; lp != NULL; lp = lp->next)
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (lp->data), thunar_clipboard_manager_file_destroyed, manager);
+      g_object_unref (G_OBJECT (lp->data));
+    }
+  g_list_free (manager->files);
+
+  /* disconnect from the clipboard */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (manager->clipboard), thunar_clipboard_manager_owner_changed, manager);
+  g_object_set_qdata (G_OBJECT (manager->clipboard), thunar_clipboard_manager_quark, NULL);
+  g_object_unref (G_OBJECT (manager->clipboard));
+
+  (*G_OBJECT_CLASS (thunar_clipboard_manager_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_clipboard_manager_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec)
+{
+  ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (object);
+
+  switch (prop_id)
+    {
+    case PROP_CAN_PASTE:
+      g_value_set_boolean (value, thunar_clipboard_manager_get_can_paste (manager));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_clipboard_manager_file_destroyed (ThunarFile             *file,
+                                         ThunarClipboardManager *manager)
+{
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (g_list_find (manager->files, file) != NULL);
+
+  /* remove the file from our list */
+  manager->files = g_list_remove (manager->files, file);
+
+  /* disconnect from the file */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (file), thunar_clipboard_manager_file_destroyed, manager);
+  g_object_unref (G_OBJECT (file));
+}
+
+
+
+static void
+thunar_clipboard_manager_owner_changed (GtkClipboard           *clipboard,
+                                        GdkEventOwnerChange    *event,
+                                        ThunarClipboardManager *manager)
+{
+  g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (manager->clipboard == clipboard);
+
+  /* need to take a reference on the manager, because the clipboards
+   * "targets received callback" mechanism is not cancellable.
+   */
+  g_object_ref (G_OBJECT (manager));
+
+  /* request the list of supported targets from the new owner */
+  gtk_clipboard_request_contents (clipboard, gdk_atom_intern ("TARGETS", FALSE),
+                                  thunar_clipboard_manager_targets_received, manager);
+}
+
+
+
+static void
+thunar_clipboard_manager_contents_received (GtkClipboard     *clipboard,
+                                            GtkSelectionData *selection_data,
+                                            gpointer          user_data)
+{
+  ThunarClipboardPasteRequest *request = user_data;
+  ThunarClipboardManager      *manager = THUNAR_CLIPBOARD_MANAGER (request->manager);
+  ThunarApplication           *application;
+  gboolean                     path_copy = TRUE;
+  GList                       *path_list = NULL;
+  gchar                       *data;
+
+  /* check whether the retrieval worked */
+  if (G_LIKELY (selection_data->length > 0))
+    {
+      /* be sure the selection data is zero-terminated */
+      data = (gchar *) selection_data->data;
+      data[selection_data->length] = '\0';
+
+      /* check whether to copy or move */
+      if (g_ascii_strncasecmp (data, "copy\n", 5) == 0)
+        {
+          path_copy = TRUE;
+          data += 5;
+        }
+      else if (g_ascii_strncasecmp (data, "cut\n", 4) == 0)
+        {
+          path_copy = FALSE;
+          data += 4;
+        }
+
+      /* determine the path list stored with the selection */
+      path_list = thunar_vfs_path_list_from_string (data, NULL);
+    }
+
+  /* perform the action if possible */
+  if (G_LIKELY (path_list != NULL))
+    {
+      application = thunar_application_get ();
+      if (G_LIKELY (path_copy))
+        thunar_application_copy_into (application, request->widget, path_list, request->target_path, request->new_files_closure);
+      else
+        thunar_application_move_into (application, request->widget, path_list, request->target_path, request->new_files_closure);
+      g_object_unref (G_OBJECT (application));
+      thunar_vfs_path_list_free (path_list);
+
+      /* clear the clipboard if it contained "cutted data"
+       * (gtk_clipboard_clear takes care of not clearing
+       * the selection if we don't own it)
+       */
+      if (G_UNLIKELY (!path_copy))
+        gtk_clipboard_clear (manager->clipboard);
+
+      /* check the contents of the clipboard again
+       * if either the Xserver or our GTK+ version
+       * doesn't support the XFixes extension.
+       */
+#if GTK_CHECK_VERSION(2,6,0)
+      if (!gdk_display_supports_selection_notification (gtk_clipboard_get_display (manager->clipboard)))
+#endif
+        {
+          thunar_clipboard_manager_owner_changed (manager->clipboard, NULL, manager);
+        }
+    }
+  else
+    {
+      /* tell the user that we cannot paste */
+      thunar_dialogs_show_error (request->widget, NULL, _("There is nothing on the clipboard to paste"));
+    }
+
+  /* free the request */
+  if (G_LIKELY (request->widget != NULL))
+    g_object_remove_weak_pointer (G_OBJECT (request->widget), (gpointer) &request->widget);
+  if (G_LIKELY (request->new_files_closure != NULL))
+    g_closure_unref (request->new_files_closure);
+  g_object_unref (G_OBJECT (request->manager));
+  thunar_vfs_path_unref (request->target_path);
+  g_free (request);
+}
+
+
+
+static void
+thunar_clipboard_manager_targets_received (GtkClipboard     *clipboard,
+                                           GtkSelectionData *selection_data,
+                                           gpointer          user_data)
+{
+  ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (user_data);
+  GdkAtom                *targets;
+  gint                    n_targets;
+  gint                    n;
+
+  g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (manager->clipboard == clipboard);
+
+  /* reset the "can-paste" state */
+  manager->can_paste = FALSE;
+
+  /* check the list of targets provided by the owner */
+  if (gtk_selection_data_get_targets (selection_data, &targets, &n_targets))
+    {
+      for (n = 0; n < n_targets; ++n)
+        if (targets[n] == manager->x_special_gnome_copied_files)
+          {
+            manager->can_paste = TRUE;
+            break;
+          }
+
+      g_free (targets);
+    }
+
+  /* notify listeners that we have a new clipboard state */
+  g_signal_emit (G_OBJECT (manager), manager_signals[CHANGED], 0);
+  g_object_notify (G_OBJECT (manager), "can-paste");
+
+  /* drop the reference taken for the callback */
+  g_object_unref (G_OBJECT (manager));
+}
+
+
+
+static void
+thunar_clipboard_manager_get_callback (GtkClipboard     *clipboard,
+                                       GtkSelectionData *selection_data,
+                                       guint             target_info,
+                                       gpointer          user_data)
+{
+  ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (user_data);
+  GList                  *path_list = NULL;
+  GList                  *lp;
+  gchar                  *string_list;
+  gchar                  *data;
+
+  g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (manager->clipboard == clipboard);
+
+  /* determine the path list from the file list */
+  for (lp = manager->files; lp != NULL; lp = lp->next)
+    path_list = g_list_append (path_list, thunar_file_get_path (lp->data));
+
+  /* determine the string representation of the path list */
+  string_list = thunar_vfs_path_list_to_string (path_list);
+
+  switch (target_info)
+    {
+    case TARGET_GNOME_COPIED_FILES:
+      data = g_strconcat (manager->files_cutted ? "cut\n" : "copy\n", string_list, NULL);
+      gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) data, strlen (data));
+      g_free (data);
+      break;
+
+    case TARGET_UTF8_STRING:
+      gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) string_list, strlen (string_list));
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
+
+  /* cleanup */
+  g_list_free (path_list);
+  g_free (string_list);
+}
+
+
+
+static void
+thunar_clipboard_manager_clear_callback (GtkClipboard *clipboard,
+                                         gpointer      user_data)
+{
+  ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (user_data);
+  GList                  *lp;
+
+  g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (manager->clipboard == clipboard);
+
+  /* release the pending files */
+  for (lp = manager->files; lp != NULL; lp = lp->next)
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (lp->data), thunar_clipboard_manager_file_destroyed, manager);
+      g_object_unref (G_OBJECT (lp->data));
+    }
+  g_list_free (manager->files);
+  manager->files = NULL;
+}
+
+
+
+static void
+thunar_clipboard_manager_transfer_files (ThunarClipboardManager *manager,
+                                         gboolean                copy,
+                                         GList                  *files)
+{
+  ThunarFile *file;
+  GList      *lp;
+
+  /* release any pending files */
+  for (lp = manager->files; lp != NULL; lp = lp->next)
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (lp->data), thunar_clipboard_manager_file_destroyed, manager);
+      g_object_unref (G_OBJECT (lp->data));
+    }
+  g_list_free (manager->files);
+
+  /* remember the transfer operation */
+  manager->files_cutted = !copy;
+
+  /* setup the new file list */
+  for (lp = files, manager->files = NULL; lp != NULL; lp = lp->next)
+    {
+      file = g_object_ref (G_OBJECT (lp->data));
+      manager->files = g_list_prepend (manager->files, file);
+      g_signal_connect (G_OBJECT (file), "destroy", G_CALLBACK (thunar_clipboard_manager_file_destroyed), manager);
+    }
+
+  /* acquire the CLIPBOARD ownership */
+  gtk_clipboard_set_with_owner (manager->clipboard, clipboard_targets,
+                                G_N_ELEMENTS (clipboard_targets),
+                                thunar_clipboard_manager_get_callback,
+                                thunar_clipboard_manager_clear_callback,
+                                G_OBJECT (manager));
+
+  /* Need to fake a "owner-change" event here if the Xserver doesn't support clipboard notification */
+#if GTK_CHECK_VERSION(2,6,0)
+  if (!gdk_display_supports_selection_notification (gtk_clipboard_get_display (manager->clipboard)))
+#endif
+    {
+      thunar_clipboard_manager_owner_changed (manager->clipboard, NULL, manager);
+    }
+}
+
+
+
+/**
+ * thunar_clipboard_manager_get_for_display:
+ * @display : a #GdkDisplay.
+ *
+ * Determines the #ThunarClipboardManager that is used to manage
+ * the clipboard on the given @display.
+ *
+ * The caller is responsible for freeing the returned object
+ * using g_object_unref() when it's no longer needed.
+ *
+ * Return value: the #ThunarClipboardManager for @display.
+ **/
+ThunarClipboardManager*
+thunar_clipboard_manager_get_for_display (GdkDisplay *display)
+{
+  ThunarClipboardManager *manager;
+  GtkClipboard           *clipboard;
+
+  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+
+  /* generate the quark on-demand */
+  if (G_UNLIKELY (thunar_clipboard_manager_quark == 0))
+    thunar_clipboard_manager_quark = g_quark_from_static_string ("thunar-clipboard-manager");
+
+  /* figure out the clipboard for the given display */
+  clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD);
+
+  /* check if a clipboard manager exists */
+  manager = g_object_get_qdata (G_OBJECT (clipboard), thunar_clipboard_manager_quark);
+  if (G_LIKELY (manager != NULL))
+    {
+      g_object_ref (G_OBJECT (manager));
+      return manager;
+    }
+
+  /* allocate a new manager */
+  manager = g_object_new (THUNAR_TYPE_CLIPBOARD_MANAGER, NULL);
+  manager->clipboard = g_object_ref (G_OBJECT (clipboard));
+  g_object_set_qdata (G_OBJECT (clipboard), thunar_clipboard_manager_quark, manager);
+
+  /* listen for the "owner-change" signal on the clipboard */
+  g_signal_connect (G_OBJECT (manager->clipboard), "owner-change",
+                    G_CALLBACK (thunar_clipboard_manager_owner_changed), manager);
+
+  return manager;
+}
+
+
+
+/**
+ * thunar_clipboard_manager_get_can_paste:
+ * @manager : a #ThunarClipboardManager.
+ *
+ * Tells whether the contents of the clipboard represented
+ * by @manager can be pasted into a folder.
+ *
+ * Return value: %TRUE if the contents of the clipboard
+ *               represented by @manager can be pasted
+ *               into a folder.
+ **/
+gboolean
+thunar_clipboard_manager_get_can_paste (ThunarClipboardManager *manager)
+{
+  g_return_val_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager), FALSE);
+  return manager->can_paste;
+}
+
+
+
+/**
+ * thunar_clipboard_manager_has_cutted_file:
+ * @manager : a #ThunarClipboardManager.
+ * @file    : a #ThunarFile.
+ *
+ * Checks whether @file was cutted to the given @manager earlier.
+ *
+ * Return value: %TRUE if @file is on the cutted list of @manager.
+ **/
+gboolean
+thunar_clipboard_manager_has_cutted_file (ThunarClipboardManager *manager,
+                                          const ThunarFile       *file)
+{
+  g_return_val_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager), FALSE);
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+
+  return (manager->files_cutted && g_list_find (manager->files, file) != NULL);
+}
+
+
+
+/**
+ * thunar_clipboard_manager_copy_files:
+ * @manager : a #ThunarClipboardManager.
+ * @files   : a list of #ThunarFile<!---->s.
+ *
+ * Sets the clipboard represented by @manager to
+ * contain the @files and marks them to be copied
+ * when the user pastes from the clipboard.
+ **/
+void
+thunar_clipboard_manager_copy_files (ThunarClipboardManager *manager,
+                                     GList                  *files)
+{
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  thunar_clipboard_manager_transfer_files (manager, TRUE, files);
+}
+
+
+
+/**
+ * thunar_clipboard_manager_cut_files:
+ * @manager : a #ThunarClipboardManager.
+ * @files   : a list of #ThunarFile<!---->s.
+ *
+ * Sets the clipboard represented by @manager to
+ * contain the @files and marks them to be moved
+ * when the user pastes from the clipboard.
+ **/
+void
+thunar_clipboard_manager_cut_files (ThunarClipboardManager *manager,
+                                    GList                  *files)
+{
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  thunar_clipboard_manager_transfer_files (manager, FALSE, files);
+}
+
+
+
+/**
+ * thunar_clipboard_manager_paste_files:
+ * @manager           : a #ThunarClipboardManager.
+ * @target_path       : the #ThunarVfsPath of the folder to which the contents on the clipboard
+ *                      should be pasted.
+ * @widget            : a #GtkWidget, on which to perform the paste or %NULL if no widget is
+ *                      known.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Pastes the contents from the clipboard associated with @manager to the directory
+ * referenced by @target_path.
+ **/
+void
+thunar_clipboard_manager_paste_files (ThunarClipboardManager *manager,
+                                      ThunarVfsPath          *target_path,
+                                      GtkWidget              *widget,
+                                      GClosure               *new_files_closure)
+{
+  ThunarClipboardPasteRequest *request;
+
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (manager));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+
+  /* prepare the paste request */
+  request = g_new0 (ThunarClipboardPasteRequest, 1);
+  request->manager = g_object_ref (G_OBJECT (manager));
+  request->target_path = thunar_vfs_path_ref (target_path);
+  request->widget = widget;
+
+  /* take a reference on the closure (if any) */
+  if (G_LIKELY (new_files_closure != NULL))
+    {
+      request->new_files_closure = new_files_closure;
+      g_closure_ref (new_files_closure);
+      g_closure_sink (new_files_closure);
+    }
+
+  /* get notified when the widget is destroyed prior to
+   * completing the clipboard contents retrieval
+   */
+  if (G_LIKELY (request->widget != NULL))
+    g_object_add_weak_pointer (G_OBJECT (request->widget), (gpointer) &request->widget);
+
+  /* schedule the request */
+  gtk_clipboard_request_contents (manager->clipboard, manager->x_special_gnome_copied_files,
+                                  thunar_clipboard_manager_contents_received, request);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-clipboard-manager.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,57 @@
+/* $Id: thunar-clipboard-manager.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_CLIPBOARD_MANAGER_H__
+#define __THUNAR_CLIPBOARD_MANAGER_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarClipboardManagerClass ThunarClipboardManagerClass;
+typedef struct _ThunarClipboardManager      ThunarClipboardManager;
+
+#define THUNAR_TYPE_CLIPBOARD_MANAGER             (thunar_clipboard_manager_get_type ())
+#define THUNAR_CLIPBOARD_MANAGER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_CLIPBOARD_MANAGER, ThunarClipboardManager))
+#define THUNAR_CLIPBOARD_MANAGER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((obj), THUNAR_TYPE_CLIPBOARD_MANAGER, ThunarClipboardManagerClass))
+#define THUNAR_IS_CLIPBOARD_MANAGER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_CLIPBOARD_MANAGER))
+#define THUNAR_IS_CLIPBAORD_MANAGER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_CLIPBOARD_MANAGER))
+#define THUNAR_CLIPBOARD_MANAGER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_CLIPBAORD_MANAGER, ThunarClipboardManagerClass))
+
+GType                   thunar_clipboard_manager_get_type        (void) G_GNUC_CONST;
+
+ThunarClipboardManager *thunar_clipboard_manager_get_for_display (GdkDisplay             *display);
+
+gboolean                thunar_clipboard_manager_get_can_paste   (ThunarClipboardManager *manager);
+
+gboolean                thunar_clipboard_manager_has_cutted_file (ThunarClipboardManager *manager,
+                                                                  const ThunarFile       *file);
+
+void                    thunar_clipboard_manager_copy_files      (ThunarClipboardManager *manager,
+                                                                  GList                  *files);
+void                    thunar_clipboard_manager_cut_files       (ThunarClipboardManager *manager,
+                                                                  GList                  *files);
+void                    thunar_clipboard_manager_paste_files     (ThunarClipboardManager *manager,
+                                                                  ThunarVfsPath          *target_path,
+                                                                  GtkWidget              *widget,
+                                                                  GClosure               *new_files_closure);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_CLIPBOARD_MANAGER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,414 @@
+/* $Id: thunar-create-dialog.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-create-dialog.h>
+#include <thunar/thunar-icon-factory.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_FILENAME,
+  PROP_MIME_INFO,
+};
+
+
+
+static void thunar_create_dialog_class_init   (ThunarCreateDialogClass *klass);
+static void thunar_create_dialog_init         (ThunarCreateDialog      *dialog);
+static void thunar_create_dialog_dispose      (GObject                 *object);
+static void thunar_create_dialog_get_property (GObject                 *object,
+                                               guint                    prop_id,
+                                               GValue                  *value,
+                                               GParamSpec              *pspec);
+static void thunar_create_dialog_set_property (GObject                 *object,
+                                               guint                    prop_id,
+                                               const GValue            *value,
+                                               GParamSpec              *pspec);
+static void thunar_create_dialog_realize      (GtkWidget               *widget);
+static void thunar_create_dialog_update_image (ThunarCreateDialog      *dialog);
+static void thunar_create_dialog_text_changed (GtkWidget               *entry,
+                                               ThunarCreateDialog      *dialog);
+
+
+
+struct _ThunarCreateDialogClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarCreateDialog
+{
+  GtkDialog __parent__;
+
+  GtkWidget         *image;
+  GtkWidget         *entry;
+
+  ThunarVfsMimeInfo *mime_info;
+};
+
+
+
+G_DEFINE_TYPE (ThunarCreateDialog, thunar_create_dialog, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_create_dialog_class_init (ThunarCreateDialogClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_create_dialog_dispose;
+  gobject_class->get_property = thunar_create_dialog_get_property;
+  gobject_class->set_property = thunar_create_dialog_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->realize = thunar_create_dialog_realize;
+
+  /**
+   * ThunarCreateDialog::filename:
+   *
+   * The filename entered in the dialog's entry box.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILENAME,
+                                   g_param_spec_string ("filename",
+                                                        _("Filename"),
+                                                        _("Filename"),
+                                                        NULL,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarCreateDialog::mime-info:
+   *
+   * The #ThunarVfsMimeInfo of the file to create.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_MIME_INFO,
+                                   g_param_spec_boxed ("mime-info",
+                                                       _("Mime Info"),
+                                                       _("Mime Info"),
+                                                       THUNAR_VFS_TYPE_MIME_INFO,
+                                                       EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_create_dialog_init (ThunarCreateDialog *dialog)
+{
+  AtkRelationSet *relations;
+  AtkRelation    *relation;
+  AtkObject      *object;
+  GtkWidget      *label;
+  GtkWidget      *table;
+
+  /* configure the dialog itself */
+  gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+                          GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                          GTK_STOCK_OK, GTK_RESPONSE_OK,
+                          NULL);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+  gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
+  gtk_window_set_default_size (GTK_WINDOW (dialog), 300, -1);
+
+  table = g_object_new (GTK_TYPE_TABLE, "border-width", 6, "column-spacing", 6, "row-spacing", 3, NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), table, TRUE, TRUE, 0);
+  gtk_widget_show (table);
+
+  dialog->image = g_object_new (GTK_TYPE_IMAGE, "xpad", 6, "ypad", 6, NULL);
+  gtk_table_attach (GTK_TABLE (table), dialog->image, 0, 1, 0, 2, GTK_FILL, GTK_FILL, 0, 0); 
+  gtk_widget_show (dialog->image);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("Enter the new name:"), "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+
+  dialog->entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  g_signal_connect (G_OBJECT (dialog->entry), "changed", G_CALLBACK (thunar_create_dialog_text_changed), dialog);
+  gtk_table_attach (GTK_TABLE (table), dialog->entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->entry);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (dialog->entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+}
+
+
+
+static void
+thunar_create_dialog_dispose (GObject *object)
+{
+  ThunarCreateDialog *dialog = THUNAR_CREATE_DIALOG (object);
+
+  /* release the mime info (if any) */
+  thunar_create_dialog_set_mime_info (dialog, NULL);
+
+  (*G_OBJECT_CLASS (thunar_create_dialog_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_create_dialog_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  ThunarCreateDialog *dialog = THUNAR_CREATE_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILENAME:
+      g_value_set_string (value, thunar_create_dialog_get_filename (dialog));
+      break;
+
+    case PROP_MIME_INFO:
+      g_value_set_boxed (value, thunar_create_dialog_get_mime_info (dialog));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_create_dialog_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  ThunarCreateDialog *dialog = THUNAR_CREATE_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILENAME:
+      thunar_create_dialog_set_filename (dialog, g_value_get_string (value));
+      break;
+
+    case PROP_MIME_INFO:
+      thunar_create_dialog_set_mime_info (dialog, g_value_get_boxed (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_create_dialog_realize (GtkWidget *widget)
+{
+  ThunarCreateDialog *dialog = THUNAR_CREATE_DIALOG (widget);
+
+  /* let GtkWidget realize the widget */
+  (*GTK_WIDGET_CLASS (thunar_create_dialog_parent_class)->realize) (widget);
+
+  /* update the image */
+  thunar_create_dialog_update_image (dialog);
+}
+
+
+
+static void
+thunar_create_dialog_update_image (ThunarCreateDialog *dialog)
+{
+  ThunarIconFactory *icon_factory;
+  GtkIconTheme      *icon_theme;
+  const gchar       *icon_name;
+  GdkPixbuf         *icon = NULL;
+
+  /* check if we have a mime info */
+  if (G_LIKELY (dialog->mime_info != NULL))
+    {
+      /* determine the icon theme and factory for the current screen */
+      icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (dialog)));
+      icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+      /* determine the icon name for the mime info */
+      icon_name = thunar_vfs_mime_info_lookup_icon_name (dialog->mime_info, icon_theme);
+
+      /* try to load the icon for the given name */
+      icon = thunar_icon_factory_load_icon (icon_factory, icon_name, 48, NULL, FALSE);
+
+      /* release the icon factory */
+      g_object_unref (G_OBJECT (icon_factory));
+    }
+
+  /* setup the image */
+  if (G_LIKELY (icon != NULL))
+    {
+      gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->image), icon);
+      g_object_unref (G_OBJECT (icon));
+      gtk_widget_show (dialog->image);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->image);
+    }
+}
+
+
+
+static void
+thunar_create_dialog_text_changed (GtkWidget          *entry,
+                                   ThunarCreateDialog *dialog)
+{
+  const gchar *text;
+  const gchar *p;
+
+  g_return_if_fail (GTK_IS_ENTRY (entry));
+  g_return_if_fail (THUNAR_IS_CREATE_DIALOG (dialog));
+  g_return_if_fail (dialog->entry == entry);
+
+  /* verify the new text */
+  text = gtk_entry_get_text (GTK_ENTRY (entry));
+  for (p = text; *p != '\0'; ++p)
+    if (G_UNLIKELY (G_IS_DIR_SEPARATOR (*p)))
+      break;
+
+  /* enable/disable the "OK" button appropriately */
+  gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, (*text != '\0' && *p == '\0'));
+}
+
+
+
+/**
+ * thunar_create_dialog_new:
+ *
+ * Allocates a new #ThunarCreateDialog instance.
+ *
+ * Return value: the newly allocated #ThunarCreateDialog instance.
+ **/
+GtkWidget*
+thunar_create_dialog_new (void)
+{
+  return g_object_new (THUNAR_TYPE_CREATE_DIALOG, NULL);
+}
+
+
+
+/**
+ * thunar_create_dialog_get_filename:
+ * @dialog : a #ThunarCreateDialog.
+ *
+ * Returns the filename currently selected in @dialog.
+ *
+ * Return value: the filename currently selected in @dialog.
+ **/
+const gchar*
+thunar_create_dialog_get_filename (const ThunarCreateDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_CREATE_DIALOG (dialog), NULL);
+  return gtk_entry_get_text (GTK_ENTRY (dialog->entry));
+}
+
+
+
+/**
+ * thunar_create_dialog_set_filename:
+ * @dialog   : a #ThunarCreateDialog.
+ * @filename : the new filename to set.
+ *
+ * Sets the filename currently selected in @dialog
+ * to the specified @filename.
+ **/
+void
+thunar_create_dialog_set_filename (ThunarCreateDialog *dialog,
+                                   const gchar        *filename)
+{
+  g_return_if_fail (THUNAR_IS_CREATE_DIALOG (dialog));
+  g_return_if_fail (filename != NULL);
+      
+  /* setup the new filename */
+  gtk_entry_set_text (GTK_ENTRY (dialog->entry), filename);
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (dialog), "filename");
+}
+
+
+
+/**
+ * thunar_create_dialog_get_mime_info:
+ * @dialog : a #ThunarCreateDialog.
+ *
+ * Returns the current mime info for @dialog
+ * or %NULL.
+ *
+ * Return value: the mime info for @dialog.
+ **/
+ThunarVfsMimeInfo*
+thunar_create_dialog_get_mime_info (const ThunarCreateDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_CREATE_DIALOG (dialog), NULL);
+  return dialog->mime_info;
+}
+
+
+
+/**
+ * thunar_create_dialog_set_mime_info:
+ * @dialog    : a #ThunarCreateDialog.
+ * @mime_info : the new #ThunarVfsMimeInfo or %NULL.
+ * 
+ * Set the mime info for @dialog to @mime_info.
+ **/
+void
+thunar_create_dialog_set_mime_info (ThunarCreateDialog *dialog,
+                                    ThunarVfsMimeInfo  *mime_info)
+{
+  g_return_if_fail (THUNAR_IS_CREATE_DIALOG (dialog));
+
+  /* release the previous mime info */
+  if (G_UNLIKELY (dialog->mime_info != NULL))
+    thunar_vfs_mime_info_unref (dialog->mime_info);
+
+  /* activate the new mime info */
+  dialog->mime_info = mime_info;
+
+  /* take a reference on the mime info */
+  if (G_LIKELY (mime_info != NULL))
+    thunar_vfs_mime_info_ref (mime_info);
+
+  /* update the image if we're already realized */
+  if (GTK_WIDGET_REALIZED (dialog))
+    thunar_create_dialog_update_image (dialog);
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (dialog), "mime-info");
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-create-dialog.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,51 @@
+/* $Id: thunar-create-dialog.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_CREATE_DIALOG_H__
+#define __THUNAR_CREATE_DIALOG_H__
+
+#include <thunar-vfs/thunar-vfs.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarCreateDialogClass ThunarCreateDialogClass;
+typedef struct _ThunarCreateDialog      ThunarCreateDialog;
+
+#define THUNAR_TYPE_CREATE_DIALOG             (thunar_create_dialog_get_type ())
+#define THUNAR_CREATE_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_CREATE_DIALOG, ThunarCreateDialog))
+#define THUNAR_CREATE_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_CREATE_DIALOG, ThunarCreateDialogClass))
+#define THUNAR_IS_CREATE_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_CREATE_DIALOG))
+#define THUNAR_IS_CREATE_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_CREATE_DIALOG))
+#define THUNAR_CREATE_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_CREATE_DIALOG, ThunarCreateDialogClass))
+
+GType              thunar_create_dialog_get_type      (void) G_GNUC_CONST;
+
+GtkWidget         *thunar_create_dialog_new           (void) G_GNUC_MALLOC;
+
+const gchar       *thunar_create_dialog_get_filename  (const ThunarCreateDialog *dialog);
+void               thunar_create_dialog_set_filename  (ThunarCreateDialog       *dialog,
+                                                       const gchar              *filename);
+
+ThunarVfsMimeInfo *thunar_create_dialog_get_mime_info (const ThunarCreateDialog *dialog);
+void               thunar_create_dialog_set_mime_info (ThunarCreateDialog       *dialog,
+                                                       ThunarVfsMimeInfo        *mime_info);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_CREATE_DIALOG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,511 @@
+/* $Id: thunar-details-view.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#include <thunar/thunar-details-view.h>
+#include <thunar/thunar-text-renderer.h>
+
+
+static void         thunar_details_view_class_init          (ThunarDetailsViewClass *klass);
+static void         thunar_details_view_init                (ThunarDetailsView      *details_view);
+static AtkObject   *thunar_details_view_get_accessible      (GtkWidget              *widget);
+static GList       *thunar_details_view_get_selected_items  (ThunarStandardView     *standard_view);
+static void         thunar_details_view_select_all          (ThunarStandardView     *standard_view);
+static void         thunar_details_view_unselect_all        (ThunarStandardView     *standard_view);
+static void         thunar_details_view_select_path         (ThunarStandardView     *standard_view,
+                                                             GtkTreePath            *path);
+static void         thunar_details_view_set_cursor          (ThunarStandardView     *standard_view,
+                                                             GtkTreePath            *path,
+                                                             gboolean                start_editing);
+static void         thunar_details_view_scroll_to_path      (ThunarStandardView     *standard_view,
+                                                             GtkTreePath            *path);
+static GtkTreePath *thunar_details_view_get_path_at_pos     (ThunarStandardView     *standard_view,
+                                                             gint                    x,
+                                                             gint                    y);
+static void         thunar_details_view_highlight_path      (ThunarStandardView     *standard_view,
+                                                             GtkTreePath            *path);
+static void         thunar_details_view_notify_model        (GtkTreeView            *tree_view,
+                                                             GParamSpec             *pspec,
+                                                             ThunarDetailsView      *details_view);
+static gboolean     thunar_details_view_button_press_event  (GtkTreeView            *tree_view,
+                                                             GdkEventButton         *event,
+                                                             ThunarDetailsView      *details_view);
+static gboolean     thunar_details_view_key_press_event     (GtkTreeView            *tree_view,
+                                                             GdkEventKey            *event,
+                                                             ThunarDetailsView      *details_view);
+static void         thunar_details_view_row_activated       (GtkTreeView            *tree_view,
+                                                             GtkTreePath            *path,
+                                                             GtkTreeViewColumn      *column,
+                                                             ThunarDetailsView      *details_view);
+
+
+
+struct _ThunarDetailsViewClass
+{
+  ThunarStandardViewClass __parent__;
+};
+
+struct _ThunarDetailsView
+{
+  ThunarStandardView __parent__;
+};
+
+
+
+G_DEFINE_TYPE (ThunarDetailsView, thunar_details_view, THUNAR_TYPE_STANDARD_VIEW);
+
+
+
+static void
+thunar_details_view_class_init (ThunarDetailsViewClass *klass)
+{
+  ThunarStandardViewClass *thunarstandard_view_class;
+  GtkWidgetClass          *gtkwidget_class;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->get_accessible = thunar_details_view_get_accessible;
+
+  thunarstandard_view_class = THUNAR_STANDARD_VIEW_CLASS (klass);
+  thunarstandard_view_class->get_selected_items = thunar_details_view_get_selected_items;
+  thunarstandard_view_class->select_all = thunar_details_view_select_all;
+  thunarstandard_view_class->unselect_all = thunar_details_view_unselect_all;
+  thunarstandard_view_class->select_path = thunar_details_view_select_path;
+  thunarstandard_view_class->set_cursor = thunar_details_view_set_cursor;
+  thunarstandard_view_class->scroll_to_path = thunar_details_view_scroll_to_path;
+  thunarstandard_view_class->get_path_at_pos = thunar_details_view_get_path_at_pos;
+  thunarstandard_view_class->highlight_path = thunar_details_view_highlight_path;
+}
+
+
+
+static void
+thunar_details_view_init (ThunarDetailsView *details_view)
+{
+  GtkTreeViewColumn *column;
+  GtkTreeSelection  *selection;
+  GtkCellRenderer   *renderer;
+  GtkWidget         *tree_view;
+
+  /* create the tree view to embed */
+  tree_view = gtk_tree_view_new ();
+  g_signal_connect (G_OBJECT (tree_view), "notify::model",
+                    G_CALLBACK (thunar_details_view_notify_model), details_view);
+  g_signal_connect (G_OBJECT (tree_view), "button-press-event",
+                    G_CALLBACK (thunar_details_view_button_press_event), details_view);
+  g_signal_connect (G_OBJECT (tree_view), "key-press-event",
+                    G_CALLBACK (thunar_details_view_key_press_event), details_view);
+  g_signal_connect (G_OBJECT (tree_view), "row-activated",
+                    G_CALLBACK (thunar_details_view_row_activated), details_view);
+  gtk_container_add (GTK_CONTAINER (details_view), tree_view);
+  gtk_widget_show (tree_view);
+
+  /* configure general aspects of the details view */
+  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
+  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (tree_view), TRUE);
+
+  /* first column (icon, name) */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "expand", TRUE,
+                         "resizable", TRUE,
+                         "title", _("Name"),
+                         NULL);
+  gtk_tree_view_column_pack_start (column, THUNAR_STANDARD_VIEW (details_view)->icon_renderer, FALSE);
+  gtk_tree_view_column_set_attributes (column, THUNAR_STANDARD_VIEW (details_view)->icon_renderer,
+                                       "file", THUNAR_LIST_MODEL_COLUMN_FILE,
+                                       NULL);
+  g_object_set (G_OBJECT (THUNAR_STANDARD_VIEW (details_view)->name_renderer),
+                "xalign", 0.0,
+                NULL);
+  gtk_tree_view_column_pack_start (column, THUNAR_STANDARD_VIEW (details_view)->name_renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, THUNAR_STANDARD_VIEW (details_view)->name_renderer,
+                                       "text", THUNAR_LIST_MODEL_COLUMN_NAME,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_LIST_MODEL_COLUMN_NAME);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+  /* second column (size) */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "resizable", TRUE,
+                         "title", _("Size"),
+                         NULL);
+  renderer = g_object_new (THUNAR_TYPE_TEXT_RENDERER,
+                           "xalign", 1.0,
+                           NULL);
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", THUNAR_LIST_MODEL_COLUMN_SIZE,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_LIST_MODEL_COLUMN_SIZE);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+  /* third column (permissions) */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "resizable", TRUE,
+                         "title", _("Permissions"),
+                         NULL);
+  renderer = g_object_new (THUNAR_TYPE_TEXT_RENDERER,
+                           "xalign", 0.0,
+                           NULL);
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", THUNAR_LIST_MODEL_COLUMN_PERMISSIONS,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_LIST_MODEL_COLUMN_PERMISSIONS);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+  /* fourth column (type) */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "resizable", TRUE,
+                         "title", _("Type"),
+                         NULL);
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", THUNAR_LIST_MODEL_COLUMN_TYPE,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_LIST_MODEL_COLUMN_TYPE);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+  /* fifth column (modification date) */
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "resizable", TRUE,
+                         "title", _("Date modified"),
+                         NULL);
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED,
+                                       NULL);
+  gtk_tree_view_column_set_sort_column_id (column, THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
+
+  /* configure the tree selection */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+  gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+  g_signal_connect_swapped (G_OBJECT (selection), "changed",
+                            G_CALLBACK (thunar_standard_view_selection_changed), details_view);
+}
+
+
+
+static AtkObject*
+thunar_details_view_get_accessible (GtkWidget *widget)
+{
+  AtkObject *object;
+
+  /* query the atk object for the tree view class */
+  object = GTK_WIDGET_CLASS (thunar_details_view_parent_class)->get_accessible (widget);
+
+  /* set custom Atk properties for the details view */
+  if (G_LIKELY (object != NULL))
+    {
+      atk_object_set_name (object, _("Details view"));
+      atk_object_set_description (object, _("Detailed directory listing"));
+    }
+
+  return object;
+}
+
+
+
+static GList*
+thunar_details_view_get_selected_items (ThunarStandardView *standard_view)
+{
+  GtkTreeSelection *selection;
+
+  g_return_val_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view), NULL);
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (GTK_BIN (standard_view)->child));
+  return gtk_tree_selection_get_selected_rows (selection, NULL);
+}
+
+
+
+static void
+thunar_details_view_select_all (ThunarStandardView *standard_view)
+{
+  GtkTreeSelection *selection;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (GTK_BIN (standard_view)->child));
+  gtk_tree_selection_select_all (selection);
+}
+
+
+
+static void
+thunar_details_view_unselect_all (ThunarStandardView *standard_view)
+{
+  GtkTreeSelection *selection;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (GTK_BIN (standard_view)->child));
+  gtk_tree_selection_unselect_all (selection);
+}
+
+
+
+static void
+thunar_details_view_select_path (ThunarStandardView *standard_view,
+                                 GtkTreePath        *path)
+{
+  GtkTreeSelection *selection;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (GTK_BIN (standard_view)->child));
+  gtk_tree_selection_select_path (selection, path);
+}
+
+
+
+static void
+thunar_details_view_set_cursor (ThunarStandardView *standard_view,
+                                GtkTreePath        *path,
+                                gboolean            start_editing)
+{
+  GtkCellRendererMode mode;
+  GtkTreeViewColumn  *column;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+
+  /* make sure the name renderer is editable */
+  mode = standard_view->name_renderer->mode;
+  standard_view->name_renderer->mode = GTK_CELL_RENDERER_MODE_EDITABLE;
+
+  /* tell the tree view to start editing the given row */
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (GTK_BIN (standard_view)->child), 0);
+  gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (GTK_BIN (standard_view)->child),
+                                    path, column, standard_view->name_renderer,
+                                    start_editing);
+
+  /* reset the name renderer mode */
+  standard_view->name_renderer->mode = mode;
+}
+
+
+
+static void
+thunar_details_view_scroll_to_path (ThunarStandardView *standard_view,
+                                    GtkTreePath        *path)
+{
+  GtkTreeViewColumn *column;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+
+  /* tell the tree view to scroll to the given row */
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (GTK_BIN (standard_view)->child), 0);
+  gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (GTK_BIN (standard_view)->child), path, column, FALSE, 0.0f, 0.0f);
+}
+
+
+
+static GtkTreePath*
+thunar_details_view_get_path_at_pos (ThunarStandardView *standard_view,
+                                     gint                x,
+                                     gint                y)
+{
+  GtkTreePath *path;
+
+  g_return_val_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view), NULL);
+
+  if (gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (GTK_BIN (standard_view)->child), x, y, &path, NULL))
+    return path;
+
+  return NULL;
+}
+
+
+
+static void
+thunar_details_view_highlight_path (ThunarStandardView *standard_view,
+                                    GtkTreePath        *path)
+{
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (standard_view));
+  gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (GTK_BIN (standard_view)->child), path, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
+}
+
+
+
+static void
+thunar_details_view_notify_model (GtkTreeView       *tree_view,
+                                  GParamSpec        *pspec,
+                                  ThunarDetailsView *details_view)
+{
+  /* We need to set the search column here, as GtkTreeView resets it
+   * whenever a new model is set.
+   */
+  gtk_tree_view_set_search_column (tree_view, THUNAR_LIST_MODEL_COLUMN_NAME);
+}
+
+
+
+static gboolean
+thunar_details_view_button_press_event (GtkTreeView       *tree_view,
+                                        GdkEventButton    *event,
+                                        ThunarDetailsView *details_view)
+{
+  GtkTreeSelection *selection;
+  GtkTreePath      *path;
+  GtkTreeIter       iter;
+  ThunarFile       *file;
+  GtkAction        *action;
+
+  /* we unselect all selected items if the user clicks on an empty
+   * area of the treeview and no modifier key is active.
+   */
+  if ((event->state & gtk_accelerator_get_default_mod_mask ()) == 0
+      && !gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, NULL, NULL, NULL, NULL))
+    {
+      selection = gtk_tree_view_get_selection (tree_view);
+      gtk_tree_selection_unselect_all (selection);
+    }
+
+  /* open the context menu on right clicks */
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3)
+    {
+      selection = gtk_tree_view_get_selection (tree_view);
+      if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL))
+        {
+          /* select the path on which the user clicked if not selected yet */
+          if (!gtk_tree_selection_path_is_selected (selection, path))
+            {
+              /* we don't unselect all other items if Control is active */
+              if ((event->state & GDK_CONTROL_MASK) == 0)
+                gtk_tree_selection_unselect_all (selection);
+              gtk_tree_selection_select_path (selection, path);
+            }
+          gtk_tree_path_free (path);
+
+          /* queue the menu popup */
+          thunar_standard_view_queue_popup (THUNAR_STANDARD_VIEW (details_view), event);
+        }
+      else
+        {
+          /* open the context menu */
+          thunar_standard_view_context_menu (THUNAR_STANDARD_VIEW (details_view), event->button, event->time);
+        }
+
+      return TRUE;
+    }
+  else if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS) && event->button == 2)
+    {
+      /* determine the path to the item that was middle-clicked */
+      if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL))
+        {
+          /* select only the path to the item on which the user clicked */
+          selection = gtk_tree_view_get_selection (tree_view);
+          gtk_tree_selection_unselect_all (selection);
+          gtk_tree_selection_select_path (selection, path);
+
+          /* if the event was a double-click, then we'll open the file or folder (folder's are opened in new windows) */
+          if (G_LIKELY (event->type == GDK_2BUTTON_PRESS))
+            {
+              /* determine the file for the path */
+              gtk_tree_model_get_iter (GTK_TREE_MODEL (THUNAR_STANDARD_VIEW (details_view)->model), &iter, path);
+              file = thunar_list_model_get_file (THUNAR_STANDARD_VIEW (details_view)->model, &iter);
+              if (G_LIKELY (file != NULL))
+                {
+                  /* determine the action to perform depending on the type of the file */
+                  action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (details_view)->action_group,
+                                                        thunar_file_is_directory (file) ? "open-in-new-window" : "open");
+      
+                  /* emit the action */
+                  if (G_LIKELY (action != NULL))
+                    gtk_action_activate (action);
+
+                  /* release the file reference */
+                  g_object_unref (G_OBJECT (file));
+                }
+            }
+
+          /* cleanup */
+          gtk_tree_path_free (path);
+        }
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_details_view_key_press_event (GtkTreeView       *tree_view,
+                                     GdkEventKey       *event,
+                                     ThunarDetailsView *details_view)
+{
+  /* popup context menu if "Menu" or "<Shift>F10" is pressed */
+  if (event->keyval == GDK_Menu || ((event->state & GDK_SHIFT_MASK) != 0 && event->keyval == GDK_F10))
+    {
+      thunar_standard_view_context_menu (THUNAR_STANDARD_VIEW (details_view), 0, event->time);
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_details_view_row_activated (GtkTreeView       *tree_view,
+                                   GtkTreePath       *path,
+                                   GtkTreeViewColumn *column,
+                                   ThunarDetailsView *details_view)
+{
+  GtkTreeSelection *selection;
+  GtkAction        *action;
+
+  g_return_if_fail (THUNAR_IS_DETAILS_VIEW (details_view));
+
+  /* be sure to have only the double clicked item selected */
+  selection = gtk_tree_view_get_selection (tree_view);
+  gtk_tree_selection_unselect_all (selection);
+  gtk_tree_selection_select_path (selection, path);
+
+  /* emit the "open" action */
+  action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (details_view)->action_group, "open");
+  if (G_LIKELY (action != NULL))
+    gtk_action_activate (action);
+}
+
+
+
+/**
+ * thunar_details_view_new:
+ *
+ * Allocates a new #ThunarDetailsView instance, which is not
+ * associated with any #ThunarListModel yet.
+ *
+ * Return value: the newly allocated #ThunarDetailsView instance.
+ **/
+GtkWidget*
+thunar_details_view_new (void)
+{
+  return g_object_new (THUNAR_TYPE_DETAILS_VIEW, NULL);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-details-view.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-details-view.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_DETAILS_VIEW_H__
+#define __THUNAR_DETAILS_VIEW_H__
+
+#include <thunar/thunar-standard-view.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarDetailsViewClass ThunarDetailsViewClass;
+typedef struct _ThunarDetailsView      ThunarDetailsView;
+
+#define THUNAR_TYPE_DETAILS_VIEW            (thunar_details_view_get_type ())
+#define THUNAR_DETAILS_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_DETAILS_VIEW, ThunarDetailsView))
+#define THUNAR_DETAILS_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_DETAILS_VIEW, ThunarDetailsViewClass))
+#define THUNAR_IS_DETAILS_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_DETAILS_VIEW))
+#define THUNAR_IS_DETAILS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_DETAILS_VIEW))
+#define THUNAR_DETAILS_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_DETAILS_VIEW, ThunarDetailsViewClass))
+
+GType      thunar_details_view_get_type (void) G_GNUC_CONST;
+
+GtkWidget *thunar_details_view_new      (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_DETAILS_VIEW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,89 @@
+/* $Id: thunar-dialogs.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar/thunar-dialogs.h>
+
+
+
+/**
+ * thunar_dialogs_show_error:
+ * @widget : a #GtkWidget on which the error dialog should be shown or %NULL.
+ * @error  : a #GError, which gives a more precise description of the problem or %NULL.
+ * @format : the printf()-style format for the primary problem description.
+ * @...    : argument list for the @format.
+ *
+ * Displays an error dialog on @widget using the @format as primary message and optionally
+ * displaying @error as secondary error text.
+ *
+ * If @widget is not %NULL and @widget is part of a #GtkWindow, the function makes sure
+ * that the toplevel window is visible prior to displaying the error dialog.
+ **/
+void
+thunar_dialogs_show_error (GtkWidget    *widget,
+                           const GError *error,
+                           const gchar  *format,
+                           ...)
+{
+  GtkWidget *dialog;
+  GtkWidget *window;
+  va_list    args;
+  gchar     *primary_text;
+
+  /* determine the toplevel window and make sure it's shown */
+  window = (widget != NULL) ? gtk_widget_get_toplevel (widget) : NULL;
+  if (G_LIKELY (window != NULL))
+    gtk_widget_show_now (window);
+
+  /* determine the primary error text */
+  va_start (args, format);
+  primary_text = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  /* allocate the error dialog */
+  dialog = gtk_message_dialog_new ((GtkWindow *) window,
+                                   GTK_DIALOG_DESTROY_WITH_PARENT
+                                   | GTK_DIALOG_MODAL,
+                                   GTK_MESSAGE_ERROR,
+                                   GTK_BUTTONS_CLOSE,
+                                   _("%s."), primary_text);
+
+  /* set secondary text if an error is provided */
+  if (G_LIKELY (error != NULL))
+    gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("%s."), error->message);
+
+  /* display the dialog */
+  gtk_dialog_run (GTK_DIALOG (dialog));
+
+  /* cleanup */
+  gtk_widget_destroy (dialog);
+  g_free (primary_text);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dialogs.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+/* $Id: thunar-dialogs.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_DIALOGS_H__
+#define __THUNAR_DIALOGS_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+void thunar_dialogs_show_error (GtkWidget    *widget,
+                                const GError *error,
+                                const gchar  *format,
+                                ...) G_GNUC_INTERNAL G_GNUC_PRINTF (3, 4);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_DIALOGS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,208 @@
+/* $Id: thunar-dnd.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-dnd.h>
+
+
+
+static void
+action_selected (GtkWidget     *item,
+                 GdkDragAction *action)
+{
+  *action = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (item), "action"));
+}
+
+
+
+/**
+ * thunar_dnd_ask:
+ * @widget  : the widget on which the drop was performed.
+ * @time    : the time of the drop event.
+ * @actions : the list of actions supported for the drop.
+ *
+ * Pops up a menu that asks the user to choose one of the
+ * @actions or to cancel the drop. If the user chooses a
+ * valid #GdkDragAction from @actions, then this action is
+ * returned. Else if the user cancels the drop, 0 will be
+ * returned.
+ *
+ * This method can be used to implement a response to the
+ * #GDK_ACTION_ASK action on drops.
+ *
+ * Return value: the selected #GdkDragAction or 0 to cancel.
+ **/
+GdkDragAction
+thunar_dnd_ask (GtkWidget    *widget,
+                guint         time,
+                GdkDragAction actions)
+{
+  static const GdkDragAction action_items[] = { GDK_ACTION_COPY, GDK_ACTION_MOVE, GDK_ACTION_LINK };
+  static const gchar        *action_names[] = { N_ ("_Copy here"), N_ ("_Move here"), N_ ("_Link here") };
+  static const gchar        *action_icons[] = { "stock_folder-copy", "stock_folder-move", NULL };
+
+  GdkDragAction action = 0;
+  GtkWidget    *image;
+  GtkWidget    *menu;
+  GtkWidget    *item;
+  GMainLoop    *loop;
+  guint         n;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
+
+  /* prepare the internal loop */
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* prepare the popup menu */
+  menu = gtk_menu_new ();
+  gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));
+  g_signal_connect_swapped (G_OBJECT (menu), "deactivate", G_CALLBACK (g_main_loop_quit), loop);
+
+  /* append the various items */
+  for (n = 0; n < G_N_ELEMENTS (action_items); ++n)
+    if (G_LIKELY ((actions & action_items[n]) != 0))
+      {
+        item = gtk_image_menu_item_new_with_mnemonic (_(action_names[n]));
+        g_object_set_data (G_OBJECT (item), "action", GUINT_TO_POINTER (action_items[n]));
+        g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (action_selected), &action);
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+        gtk_widget_show (item);
+
+        /* add image to the menu item */
+        if (G_LIKELY (action_icons[n] != NULL))
+          {
+            image = gtk_image_new_from_icon_name (action_icons[n], GTK_ICON_SIZE_MENU);
+            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+            gtk_widget_show (image);
+          }
+      }
+
+  /* append the separator */
+  item = gtk_separator_menu_item_new ();
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show (item);
+
+  /* append the cancel item */
+  item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CANCEL, NULL);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show (item);
+
+  /* run the internal loop */
+  gtk_grab_add (menu);
+  gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 3, time);
+  g_main_loop_run (loop);
+  gtk_grab_remove (menu);
+
+  /* clean up */
+  gtk_object_sink (GTK_OBJECT (menu));
+  g_main_loop_unref (loop);
+
+  return action;
+}
+
+
+
+/**
+ * thunar_dnd_perform:
+ * @widget            : the #GtkWidget on which the drop was done.
+ * @file              : the #ThunarFile on which the @path_list was dropped.
+ * @path_list         : the list of #ThunarVfsPath<!---->s that was dropped.
+ * @action            : the #GdkDragAction that was performed.
+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal,
+ *                      which will be emitted when the job finishes with the
+ *                      list of #ThunarVfsPath<!---->s created by the job, or
+ *                      %NULL if you're not interested in the signal.
+ *
+ * Performs the drop of @path_list on @file in @widget, as given in
+ * @action and returns %TRUE if the drop was started successfully
+ * (or even completed successfully), else %FALSE.
+ *
+ * Return value: %TRUE if the DnD operation was started
+ *               successfully, else %FALSE.
+ **/
+gboolean
+thunar_dnd_perform (GtkWidget    *widget,
+                    ThunarFile   *file,
+                    GList        *path_list,
+                    GdkDragAction action,
+                    GClosure     *new_files_closure)
+{
+  ThunarApplication *application;
+  gboolean           succeed = TRUE;
+  GError            *error = NULL;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), FALSE);
+
+  /* query a reference on the application object */
+  application = thunar_application_get ();
+
+  /* check if the file is a directory */
+  if (thunar_file_is_directory (file))
+    {
+      /* perform the given directory operation */
+      switch (action)
+        {
+        case GDK_ACTION_COPY:
+          thunar_application_copy_into (application, widget, path_list, thunar_file_get_path (file), new_files_closure);
+          break;
+
+        case GDK_ACTION_MOVE:
+          thunar_application_move_into (application, widget, path_list, thunar_file_get_path (file), new_files_closure);
+          break;
+
+        case GDK_ACTION_LINK:
+          thunar_application_link_into (application, widget, path_list, thunar_file_get_path (file), new_files_closure);
+          break;
+
+        default:
+          succeed = FALSE;
+        }
+    }
+  else if (thunar_file_is_executable (file))
+    {
+      succeed = thunar_file_execute (file, gtk_widget_get_screen (widget), path_list, &error);
+      if (G_UNLIKELY (!succeed))
+        {
+          /* display an error to the user */
+          thunar_dialogs_show_error (widget, error, _("Unable to execute file `%s'"), thunar_file_get_display_name (file));
+
+          /* release the error */
+          g_error_free (error);
+        }
+    }
+  else
+    {
+      succeed = FALSE;
+    }
+
+  /* release the application reference */
+  g_object_unref (G_OBJECT (application));
+
+  return succeed;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-dnd.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,39 @@
+/* $Id: thunar-dnd.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_DND_H__
+#define __THUNAR_DND_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+GdkDragAction thunar_dnd_ask     (GtkWidget    *widget,
+                                  guint         time,
+                                  GdkDragAction actions);
+
+gboolean      thunar_dnd_perform (GtkWidget    *widget,
+                                  ThunarFile   *file,
+                                  GList        *uri_list,
+                                  GdkDragAction action,
+                                  GClosure     *new_files_closure);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_DND_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,519 @@
+/* $Id: thunar-emblem-chooser.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-emblem-chooser.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_FILE,
+};
+
+
+
+static void       thunar_emblem_chooser_class_init      (ThunarEmblemChooserClass *klass);
+static void       thunar_emblem_chooser_init            (ThunarEmblemChooser      *chooser);
+static void       thunar_emblem_chooser_dispose         (GObject                  *object);
+static void       thunar_emblem_chooser_finalize        (GObject                  *object);
+static void       thunar_emblem_chooser_get_property    (GObject                  *object,
+                                                         guint                     prop_id,
+                                                         GValue                   *value,
+                                                         GParamSpec               *pspec);
+static void       thunar_emblem_chooser_set_property    (GObject                  *object,
+                                                         guint                     prop_id,
+                                                         const GValue             *value,
+                                                         GParamSpec               *pspec);
+static void       thunar_emblem_chooser_realize         (GtkWidget                *widget);
+static void       thunar_emblem_chooser_unrealize       (GtkWidget                *widget);
+static void       thunar_emblem_chooser_button_toggled  (GtkToggleButton          *button,
+                                                         ThunarEmblemChooser      *chooser);
+static void       thunar_emblem_chooser_file_changed    (ThunarFile               *file,
+                                                         ThunarEmblemChooser      *chooser);
+static void       thunar_emblem_chooser_theme_changed   (GtkIconTheme             *icon_theme,
+                                                         ThunarEmblemChooser      *chooser);
+static void       thunar_emblem_chooser_create_buttons  (ThunarEmblemChooser      *chooser);
+static GtkWidget *thunar_emblem_chooser_create_button   (ThunarEmblemChooser      *chooser,
+                                                         const gchar              *emblem);
+
+
+
+struct _ThunarEmblemChooserClass
+{
+  GtkScrolledWindowClass __parent__;
+};
+
+struct _ThunarEmblemChooser
+{
+  GtkScrolledWindow __parent__;
+
+  GtkIconTheme *icon_theme;
+  GtkSizeGroup *size_group;
+  ThunarFile   *file;
+  GtkWidget    *table;
+};
+
+
+
+G_DEFINE_TYPE (ThunarEmblemChooser, thunar_emblem_chooser, GTK_TYPE_SCROLLED_WINDOW);
+
+
+
+static void
+thunar_emblem_chooser_class_init (ThunarEmblemChooserClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_emblem_chooser_dispose;
+  gobject_class->finalize = thunar_emblem_chooser_finalize;
+  gobject_class->get_property = thunar_emblem_chooser_get_property;
+  gobject_class->set_property = thunar_emblem_chooser_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->realize = thunar_emblem_chooser_realize;
+  gtkwidget_class->unrealize = thunar_emblem_chooser_unrealize;
+
+  /**
+   * ThunarEmblemChooser::file:
+   *
+   * The file for which emblems should be choosen.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("File"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_emblem_chooser_init (ThunarEmblemChooser *chooser)
+{
+  GtkWidget *viewport;
+
+  /* setup the scrolled window instance */
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (chooser), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (chooser), NULL);
+  gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (chooser), NULL);
+
+  /* setup the viewport */
+  viewport = gtk_viewport_new (gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (chooser)),
+                               gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (chooser)));
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_NONE);
+  gtk_container_add (GTK_CONTAINER (chooser), viewport);
+  gtk_widget_show (viewport);
+
+  /* setup the wrap table */
+  chooser->table = g_object_new (EXO_TYPE_WRAP_TABLE, "border-width", 6, "homogeneous", TRUE, NULL);
+  gtk_container_add (GTK_CONTAINER (viewport), chooser->table);
+  gtk_widget_show (chooser->table);
+
+  /* allocate a size-group for the buttons */
+  chooser->size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
+}
+
+
+
+static void
+thunar_emblem_chooser_dispose (GObject *object)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (object);
+
+  /* disconnect from the file */
+  thunar_emblem_chooser_set_file (chooser, NULL);
+
+  (*G_OBJECT_CLASS (thunar_emblem_chooser_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_emblem_chooser_finalize (GObject *object)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (object);
+
+  /* release the size-group */
+  g_object_unref (G_OBJECT (chooser->size_group));
+
+  (*G_OBJECT_CLASS (thunar_emblem_chooser_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_emblem_chooser_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      g_value_set_object (value, thunar_emblem_chooser_get_file (chooser));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_emblem_chooser_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      thunar_emblem_chooser_set_file (chooser, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_emblem_chooser_realize (GtkWidget *widget)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (widget);
+
+  /* let the GtkWidget class perform the realization */
+  (*GTK_WIDGET_CLASS (thunar_emblem_chooser_parent_class)->realize) (widget);
+
+  /* determine the icon theme for the new screen */
+  chooser->icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+  g_signal_connect (G_OBJECT (chooser->icon_theme), "changed",
+                    G_CALLBACK (thunar_emblem_chooser_theme_changed),
+                    chooser);
+  g_object_ref (G_OBJECT (chooser->icon_theme));
+
+  /* create the emblem buttons */
+  thunar_emblem_chooser_create_buttons (chooser);
+}
+
+
+
+static void
+thunar_emblem_chooser_unrealize (GtkWidget *widget)
+{
+  ThunarEmblemChooser *chooser = THUNAR_EMBLEM_CHOOSER (widget);
+
+  /* drop all check buttons */
+  gtk_container_foreach (GTK_CONTAINER (chooser->table), (GtkCallback) gtk_widget_destroy, NULL);
+
+  /* release our reference on the icon theme */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (chooser->icon_theme), thunar_emblem_chooser_theme_changed, chooser);
+  g_object_unref (G_OBJECT (chooser->icon_theme));
+  chooser->icon_theme = NULL;
+
+  /* let the GtkWidget class perform the unrealization */
+  (*GTK_WIDGET_CLASS (thunar_emblem_chooser_parent_class)->unrealize) (widget);
+}
+
+
+
+static void
+thunar_emblem_chooser_button_toggled (GtkToggleButton     *button,
+                                      ThunarEmblemChooser *chooser)
+{
+  const gchar *emblem_name;
+  GList *emblem_names = NULL;
+  GList *children;
+  GList *lp;
+
+  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));
+  g_return_if_fail (THUNAR_IS_EMBLEM_CHOOSER (chooser));
+
+  /* we just ignore toggle events if no file is set */
+  if (G_LIKELY (chooser->file == NULL))
+    return;
+
+  /* determine the list of selected emblems */
+  children = gtk_container_get_children (GTK_CONTAINER (chooser->table));
+  for (lp = children; lp != NULL; lp = lp->next)
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lp->data)))
+      {
+        emblem_name = g_object_get_data (G_OBJECT (lp->data), "thunar-emblem");
+        emblem_names = g_list_append (emblem_names, g_strdup (emblem_name));
+      }
+  g_list_free (children);
+
+  /* setup the new emblem name list for the file */
+  thunar_file_set_emblem_names (chooser->file, emblem_names);
+
+  /* release the emblem name list */
+  g_list_foreach (emblem_names, (GFunc) g_free, NULL);
+  g_list_free (emblem_names);
+}
+
+
+
+static void
+thunar_emblem_chooser_file_changed (ThunarFile          *file,
+                                    ThunarEmblemChooser *chooser)
+{
+  const gchar *emblem_name;
+  GList       *emblem_names;
+  GList       *children;
+  GList       *lp;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_EMBLEM_CHOOSER (chooser));
+  g_return_if_fail (chooser->file == file);
+
+  /* temporarily reset the file attribute */
+  chooser->file = NULL;
+
+  /* determine the emblems set for the file */
+  emblem_names = thunar_file_get_emblem_names (file);
+
+  /* toggle the button states appropriately */
+  children = gtk_container_get_children (GTK_CONTAINER (chooser->table));
+  for (lp = children; lp != NULL; lp = lp->next)
+    {
+      emblem_name = g_object_get_data (G_OBJECT (lp->data), "thunar-emblem");
+      if (g_list_find_custom (emblem_names, emblem_name, (GCompareFunc) strcmp) != NULL)
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lp->data), TRUE);
+      else
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lp->data), FALSE);
+    }
+  g_list_free (children);
+
+  /* reset the file attribute */
+  chooser->file = file;
+}
+
+
+
+static void
+thunar_emblem_chooser_theme_changed (GtkIconTheme        *icon_theme,
+                                     ThunarEmblemChooser *chooser)
+{
+  g_return_if_fail (GTK_IS_ICON_THEME (icon_theme));
+  g_return_if_fail (THUNAR_IS_EMBLEM_CHOOSER (chooser));
+  g_return_if_fail (chooser->icon_theme == icon_theme);
+
+  /* drop the current buttons */
+  gtk_container_foreach (GTK_CONTAINER (chooser->table), (GtkCallback) gtk_widget_destroy, NULL);
+
+  /* create buttons for the new theme */
+  thunar_emblem_chooser_create_buttons (chooser);
+}
+
+
+
+static void
+thunar_emblem_chooser_create_buttons (ThunarEmblemChooser *chooser)
+{
+  GtkWidget *button;
+  GList     *emblems;
+  GList     *lp;
+
+  /* determine the emblems for the icon theme */
+  emblems = gtk_icon_theme_list_icons (chooser->icon_theme, "Emblems");
+
+  /* sort the emblem list */
+  emblems = g_list_sort (emblems, (GCompareFunc) g_ascii_strcasecmp);
+
+  /* create buttons for the emblems */
+  for (lp = emblems; lp != NULL; lp = lp->next)
+    {
+      /* skip special emblems, as they cannot be selected */
+      if (strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_SYMBOLIC_LINK) != 0
+          && strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_CANT_READ) != 0
+          && strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_CANT_WRITE) != 0
+          && strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_DESKTOP) != 0)
+        {
+          /* create a button and add it to the table */
+          button = thunar_emblem_chooser_create_button (chooser, lp->data);
+          if (G_LIKELY (button != NULL))
+            {
+              gtk_container_add (GTK_CONTAINER (chooser->table), button);
+              gtk_widget_show (button);
+            }
+        }
+      g_free (lp->data);
+    }
+  g_list_free (emblems);
+
+  /* be sure to update the buttons according to the selected file */
+  if (G_LIKELY (chooser->file != NULL))
+    thunar_emblem_chooser_file_changed (chooser->file, chooser);
+}
+
+
+
+static GtkWidget*
+thunar_emblem_chooser_create_button (ThunarEmblemChooser *chooser,
+                                     const gchar         *emblem)
+{
+  GtkIconInfo *info;
+  const gchar *name;
+  GtkWidget   *button = NULL;
+  GtkWidget   *image;
+  GtkWidget   *label;
+  GtkWidget   *vbox;
+  GdkPixbuf   *icon;
+
+  /* lookup the icon info for the emblem */
+  info = gtk_icon_theme_lookup_icon (chooser->icon_theme, emblem, 48, 0);
+  if (G_UNLIKELY (info == NULL))
+    return NULL;
+
+  /* try to load the icon */
+  icon = gtk_icon_info_load_icon (info, NULL);
+  if (G_UNLIKELY (icon == NULL))
+    goto done;
+
+  /* determine the display name for the emblem */
+  name = gtk_icon_info_get_display_name (info);
+  if (G_UNLIKELY (name == NULL))
+    name = (strncmp (emblem, "emblem-", 7) == 0) ? emblem + 7 : emblem;
+
+  /* allocate the button */
+  button = gtk_check_button_new ();
+  GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);
+  g_object_set_data_full (G_OBJECT (button), "thunar-emblem", g_strdup (emblem), g_free);
+  g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (thunar_emblem_chooser_button_toggled), chooser);
+
+  /* allocate the box */
+  vbox = gtk_vbox_new (FALSE, 2);
+  gtk_size_group_add_widget (chooser->size_group, vbox);
+  gtk_container_add (GTK_CONTAINER (button), vbox);
+  gtk_widget_show (vbox);
+
+  /* allocate the image */
+  image = gtk_image_new_from_pixbuf (icon);
+  gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0);
+  gtk_widget_show (image);
+
+  /* allocate the label */
+  label = gtk_label_new (name);
+  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  g_object_unref (G_OBJECT (icon));
+done:
+  gtk_icon_info_free (info);
+  return button;
+}
+
+
+
+/**
+ * thunar_emblem_chooser_new:
+ *
+ * Allocates a new #ThunarEmblemChooser.
+ *
+ * Return value: the newly allocated #ThunarEmblemChooser.
+ **/
+GtkWidget*
+thunar_emblem_chooser_new (void)
+{
+  return g_object_new (THUNAR_TYPE_EMBLEM_CHOOSER, NULL);
+}
+
+
+
+/**
+ * thunar_emblem_chooser_get_file:
+ * @chooser : a #ThunarEmblemChooser.
+ *
+ * Returns the #ThunarFile associated with
+ * the @chooser or %NULL.
+ *
+ * Return value: the #ThunarFile associated
+ *               with @chooser.
+ **/
+ThunarFile*
+thunar_emblem_chooser_get_file (const ThunarEmblemChooser *chooser)
+{
+  g_return_val_if_fail (THUNAR_IS_EMBLEM_CHOOSER (chooser), NULL);
+  return chooser->file;
+}
+
+
+
+/**
+ * thunar_emblem_chooser_set_file:
+ * @chooser : a #ThunarEmblemChooser.
+ * @file    : a #ThunarFile or %NULL.
+ *
+ * Associates @chooser with @file.
+ **/
+void
+thunar_emblem_chooser_set_file (ThunarEmblemChooser *chooser,
+                                ThunarFile          *file)
+{
+  g_return_if_fail (THUNAR_IS_EMBLEM_CHOOSER (chooser));
+  g_return_if_fail (file == NULL || THUNAR_IS_FILE (file));
+
+  if (G_LIKELY (chooser->file != file))
+    {
+      /* disconnect from the previous file (if any) */
+      if (G_LIKELY (chooser->file != NULL))
+        {
+          g_signal_handlers_disconnect_by_func (G_OBJECT (chooser->file), thunar_emblem_chooser_file_changed, chooser);
+          g_object_unref (G_OBJECT (chooser->file));
+        }
+
+      /* activate the new file */
+      chooser->file = file;
+
+      /* connect to the new file (if any) */
+      if (G_LIKELY (file != NULL))
+        {
+          g_object_ref (G_OBJECT (file));
+          thunar_emblem_chooser_file_changed (file, chooser);
+          g_signal_connect (G_OBJECT (file), "changed", G_CALLBACK (thunar_emblem_chooser_file_changed), chooser);
+        }
+    }
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-emblem-chooser.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-emblem-chooser.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_EMBLEM_CHOOSER_H__
+#define __THUNAR_EMBLEM_CHOOSER_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarEmblemChooserClass ThunarEmblemChooserClass;
+typedef struct _ThunarEmblemChooser      ThunarEmblemChooser;
+
+#define THUNAR_TYPE_EMBLEM_CHOOSER            (thunar_emblem_chooser_get_type ())
+#define THUNAR_EMBLEM_CHOOSER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_EMBLEM_CHOOSER, ThunarEmblemChooser))
+#define THUNAR_EMBLEM_CHOOSER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_EMBLEM_CHOOSER, ThunarEmblemChooserClass))
+#define THUNAR_IS_EMBLEM_CHOOSER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_EMBLEM_CHOOSER))
+#define THUNAR_IS_EMBLEM_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_EMBLEM_CHOOSER))
+#define THUNAR_EMBLEM_CHOOSER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_EMBLEM_CHOOSER, ThunarEmblemChooserClass))
+
+GType       thunar_emblem_chooser_get_type (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_emblem_chooser_new      (void) G_GNUC_MALLOC;
+
+ThunarFile *thunar_emblem_chooser_get_file (const ThunarEmblemChooser *chooser);
+void        thunar_emblem_chooser_set_file (ThunarEmblemChooser       *chooser,
+                                            ThunarFile                *file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_EMBLEM_CHOOSER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,488 @@
+/* $Id: thunar-extension-manager.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gmodule.h>
+
+#include <exo/exo.h>
+
+#include <thunar/thunar-extension-manager.h>
+
+
+
+#define THUNAR_EXTENSIONS_DIRECTORY (LIBDIR G_DIR_SEPARATOR_S "thunarx-" THUNAR_VERSION_API)
+
+
+
+enum
+{
+  PROP_0,
+  PROP_RESIDENT,
+};
+
+
+
+typedef struct _ThunarExtensionClass ThunarExtensionClass;
+typedef struct _ThunarExtension      ThunarExtension;
+
+
+
+#define THUNAR_TYPE_EXTENSION             (thunar_extension_get_type ())
+#define THUNAR_EXTENSION(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_EXTENSION, ThunarExtension))
+#define THUNAR_EXTENSION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_EXTENSION, ThunarExtensionClass))
+#define THUNAR_IS_EXTENSION(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_EXTENSION))
+#define THUNAR_IS_EXTENSION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_EXTENSION))
+#define THUNAR_EXTENSION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_EXTENSION, ThunarExtensionClass))
+
+
+
+static GType    thunar_extension_get_type     (void) G_GNUC_CONST;
+static void     thunar_extension_class_init   (ThunarExtensionClass *klass);
+static void     thunar_extension_finalize     (GObject              *object);
+static void     thunar_extension_get_property (GObject              *object,
+                                               guint                 prop_id,
+                                               GValue               *value,
+                                               GParamSpec           *pspec);
+static void     thunar_extension_set_property (GObject              *object,
+                                               guint                 prop_id,
+                                               const GValue         *value,
+                                               GParamSpec           *pspec);
+static gboolean thunar_extension_load         (GTypeModule          *module);
+static void     thunar_extension_unload       (GTypeModule          *module);
+static void     thunar_extension_list_types   (ThunarExtension      *extension,
+                                               const GType         **types,
+                                               gint                 *n_types);
+
+
+
+struct _ThunarExtensionClass
+{
+  GTypeModuleClass __parent__;
+};
+
+struct _ThunarExtension
+{
+  GTypeModule __parent__;
+
+  gchar   *path;
+  GModule *module;
+  gboolean resident;
+
+  void (*initialize)  (GTypeModule  *module);
+  void (*shutdown)    (void);
+  void (*list_types)  (const GType **types,
+                       gint         *n_types);
+};
+
+
+
+static GObjectClass *thunar_extension_parent_class;
+
+
+
+static GType
+thunar_extension_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarExtensionClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_extension_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarExtension),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_TYPE_MODULE, "ThunarExtension", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_extension_class_init (ThunarExtensionClass *klass)
+{
+  GTypeModuleClass *gtype_module_class;
+  GObjectClass     *gobject_class;
+
+  /* determine the parent class */
+  thunar_extension_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_extension_finalize;
+  gobject_class->get_property = thunar_extension_get_property;
+  gobject_class->set_property = thunar_extension_set_property;
+
+  gtype_module_class = G_TYPE_MODULE_CLASS (klass);
+  gtype_module_class->load = thunar_extension_load;
+  gtype_module_class->unload = thunar_extension_unload;
+
+  /**
+   * ThunarExtension::resident:
+   *
+   * Tells whether the extension must reside in memory once loaded
+   * for the first time.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_RESIDENT,
+                                   g_param_spec_boolean ("resident",
+                                                         _("Resident"),
+                                                         _("Ensures that an extension will never be unloaded."),
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_extension_finalize (GObject *object)
+{
+  ThunarExtension *extension = THUNAR_EXTENSION (object);
+
+  /* free the path to the extension */
+  g_free (extension->path);
+
+  (*G_OBJECT_CLASS (thunar_extension_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_extension_get_property (GObject    *object,
+                               guint       prop_id,
+                               GValue     *value,
+                               GParamSpec *pspec)
+{
+  ThunarExtension *extension = THUNAR_EXTENSION (object);
+
+  switch (prop_id)
+    {
+    case PROP_RESIDENT:
+      g_value_set_boolean (value, extension->resident);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_extension_set_property (GObject      *object,
+                               guint         prop_id,
+                               const GValue *value,
+                               GParamSpec   *pspec)
+{
+  ThunarExtension *extension = THUNAR_EXTENSION (object);
+
+  switch (prop_id)
+    {
+    case PROP_RESIDENT:
+      extension->resident = g_value_get_boolean (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static gboolean
+thunar_extension_load (GTypeModule *module)
+{
+  ThunarExtension *extension = THUNAR_EXTENSION (module);
+
+  /* load the extension using the runtime link editor */
+  extension->module = g_module_open (extension->path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+
+  /* check if the load operation was successful */
+  if (G_UNLIKELY (extension->module == NULL))
+    {
+      g_warning ("Failed to load file manager extension from %s: %s", extension->path, g_module_error ());
+      return FALSE;
+    }
+
+  /* verify that all required public symbols are present in the extension's symbol table */
+  if (!g_module_symbol (extension->module, "thunar_extension_shutdown", (gpointer) &extension->shutdown)
+      || !g_module_symbol (extension->module, "thunar_extension_initialize", (gpointer) &extension->initialize)
+      || !g_module_symbol (extension->module, "thunar_extension_list_types", (gpointer) &extension->list_types))
+    {
+      g_warning ("File manager extension loaded from %s lacks required symbols.", extension->path);
+      g_module_close (extension->module);
+      return FALSE;
+    }
+
+  /* initialize the extension */
+  (*extension->initialize) (module);
+
+  /* ensure that the module will never be unloaded
+   * if the extension requests to be kept in memory
+   */
+  if (G_UNLIKELY (extension->resident))
+    g_module_make_resident (extension->module);
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_extension_unload (GTypeModule *module)
+{
+  ThunarExtension *extension = THUNAR_EXTENSION (module);
+
+  /* shutdown the extension */
+  (*extension->shutdown) ();
+
+  /* unload the extension from memory */
+  g_module_close (extension->module);
+
+  /* reset extension state */
+  extension->module = NULL;
+  extension->shutdown = NULL;
+  extension->initialize = NULL;
+  extension->list_types = NULL;
+}
+
+
+
+static void
+thunar_extension_list_types (ThunarExtension *extension,
+                             const GType    **types,
+                             gint            *n_types)
+{
+  g_return_if_fail (THUNAR_IS_EXTENSION (extension));
+  g_return_if_fail (n_types != NULL);
+  g_return_if_fail (types != NULL);
+
+  (*extension->list_types) (types, n_types);
+}
+
+
+
+
+static void thunar_extension_manager_class_init (ThunarExtensionManagerClass *klass);
+static void thunar_extension_manager_init       (ThunarExtensionManager      *manager);
+static void thunar_extension_manager_finalize   (GObject                     *object);
+static void thunar_extension_manager_add        (ThunarExtensionManager      *manager,
+                                                 ThunarExtension             *extension);
+
+
+
+struct _ThunarExtensionManagerClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarExtensionManager
+{
+  GObject __parent__;
+
+  GList *extensions;
+
+  GType *types;
+  gint   n_types;
+};
+
+
+
+G_DEFINE_TYPE (ThunarExtensionManager, thunar_extension_manager, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_extension_manager_class_init (ThunarExtensionManagerClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_extension_manager_finalize;
+}
+
+
+
+static void
+thunar_extension_manager_init (ThunarExtensionManager *manager)
+{
+  ThunarExtension *extension;
+  const gchar     *name;
+  GDir            *dp;
+
+  // FIXME: Perform this in a timer as the extensions aren't required to
+  // be available instantly, maybe even load the files in a separate thread!
+  dp = g_dir_open (THUNAR_EXTENSIONS_DIRECTORY, 0, NULL);
+  if (G_LIKELY (dp != NULL))
+    {
+      /* determine the types for all existing extensions */
+      for (;;)
+        {
+          /* read the next entry from the directory */
+          name = g_dir_read_name (dp);
+          if (G_UNLIKELY (name == NULL))
+            break;
+
+          /* check if this is a valid extension file */
+          if (g_str_has_suffix (name, "." G_MODULE_SUFFIX))
+            {
+              /* generate an extension object for the file */
+              extension = g_object_new (THUNAR_TYPE_EXTENSION, NULL);
+              extension->path = g_build_filename (THUNAR_EXTENSIONS_DIRECTORY, name, NULL);
+
+              /* try to load the extension */
+              if (g_type_module_use (G_TYPE_MODULE (extension)))
+                {
+                  /* add the extension to our list of managed extensions */
+                  thunar_extension_manager_add (manager, extension);
+
+                  /* don't unuse the type plugin if it should be resident in memory */
+                  if (G_LIKELY (!extension->resident))
+                    g_type_module_unuse (G_TYPE_MODULE (extension));
+                }
+
+              /* drop the reference on the extension */
+              g_object_unref (G_OBJECT (extension));
+            }
+        }
+
+      g_dir_close (dp);
+    }
+}
+
+
+
+static void
+thunar_extension_manager_finalize (GObject *object)
+{
+  ThunarExtensionManager *manager = THUNAR_EXTENSION_MANAGER (object);
+
+  /* release the extensions */
+  g_list_foreach (manager->extensions, (GFunc) g_object_unref, NULL);
+  g_list_free (manager->extensions);
+
+  /* free the types list */
+  g_free (manager->types);
+
+  (*G_OBJECT_CLASS (thunar_extension_manager_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_extension_manager_add (ThunarExtensionManager *manager,
+                              ThunarExtension        *extension)
+{
+  const GType *types;
+  gint         n_types;
+
+  /* add the extension to our internal list */
+  manager->extensions = g_list_prepend (manager->extensions, g_object_ref (G_OBJECT (extension)));
+
+  /* determines the types provided by the extension */
+  thunar_extension_list_types (extension, &types, &n_types);
+
+  /* add the types provided by the extension */
+  manager->types = g_realloc (manager->types, sizeof (GType) * (manager->n_types + n_types));
+  for (; n_types-- > 0; ++types)
+    manager->types[manager->n_types++] = *types;
+}
+
+
+
+/**
+ * thunar_extension_manager_get_default:
+ *
+ * Returns a reference to the default #ThunarExtensionManager
+ * instance.
+ *
+ * The caller is responsible to free the returned object
+ * using g_object_unref() when no longer needed.
+ *
+ * Return value: a reference to the default
+ *               #ThunarExtensionManager instance.
+ **/
+ThunarExtensionManager*
+thunar_extension_manager_get_default (void)
+{
+  static ThunarExtensionManager *manager = NULL;
+
+  if (G_UNLIKELY (manager == NULL))
+    manager = g_object_new (THUNAR_TYPE_EXTENSION_MANAGER, NULL);
+
+  g_object_ref (G_OBJECT (manager));
+
+  return manager;
+}
+
+
+
+/**
+ * thunar_extension_manager_list_providers:
+ * @manager : a #ThunarExtensionManager instance.
+ * @type    : the provider #GType.
+ *
+ * Returns all providers of the given @type.
+ *
+ * The caller is responsible to release the returned
+ * list of providers using code like this:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the of providers for @type.
+ **/
+GList*
+thunar_extension_manager_list_providers (ThunarExtensionManager *manager,
+                                         GType                   type)
+{
+  GObject *provider;
+  GList   *providers = NULL;
+  GType   *types;
+  gint     n;
+
+  for (n = manager->n_types, types = manager->types; n > 0; --n, ++types)
+    if (G_LIKELY (g_type_is_a (*types, type)))
+      {
+        provider = g_object_new (*types, NULL);
+        if (G_LIKELY (provider != NULL))
+          providers = g_list_append (providers, provider);
+      }
+
+  return providers;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-extension-manager.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,46 @@
+/* $Id: thunar-extension-manager.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_EXTENSION_MANAGER_H__
+#define __THUNAR_EXTENSION_MANAGER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarExtensionManagerClass ThunarExtensionManagerClass;
+typedef struct _ThunarExtensionManager      ThunarExtensionManager;
+
+#define THUNAR_TYPE_EXTENSION_MANAGER             (thunar_extension_manager_get_type ())
+#define THUNAR_EXTENSION_MANAGER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_EXTENSION_MANAGER, ThunarExtensionManager))
+#define THUNAR_EXTENSION_MANAGER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_EXTENSION_MANAGER, ThunarExtensionManagerClass))
+#define THUNAR_IS_EXTENSION_MANAGER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_EXTENSION_MANAGER))
+#define THUNAR_IS_EXTENSION_MANAGER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_EXTENSION_MANAGER))
+#define THUNAR_EXTENSION_MANAGER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_EXTENSION_MANAGER, ThunarExtensionManagerClass))
+
+GType                   thunar_extension_manager_get_type       (void) G_GNUC_CONST;
+
+ThunarExtensionManager *thunar_extension_manager_get_default    (void);
+
+GList                  *thunar_extension_manager_list_providers (ThunarExtensionManager *manager,
+                                                                 GType                   type);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_EXTENSION_MANAGER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,370 @@
+#include <thunar/thunar-fallback-icon.h>
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (thunar_fallback_icon)
+#endif
+#ifdef __GNUC__
+const guint8 thunar_fallback_icon[] __attribute__ ((__aligned__ (4))) = 
+#else
+const guint8 thunar_fallback_icon[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (9216) */
+  "\0\0$\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (192) */
+  "\0\0\0\300"
+  /* width (48) */
+  "\0\0\0""0"
+  /* height (48) */
+  "\0\0\0""0"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\214\214\214\377\214\214\214\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\214\214\214"
+  "\377\252\252\252\377\247\247\246\377\231\231\231\377\22\22\22\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\2\2\2\377&&&\377\226\226\226"
+  "\377\265\265\265\377\262\262\262\377\261\261\260\377\257\257\256\377"
+  "\256\256\255\377MML\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\26\26\26\377\26\26\26\377kkk\377\237\237"
+  "\237\377\271\271\270\377\270\270\267\377\270\270\267\377\266\266\265"
+  "\377\264\264\264\377\262\262\262\377\260\260\260\377\257\257\257\377"
+  "\255\255\254\377\230\230\227\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\30\30\30\377\235\235\235\377\252\252\251\377\254\254\253\377"
+  "\260\260\257\377\270\270\270\377\270\270\270\377\270\270\270\377\267"
+  "\267\267\377\266\266\266\377\265\265\264\377\264\264\263\377\262\262"
+  "\261\377\261\261\260\377\257\257\256\377\255\255\255\377\255\255\255"
+  "\377%%%\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\323\323\323\377zzz\377"
+  "\207\207\207\377\237\237\237\377\250\250\247\377\261\261\260\377\264"
+  "\264\263\377\265\265\265\377\264\264\264\377\264\264\264\377\263\263"
+  "\263\377\262\262\262\377\261\261\261\377\260\260\257\377\256\256\255"
+  "\377\256\256\255\377\255\255\254\377\207\207\206\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\325\325\325\377\341\341\340\377\177\177\177\377kkk\377"
+  "\200\200\200\377\237\237\237\377\253\253\253\377\260\260\260\377\262"
+  "\262\261\377\263\263\262\377\261\261\260\377\262\262\261\377\257\257"
+  "\257\377\260\260\260\377\256\256\256\377\255\255\255\377\255\255\255"
+  "\377\255\255\254\377\255\255\254\377\23\23\23\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\240\240"
+  "\240\377\335\335\335\377\333\333\333\377\313\313\313\377ZZY\377xxx\377"
+  "\231\231\230\377\244\244\244\377\254\254\254\377\257\257\257\377\257"
+  "\257\257\377\257\257\257\377\257\257\256\377\257\257\256\377\256\256"
+  "\256\377\255\255\255\377\255\255\255\377\255\255\255\377\254\254\254"
+  "\377\255\255\255\377\206\206\206\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\31\31\377\324\324\324\377"
+  "\337\337\337\377\335\335\335\377\323\323\323\377RRR\377rrr\377\220\220"
+  "\220\377\235\235\234\377\246\246\245\377\254\254\254\377\255\255\255"
+  "\377\255\255\255\377\255\255\255\377\255\255\255\377\255\255\255\377"
+  "\255\255\254\377\255\255\254\377\254\254\253\377\255\255\254\377\255"
+  "\255\254\377\255\255\255\377\23\23\23\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\253\253\253\377\344\344\344\377"
+  "\247\247\246\377bba\377MMM\377]]]\377ooo\377\215\215\215\377\230\230"
+  "\230\377\236\236\236\377\245\245\245\377\254\254\253\377\254\254\254"
+  "\377\256\256\255\377\256\256\256\377\255\255\255\377\254\254\254\377"
+  "\253\253\253\377\254\254\254\377\255\255\254\377\256\256\255\377\257"
+  "\257\256\377\207\207\206\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377ddd\377\\\\\\\377SSS\377RRR\377aaa\377pp"
+  "p\377ttt\377\217\217\217\377\231\231\231\377\235\235\235\377\247\247"
+  "\247\377\254\254\254\377\254\254\254\377\257\257\256\377\257\257\257"
+  "\377\257\257\256\377\256\256\255\377\254\254\254\377\254\254\254\377"
+  "\255\255\255\377\257\257\257\377\260\260\260\377\261\261\261\377\24\24"
+  "\24\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377BBB\377"
+  "\177\177\177\377www\377www\377xxx\377xxx\377\213\213\213\377\222\222"
+  "\222\377\236\236\235\377\244\244\243\377\255\255\254\377\260\260\260"
+  "\377\261\261\261\377\262\262\262\377\263\263\263\377\262\262\262\377"
+  "\260\260\257\377\256\256\255\377\257\257\256\377\260\260\257\377\261"
+  "\261\261\377\262\262\262\377\263\263\263\377\210\210\210\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\32\32\377\216\216"
+  "\216\377\230\230\227\377\202\202\201\377\217\217\217\377\177\177\177"
+  "\377\224\224\224\377\234\234\234\377\247\247\247\377\257\257\257\377"
+  "\261\261\261\377\264\264\263\377\266\266\265\377\265\265\264\377\265"
+  "\265\265\377\264\264\264\377\264\264\264\377\262\262\262\377\262\262"
+  "\262\377\264\264\263\377\265\265\264\377\265\265\264\377\266\266\265"
+  "\377\267\267\266\377'''\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\3\3\3\377\261\261\261\377\250\250\250\377\242\242\242\377\237"
+  "\237\237\377\242\242\241\377\246\246\245\377\252\252\252\377\257\257"
+  "\257\377\262\262\262\377\266\266\266\377\271\271\271\377\272\272\272"
+  "\377\273\273\273\377\273\273\272\377\272\272\271\377\272\272\271\377"
+  "\270\270\270\377\270\270\270\377\270\270\270\377\270\270\270\377\271"
+  "\271\271\377\271\271\270\377\271\271\270\377\217\217\216\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\274\274\274\377\266"
+  "\266\266\377\264\264\264\377\261\261\261\377\261\261\261\377\260\260"
+  "\260\377\262\262\262\377\266\266\265\377\272\272\271\377\277\277\277"
+  "\377\276\276\276\377\277\277\277\377\300\300\300\377\300\300\300\377"
+  "\277\277\277\377\277\277\277\377\275\275\274\377\275\275\274\377\275"
+  "\275\274\377\274\274\274\377\274\274\274\377\274\274\274\377\273\273"
+  "\273\377\273\273\273\377)))\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\273\273\273\377\302\302\302\377\277\277\276\377\273\273"
+  "\273\377\271\271\271\377\270\270\270\377\271\271\271\377\276\276\276"
+  "\377\303\303\303\377\304\304\304\377\306\306\305\377\310\310\307\377"
+  "\307\307\306\377\306\306\306\377\305\305\305\377\304\304\304\377\303"
+  "\303\303\377\302\302\302\377\302\302\302\377\302\302\301\377\300\300"
+  "\277\377\300\300\277\377\277\277\277\377\275\275\275\377\250\250\250"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\256\256\256"
+  "\377\315\315\315\377\310\310\310\377\305\305\305\377\304\304\304\377"
+  "\302\302\301\377\300\300\300\377\306\306\306\377\311\311\311\377\312"
+  "\312\312\377\314\314\314\377\314\314\314\377\315\315\315\377\314\314"
+  "\313\377\313\313\312\377\312\312\311\377\310\310\310\377\307\307\307"
+  "\377\306\306\306\377\305\305\305\377\304\304\304\377\304\304\304\377"
+  "\302\302\301\377\301\301\300\377\300\300\277\377}}|\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377PPP\377\330\330\330\377\324\324\324\377"
+  "\320\320\320\377\315\315\315\377\316\316\316\377\316\316\316\377\320"
+  "\320\320\377\321\321\320\377\322\322\322\377\322\322\322\377\322\322"
+  "\322\377\321\321\321\377\321\321\321\377\320\320\320\377\320\320\320"
+  "\377\316\316\315\377\315\315\314\377\314\314\313\377\311\311\311\377"
+  "\310\310\310\377\306\306\306\377\305\305\305\377\304\304\304\377\303"
+  "\303\302\377\302\302\301\377\25\25\24\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\343\343\343\377\340\340\337\377\333\333\333\377\330\330"
+  "\330\377\330\330\330\377\330\330\330\377\327\327\327\377\330\330\330"
+  "\377\331\331\331\377\331\331\330\377\330\330\327\377\327\327\327\377"
+  "\326\326\326\377\324\324\324\377\324\324\324\377\322\322\322\377\320"
+  "\320\320\377\316\316\316\377\315\315\314\377\314\314\313\377\312\312"
+  "\311\377\310\310\310\377\307\307\307\377\306\306\306\377\304\304\304"
+  "\377\236\236\236\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\335"
+  "\335\335\377\350\350\350\377\346\346\346\377\343\343\343\377\341\341"
+  "\340\377\337\337\337\377\336\336\336\377\335\335\335\377\335\335\335"
+  "\377\334\334\334\377\334\334\334\377\334\334\334\377\333\333\332\377"
+  "\333\333\332\377\331\331\330\377\326\326\326\377\324\324\324\377\322"
+  "\322\322\377\321\321\321\377\317\317\317\377\316\316\316\377\314\314"
+  "\313\377\313\313\312\377\311\311\310\377\306\306\306\377\304\304\304"
+  "\377***\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\311\311\311\377\360\360"
+  "\360\377\354\354\354\377\351\351\351\377\346\346\346\377\344\344\344"
+  "\377\343\343\343\377\342\342\341\377\340\340\340\377\340\340\340\377"
+  "\340\340\340\377\337\337\337\377\337\337\337\377\336\336\336\377\335"
+  "\335\335\377\333\333\332\377\331\331\330\377\327\327\326\377\324\324"
+  "\324\377\322\322\322\377\321\321\321\377\317\317\317\377\315\315\315"
+  "\377\313\313\313\377\311\311\310\377\307\307\306\377\256\256\255\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377{{{\377\364\364\364\377\361\361\361"
+  "\377\356\356\356\377\353\353\353\377\351\351\351\377\347\347\347\377"
+  "\346\346\346\377\345\345\345\377\345\345\345\377\344\344\343\377\343"
+  "\343\343\377\342\342\342\377\341\341\341\377\340\340\340\377\336\336"
+  "\336\377\334\334\334\377\332\332\332\377\330\330\327\377\326\326\325"
+  "\377\324\324\323\377\321\321\321\377\317\317\317\377\315\315\315\377"
+  "\313\313\313\377\311\311\311\377\307\307\307\377\240\240\237\377\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\34\34\34\377\371\371\371\377\366\366\366\377\363"
+  "\363\363\377\361\361\360\377\355\355\355\377\354\354\354\377\352\352"
+  "\352\377\351\351\351\377\350\350\350\377\347\347\347\377\347\347\347"
+  "\377\346\346\346\377\345\345\344\377\342\342\342\377\340\340\340\377"
+  "\336\336\336\377\334\334\334\377\332\332\332\377\330\330\330\377\326"
+  "\326\326\377\324\324\323\377\322\322\321\377\320\320\317\377\315\315"
+  "\315\377\313\313\313\377\304\304\304\377\220\220\220\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\333\333\333\377\372\372\372\377\367\367\367"
+  "\377\365\365\365\377\363\363\363\377\361\361\361\377\357\357\356\377"
+  "\355\355\355\377\354\354\354\377\353\353\353\377\352\352\352\377\350"
+  "\350\350\377\347\347\347\377\345\345\345\377\343\343\343\377\341\341"
+  "\340\377\337\337\336\377\334\334\334\377\332\332\332\377\330\330\330"
+  "\377\326\326\326\377\324\324\324\377\322\322\322\377\320\320\317\377"
+  "\222\222\222\377\26\26\26\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\272\272\272\377\374\374\374\377\373\373\373\377\371\371\371\377"
+  "\367\367\367\377\365\365\365\377\363\363\363\377\362\362\362\377\360"
+  "\360\360\377\357\357\356\377\355\355\355\377\353\353\353\377\351\351"
+  "\351\377\347\347\347\377\345\345\345\377\343\343\343\377\341\341\341"
+  "\377\337\337\337\377\335\335\334\377\333\333\332\377\330\330\330\377"
+  "\326\326\326\377\255\255\255\377\27\27\27\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""888\377\376\376\376\377\375\375"
+  "\375\377\375\375\375\377\372\372\372\377\370\370\370\377\366\366\366"
+  "\377\365\365\365\377\363\363\363\377\362\362\362\377\360\360\360\377"
+  "\356\356\356\377\354\354\353\377\351\351\351\377\347\347\347\377\345"
+  "\345\345\377\343\343\343\377\341\341\341\377\337\337\337\377\335\335"
+  "\335\377\260\260\257\377\27\27\27\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+  "\377\377\377\377\377\377\376\376\376\377\376\376\376\377\374\374\374"
+  "\377\373\373\372\377\370\370\370\377\366\366\366\377\364\364\364\377"
+  "\362\362\362\377\360\360\360\377\356\356\356\377\354\354\354\377\352"
+  "\352\352\377\350\350\347\377\346\346\345\377\325\325\325\377\243\243"
+  "\243\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\276\276"
+  "\276\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\375\375\375\377\373\373\373\377\371\371\371\377\367\367\366\377"
+  "\364\364\364\377\362\362\362\377\360\360\360\377\356\356\356\377\354"
+  "\354\354\377\306\306\306\377\226\226\226\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377}}}\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\375\375\375\377\373\373\373\377\371\371\371\377\367\367\367\377\365"
+  "\365\365\377\363\363\362\377\240\240\240\377444\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\375\375\375\377\373\373\373"
+  "\377\317\317\317\377\217\217\217\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\276\276\276\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\342\342\342\377\247\247\247\377"
+  "777\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0""888\377\377\377\377\377\342\342\342\377\273\273\273\377}}}\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,31 @@
+/* $Id: thunar-fallback-icon.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FALLBACK_ICON_H__
+#define __THUNAR_FALLBACK_ICON_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS;
+
+extern const guint8 thunar_fallback_icon[];
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FALLBACK_ICON_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-fallback-icon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1404 @@
+/* $Id: thunar-favourites-model.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <thunar/thunar-favourites-model.h>
+#include <thunar/thunar-file.h>
+#include <thunar/thunar-icon-factory.h>
+
+
+
+#define THUNAR_FAVOURITE(obj) ((ThunarFavourite *) (obj))
+
+
+
+typedef struct _ThunarFavourite ThunarFavourite;
+
+typedef enum
+{
+  THUNAR_FAVOURITE_SEPARATOR,
+  THUNAR_FAVOURITE_SYSTEM_DEFINED,
+  THUNAR_FAVOURITE_REMOVABLE_MEDIA,
+  THUNAR_FAVOURITE_USER_DEFINED,
+} ThunarFavouriteType;
+
+
+
+static void               thunar_favourites_model_class_init          (ThunarFavouritesModelClass *klass);
+static void               thunar_favourites_model_tree_model_init     (GtkTreeModelIface          *iface);
+static void               thunar_favourites_model_drag_source_init    (GtkTreeDragSourceIface     *iface);
+static void               thunar_favourites_model_init                (ThunarFavouritesModel      *model);
+static void               thunar_favourites_model_finalize            (GObject                    *object);
+static GtkTreeModelFlags  thunar_favourites_model_get_flags           (GtkTreeModel               *tree_model);
+static gint               thunar_favourites_model_get_n_columns       (GtkTreeModel               *tree_model);
+static GType              thunar_favourites_model_get_column_type     (GtkTreeModel               *tree_model,
+                                                                       gint                        index);
+static gboolean           thunar_favourites_model_get_iter            (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter,
+                                                                       GtkTreePath                *path);
+static GtkTreePath       *thunar_favourites_model_get_path            (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter);
+static void               thunar_favourites_model_get_value           (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter,
+                                                                       gint                        column,
+                                                                       GValue                     *value);
+static gboolean           thunar_favourites_model_iter_next           (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter);
+static gboolean           thunar_favourites_model_iter_children       (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter,
+                                                                       GtkTreeIter                *parent);
+static gboolean           thunar_favourites_model_iter_has_child      (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter);
+static gint               thunar_favourites_model_iter_n_children     (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter);
+static gboolean           thunar_favourites_model_iter_nth_child      (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter,
+                                                                       GtkTreeIter                *parent,
+                                                                       gint                        n);
+static gboolean           thunar_favourites_model_iter_parent         (GtkTreeModel               *tree_model,
+                                                                       GtkTreeIter                *iter,
+                                                                       GtkTreeIter                *child);
+static gboolean           thunar_favourites_model_row_draggable       (GtkTreeDragSource          *source,
+                                                                       GtkTreePath                *path);
+static gboolean           thunar_favourites_model_drag_data_get       (GtkTreeDragSource          *source,
+                                                                       GtkTreePath                *path,
+                                                                       GtkSelectionData           *selection_data);
+static gboolean           thunar_favourites_model_drag_data_delete    (GtkTreeDragSource          *source,
+                                                                       GtkTreePath                *path);
+static void               thunar_favourites_model_add_favourite       (ThunarFavouritesModel      *model,
+                                                                       ThunarFavourite            *favourite,
+                                                                       GtkTreePath                *path);
+static void               thunar_favourites_model_load                (ThunarFavouritesModel      *model);
+static void               thunar_favourites_model_save                (ThunarFavouritesModel      *model);
+static void               thunar_favourites_model_monitor             (ThunarVfsMonitor           *monitor,
+                                                                       ThunarVfsMonitorHandle     *handle,
+                                                                       ThunarVfsMonitorEvent       event,
+                                                                       ThunarVfsPath              *handle_path,
+                                                                       ThunarVfsPath              *event_path,
+                                                                       gpointer                    user_data);
+static void               thunar_favourites_model_file_changed        (ThunarFile                 *file,
+                                                                       ThunarFavouritesModel      *model);
+static void               thunar_favourites_model_file_destroy        (ThunarFile                 *file,
+                                                                       ThunarFavouritesModel      *model);
+static void               thunar_favourites_model_volume_changed      (ThunarVfsVolume            *volume,
+                                                                       ThunarFavouritesModel      *model);
+static void               thunar_favourite_free                       (ThunarFavourite            *favourite,
+                                                                       ThunarFavouritesModel      *model);
+
+
+
+struct _ThunarFavouritesModelClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarFavouritesModel
+{
+  GObject __parent__;
+
+  guint                   stamp;
+  GList                  *favourites;
+  GList                  *hidden_volumes;
+  ThunarVfsVolumeManager *volume_manager;
+
+  ThunarVfsMonitor       *monitor;
+  ThunarVfsMonitorHandle *handle;
+};
+
+struct _ThunarFavourite
+{
+  ThunarFavouriteType type;
+
+  gchar              *name;
+  ThunarFile         *file;
+  ThunarVfsVolume    *volume;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarFavouritesModel,
+                         thunar_favourites_model,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+                                                thunar_favourites_model_tree_model_init)
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE,
+                                                thunar_favourites_model_drag_source_init));
+
+
+    
+static void
+thunar_favourites_model_class_init (ThunarFavouritesModelClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_favourites_model_finalize;
+}
+
+
+
+static void
+thunar_favourites_model_tree_model_init (GtkTreeModelIface *iface)
+{
+  iface->get_flags = thunar_favourites_model_get_flags;
+  iface->get_n_columns = thunar_favourites_model_get_n_columns;
+  iface->get_column_type = thunar_favourites_model_get_column_type;
+  iface->get_iter = thunar_favourites_model_get_iter;
+  iface->get_path = thunar_favourites_model_get_path;
+  iface->get_value = thunar_favourites_model_get_value;
+  iface->iter_next = thunar_favourites_model_iter_next;
+  iface->iter_children = thunar_favourites_model_iter_children;
+  iface->iter_has_child = thunar_favourites_model_iter_has_child;
+  iface->iter_n_children = thunar_favourites_model_iter_n_children;
+  iface->iter_nth_child = thunar_favourites_model_iter_nth_child;
+  iface->iter_parent = thunar_favourites_model_iter_parent;
+}
+
+
+
+static void
+thunar_favourites_model_drag_source_init (GtkTreeDragSourceIface *iface)
+{
+  iface->row_draggable = thunar_favourites_model_row_draggable;
+  iface->drag_data_get = thunar_favourites_model_drag_data_get;
+  iface->drag_data_delete = thunar_favourites_model_drag_data_delete;
+}
+
+
+
+static void
+thunar_favourites_model_init (ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite;
+  ThunarVfsVolume *volume;
+  ThunarVfsPath   *fhome;
+  ThunarVfsPath   *fpath;
+  GtkTreePath     *path;
+  ThunarFile      *file;
+  GList           *volumes;
+  GList           *lp;
+
+  model->stamp = g_random_int ();
+  model->volume_manager = thunar_vfs_volume_manager_get_default ();
+
+  /* will be used to append the favourites to the list */
+  path = gtk_tree_path_new_from_indices (0, -1);
+
+  /* append the 'Home' favourite */
+  fpath = thunar_vfs_path_get_for_home ();
+  file = thunar_file_get_for_path (fpath, NULL);
+  if (G_LIKELY (file != NULL))
+    {
+      favourite = g_new (ThunarFavourite, 1);
+      favourite->type = THUNAR_FAVOURITE_SYSTEM_DEFINED;
+      favourite->file = file;
+      favourite->name = NULL;
+      favourite->volume = NULL;
+
+      /* append the favourite to the list */
+      thunar_favourites_model_add_favourite (model, favourite, path);
+      gtk_tree_path_next (path);
+    }
+  thunar_vfs_path_unref (fpath);
+
+  /* append the 'Filesystem' favourite */
+  fpath = thunar_vfs_path_get_for_root ();
+  file = thunar_file_get_for_path (fpath, NULL);
+  if (G_LIKELY (file != NULL))
+    {
+      favourite = g_new (ThunarFavourite, 1);
+      favourite->type = THUNAR_FAVOURITE_SYSTEM_DEFINED;
+      favourite->file = file;
+      favourite->name = NULL;
+      favourite->volume = NULL;
+
+      /* append the favourite to the list */
+      thunar_favourites_model_add_favourite (model, favourite, path);
+      gtk_tree_path_next (path);
+    }
+  thunar_vfs_path_unref (fpath);
+
+  /* prepend the removable media volumes */
+  volumes = thunar_vfs_volume_manager_get_volumes (model->volume_manager);
+  for (lp = volumes; lp != NULL; lp = lp->next)
+    {
+      /* we list only removable devices here */
+      volume = THUNAR_VFS_VOLUME (lp->data);
+      if (thunar_vfs_volume_is_removable (volume))
+        {
+          /* monitor the volume for changes */
+          g_object_ref (G_OBJECT (volume));
+          g_signal_connect (G_OBJECT (volume), "changed",
+                            G_CALLBACK (thunar_favourites_model_volume_changed), model);
+
+          if (thunar_vfs_volume_is_present (volume))
+            {
+              fpath = thunar_vfs_volume_get_mount_point (volume);
+              file = thunar_file_get_for_path (fpath, NULL);
+              if (G_LIKELY (file != NULL))
+                {
+                  /* generate the favourite */
+                  favourite = g_new (ThunarFavourite, 1);
+                  favourite->type = THUNAR_FAVOURITE_REMOVABLE_MEDIA;
+                  favourite->file = file;
+                  favourite->name = NULL;
+                  favourite->volume = volume;
+
+                  /* link the favourite to the list */
+                  thunar_favourites_model_add_favourite (model, favourite, path);
+                  gtk_tree_path_next (path);
+                  continue;
+                }
+            }
+
+          /* schedule the volume for later checking, there's no medium present */
+          model->hidden_volumes = g_list_prepend (model->hidden_volumes, volume);
+        }
+    }
+
+  /* prepend the row separator (only supported with Gtk+ 2.6) */
+#if GTK_CHECK_VERSION(2,6,0)
+  favourite = g_new0 (ThunarFavourite, 1);
+  favourite->type = THUNAR_FAVOURITE_SEPARATOR;
+  thunar_favourites_model_add_favourite (model, favourite, path);
+  gtk_tree_path_next (path);
+#endif
+
+  /* determine the URI to the Gtk+ bookmarks file */
+  fhome = thunar_vfs_path_get_for_home ();
+  fpath = thunar_vfs_path_relative (fhome, ".gtk-bookmarks");
+  thunar_vfs_path_unref (fhome);
+
+  /* register with the alteration monitor for the bookmarks file */
+  model->monitor = thunar_vfs_monitor_get_default ();
+  model->handle = thunar_vfs_monitor_add_file (model->monitor, fpath, thunar_favourites_model_monitor, G_OBJECT (model));
+
+  /* read the Gtk+ bookmarks file */
+  thunar_favourites_model_load (model);
+
+  /* cleanup */
+  thunar_vfs_path_unref (fpath);
+  gtk_tree_path_free (path);
+}
+
+
+
+static void
+thunar_favourites_model_finalize (GObject *object)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (object);
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+
+  /* free all favourites */
+  g_list_foreach (model->favourites, (GFunc) thunar_favourite_free, model);
+  g_list_free (model->favourites);
+
+  /* free all hidden volumes */
+  g_list_foreach (model->hidden_volumes, (GFunc) g_object_unref, NULL);
+  g_list_free (model->hidden_volumes);
+
+  /* detach from the VFS monitor */
+  thunar_vfs_monitor_remove (model->monitor, model->handle);
+  g_object_unref (G_OBJECT (model->monitor));
+
+  /* unlink from the volume manager */
+  g_object_unref (G_OBJECT (model->volume_manager));
+
+  (*G_OBJECT_CLASS (thunar_favourites_model_parent_class)->finalize) (object);
+}
+
+
+
+static GtkTreeModelFlags
+thunar_favourites_model_get_flags (GtkTreeModel *tree_model)
+{
+  return GTK_TREE_MODEL_ITERS_PERSIST | GTK_TREE_MODEL_LIST_ONLY;
+}
+
+
+
+static gint
+thunar_favourites_model_get_n_columns (GtkTreeModel *tree_model)
+{
+  return THUNAR_FAVOURITES_MODEL_N_COLUMNS;
+}
+
+
+
+static GType
+thunar_favourites_model_get_column_type (GtkTreeModel *tree_model,
+                                         gint          index)
+{
+  switch (index)
+    {
+    case THUNAR_FAVOURITES_MODEL_COLUMN_NAME:
+      return G_TYPE_STRING;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_ICON:
+      return GDK_TYPE_PIXBUF;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_MUTABLE:
+      return G_TYPE_BOOLEAN;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_SEPARATOR:
+      return G_TYPE_BOOLEAN;
+    }
+
+  g_assert_not_reached ();
+  return G_TYPE_INVALID;
+}
+
+
+
+static gboolean
+thunar_favourites_model_get_iter (GtkTreeModel *tree_model,
+                                  GtkTreeIter  *iter,
+                                  GtkTreePath  *path)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+  GList                 *lp;
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+  g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
+
+  /* determine the list item for the path */
+  lp = g_list_nth (model->favourites, gtk_tree_path_get_indices (path)[0]);
+  if (G_LIKELY (lp != NULL))
+    {
+      iter->stamp = model->stamp;
+      iter->user_data = lp;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static GtkTreePath*
+thunar_favourites_model_get_path (GtkTreeModel *tree_model,
+                                  GtkTreeIter  *iter)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+  gint                   index;
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), NULL);
+  g_return_val_if_fail (iter->stamp == model->stamp, NULL);
+
+  /* lookup the list item in the favourites list */
+  index = g_list_position (model->favourites, iter->user_data);
+  if (G_LIKELY (index >= 0))
+    return gtk_tree_path_new_from_indices (index, -1);
+
+  return NULL;
+}
+
+
+
+static void
+thunar_favourites_model_get_value (GtkTreeModel *tree_model,
+                                   GtkTreeIter  *iter,
+                                   gint          column,
+                                   GValue       *value)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+  ThunarIconFactory     *icon_factory;
+  ThunarFavourite       *favourite;
+  GtkIconTheme          *icon_theme;
+  const gchar           *icon_name;
+  GdkPixbuf             *icon = NULL;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (iter->stamp == model->stamp);
+
+  /* determine the favourite for the list item */
+  favourite = THUNAR_FAVOURITE (((GList *) iter->user_data)->data);
+
+  switch (column)
+    {
+    case THUNAR_FAVOURITES_MODEL_COLUMN_NAME:
+      g_value_init (value, G_TYPE_STRING);
+      if (G_UNLIKELY (favourite->volume != NULL))
+        g_value_set_static_string (value, thunar_vfs_volume_get_name (favourite->volume));
+      else if (favourite->name != NULL)
+        g_value_set_static_string (value, favourite->name);
+      else if (favourite->file != NULL)
+        g_value_set_static_string (value, thunar_file_get_special_name (favourite->file));
+      else
+        g_value_set_static_string (value, "");
+      break;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_ICON:
+      g_value_init (value, GDK_TYPE_PIXBUF);
+      icon_factory = thunar_icon_factory_get_default ();
+      icon_theme = thunar_icon_factory_get_icon_theme (icon_factory);
+      if (G_UNLIKELY (favourite->volume != NULL))
+        {
+          icon_name = thunar_vfs_volume_lookup_icon_name (favourite->volume, icon_theme);
+          icon = thunar_icon_factory_load_icon (icon_factory, icon_name, 32, NULL, TRUE);
+        }
+      else if (G_LIKELY (favourite->file != NULL))
+        {
+          icon = thunar_icon_factory_load_file_icon (icon_factory, favourite->file, THUNAR_FILE_ICON_STATE_DEFAULT, 32);
+        }
+      if (G_LIKELY (icon != NULL))
+        g_value_take_object (value, icon);
+      g_object_unref (G_OBJECT (icon_factory));
+      break;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_MUTABLE:
+      g_value_init (value, G_TYPE_BOOLEAN);
+      g_value_set_boolean (value, favourite->type == THUNAR_FAVOURITE_USER_DEFINED);
+      break;
+
+    case THUNAR_FAVOURITES_MODEL_COLUMN_SEPARATOR:
+      g_value_init (value, G_TYPE_BOOLEAN);
+      g_value_set_boolean (value, favourite->type == THUNAR_FAVOURITE_SEPARATOR);
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
+}
+
+
+
+static gboolean
+thunar_favourites_model_iter_next (GtkTreeModel *tree_model,
+                                   GtkTreeIter  *iter)
+{
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (tree_model), FALSE);
+  g_return_val_if_fail (iter->stamp == THUNAR_FAVOURITES_MODEL (tree_model)->stamp, FALSE);
+
+  iter->user_data = g_list_next (iter->user_data);
+  return (iter->user_data != NULL);
+}
+
+
+
+static gboolean
+thunar_favourites_model_iter_children (GtkTreeModel *tree_model,
+                                       GtkTreeIter  *iter,
+                                       GtkTreeIter  *parent)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+
+  if (G_LIKELY (parent == NULL && model->favourites != NULL))
+    {
+      iter->stamp = model->stamp;
+      iter->user_data = model->favourites;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_favourites_model_iter_has_child (GtkTreeModel *tree_model,
+                                        GtkTreeIter  *iter)
+{
+  return FALSE;
+}
+
+
+
+static gint
+thunar_favourites_model_iter_n_children (GtkTreeModel *tree_model,
+                                         GtkTreeIter  *iter)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+
+  return (iter == NULL) ? g_list_length (model->favourites) : 0;
+}
+
+
+
+static gboolean
+thunar_favourites_model_iter_nth_child (GtkTreeModel *tree_model,
+                                        GtkTreeIter  *iter,
+                                        GtkTreeIter  *parent,
+                                        gint          n)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (tree_model);
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+
+  if (G_LIKELY (parent != NULL))
+    {
+      iter->stamp = model->stamp;
+      iter->user_data = g_list_nth (model->favourites, n);
+      return (iter->user_data != NULL);
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_favourites_model_iter_parent (GtkTreeModel *tree_model,
+                                     GtkTreeIter  *iter,
+                                     GtkTreeIter  *child)
+{
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_favourites_model_row_draggable (GtkTreeDragSource *source,
+                                       GtkTreePath       *path)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (source);
+  ThunarFavourite       *favourite;
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+  g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
+
+  /* lookup the ThunarFavourite for the path */
+  favourite = g_list_nth_data (model->favourites, gtk_tree_path_get_indices (path)[0]);
+
+  /* special favourites cannot be reordered */
+  return (favourite != NULL && favourite->type == THUNAR_FAVOURITE_USER_DEFINED);
+}
+
+
+
+static gboolean
+thunar_favourites_model_drag_data_get (GtkTreeDragSource *source,
+                                       GtkTreePath       *path,
+                                       GtkSelectionData  *selection_data)
+{
+  /* we simply return FALSE here, as the drag handling is done in
+   * the ThunarFavouritesView class.
+   */
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_favourites_model_drag_data_delete (GtkTreeDragSource *source,
+                                          GtkTreePath       *path)
+{
+  /* we simply return FALSE here, as this function can only be
+   * called if the user is re-arranging favourites within the
+   * model, which will be handle by the exchange method.
+   */
+  return FALSE;
+}
+
+
+
+static void
+thunar_favourites_model_add_favourite (ThunarFavouritesModel *model,
+                                       ThunarFavourite       *favourite,
+                                       GtkTreePath           *path)
+{
+  GtkTreeIter iter;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (favourite->file == NULL || THUNAR_IS_FILE (favourite->file));
+  g_return_if_fail (gtk_tree_path_get_depth (path) > 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] >= 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] <= g_list_length (model->favourites));
+
+  /* we want to stay informed about changes to the file */
+  if (G_LIKELY (favourite->file != NULL))
+    {
+      /* watch the file for changes */
+      thunar_file_watch (favourite->file);
+
+      /* connect appropriate signals */
+      g_signal_connect (G_OBJECT (favourite->file), "changed",
+                        G_CALLBACK (thunar_favourites_model_file_changed), model);
+      g_signal_connect (G_OBJECT (favourite->file), "destroy",
+                        G_CALLBACK (thunar_favourites_model_file_destroy), model);
+    }
+
+  /* insert the new favourite to the favourites list */
+  model->favourites = g_list_insert (model->favourites, favourite, gtk_tree_path_get_indices (path)[0]);
+
+  /* tell everybody that we have a new favourite */
+  gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path);
+  gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, &iter);
+}
+
+
+
+static void
+thunar_favourites_model_load (ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite;
+  ThunarVfsPath   *file_path;
+  GtkTreePath     *path;
+  ThunarFile      *file;
+  gchar           *bookmarks_path;
+  gchar            line[2048];
+  gchar           *name;
+  FILE            *fp;
+
+  /* determine the path to the GTK+ bookmarks file */
+  bookmarks_path = xfce_get_homefile (".gtk-bookmarks", NULL);
+
+  /* append the GTK+ bookmarks (if any) */
+  fp = fopen (bookmarks_path, "r");
+  if (G_LIKELY (fp != NULL))
+    {
+      /* allocate a tree path for appending to the model */
+      path = gtk_tree_path_new_from_indices (g_list_length (model->favourites), -1);
+
+      while (fgets (line, sizeof (line), fp) != NULL)
+        {
+          /* strip leading/trailing whitespace */
+          g_strstrip (line);
+
+          /* skip over the URI */
+          for (name = line; *name != '\0' && !g_ascii_isspace (*name); ++name)
+            ;
+
+          /* zero-terminate the URI */
+          *name++ = '\0';
+
+          /* check if we have a name */
+          for (; g_ascii_isspace (*name); ++name)
+            ;
+
+          /* parse the URI */
+          file_path = thunar_vfs_path_new (line, NULL);
+          if (G_UNLIKELY (file_path == NULL))
+            continue;
+
+          /* try to open the file corresponding to the uri */
+          file = thunar_file_get_for_path (file_path, NULL);
+          thunar_vfs_path_unref (file_path);
+          if (G_UNLIKELY (file == NULL))
+            continue;
+
+          /* make sure the file refers to a directory */
+          if (G_UNLIKELY (!thunar_file_is_directory (file)))
+            {
+              g_object_unref (G_OBJECT (file));
+              continue;
+            }
+
+          /* create the favourite entry */
+          favourite = g_new (ThunarFavourite, 1);
+          favourite->type = THUNAR_FAVOURITE_USER_DEFINED;
+          favourite->file = file;
+          favourite->volume = NULL;
+          favourite->name = (*name != '\0') ? g_strdup (name) : NULL;
+
+          /* append the favourite to the list */
+          thunar_favourites_model_add_favourite (model, favourite, path);
+          gtk_tree_path_next (path);
+        }
+
+      /* clean up */
+      gtk_tree_path_free (path);
+      fclose (fp);
+    }
+
+  /* clean up */
+  g_free (bookmarks_path);
+}
+
+
+
+static void
+thunar_favourites_model_monitor (ThunarVfsMonitor       *monitor,
+                                 ThunarVfsMonitorHandle *handle,
+                                 ThunarVfsMonitorEvent   event,
+                                 ThunarVfsPath          *handle_path,
+                                 ThunarVfsPath          *event_path,
+                                 gpointer                user_data)
+{
+  ThunarFavouritesModel *model = THUNAR_FAVOURITES_MODEL (user_data);
+  ThunarFavourite       *favourite;
+  GtkTreePath           *path;
+  GList                 *lp;
+  gint                   index;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (model->monitor == monitor);
+  g_return_if_fail (model->handle == handle);
+
+  /* drop all existing user-defined favourites from the model */
+  for (index = 0, lp = model->favourites; lp != NULL; )
+    {
+      /* grab the favourite */
+      favourite = THUNAR_FAVOURITE (lp->data);
+
+      /* advance to the next list item */
+      lp = g_list_next (lp);
+
+      /* drop the favourite if it is user-defined */
+      if (favourite->type == THUNAR_FAVOURITE_USER_DEFINED)
+        {
+          /* unlink the favourite from the model */
+          model->favourites = g_list_remove (model->favourites, favourite);
+          
+          /* tell everybody that we have lost a favourite */
+          path = gtk_tree_path_new_from_indices (index, -1);
+          gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
+          gtk_tree_path_free (path);
+
+          /* actually free the favourite */
+          thunar_favourite_free (favourite, model);
+        }
+      else
+        {
+          ++index;
+        }
+    }
+
+  /* reload the favourites model */
+  thunar_favourites_model_load (model);
+}
+
+
+
+static void
+thunar_favourites_model_save (ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite;
+  gchar           *bookmarks_path;
+  gchar           *tmp_path;
+  gchar           *uri;
+  GList           *lp;
+  FILE            *fp;
+  gint             fd;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+
+  /* open a temporary file for writing */
+  tmp_path = xfce_get_homefile (".gtk-bookmarks.XXXXXX", NULL);
+  fd = g_mkstemp (tmp_path);
+  if (G_UNLIKELY (fd < 0))
+    {
+      g_warning ("Failed to open `%s' for writing: %s",
+                 tmp_path, g_strerror (errno));
+      g_free (tmp_path);
+      return;
+    }
+
+  /* write the uris of user customizable favourites */
+  fp = fdopen (fd, "w");
+  for (lp = model->favourites; lp != NULL; lp = lp->next)
+    {
+      favourite = THUNAR_FAVOURITE (lp->data);
+      if (favourite->type == THUNAR_FAVOURITE_USER_DEFINED)
+        {
+          uri = thunar_vfs_path_dup_uri (thunar_file_get_path (favourite->file));
+          if (G_LIKELY (favourite->name != NULL))
+            fprintf (fp, "%s %s\n", uri, favourite->name);
+          else
+            fprintf (fp, "%s\n", uri);
+          g_free (uri);
+        }
+    }
+
+  /* we're done writing the temporary file */
+  fclose (fp);
+
+  /* move the temporary file to it's final location (atomic writing) */
+  bookmarks_path = xfce_get_homefile (".gtk-bookmarks", NULL);
+  if (rename (tmp_path, bookmarks_path) < 0)
+    {
+      g_warning ("Failed to write `%s': %s",
+                 bookmarks_path, g_strerror (errno));
+      unlink (tmp_path);
+    }
+
+  /* cleanup */
+  g_free (bookmarks_path);
+  g_free (tmp_path);
+}
+
+
+
+static void
+thunar_favourites_model_file_changed (ThunarFile            *file,
+                                      ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite;
+  GtkTreePath     *path;
+  GtkTreeIter      iter;
+  GList           *lp;
+  gint             index;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+ 
+  /* check if the file still refers to a directory, else we cannot keep
+   * it on the favourites list, and so we'll treat it like the file
+   * was destroyed (and thereby removed)
+   */
+  if (G_UNLIKELY (!thunar_file_is_directory (file)))
+    {
+      thunar_favourites_model_file_destroy (file, model);
+      return;
+    }
+
+  for (index = 0, lp = model->favourites; lp != NULL; ++index, lp = lp->next)
+    {
+      favourite = THUNAR_FAVOURITE (lp->data);
+      if (favourite->file == file)
+        {
+          iter.stamp = model->stamp;
+          iter.user_data = lp;
+
+          path = gtk_tree_path_new_from_indices (index, -1);
+          gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+          gtk_tree_path_free (path);
+          break;
+        }
+    }
+}
+
+
+
+static void
+thunar_favourites_model_file_destroy (ThunarFile            *file,
+                                      ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite = NULL;
+  GtkTreePath     *path;
+  GList           *lp;
+  gint             index;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+
+  /* lookup the favourite matching the file */
+  for (index = 0, lp = model->favourites; lp != NULL; ++index, lp = lp->next)
+    {
+      favourite = THUNAR_FAVOURITE (lp->data);
+      if (favourite->file == file)
+        break;
+    }
+
+  /* verify that we actually found a favourite */
+  g_assert (lp != NULL);
+  g_assert (THUNAR_IS_FILE (favourite->file));
+
+  /* unlink the favourite from the model */
+  model->favourites = g_list_delete_link (model->favourites, lp);
+
+  /* tell everybody that we have lost a favourite */
+  path = gtk_tree_path_new_from_indices (index, -1);
+  gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
+  gtk_tree_path_free (path);
+
+  /* actually free the favourite */
+  thunar_favourite_free (favourite, model);
+
+  /* the favourites list was changed, so write the gtk bookmarks file */
+  thunar_favourites_model_save (model);
+}
+
+
+
+static void
+thunar_favourites_model_volume_changed (ThunarVfsVolume       *volume,
+                                        ThunarFavouritesModel *model)
+{
+  ThunarFavourite *favourite = NULL;
+  ThunarVfsPath   *fpath;
+  GtkTreePath     *path;
+  GtkTreeIter      iter;
+  ThunarFile      *file;
+  GList           *lp;
+  gint             index;
+
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME (volume));
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+
+  /* check if the volume is on the hidden list */
+  lp = g_list_find (model->hidden_volumes, volume);
+  if (lp != NULL)
+    {
+      /* check if we need to display the volume now */
+      if (thunar_vfs_volume_is_present (volume))
+        {
+          fpath = thunar_vfs_volume_get_mount_point (volume);
+          file = thunar_file_get_for_path (fpath, NULL);
+          if (G_LIKELY (file != NULL))
+            {
+              /* remove the volume from the list of hidden volumes */
+              model->hidden_volumes = g_list_delete_link (model->hidden_volumes, lp);
+
+              /* find the insert position */
+              for (index = 0, lp = model->favourites; lp != NULL; ++index, lp = lp->next)
+                {
+                  favourite = THUNAR_FAVOURITE (lp->data);
+                  if (favourite->type == THUNAR_FAVOURITE_SEPARATOR
+                      || favourite->type == THUNAR_FAVOURITE_USER_DEFINED)
+                    break;
+                }
+
+              /* allocate a new favourite */
+              favourite = g_new (ThunarFavourite, 1);
+              favourite->type = THUNAR_FAVOURITE_REMOVABLE_MEDIA;
+              favourite->file = file;
+              favourite->name = NULL;
+              favourite->volume = volume;
+
+              /* the volume is present now, so we have to display it */
+              path = gtk_tree_path_new_from_indices (index, -1);
+              thunar_favourites_model_add_favourite (model, favourite, path);
+              gtk_tree_path_free (path);
+            }
+        }
+    }
+  else
+    {
+      /* lookup the favourite that contains the given volume */
+      for (index = 0, lp = model->favourites; lp != NULL; ++index, lp = lp->next)
+        {
+          favourite = THUNAR_FAVOURITE (lp->data);
+          if (favourite->volume == volume)
+            break;
+        }
+
+      /* verify that we actually found the favourite */
+      g_assert (favourite != NULL);
+      g_assert (favourite->volume == volume);
+
+      /* check if we need to hide the volume now */
+      if (!thunar_vfs_volume_is_present (volume))
+        {
+          /* need to ref here, because the file_destroy() handler will drop the refcount. */
+          g_object_ref (G_OBJECT (volume));
+
+          /* move the volume to the hidden list */
+          model->hidden_volumes = g_list_prepend (model->hidden_volumes, volume);
+
+          /* we misuse the file_destroy handler to get rid of the volume entry */
+          thunar_favourites_model_file_destroy (favourite->file, model);
+
+          /* need to reconnect to the volume, as the file_destroy removes the handler */
+          g_signal_connect (G_OBJECT (volume), "changed",
+                            G_CALLBACK (thunar_favourites_model_volume_changed), model);
+        }
+      else
+        {
+          /* tell the view that the volume has changed in some way */
+          iter.stamp = model->stamp;
+          iter.user_data = lp;
+
+          path = gtk_tree_path_new_from_indices (index, -1);
+          gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+          gtk_tree_path_free (path);
+        }
+    }
+}
+
+
+
+static void
+thunar_favourite_free (ThunarFavourite       *favourite,
+                       ThunarFavouritesModel *model)
+{
+  if (G_LIKELY (favourite->file != NULL))
+    {
+      /* drop the file watch */
+      thunar_file_unwatch (favourite->file);
+
+      /* unregister from the file */
+      g_signal_handlers_disconnect_matched (G_OBJECT (favourite->file),
+                                            G_SIGNAL_MATCH_DATA, 0,
+                                            0, NULL, NULL, model);
+      g_object_unref (G_OBJECT (favourite->file));
+    }
+
+  if (G_LIKELY (favourite->volume != NULL))
+    {
+      g_signal_handlers_disconnect_matched (G_OBJECT (favourite->volume),
+                                            G_SIGNAL_MATCH_DATA, 0,
+                                            0, NULL, NULL, model);
+      g_object_unref (G_OBJECT (favourite->volume));
+    }
+
+  g_free (favourite->name);
+  g_free (favourite);
+}
+
+
+
+/**
+ * thunar_favourites_model_get_default:
+ *
+ * Returns the default #ThunarFavouritesModel instance shared by
+ * all #ThunarFavouritesView instances.
+ *
+ * Call #g_object_unref() on the returned object when you
+ * don't need it any longer.
+ *
+ * Return value: the default #ThunarFavouritesModel instance.
+ **/
+ThunarFavouritesModel*
+thunar_favourites_model_get_default (void)
+{
+  static ThunarFavouritesModel *model = NULL;
+
+  if (G_UNLIKELY (model == NULL))
+    {
+      model = g_object_new (THUNAR_TYPE_FAVOURITES_MODEL, NULL);
+      g_object_add_weak_pointer (G_OBJECT (model), (gpointer) &model);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (model));
+    }
+
+  return model;
+}
+
+
+
+/**
+ * thunar_favourites_model_iter_for_file:
+ * @model : a #ThunarFavouritesModel instance.
+ * @file  : a #ThunarFile instance.
+ * @iter  : pointer to a #GtkTreeIter.
+ *
+ * Tries to lookup the #GtkTreeIter, that belongs to a favourite, which
+ * refers to @file and stores it to @iter. If no such #GtkTreeIter was
+ * found, %FALSE will be returned and @iter won't be changed. Else
+ * %TRUE will be returned and @iter will be set appropriately.
+ *
+ * Return value: %TRUE if @file was found, else %FALSE.
+ **/
+gboolean
+thunar_favourites_model_iter_for_file (ThunarFavouritesModel *model,
+                                       ThunarFile            *file,
+                                       GtkTreeIter           *iter)
+{
+  GList *lp;
+  
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  g_return_val_if_fail (iter != NULL, FALSE);
+
+  for (lp = model->favourites; lp != NULL; lp = lp->next)
+    if (THUNAR_FAVOURITE (lp->data)->file == file)
+      {
+        iter->stamp = model->stamp;
+        iter->user_data = lp;
+        return TRUE;
+      }
+
+  return FALSE;
+}
+
+
+
+/**
+ * thunar_favourites_model_file_for_iter:
+ * @model : a #ThunarFavouritesModel instance.
+ * @iter  : pointer to a valid #GtkTreeIter.
+ *
+ * Return value: the #ThunarFile matching the given @iter.
+ **/
+ThunarFile*
+thunar_favourites_model_file_for_iter (ThunarFavouritesModel *model,
+                                       GtkTreeIter           *iter)
+{
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), NULL);
+  g_return_val_if_fail (iter != NULL && iter->stamp == model->stamp, NULL);
+  return THUNAR_FAVOURITE (((GList *) iter->user_data)->data)->file;
+}
+
+
+
+/**
+ * thunar_favourites_model_drop_possible:
+ * @model : a #ThunarFavouritestModel.
+ * @path  : a #GtkTreePath.
+ *
+ * Determines whether a drop is possible before the given @path, at the same depth
+ * as @path. I.e., can we drop data at that location. @path does not have to exist;
+ * the return value will almost certainly be FALSE if the parent of @path doesn't
+ * exist, though.
+ *
+ * Return value: %TRUE if it's possible to drop data before @path, else %FALSE.
+ **/
+gboolean
+thunar_favourites_model_drop_possible (ThunarFavouritesModel *model,
+                                       GtkTreePath           *path)
+{
+  ThunarFavourite *favourite;
+
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_MODEL (model), FALSE);
+  g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
+
+  /* determine the list item for the path */
+  favourite = g_list_nth_data (model->favourites, gtk_tree_path_get_indices (path)[0]);
+
+  /* append to the list is always possible */
+  if (G_LIKELY (favourite == NULL))
+    return TRUE;
+
+  /* cannot drop before special favourites! */
+  return (favourite->type == THUNAR_FAVOURITE_USER_DEFINED);
+}
+
+
+
+/**
+ * thunar_favourites_model_add:
+ * @model    : a #ThunarFavouritesModel.
+ * @dst_path : the destination path.
+ * @file     : the #ThunarFile that should be added to the favourites list.
+ *
+ * Adds the favourite @file to the @model at @dst_path, unless @file is
+ * already present in @model in which case no action is performed.
+ **/
+void
+thunar_favourites_model_add (ThunarFavouritesModel *model,
+                             GtkTreePath           *dst_path,
+                             ThunarFile            *file)
+{
+  ThunarFavourite *favourite;
+  GList           *lp;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (gtk_tree_path_get_depth (dst_path) > 0);
+  g_return_if_fail (gtk_tree_path_get_indices (dst_path)[0] >= 0);
+  g_return_if_fail (gtk_tree_path_get_indices (dst_path)[0] <= g_list_length (model->favourites));
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* verify that the file is not already in use as favourite */
+  for (lp = model->favourites; lp != NULL; lp = lp->next)
+    if (THUNAR_FAVOURITE (lp->data)->file == file)
+      return;
+
+  /* create the new favourite that will be inserted */
+  favourite = g_new0 (ThunarFavourite, 1);
+  favourite->type = THUNAR_FAVOURITE_USER_DEFINED;
+  favourite->file = g_object_ref (G_OBJECT (file));
+
+  /* add the favourite to the list at the given position */
+  thunar_favourites_model_add_favourite (model, favourite, dst_path);
+
+  /* the favourites list was changed, so write the gtk bookmarks file */
+  thunar_favourites_model_save (model);
+}
+
+
+
+/**
+ * thunar_favourites_model_move:
+ * @model    : a #ThunarFavouritesModel.
+ * @src_path : the source path.
+ * @dst_path : the destination path.
+ *
+ * Moves the favourite at @src_path to @dst_path, adjusting other
+ * favourite's positions as required.
+ **/
+void
+thunar_favourites_model_move (ThunarFavouritesModel *model,
+                              GtkTreePath           *src_path,
+                              GtkTreePath           *dst_path)
+{
+  ThunarFavourite *favourite;
+  GtkTreePath     *path;
+  GList           *lp;
+  gint            *order;
+  gint             index_src;
+  gint             index_dst;
+  gint             index;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (gtk_tree_path_get_depth (src_path) > 0);
+  g_return_if_fail (gtk_tree_path_get_depth (dst_path) > 0);
+  g_return_if_fail (gtk_tree_path_get_indices (src_path)[0] >= 0);
+  g_return_if_fail (gtk_tree_path_get_indices (src_path)[0] < g_list_length (model->favourites));
+  g_return_if_fail (gtk_tree_path_get_indices (dst_path)[0] > 0);
+
+  index_src = gtk_tree_path_get_indices (src_path)[0];
+  index_dst = gtk_tree_path_get_indices (dst_path)[0];
+
+  if (G_UNLIKELY (index_src == index_dst))
+    return;
+
+  /* generate the order for the rows prior the dst/src rows */
+  order = g_newa (gint, g_list_length (model->favourites));
+  for (index = 0, lp = model->favourites; index < index_src && index < index_dst; ++index, lp = lp->next)
+    order[index] = index;
+
+  if (index == index_src)
+    {
+      favourite = THUNAR_FAVOURITE (lp->data);
+
+      for (; index < index_dst; ++index, lp = lp->next)
+        {
+          lp->data = lp->next->data;
+          order[index] = index + 1;
+        }
+
+      lp->data = favourite;
+      order[index++] = index_src;
+    }
+  else
+    {
+      for (; index < index_src; ++index, lp = lp->next)
+        ;
+
+      g_assert (index == index_src);
+
+      favourite = THUNAR_FAVOURITE (lp->data);
+
+      for (; index > index_dst; --index, lp = lp->prev)
+        {
+          lp->data = lp->prev->data;
+          order[index] = index - 1;
+        }
+
+      g_assert (index == index_dst);
+
+      lp->data = favourite;
+      order[index] = index_src;
+      index = index_src + 1;
+    }
+
+  /* generate the remaining order */
+  for (; index < g_list_length (model->favourites); ++index)
+    order[index] = index;
+
+  /* tell all listeners about the reordering just performed */
+  path = gtk_tree_path_new ();
+  gtk_tree_model_rows_reordered (GTK_TREE_MODEL (model), path, NULL, order);
+  gtk_tree_path_free (path);
+
+  /* the favourites list was changed, so write the gtk bookmarks file */
+  thunar_favourites_model_save (model);
+}
+
+
+
+/**
+ * thunar_favourites_model_remove:
+ * @model : a #ThunarFavouritesModel.
+ * @path  : the #GtkTreePath of the favourite to remove.
+ *
+ * Removes the favourite at @path from the @model and syncs to
+ * on-disk storage. @path must refer to a valid, user-defined
+ * favourite, as you cannot remove system-defined entities (they
+ * are managed internally).
+ **/
+void
+thunar_favourites_model_remove (ThunarFavouritesModel *model,
+                                GtkTreePath           *path)
+{
+  ThunarFavourite *favourite;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (gtk_tree_path_get_depth (path) > 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] >= 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] < g_list_length (model->favourites));
+
+  /* lookup the favourite for the given path */
+  favourite = g_list_nth_data (model->favourites, gtk_tree_path_get_indices (path)[0]);
+
+  /* verify that the favourite is removable */
+  g_assert (favourite->type == THUNAR_FAVOURITE_USER_DEFINED);
+  g_assert (THUNAR_IS_FILE (favourite->file));
+
+  /* remove the favourite (using the file destroy handler) */
+  thunar_favourites_model_file_destroy (favourite->file, model);
+}
+
+
+
+/**
+ * thunar_favourites_model_rename:
+ * @model : a #ThunarFavouritesModel.
+ * @path  : the #GtkTreePath which refers to the favourite that
+ *          should be renamed to @name.
+ * @name  : the new name for the favourite at @path or %NULL to
+ *          return to the default name.
+ *
+ * Renames the favourite at @path to the new @name in @model.
+ *
+ * @name may be %NULL or an empty to reset the favourite to
+ * its default name.
+ **/
+void
+thunar_favourites_model_rename (ThunarFavouritesModel *model,
+                                GtkTreePath           *path,
+                                const gchar           *name)
+{
+  ThunarFavourite *favourite;
+  GtkTreeIter      iter;
+  GList           *lp;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_MODEL (model));
+  g_return_if_fail (gtk_tree_path_get_depth (path) > 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] >= 0);
+  g_return_if_fail (gtk_tree_path_get_indices (path)[0] < g_list_length (model->favourites));
+  g_return_if_fail (name == NULL || g_utf8_validate (name, -1, NULL));
+
+  /* lookup the favourite for the given path */
+  lp = g_list_nth (model->favourites, gtk_tree_path_get_indices (path)[0]);
+  favourite = THUNAR_FAVOURITE (lp->data);
+
+  /* verify the favourite */
+  g_assert (favourite->type == THUNAR_FAVOURITE_USER_DEFINED);
+  g_assert (THUNAR_IS_FILE (favourite->file));
+
+  /* perform the rename */
+  if (G_UNLIKELY (favourite->name != NULL))
+    g_free (favourite->name);
+  if (G_UNLIKELY (name == NULL || *name == '\0'))
+    favourite->name = NULL;
+  else
+    favourite->name = g_strdup (name);
+
+  /* notify the views about the change */
+  iter.stamp = model->stamp;
+  iter.user_data = lp;
+  gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+
+  /* save the changes to the model */
+  thunar_favourites_model_save (model);
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-model.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,83 @@
+/* $Id: thunar-favourites-model.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FAVOURITES_MODEL_H__
+#define __THUNAR_FAVOURITES_MODEL_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarFavouritesModelClass ThunarFavouritesModelClass;
+typedef struct _ThunarFavouritesModel      ThunarFavouritesModel;
+
+#define THUNAR_TYPE_FAVOURITES_MODEL            (thunar_favourites_model_get_type ())
+#define THUNAR_FAVOURITES_MODEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_FAVOURITES_MODEL, ThunarFavouritesModel))
+#define THUNAR_FAVOURITES_MODEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_FAVOURITES_MODEL, ThunarFavouritesModelClass))
+#define THUNAR_IS_FAVOURITES_MODEL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_FAVOURITES_MODEL))
+#define THUNAR_IS_FAVOURITES_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_FAVOURITES_MODEL))
+#define THUNAR_FAVOURITES_MODEL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_MODEL_FAVOURITES_MODEL, ThunarFavouritesModelClass))
+
+/**
+ * ThunarFavouritesModelColumn:
+ * @THUNAR_FAVOURITES_MODEL_COLUMN_NAME      : the index of the name column.
+ * @THUNAR_FAVOURITES_MODEL_COLUMN_ICON      : the index of the icon column.
+ * @THUNAR_FAVOURITES_MODEL_COLUMN_MUTABLE   : tells whether a row is mutable.
+ * @THUNAR_FAVOURITES_MODEL_COLUMN_SEPARATOR : tells whether a row is a separator.
+ *
+ * Columns exported by #ThunarFavouritesModel using the
+ * #GtkTreeModel interface.
+ **/
+typedef enum
+{
+  THUNAR_FAVOURITES_MODEL_COLUMN_NAME,
+  THUNAR_FAVOURITES_MODEL_COLUMN_ICON,
+  THUNAR_FAVOURITES_MODEL_COLUMN_MUTABLE,
+  THUNAR_FAVOURITES_MODEL_COLUMN_SEPARATOR,
+  THUNAR_FAVOURITES_MODEL_N_COLUMNS,
+} ThunarFavouritesModelColumn;
+
+GType                  thunar_favourites_model_get_type       (void) G_GNUC_CONST;
+
+ThunarFavouritesModel *thunar_favourites_model_get_default    (void);
+
+gboolean               thunar_favourites_model_iter_for_file  (ThunarFavouritesModel *model,
+                                                               ThunarFile            *file,
+                                                               GtkTreeIter           *iter);
+ThunarFile            *thunar_favourites_model_file_for_iter  (ThunarFavouritesModel *model,
+                                                               GtkTreeIter           *iter);
+
+gboolean               thunar_favourites_model_drop_possible  (ThunarFavouritesModel *model,
+                                                               GtkTreePath           *path);
+
+void                   thunar_favourites_model_add            (ThunarFavouritesModel *model,
+                                                               GtkTreePath           *dst_path,
+                                                               ThunarFile            *file);
+void                   thunar_favourites_model_move           (ThunarFavouritesModel *model,
+                                                               GtkTreePath           *src_path,
+                                                               GtkTreePath           *dst_path);
+void                   thunar_favourites_model_remove         (ThunarFavouritesModel *model,
+                                                               GtkTreePath           *path);
+void                   thunar_favourites_model_rename         (ThunarFavouritesModel *model,
+                                                               GtkTreePath           *path,
+                                                               const gchar           *name);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FAVOURITES_MODEL_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,244 @@
+/* $Id: thunar-favourites-pane.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-favourites-pane.h>
+#include <thunar/thunar-favourites-view.h>
+#include <thunar/thunar-side-pane.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CURRENT_DIRECTORY,
+};
+
+
+
+static void        thunar_favourites_pane_class_init            (ThunarFavouritesPaneClass *klass);
+static void        thunar_favourites_pane_navigator_init        (ThunarNavigatorIface      *iface);
+static void        thunar_favourites_pane_side_pane_init        (ThunarSidePaneIface       *iface);
+static void        thunar_favourites_pane_init                  (ThunarFavouritesPane      *pane);
+static void        thunar_favourites_pane_dispose               (GObject                   *object);
+static void        thunar_favourites_pane_get_property          (GObject                   *object,
+                                                                 guint                      prop_id,
+                                                                 GValue                    *value,
+                                                                 GParamSpec                *pspec);
+static void        thunar_favourites_pane_set_property          (GObject                   *object,
+                                                                 guint                      prop_id,
+                                                                 const GValue              *value,
+                                                                 GParamSpec                *pspec);
+static ThunarFile *thunar_favourites_pane_get_current_directory (ThunarNavigator           *navigator);
+static void        thunar_favourites_pane_set_current_directory (ThunarNavigator           *navigator,
+                                                                 ThunarFile                *current_directory);
+
+
+
+struct _ThunarFavouritesPaneClass
+{
+  GtkScrolledWindowClass __parent__;
+};
+
+struct _ThunarFavouritesPane
+{
+  GtkScrolledWindow __parent__;
+  ThunarFile       *current_directory;
+  GtkWidget        *view;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarFavouritesPane,
+                         thunar_favourites_pane,
+                         GTK_TYPE_SCROLLED_WINDOW,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_NAVIGATOR,
+                                                thunar_favourites_pane_navigator_init)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_SIDE_PANE,
+                                                thunar_favourites_pane_side_pane_init));
+
+
+
+static void
+thunar_favourites_pane_class_init (ThunarFavouritesPaneClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_favourites_pane_dispose;
+  gobject_class->get_property = thunar_favourites_pane_get_property;
+  gobject_class->set_property = thunar_favourites_pane_set_property;
+
+  g_object_class_override_property (gobject_class,
+                                    PROP_CURRENT_DIRECTORY,
+                                    "current-directory");
+}
+
+
+
+static void
+thunar_favourites_pane_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_favourites_pane_get_current_directory;
+  iface->set_current_directory = thunar_favourites_pane_set_current_directory;
+}
+
+
+
+static void
+thunar_favourites_pane_side_pane_init (ThunarSidePaneIface *iface)
+{
+}
+
+
+
+static void
+thunar_favourites_pane_init (ThunarFavouritesPane *pane)
+{
+  /* configure the GtkScrolledWindow */
+  gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (pane), NULL);
+  gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (pane), NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pane),
+                                  GTK_POLICY_NEVER,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (pane),
+                                       GTK_SHADOW_IN);
+
+  /* allocate the favourites view */
+  pane->view = thunar_favourites_view_new ();
+  gtk_container_add (GTK_CONTAINER (pane), pane->view);
+  gtk_widget_show (pane->view);
+
+  /* connect the "favourite-activated" signal */
+  g_signal_connect_swapped (G_OBJECT (pane->view), "favourite-activated",
+                            G_CALLBACK (thunar_navigator_change_directory), pane);
+}
+
+
+
+static void
+thunar_favourites_pane_dispose (GObject *object)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+  thunar_navigator_set_current_directory (navigator, NULL);
+  G_OBJECT_CLASS (thunar_favourites_pane_parent_class)->dispose (object);
+}
+
+
+
+static void
+thunar_favourites_pane_get_property (GObject    *object,
+                                     guint       prop_id,
+                                     GValue     *value,
+                                     GParamSpec *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (navigator));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_favourites_pane_set_property (GObject      *object,
+                                     guint         prop_id,
+                                     const GValue *value,
+                                     GParamSpec   *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (navigator, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarFile*
+thunar_favourites_pane_get_current_directory (ThunarNavigator *navigator)
+{
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_PANE (navigator), NULL);
+  return THUNAR_FAVOURITES_PANE (navigator)->current_directory;
+}
+
+
+
+static void
+thunar_favourites_pane_set_current_directory (ThunarNavigator *navigator,
+                                              ThunarFile      *current_directory)
+{
+  ThunarFavouritesPane *pane = THUNAR_FAVOURITES_PANE (navigator);
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_PANE (pane));
+
+  /* disconnect from the previously set current directory */
+  if (G_LIKELY (pane->current_directory != NULL))
+    g_object_unref (G_OBJECT (pane->current_directory));
+
+  pane->current_directory = current_directory;
+
+  if (G_LIKELY (current_directory != NULL))
+    {
+      /* take a reference on the new directory */
+      g_object_ref (G_OBJECT (current_directory));
+
+      /* select the file in the view (if possible) */
+      thunar_favourites_view_select_by_file (THUNAR_FAVOURITES_VIEW (pane->view),
+                                             pane->current_directory);
+    }
+
+  g_object_notify (G_OBJECT (pane), "current-directory");
+}
+
+
+
+/**
+ * thunar_favourites_pane_new:
+ *
+ * Allocates a new #ThunarFavouritesPane instance.
+ *
+ * Return value: the newly allocated #ThunarFavouritesPane instance.
+ **/
+GtkWidget*
+thunar_favourites_pane_new (void)
+{
+  return g_object_new (THUNAR_TYPE_FAVOURITES_PANE, NULL);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-pane.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-favourites-pane.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FAVOURITES_PANE_H__
+#define __THUNAR_FAVOURITES_PANE_H__
+
+#include <thunar/thunar-side-pane.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarFavouritesPaneClass ThunarFavouritesPaneClass;
+typedef struct _ThunarFavouritesPane      ThunarFavouritesPane;
+
+#define THUNAR_TYPE_FAVOURITES_PANE             (thunar_favourites_pane_get_type ())
+#define THUNAR_FAVOURITES_PANE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_FAVOURITES_PANE, ThunarFavouritesPane))
+#define THUNAR_FAVOURITES_PANE_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_FAVOURITES_PANE, ThunarFavouritesPaneClass))
+#define THUNAR_IS_FAVOURITES_PANE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_FAVOURITES_PANE))
+#define THUNAR_IS_FAVOURITES_PANE_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_FAVOURITES_PANE))
+#define THUNAR_FAVOURITES_PANE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_FAVOURITES_PANE, ThunarFavouritesPaneClass))
+
+GType      thunar_favourites_pane_get_type  (void) G_GNUC_CONST;
+
+GtkWidget *thunar_favourites_pane_new       (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FAVOURITES_PANE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,723 @@
+/* $Id: thunar-favourites-view.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ *
+ * Inspired by the shortcuts list as found in the GtkFileChooser, which was
+ * developed for Gtk+ by Red Hat, Inc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-favourites-model.h>
+#include <thunar/thunar-favourites-view.h>
+
+
+
+/* Identifiers for signals */
+enum
+{
+  FAVOURITE_ACTIVATED,
+  LAST_SIGNAL,
+};
+
+/* Identifiers for DnD target types */
+enum
+{
+  GTK_TREE_MODEL_ROW,
+  TEXT_URI_LIST,
+};
+
+
+
+static void         thunar_favourites_view_class_init             (ThunarFavouritesViewClass *klass);
+static void         thunar_favourites_view_init                   (ThunarFavouritesView      *view);
+static gboolean     thunar_favourites_view_button_press_event     (GtkWidget                 *widget,
+                                                                   GdkEventButton            *event);
+static void         thunar_favourites_view_drag_data_received     (GtkWidget                 *widget,
+                                                                   GdkDragContext            *context,
+                                                                   gint                       x,
+                                                                   gint                       y,
+                                                                   GtkSelectionData          *selection_data,
+                                                                   guint                      info,
+                                                                   guint                      time);
+static gboolean     thunar_favourites_view_drag_drop              (GtkWidget                 *widget,
+                                                                   GdkDragContext            *context,
+                                                                   gint                       x,
+                                                                   gint                       y,
+                                                                   guint                      time);
+static gboolean     thunar_favourites_view_drag_motion            (GtkWidget                 *widget,
+                                                                   GdkDragContext            *context,
+                                                                   gint                       x,
+                                                                   gint                       y,
+                                                                   guint                      time);
+static void         thunar_favourites_view_row_activated          (GtkTreeView               *tree_view,
+                                                                   GtkTreePath               *path,
+                                                                   GtkTreeViewColumn         *column);
+static void         thunar_favourites_view_remove_activated       (GtkWidget                 *item,
+                                                                   ThunarFavouritesView      *view);
+static void         thunar_favourites_view_rename_activated       (GtkWidget                 *item,
+                                                                   ThunarFavouritesView      *view);
+static void         thunar_favourites_view_rename_canceled        (GtkCellRenderer           *renderer,
+                                                                   ThunarFavouritesView      *view);
+static void         thunar_favourites_view_renamed                (GtkCellRenderer           *renderer,
+                                                                   const gchar               *path_string,
+                                                                   const gchar               *text,
+                                                                   ThunarFavouritesView      *view);
+static GtkTreePath *thunar_favourites_view_compute_drop_position  (ThunarFavouritesView      *view,
+                                                                   gint                       x,
+                                                                   gint                       y);
+static void         thunar_favourites_view_drop_uri_list          (ThunarFavouritesView      *view,
+                                                                   const gchar               *uri_list,
+                                                                   GtkTreePath               *dst_path);
+#if GTK_CHECK_VERSION(2,6,0)
+static gboolean     thunar_favourites_view_separator_func         (GtkTreeModel              *model,
+                                                                   GtkTreeIter               *iter,
+                                                                   gpointer                   user_data);
+#endif
+
+
+
+struct _ThunarFavouritesViewClass
+{
+  GtkTreeViewClass __parent__;
+
+  /* signals */
+  void (*favourite_activated) (ThunarFavouritesView *view,
+                               ThunarFile           *file);
+};
+
+struct _ThunarFavouritesView
+{
+  GtkTreeView __parent__;
+};
+
+
+
+static guint view_signals[LAST_SIGNAL];
+
+/* Target types for dragging from the favourites view */
+static const GtkTargetEntry drag_targets[] = {
+  { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW },
+};
+
+/* Target types for dropping into the favourites view */
+static const GtkTargetEntry drop_targets[] = {
+  { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW },
+  { "text/uri-list", 0, TEXT_URI_LIST },
+};
+
+
+
+G_DEFINE_TYPE (ThunarFavouritesView, thunar_favourites_view, GTK_TYPE_TREE_VIEW);
+
+
+
+static void
+thunar_favourites_view_class_init (ThunarFavouritesViewClass *klass)
+{
+  GtkTreeViewClass *gtktree_view_class;
+  GtkWidgetClass   *gtkwidget_class;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->button_press_event = thunar_favourites_view_button_press_event;
+  gtkwidget_class->drag_data_received = thunar_favourites_view_drag_data_received;
+  gtkwidget_class->drag_drop = thunar_favourites_view_drag_drop;
+  gtkwidget_class->drag_motion = thunar_favourites_view_drag_motion;
+
+  gtktree_view_class = GTK_TREE_VIEW_CLASS (klass);
+  gtktree_view_class->row_activated = thunar_favourites_view_row_activated;
+
+  /**
+   * ThunarFavouritesView:favourite-activated:
+   *
+   * Invoked whenever a favourite is activated by the user.
+   **/
+  view_signals[FAVOURITE_ACTIVATED] =
+    g_signal_new ("favourite-activated",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarFavouritesViewClass, favourite_activated),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1, THUNAR_TYPE_FILE);
+}
+
+
+
+static void
+thunar_favourites_view_init (ThunarFavouritesView *view)
+{
+  GtkTreeViewColumn *column;
+  GtkTreeSelection  *selection;
+  GtkCellRenderer   *renderer;
+
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+
+  column = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN,
+                         "reorderable", FALSE,
+                         "resizable", FALSE,
+                         "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE,
+                         NULL);
+  renderer = gtk_cell_renderer_pixbuf_new ();
+  gtk_tree_view_column_pack_start (column, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "pixbuf", THUNAR_FAVOURITES_MODEL_COLUMN_ICON,
+                                       NULL);
+  renderer = gtk_cell_renderer_text_new ();
+  g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (thunar_favourites_view_renamed), view);
+  g_signal_connect (G_OBJECT (renderer), "editing-canceled", G_CALLBACK (thunar_favourites_view_rename_canceled), view);
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", THUNAR_FAVOURITES_MODEL_COLUMN_NAME,
+                                       NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+  /* enable drag support for the favourites view (actually used to support reordering) */
+  gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (view), GDK_BUTTON1_MASK, drag_targets,
+                                          G_N_ELEMENTS (drag_targets), GDK_ACTION_MOVE);
+
+  /* enable drop support for the favourites view (both internal reordering
+   * and adding new favourites from other widgets)
+   */
+  gtk_drag_dest_set (GTK_WIDGET (view), GTK_DEST_DEFAULT_ALL,
+                     drop_targets, G_N_ELEMENTS (drop_targets),
+                     GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
+
+#if GTK_CHECK_VERSION(2,6,0)
+  gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (view), thunar_favourites_view_separator_func, NULL, NULL);
+#endif
+}
+
+
+
+static gboolean
+thunar_favourites_view_button_press_event (GtkWidget      *widget,
+                                           GdkEventButton *event)
+{
+  GtkTreeModel *model;
+  GtkTreePath  *path;
+  GtkTreeIter   iter;
+  ThunarFile   *file;
+  GtkWidget    *window;
+  GtkWidget    *image;
+  GtkWidget    *menu;
+  GtkWidget    *item;
+  GMainLoop    *loop;
+  gboolean      mutable;
+  gboolean      result;
+  GList        *actions;
+  GList        *lp;
+
+  /* let the widget process the event first (handles focussing and scrolling) */
+  result = GTK_WIDGET_CLASS (thunar_favourites_view_parent_class)->button_press_event (widget, event);
+
+  /* check if we have a right-click event */
+  if (G_LIKELY (event->button != 3))
+    return result;
+
+  /* resolve the path to the cursor position */
+  if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL))
+    {
+      /* determine the iterator for the selected row */
+      model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+      gtk_tree_model_get_iter (model, &iter, path);
+
+      /* check whether the favourite at the given path is mutable */
+      gtk_tree_model_get (model, &iter, THUNAR_FAVOURITES_MODEL_COLUMN_MUTABLE, &mutable, -1);
+
+      /* determine the file for the given path */
+      file = thunar_favourites_model_file_for_iter (THUNAR_FAVOURITES_MODEL (model), &iter);
+
+      /* prepare the internal loop */
+      loop = g_main_loop_new (NULL, FALSE);
+
+      /* prepare the popup menu */
+      menu = gtk_menu_new ();
+      gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));
+      g_signal_connect_swapped (G_OBJECT (menu), "deactivate", G_CALLBACK (g_main_loop_quit), loop);
+
+      /* prepend the custom actions for the selected file (if any) */
+      if (G_LIKELY (file != NULL))
+        {
+          /* determine the toplevel window */
+          window = gtk_widget_get_toplevel (widget);
+
+          /* determine the actions for the selected file */
+          actions = thunar_file_get_actions (file, window);
+
+          /* check if we have any actions */
+          if (G_LIKELY (actions != NULL))
+            {
+              /* append the actions */
+              for (lp = actions; lp != NULL; lp = lp->next)
+                {
+                  /* append the menu item */
+                  item = gtk_action_create_menu_item (GTK_ACTION (lp->data));
+                  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+                  gtk_widget_show (item);
+
+                  /* release the reference on the action */
+                  g_object_unref (G_OBJECT (lp->data));
+                }
+              g_list_free (actions);
+
+              /* append a menu separator */
+              item = gtk_separator_menu_item_new ();
+              gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+              gtk_widget_show (item);
+            }
+        }
+
+      /* append the remove menu item */
+      item = gtk_image_menu_item_new_with_mnemonic (_("_Remove Favourite"));
+      g_object_set_data_full (G_OBJECT (item), "thunar-favourites-row",
+                              gtk_tree_row_reference_new (model, path),
+                              (GDestroyNotify) gtk_tree_row_reference_free);
+      g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (thunar_favourites_view_remove_activated), widget);
+      gtk_widget_set_sensitive (item, mutable);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+
+      /* set the remove stock icon */
+      image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
+      gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+      gtk_widget_show (image);
+
+      /* append the rename menu item */
+      item = gtk_image_menu_item_new_with_mnemonic (_("Re_name Favourite"));
+      g_object_set_data_full (G_OBJECT (item), "thunar-favourites-row",
+                              gtk_tree_row_reference_new (model, path),
+                              (GDestroyNotify) gtk_tree_row_reference_free);
+      g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (thunar_favourites_view_rename_activated), widget);
+      gtk_widget_set_sensitive (item, mutable);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+
+      /* run the internal loop */
+      gtk_grab_add (menu);
+      gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, event->time);
+      g_main_loop_run (loop);
+      gtk_grab_remove (menu);
+
+      /* clean up */
+      gtk_object_sink (GTK_OBJECT (menu));
+      gtk_tree_path_free (path);
+      g_main_loop_unref (loop);
+
+      /* we effectively handled the event */
+      return TRUE;
+    }
+
+  return result;
+}
+
+
+
+static void
+thunar_favourites_view_drag_data_received (GtkWidget        *widget,
+                                           GdkDragContext   *context,
+                                           gint              x,
+                                           gint              y,
+                                           GtkSelectionData *selection_data,
+                                           guint             info,
+                                           guint             time)
+{
+  ThunarFavouritesView *view = THUNAR_FAVOURITES_VIEW (widget);
+  GtkTreeSelection     *selection;
+  GtkTreeModel         *model;
+  GtkTreePath          *dst_path;
+  GtkTreePath          *src_path;
+  GtkTreeIter           iter;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_VIEW (view));
+
+  /* compute the drop position */
+  dst_path = thunar_favourites_view_compute_drop_position (view, x, y);
+
+  if (selection_data->target == gdk_atom_intern ("text/uri-list", FALSE))
+    {
+      thunar_favourites_view_drop_uri_list (view, (gchar *) selection_data->data, dst_path);
+    }
+  else if (selection_data->target == gdk_atom_intern ("GTK_TREE_MODEL_ROW", FALSE))
+    {
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+      if (gtk_tree_selection_get_selected (selection, &model, &iter))
+        {
+          /* we need to adjust the destination path here, because the path returned by
+           * the drop position computation effectively points after the insert position,
+           * which can led to unexpected results.
+           */
+          gtk_tree_path_prev (dst_path);
+          if (!thunar_favourites_model_drop_possible (THUNAR_FAVOURITES_MODEL (model), dst_path))
+            gtk_tree_path_next (dst_path);
+
+          /* perform the move */
+          src_path = gtk_tree_model_get_path (model, &iter);
+          thunar_favourites_model_move (THUNAR_FAVOURITES_MODEL (model), src_path, dst_path);
+          gtk_tree_path_free (src_path);
+        }
+    }
+
+  gtk_tree_path_free (dst_path);
+}
+
+
+
+static gboolean
+thunar_favourites_view_drag_drop (GtkWidget      *widget,
+                                  GdkDragContext *context,
+                                  gint            x,
+                                  gint            y,
+                                  guint           time)
+{
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_VIEW (widget), FALSE);
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_favourites_view_drag_motion (GtkWidget      *widget,
+                                    GdkDragContext *context,
+                                    gint            x,
+                                    gint            y,
+                                    guint           time)
+{
+  GtkTreeViewDropPosition position = GTK_TREE_VIEW_DROP_BEFORE;
+  ThunarFavouritesView   *view = THUNAR_FAVOURITES_VIEW (widget);
+  GdkDragAction           action;
+  GtkTreeModel           *model;
+  GtkTreePath            *path;
+
+  /* check the action that should be performed */
+  if (context->suggested_action == GDK_ACTION_LINK || (context->actions & GDK_ACTION_LINK) != 0)
+    action = GDK_ACTION_LINK;
+  else if (context->suggested_action == GDK_ACTION_COPY || (context->actions & GDK_ACTION_COPY) != 0)
+    action = GDK_ACTION_COPY;
+  else if (context->suggested_action == GDK_ACTION_MOVE || (context->actions & GDK_ACTION_MOVE) != 0)
+    action = GDK_ACTION_MOVE;
+  else
+    return FALSE;
+
+  /* compute the drop position for the coordinates */
+  path = thunar_favourites_view_compute_drop_position (view, x, y);
+
+  /* check if path is about to append to the model */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+  if (gtk_tree_path_get_indices (path)[0] >= gtk_tree_model_iter_n_children (model, NULL))
+    {
+      /* set the position to "after" and move the path to
+       * point to the previous row instead; required to
+       * get the highlighting in GtkTreeView correct.
+       */
+      position = GTK_TREE_VIEW_DROP_AFTER;
+      gtk_tree_path_prev (path);
+    }
+
+  /* highlight the appropriate row */
+  gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (view), path, position);
+  gtk_tree_path_free (path);
+
+  gdk_drag_status (context, action, time);
+  return TRUE;
+}
+
+
+
+static void
+thunar_favourites_view_row_activated (GtkTreeView       *tree_view,
+                                      GtkTreePath       *path,
+                                      GtkTreeViewColumn *column)
+{
+  ThunarFavouritesView *view = THUNAR_FAVOURITES_VIEW (tree_view);
+  GtkTreeModel         *model;
+  GtkTreeIter           iter;
+  ThunarFile           *file;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_VIEW (view));
+  g_return_if_fail (path != NULL);
+
+  /* determine the iter for the path */
+  model = gtk_tree_view_get_model (tree_view);
+  gtk_tree_model_get_iter (model, &iter, path);
+
+  /* determine the file for the favourite and invoke the signal */
+  file = thunar_favourites_model_file_for_iter (THUNAR_FAVOURITES_MODEL (model), &iter);
+  if (G_LIKELY (file != NULL))
+    g_signal_emit (G_OBJECT (view), view_signals[FAVOURITE_ACTIVATED], 0, file);
+
+  /* call the row-activated method in the parent class */
+  if (GTK_TREE_VIEW_CLASS (thunar_favourites_view_parent_class)->row_activated != NULL)
+    (*GTK_TREE_VIEW_CLASS (thunar_favourites_view_parent_class)->row_activated) (tree_view, path, column);
+}
+
+
+
+static void
+thunar_favourites_view_remove_activated (GtkWidget            *item,
+                                         ThunarFavouritesView *view)
+{
+  GtkTreeRowReference *row;
+  GtkTreeModel        *model;
+  GtkTreePath         *path;
+
+  row = g_object_get_data (G_OBJECT (item), "thunar-favourites-row");
+  path = gtk_tree_row_reference_get_path (row);
+  if (G_LIKELY (path != NULL))
+    {
+      model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+      thunar_favourites_model_remove (THUNAR_FAVOURITES_MODEL (model), path);
+      gtk_tree_path_free (path);
+    }
+}
+
+
+
+static void
+thunar_favourites_view_rename_activated (GtkWidget            *item,
+                                         ThunarFavouritesView *view)
+{
+  GtkTreeRowReference *row;
+  GtkTreeViewColumn   *column;
+  GtkCellRenderer     *renderer;
+  GtkTreePath         *path;
+  GList               *renderers;
+
+  row = g_object_get_data (G_OBJECT (item), "thunar-favourites-row");
+  path = gtk_tree_row_reference_get_path (row);
+  if (G_LIKELY (path != NULL))
+    {
+      column = gtk_tree_view_get_column (GTK_TREE_VIEW (view), 0);
+      renderers = gtk_tree_view_column_get_cell_renderers (column);
+      renderer = g_list_nth_data (renderers, 1);
+      g_object_set (G_OBJECT (renderer), "editable", TRUE, NULL);
+      gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (view), path, column, renderer, TRUE);
+      gtk_tree_path_free (path);
+      g_list_free (renderers);
+    }
+}
+
+
+
+static void
+thunar_favourites_view_rename_canceled (GtkCellRenderer      *renderer,
+                                        ThunarFavouritesView *view)
+{
+  /* disable the editing support on the name cell again */
+  g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
+}
+
+
+
+static void
+thunar_favourites_view_renamed (GtkCellRenderer      *renderer,
+                                const gchar          *path_string,
+                                const gchar          *text,
+                                ThunarFavouritesView *view)
+{
+  GtkTreeModel *model;
+  GtkTreePath  *path;
+
+  /* disable the editing support on the name cell again */
+  g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL);
+
+  /* perform the rename */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+  path = gtk_tree_path_new_from_string (path_string);
+  thunar_favourites_model_rename (THUNAR_FAVOURITES_MODEL (model), path, text);
+  gtk_tree_path_free (path);
+}
+
+
+
+static GtkTreePath*
+thunar_favourites_view_compute_drop_position (ThunarFavouritesView *view,
+                                              gint                  x,
+                                              gint                  y)
+{
+  GtkTreeViewColumn *column;
+  GtkTreeModel      *model;
+  GdkRectangle       area;
+  GtkTreePath       *path;
+  gint               n_rows;
+
+  g_return_val_if_fail (gtk_tree_view_get_model (GTK_TREE_VIEW (view)) != NULL, NULL);
+  g_return_val_if_fail (THUNAR_IS_FAVOURITES_VIEW (view), NULL);
+
+  /* query the number of rows in the model */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+  n_rows = gtk_tree_model_iter_n_children (model, NULL);
+
+  if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (view), x, y,
+                                     &path, &column, &x, &y))
+    {
+      /* determine the exact path of the row the user is trying to drop 
+       * (taking into account the relative y position)
+       */
+      gtk_tree_view_get_background_area (GTK_TREE_VIEW (view), path, column, &area);
+      if (y >= area.height / 2)
+        gtk_tree_path_next (path);
+
+      /* find a suitable drop path (we cannot drop into the default favourites list) */
+      for (; gtk_tree_path_get_indices (path)[0] < n_rows; gtk_tree_path_next (path))
+        if (thunar_favourites_model_drop_possible (THUNAR_FAVOURITES_MODEL (model), path))
+          return path;
+    }
+  else
+    {
+      /* we'll append to the favourites list */
+      path = gtk_tree_path_new_from_indices (n_rows, -1);
+    }
+
+  return path;
+}
+
+
+
+static void
+thunar_favourites_view_drop_uri_list (ThunarFavouritesView *view,
+                                      const gchar          *uri_list,
+                                      GtkTreePath          *dst_path)
+{
+  GtkTreeModel *model;
+  ThunarFile   *file;
+  GError       *error = NULL;
+  gchar        *display_string;
+  gchar        *uri_string;
+  GList        *path_list;
+  GList        *lp;
+
+  path_list = thunar_vfs_path_list_from_string (uri_list, &error);
+  if (G_LIKELY (error == NULL))
+    {
+      /* process the URIs one-by-one and stop on error */
+      model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+      for (lp = path_list; lp != NULL; lp = lp->next)
+        {
+          file = thunar_file_get_for_path (lp->data, &error);
+          if (G_UNLIKELY (file == NULL))
+            break;
+
+          /* make sure, that only directories gets added to the favourites list */
+          if (G_UNLIKELY (!thunar_file_is_directory (file)))
+            {
+              uri_string = thunar_vfs_path_dup_string (lp->data);
+              display_string = g_filename_display_name (uri_string);
+              g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_NOTDIR,
+                           _("The path '%s' does not refer to a directory"),
+                           display_string);
+              g_object_unref (G_OBJECT (file));
+              g_free (display_string);
+              g_free (uri_string);
+              break;
+            }
+
+          thunar_favourites_model_add (THUNAR_FAVOURITES_MODEL (model), dst_path, file);
+          g_object_unref (G_OBJECT (file));
+          gtk_tree_path_next (dst_path);
+        }
+
+      thunar_vfs_path_list_free (path_list);
+    }
+
+  if (G_UNLIKELY (error != NULL))
+    {
+      /* display an error message to the user */
+      thunar_dialogs_show_error (GTK_WIDGET (view), error, _("Failed to add new favourite"));
+
+      /* release the error */
+      g_error_free (error);
+    }
+}
+
+
+
+#if GTK_CHECK_VERSION(2,6,0)
+static gboolean
+thunar_favourites_view_separator_func (GtkTreeModel *model,
+                                       GtkTreeIter  *iter,
+                                       gpointer      user_data)
+{
+  gboolean separator;
+  gtk_tree_model_get (model, iter, THUNAR_FAVOURITES_MODEL_COLUMN_SEPARATOR, &separator, -1);
+  return separator;
+}
+#endif
+
+
+
+/**
+ * thunar_favourites_view_new:
+ *
+ * Allocates a new #ThunarFavouritesView instance and associates
+ * it with the default #ThunarFavouritesModel instance.
+ *
+ * Return value: the newly allocated #ThunarFavouritesView instance.
+ **/
+GtkWidget*
+thunar_favourites_view_new (void)
+{
+  ThunarFavouritesModel *model;
+  GtkWidget             *view;
+
+  model = thunar_favourites_model_get_default ();
+  view = g_object_new (THUNAR_TYPE_FAVOURITES_VIEW,
+                       "model", model, NULL);
+  g_object_unref (G_OBJECT (model));
+
+  return view;
+}
+
+
+
+/**
+ * thunar_favourites_view_select_by_file:
+ * @view : a #ThunarFavouritesView instance.
+ * @file : a #ThunarFile instance.
+ *
+ * Looks up the first favourite that refers to @file in @view and selects it.
+ * If @file is not present in the underlying #ThunarFavouritesModel, no
+ * favourite will be selected afterwards.
+ **/
+void
+thunar_favourites_view_select_by_file (ThunarFavouritesView *view,
+                                       ThunarFile           *file)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel     *model;
+  GtkTreeIter       iter;
+
+  g_return_if_fail (THUNAR_IS_FAVOURITES_VIEW (view));
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* clear the selection */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+  gtk_tree_selection_unselect_all (selection);
+
+  /* try to lookup a tree iter for the given file */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+  if (thunar_favourites_model_iter_for_file (THUNAR_FAVOURITES_MODEL (model), file, &iter))
+    gtk_tree_selection_select_iter (selection, &iter);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-favourites-view.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,46 @@
+/* $Id: thunar-favourites-view.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FAVOURITES_VIEW_H__
+#define __THUNAR_FAVOURITES_VIEW_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarFavouritesViewClass ThunarFavouritesViewClass;
+typedef struct _ThunarFavouritesView      ThunarFavouritesView;
+
+#define THUNAR_TYPE_FAVOURITES_VIEW             (thunar_favourites_view_get_type ())
+#define THUNAR_FAVOURITES_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_FAVOURITES_VIEW, ThunarFavouritesView))
+#define THUNAR_FAVOURITES_VIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_FAVOURITES_VIEW, ThunarFavouritesViewClass))
+#define THUNAR_IS_FAVOURITES_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_FAVOURITES_VIEW))
+#define THUNAR_IS_FAVOURITES_VIEW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_FAVOURITES_VIEW))
+#define THUNAR_FAVOURITES_VIEW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_FAVOURITES_VIEW, ThunarFavouritesViewClass))
+
+GType      thunar_favourites_view_get_type        (void) G_GNUC_CONST;
+
+GtkWidget *thunar_favourites_view_new             (void);
+
+void       thunar_favourites_view_select_by_file  (ThunarFavouritesView *view,
+                                                   ThunarFile           *file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FAVOURITES_VIEW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1739 @@
+/* $Id: thunar-file.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#include <thunar/thunar-file.h>
+
+#include <thunarx/thunarx.h>
+
+
+
+/* Additional flags associated with a ThunarFile */
+#define THUNAR_FILE_IN_DESTRUCTION          0x04
+#define THUNAR_FILE_OWNS_METAFILE_REFERENCE 0x08
+#define THUNAR_FILE_OWNS_EMBLEM_NAMES       0x10
+
+
+/* the watch count is stored in the GObject data
+ * list, as it is needed only for a very few
+ * files.
+ */
+#define THUNAR_FILE_GET_WATCH_COUNT(file)        (GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT ((file)), thunar_file_watch_count_quark)))
+#define THUNAR_FILE_SET_WATCH_COUNT(file, count) (g_object_set_qdata (G_OBJECT ((file)), thunar_file_watch_count_quark, GINT_TO_POINTER ((count))))
+
+
+
+enum
+{
+  CHANGED,
+  DESTROY,
+  RENAMED,
+  LAST_SIGNAL,
+};
+
+
+
+static void               thunar_file_class_init               (ThunarFileClass        *klass);
+static void               thunar_file_info_init                (ThunarxFileInfoIface   *iface);
+static void               thunar_file_dispose                  (GObject                *object);
+static void               thunar_file_finalize                 (GObject                *object);
+static gchar             *thunar_file_info_get_name            (ThunarxFileInfo        *file_info);
+static gchar             *thunar_file_info_get_uri             (ThunarxFileInfo        *file_info);
+static gchar             *thunar_file_info_get_parent_uri      (ThunarxFileInfo        *file_info);
+static gchar             *thunar_file_info_get_uri_scheme      (ThunarxFileInfo        *file_info);
+static gchar             *thunar_file_info_get_mime_type       (ThunarxFileInfo        *file_info);
+static gboolean           thunar_file_info_has_mime_type       (ThunarxFileInfo        *file_info,
+                                                                const gchar            *mime_type);
+static gboolean           thunar_file_info_is_directory        (ThunarxFileInfo        *file_info);
+static void               thunar_file_real_changed             (ThunarFile             *file);
+static gboolean           thunar_file_denies_access_permission (const ThunarFile       *file,
+                                                                ThunarVfsFileMode       usr_permissions,
+                                                                ThunarVfsFileMode       grp_permissions,
+                                                                ThunarVfsFileMode       oth_permissions);
+static ThunarMetafile    *thunar_file_get_metafile             (ThunarFile             *file);
+static void               thunar_file_monitor                  (ThunarVfsMonitor       *monitor,
+                                                                ThunarVfsMonitorHandle *handle,
+                                                                ThunarVfsMonitorEvent   event,
+                                                                ThunarVfsPath          *handle_path,
+                                                                ThunarVfsPath          *event_path,
+                                                                gpointer                user_data);
+static void               thunar_file_watch_free               (gpointer                data);
+
+
+
+static ThunarVfsUserManager *user_manager;
+static ThunarVfsMonitor     *monitor;
+static ThunarMetafile       *metafile;
+static GObjectClass         *thunar_file_parent_class;
+static GHashTable           *file_cache;
+static GQuark                thunar_file_thumb_path_quark;
+static GQuark                thunar_file_watch_count_quark;
+static GQuark                thunar_file_watch_handle_quark;
+static GQuark                thunar_file_emblem_names_quark;
+static guint                 file_signals[LAST_SIGNAL];
+
+
+
+GType
+thunar_file_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarFileClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_file_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarFile),
+        0,
+        NULL,
+        NULL,
+      };
+
+      static const GInterfaceInfo file_info_info = 
+      {
+        (GInterfaceInitFunc) thunar_file_info_init,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_OBJECT, "ThunarFile", &info, 0);
+
+      g_type_add_interface_static (type, THUNARX_TYPE_FILE_INFO, &file_info_info);
+    }
+
+  return type;
+}
+
+
+
+#ifndef G_DISABLE_CHECKS
+static gboolean thunar_file_atexit_registered = FALSE;
+
+static void
+thunar_file_atexit_foreach (gpointer key,
+                            gpointer value,
+                            gpointer user_data)
+{
+  gchar *s;
+
+  s = thunar_vfs_path_dup_string (key);
+  g_print ("--> %s (%u)\n", s, G_OBJECT (value)->ref_count);
+  g_free (s);
+}
+
+static void
+thunar_file_atexit (void)
+{
+  if (file_cache == NULL || g_hash_table_size (file_cache) == 0)
+    return;
+
+  g_print ("--- Leaked a total of %u ThunarFile objects:\n",
+           g_hash_table_size (file_cache));
+
+  g_hash_table_foreach (file_cache, thunar_file_atexit_foreach, NULL);
+
+  g_print ("\n");
+}
+#endif
+
+
+
+static void
+thunar_file_class_init (ThunarFileClass *klass)
+{
+  GObjectClass *gobject_class;
+
+#ifndef G_DISABLE_CHECKS
+  if (G_UNLIKELY (!thunar_file_atexit_registered))
+    {
+      g_atexit (thunar_file_atexit);
+      thunar_file_atexit_registered = TRUE;
+    }
+#endif
+
+  /* pre-allocate the required quarks */
+  thunar_file_thumb_path_quark = g_quark_from_static_string ("thunar-file-thumb-path");
+  thunar_file_watch_count_quark = g_quark_from_static_string ("thunar-file-watch-count");
+  thunar_file_watch_handle_quark = g_quark_from_static_string ("thunar-file-watch-handle");
+  thunar_file_emblem_names_quark = g_quark_from_static_string ("thunar-file-emblem-names");
+
+  /* determine the parent class */
+  thunar_file_parent_class = g_type_class_peek_parent (klass);
+
+  /* grab a reference on the user manager */
+  user_manager = thunar_vfs_user_manager_get_default ();
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_file_dispose;
+  gobject_class->finalize = thunar_file_finalize;
+
+  klass->changed = thunar_file_real_changed;
+
+  /**
+   * ThunarFile::changed:
+   * @file : the #ThunarFile instance.
+   *
+   * Emitted whenever the system notices a change to @file.
+   **/
+  file_signals[CHANGED] =
+    g_signal_new ("changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (ThunarFileClass, changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
+  /**
+   * ThunarFile::destroy:
+   * @file : the #ThunarFile instance.
+   *
+   * Emitted when the system notices that the @file
+   * was destroyed.
+   **/
+  file_signals[DESTROY] =
+    g_signal_new ("destroy",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_CLEANUP | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+                  G_STRUCT_OFFSET (ThunarFileClass, destroy),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
+  /**
+   * ThunarFile::renamed:
+   * @file : the #ThunarFile instance.
+   *
+   * Emitted when the @file is renamed to another
+   * name. #ThunarFolder uses this signal to
+   * reregister it's VFS directory monitor.
+   **/
+  file_signals[RENAMED] =
+    g_signal_new ("renamed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (ThunarFileClass, renamed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+}
+
+
+
+static void
+thunar_file_info_init (ThunarxFileInfoIface *iface)
+{
+  iface->get_name = thunar_file_info_get_name;
+  iface->get_uri = thunar_file_info_get_uri;
+  iface->get_parent_uri = thunar_file_info_get_parent_uri;
+  iface->get_uri_scheme = thunar_file_info_get_uri_scheme;
+  iface->get_mime_type = thunar_file_info_get_mime_type;
+  iface->has_mime_type = thunar_file_info_has_mime_type;
+  iface->is_directory = thunar_file_info_is_directory;
+}
+
+
+
+static void
+thunar_file_dispose (GObject *object)
+{
+  ThunarFile *file = THUNAR_FILE (object);
+
+  /* check that we don't recurse here */
+  if (G_LIKELY ((file->flags & THUNAR_FILE_IN_DESTRUCTION) == 0))
+    {
+      /* emit the "destroy" signal */
+      file->flags |= THUNAR_FILE_IN_DESTRUCTION;
+      g_signal_emit (object, file_signals[DESTROY], 0);
+      file->flags &= ~THUNAR_FILE_IN_DESTRUCTION;
+    }
+
+  /* drop the entry from the cache */
+  g_hash_table_remove (file_cache, file->info->path);
+
+  (*G_OBJECT_CLASS (thunar_file_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_file_finalize (GObject *object)
+{
+  ThunarFile *file = THUNAR_FILE (object);
+
+  /* verify that nobody's watching the file anymore */
+#ifndef G_DISABLE_CHECKS
+  if (G_UNLIKELY (THUNAR_FILE_GET_WATCH_COUNT (file) != 0))
+    {
+      g_error ("Attempt to finalize a ThunarFile, which has an active "
+               "watch count of %d", THUNAR_FILE_GET_WATCH_COUNT (file));
+    }
+#endif
+
+  /* drop a reference on the metadata if we own one */
+  if ((file->flags & THUNAR_FILE_OWNS_METAFILE_REFERENCE) != 0)
+    g_object_unref (G_OBJECT (metafile));
+
+  /* release the file info */
+  thunar_vfs_info_unref (file->info);
+
+  (*G_OBJECT_CLASS (thunar_file_parent_class)->finalize) (object);
+}
+
+
+
+static gchar*
+thunar_file_info_get_name (ThunarxFileInfo *file_info)
+{
+  return g_strdup (thunar_vfs_path_get_name (THUNAR_FILE (file_info)->info->path));
+}
+
+
+
+static gchar*
+thunar_file_info_get_uri (ThunarxFileInfo *file_info)
+{
+  return thunar_vfs_path_dup_uri (THUNAR_FILE (file_info)->info->path);
+}
+
+
+
+static gchar*
+thunar_file_info_get_parent_uri (ThunarxFileInfo *file_info)
+{
+  ThunarVfsPath *parent;
+
+  parent = thunar_vfs_path_get_parent (THUNAR_FILE (file_info)->info->path);
+  if (G_LIKELY (parent != NULL))
+    return thunar_vfs_path_dup_uri (parent);
+
+  return NULL;
+}
+
+
+
+static gchar*
+thunar_file_info_get_uri_scheme (ThunarxFileInfo *file_info)
+{
+  return g_strdup ("file");
+}
+
+
+
+static gchar*
+thunar_file_info_get_mime_type (ThunarxFileInfo *file_info)
+{
+  ThunarVfsMimeInfo *mime_info;
+  gchar             *mime_type = NULL;
+
+  /* determine the mime info for the file */
+  mime_info = thunar_file_get_mime_info (THUNAR_FILE (file_info));
+  if (G_LIKELY (mime_info != NULL))
+    mime_type = g_strdup (thunar_vfs_mime_info_get_name (mime_info));
+
+  return mime_type;
+}
+
+
+
+static gboolean
+thunar_file_info_has_mime_type (ThunarxFileInfo *file_info,
+                                const gchar     *mime_type)
+{
+  ThunarVfsMimeDatabase *mime_database;
+  ThunarVfsMimeInfo     *mime_info;
+  gboolean               valid = FALSE;
+  GList                 *mime_infos;
+  GList                 *lp;
+
+  /* determine the mime info for the file */
+  mime_info = thunar_file_get_mime_info (THUNAR_FILE (file_info));
+  if (G_UNLIKELY (mime_info == NULL))
+    return FALSE;
+
+  /* check the related mime types for the file's mime info */
+  mime_database = thunar_vfs_mime_database_get_default ();
+  mime_infos = thunar_vfs_mime_database_get_infos_for_info (mime_database, mime_info);
+  for (lp = mime_infos; lp != NULL && !valid; lp = lp->next)
+    valid = (strcmp (thunar_vfs_mime_info_get_name (lp->data), mime_type) == 0);
+  g_object_unref (G_OBJECT (mime_database));
+  thunar_vfs_mime_info_list_free (mime_infos);
+
+  return valid;
+}
+
+
+
+static gboolean
+thunar_file_info_is_directory (ThunarxFileInfo *file_info)
+{
+  return thunar_file_is_directory (THUNAR_FILE (file_info));
+}
+
+
+
+static void
+thunar_file_real_changed (ThunarFile *file)
+{
+  /* reset the thumbnail state, so the next thunar_icon_factory_load_file_icon()
+   * invokation will recheck the thumbnail.
+   */
+  thunar_file_set_thumb_state (file, THUNAR_FILE_THUMB_STATE_UNKNOWN);
+}
+
+
+
+static gboolean
+thunar_file_denies_access_permission (const ThunarFile *file,
+                                      ThunarVfsFileMode usr_permissions,
+                                      ThunarVfsFileMode grp_permissions,
+                                      ThunarVfsFileMode oth_permissions)
+{
+  ThunarVfsFileMode mode;
+  ThunarVfsGroup   *group;
+  ThunarVfsUser    *user;
+  gboolean          result;
+  GList            *groups;
+  GList            *lp;
+
+  /* query the file mode */
+  mode = thunar_file_get_mode (file);
+
+  /* query the owner of the file, if we cannot determine
+   * the owner, we can't tell if we're denied to access
+   * the file, so we simply return FALSE then.
+   */
+  user = thunar_file_get_user (file);
+  if (G_UNLIKELY (user == NULL))
+    return FALSE;
+
+  // FIXME: We should add a superuser check here!
+
+  if (thunar_vfs_user_is_me (user))
+    {
+      /* we're the owner, so the usr permissions must be granted */
+      result = ((mode & usr_permissions) == 0);
+    }
+  else
+    {
+      group = thunar_file_get_group (file);
+      if (G_LIKELY (group != NULL))
+        {
+          /* check the group permissions */
+          groups = thunar_vfs_user_get_groups (user);
+          for (lp = groups; lp != NULL; lp = lp->next)
+            if (THUNAR_VFS_GROUP (lp->data) == group)
+              {
+                g_object_unref (G_OBJECT (user));
+                g_object_unref (G_OBJECT (group));
+                return ((mode & grp_permissions) == 0);
+              }
+
+          g_object_unref (G_OBJECT (group));
+        }
+
+      /* check other permissions */
+      result = ((mode & oth_permissions) == 0);
+    }
+
+  g_object_unref (G_OBJECT (user));
+
+  return result;
+}
+
+
+
+static ThunarMetafile*
+thunar_file_get_metafile (ThunarFile *file)
+{
+  if ((file->flags & THUNAR_FILE_OWNS_METAFILE_REFERENCE) == 0)
+    {
+      /* take a reference on the metafile for this file */
+      if (G_UNLIKELY (metafile == NULL))
+        {
+          metafile = thunar_metafile_get_default ();
+          g_object_add_weak_pointer (G_OBJECT (metafile), (gpointer) &metafile);
+        }
+      else
+        {
+          g_object_ref (G_OBJECT (metafile));
+        }
+
+      /* remember that we own a reference now */
+      file->flags |= THUNAR_FILE_OWNS_METAFILE_REFERENCE;
+    }
+
+  return metafile;
+}
+
+
+
+static void
+thunar_file_monitor (ThunarVfsMonitor       *monitor,
+                     ThunarVfsMonitorHandle *handle,
+                     ThunarVfsMonitorEvent   event,
+                     ThunarVfsPath          *handle_path,
+                     ThunarVfsPath          *event_path,
+                     gpointer                user_data)
+{
+  ThunarFile *file = THUNAR_FILE (user_data);
+
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (thunar_vfs_path_equal (file->info->path, event_path));
+
+  /* just to be sure... */
+  if (G_UNLIKELY (!thunar_vfs_path_equal (handle_path, event_path)))
+    return;
+
+  switch (event)
+    {
+    case THUNAR_VFS_MONITOR_EVENT_CHANGED:
+    case THUNAR_VFS_MONITOR_EVENT_CREATED:
+      thunar_file_reload (file);
+      break;
+
+    case THUNAR_VFS_MONITOR_EVENT_DELETED:
+      thunar_file_destroy (file);
+      break;
+    }
+}
+
+
+
+static void
+thunar_file_watch_free (gpointer data)
+{
+  /* remove the watch from the VFS monitor */
+  thunar_vfs_monitor_remove (monitor, data);
+
+  /* release our reference on the VFS monitor */
+  g_object_unref (G_OBJECT (monitor));
+}
+
+
+
+/**
+ * thunar_file_get_for_info:
+ * @info : a #ThunarVfsInfo.
+ *
+ * Looks up the #ThunarFile corresponding to @info. Use
+ * this function if want to specify the #ThunarVfsInfo
+ * to use for a #ThunarFile instead of thunar_file_get_for_path(),
+ * which would determine the #ThunarVfsInfo once again.
+ *
+ * The caller is responsible to call g_object_unref()
+ * when done with the returned object.
+ *
+ * Return value: the #ThunarFile for @info.
+ **/
+ThunarFile*
+thunar_file_get_for_info (ThunarVfsInfo *info)
+{
+  ThunarFile *file;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  /* check if we already have a cached version of that file */
+  file = thunar_file_cache_lookup (info->path);
+  if (G_UNLIKELY (file != NULL))
+    {
+      /* take a reference for the caller */
+      g_object_ref (G_OBJECT (file));
+
+      /* apply the new info */
+      if (!thunar_vfs_info_matches (file->info, info))
+        {
+          thunar_vfs_info_unref (file->info);
+          file->info = thunar_vfs_info_ref (info);
+          g_signal_emit (G_OBJECT (file), file_signals[CHANGED], 0);
+        }
+    }
+  else
+    {
+      /* allocate a new object */
+      file = g_object_new (THUNAR_TYPE_FILE, NULL);
+      file->info = thunar_vfs_info_ref (info);
+
+      /* insert the file into the cache */
+      g_hash_table_insert (file_cache, thunar_vfs_path_ref (info->path), file);
+    }
+
+  return file;
+}
+
+
+
+/**
+ * thunar_file_get_for_path:
+ * @path  : a #ThunarVfsPath.
+ * @error : error return location.
+ *
+ * Tries to query the file referred to by @path. Returns %NULL
+ * if the file could not be queried and @error will point
+ * to an error describing the problem, else the #ThunarFile
+ * instance will be returned, which needs to freed using
+ * g_object_unref() when no longer needed.
+ *
+ * Note that this function is not thread-safe and may only
+ * be called from the main thread.
+ *
+ * Return value: the #ThunarFile instance or %NULL on error.
+ **/
+ThunarFile*
+thunar_file_get_for_path (ThunarVfsPath *path,
+                          GError       **error)
+{
+  ThunarVfsInfo *info;
+  ThunarFile    *file;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* see if we have the corresponding file cached already */
+  file = thunar_file_cache_lookup (path);
+  if (file == NULL)
+    {
+      /* determine the file info */
+      info = thunar_vfs_info_new_for_path (path, error);
+      if (G_UNLIKELY (info == NULL))
+        return NULL;
+
+      /* allocate the new file object */
+      file = thunar_file_get_for_info (info);
+
+      /* release our reference to the info */
+      thunar_vfs_info_unref (info);
+    }
+  else
+    {
+      /* take another reference on the cached file */
+      g_object_ref (G_OBJECT (file));
+    }
+
+  return file;
+}
+
+
+
+/**
+ * thunar_file_get_parent:
+ * @file  : a #ThunarFile instance.
+ * @error : return location for errors.
+ *
+ * Determines the parent #ThunarFile for @file. If @file has no parent or
+ * the user is not allowed to open the parent folder of @file, %NULL will
+ * be returned and @error will be set to point to a #GError that
+ * describes the cause. Else, the #ThunarFile will be returned, and
+ * the caller must call g_object_unref() on it.
+ *
+ * You may want to call thunar_file_has_parent() first to
+ * determine whether @file has a parent.
+ *
+ * Return value: the parent #ThunarFile or %NULL.
+ **/
+ThunarFile*
+thunar_file_get_parent (const ThunarFile *file,
+                        GError          **error)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  if (!thunar_file_has_parent (file))
+    {
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT, _("The root folder has no parent"));
+      return NULL;
+    }
+
+  return thunar_file_get_for_path (thunar_vfs_path_get_parent (file->info->path), error);
+}
+
+
+
+/**
+ * thunar_file_execute:
+ * @file      : a #ThunarFile instance.
+ * @screen    : a #GdkScreen.
+ * @path_list : the list of #ThunarVfsPath<!---->s to supply to @file on
+ *              execution.
+ * @error     : return location for errors or %NULL.
+ *
+ * Tries to execute @file on the specified @screen. If @file is executable
+ * and could have been spawned successfully, %TRUE is returned, else %FALSE
+ * will be returned and @error will be set to point to the error location.
+ *
+ * Return value: %TRUE on success, else %FALSE.
+ **/
+gboolean
+thunar_file_execute (ThunarFile *file,
+                     GdkScreen  *screen,
+                     GList      *path_list,
+                     GError    **error)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+  return thunar_vfs_info_execute (file->info, screen, path_list, error);
+}
+
+
+
+/**
+ * thunar_file_rename:
+ * @file  : a #ThunarFile instance.
+ * @name  : the new file name in UTF-8 encoding.
+ * @error : return location for errors or %NULL.
+ *
+ * Tries to rename @file to the new @name. If @file cannot be renamed,
+ * %FALSE will be returned and @error will be accordingly. Else, if
+ * the operation succeeds, %TRUE will be returned, and @file will have
+ * a new URI and a new display name.
+ *
+ * When offering a rename action in the user interface, the implementation
+ * should first check whether the file is available, using the
+ * thunar_file_is_renameable() method.
+ *
+ * Return value: %TRUE on success, else %FALSE.
+ **/
+gboolean
+thunar_file_rename (ThunarFile  *file,
+                    const gchar *name,
+                    GError     **error)
+{
+  ThunarVfsPath *previous_path;
+  gboolean       succeed;
+  gint           watch_count;;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  g_return_val_if_fail (g_utf8_validate (name, -1, NULL), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* remember the previous path */
+  previous_path = thunar_vfs_path_ref (file->info->path);
+  
+  /* try to rename the file */
+  succeed = thunar_vfs_info_rename (file->info, name, error);
+  if (G_LIKELY (succeed))
+    {
+      /* need to re-register the monitor handle for the new uri */
+      watch_count = THUNAR_FILE_GET_WATCH_COUNT (file);
+      if (G_LIKELY (watch_count > 0))
+        {
+          /* drop the watch_count temporary */
+          THUNAR_FILE_SET_WATCH_COUNT (file, 1);
+
+          /* drop the previous handle (with the old path) */
+          thunar_file_unwatch (file);
+
+          /* register the new handle (with the new path) */
+          thunar_file_watch (file);
+
+          /* reset the watch count */
+          THUNAR_FILE_SET_WATCH_COUNT (file, watch_count);
+        }
+
+      /* drop the previous entry from the cache */
+      g_hash_table_remove (file_cache, previous_path);
+
+      /* insert the new entry */
+      g_hash_table_insert (file_cache, thunar_vfs_path_ref (file->info->path), file);
+
+      /* tell the associated folder that the file was renamed */
+      g_signal_emit (G_OBJECT (file), file_signals[RENAMED], 0);
+
+      /* emit the file changed signal */
+      thunar_file_changed (file);
+    }
+
+  /* drop the reference on the previous path */
+  thunar_vfs_path_unref (previous_path);
+
+  return succeed;
+}
+
+
+
+/**
+ * thunar_file_accepts_drop:
+ * @file      : a #ThunarFile instance.
+ * @path_list : the list of #ThunarVfsPath<!---->s that will be droppped.
+ * @actions   : the #GdkDragAction<!---->s provided by the drag source.
+ *
+ * Checks whether @file can accept @path_list for the given @actions and
+ * returns the #GdkDragAction<!---->s that can be used or 0 if no
+ * actions apply.
+ *
+ * Return value: the #GdkDragAction<!---->s supported for the drop or
+ *               0 if no drop is possible.
+ **/
+GdkDragAction
+thunar_file_accepts_drop (ThunarFile   *file,
+                          GList        *path_list,
+                          GdkDragAction actions)
+{
+  ThunarVfsPath *parent_path;
+  ThunarVfsPath *path;
+  GList         *lp;
+  guint          n;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+
+  /* we can never drop an empty list */
+  if (G_UNLIKELY (path_list == NULL))
+    return 0;
+
+  /* check if we have a writable directory here or an executable file */
+  if (thunar_file_is_directory (file) && thunar_file_is_writable (file))
+    actions &= GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK;
+  else if (thunar_file_is_executable (file))
+    actions &= GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE;
+  else
+    return 0;
+
+  /* determine the path of the file */
+  path = thunar_file_get_path (file);
+
+  /* check up to 500 of the paths (just in case somebody tries to
+   * drag around his music collection with 5000 files).
+   */
+  for (lp = path_list, n = 0; actions != 0 && lp != NULL && n < 500; lp = lp->next, ++n)
+    {
+      /* we cannot drop a file on itself */
+      if (G_UNLIKELY (thunar_vfs_path_equal (path, lp->data)))
+        return 0;
+
+      /* check whether source and destination are the same */
+      parent_path = thunar_vfs_path_get_parent (lp->data);
+      if (G_LIKELY (parent_path != NULL))
+        {
+          if (thunar_vfs_path_equal (path, parent_path))
+            return 0;
+        }
+    }
+
+  /* check if we can drop */
+  return actions;
+}
+
+
+
+/**
+ * thunar_file_get_display_name:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the @file name in the UTF-8 encoding, which is
+ * suitable for displaying the file name in the GUI.
+ *
+ * Return value: the @file name suitable for display.
+ **/
+const gchar*
+thunar_file_get_display_name (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  /* root directory is always displayed as 'Filesystem' */
+  if (thunar_file_is_root (file))
+    return _("Filesystem");
+
+  return file->info->display_name;
+}
+
+
+
+/**
+ * thunar_file_get_special_name:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the special name for the @file, e.g. "Filesystem" for the #ThunarFile
+ * referring to "/" and so on. If there's no special name for this @file, the
+ * value of the "display-name" property will be returned instead.
+ *
+ * Return value: the special name of @file.
+ **/
+const gchar*
+thunar_file_get_special_name (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  /* home dir has special name, root dir is handled in get_display_name() */
+  if (thunar_file_is_home (file))
+    return _("Home");
+
+  return thunar_file_get_display_name (file);
+}
+
+
+
+/**
+ * thunar_file_get_date:
+ * @file        : a #ThunarFile instance.
+ * @date_type   : the kind of date you are interested in.
+ *
+ * Queries the given @date_type from @file and returns the result.
+ *
+ * Return value: the time for @file of the given @date_type.
+ **/
+ThunarVfsFileTime
+thunar_file_get_date (const ThunarFile  *file,
+                      ThunarFileDateType date_type)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  
+  switch (date_type)
+    {
+    case THUNAR_FILE_DATE_ACCESSED: return file->info->atime;
+    case THUNAR_FILE_DATE_CHANGED:  return file->info->ctime;
+    case THUNAR_FILE_DATE_MODIFIED: return file->info->mtime;
+    default:                        g_assert_not_reached ();
+    }
+
+  return (ThunarVfsFileTime) -1;
+}
+
+
+
+/**
+ * thunar_file_get_date_string:
+ * @file      : a #ThunarFile instance.
+ * @date_type : the kind of date you are interested to know about @file.
+ *
+ * Tries to determine the @date_type of @file, and if @file supports the
+ * given @date_type, it'll be formatted as string and returned. The
+ * caller is responsible for freeing the string using the g_free()
+ * function.
+ *
+ * Return value: the @date_type of @file formatted as string.
+ **/
+gchar*
+thunar_file_get_date_string (const ThunarFile  *file,
+                             ThunarFileDateType date_type)
+{
+  ThunarVfsFileTime time;
+#ifdef HAVE_LOCALTIME_R
+  struct tm         tmbuf;
+#endif
+  struct tm        *tm;
+  gchar            *result;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  /* query the date on the given file */
+  time = thunar_file_get_date (file, date_type);
+
+  /* convert to local time */
+#ifdef HAVE_LOCALTIME_R
+  tm = localtime_r (&time, &tmbuf);
+#else
+  tm = localtime (&time);
+#endif
+
+  /* convert to string */
+  result = g_new (gchar, 20);
+  strftime (result, 20, "%Y-%m-%d %H:%M:%S", tm);
+
+  return result;
+}
+
+
+
+/**
+ * thunar_file_get_mode_string:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the mode of @file as text. You'll need to free
+ * the result using g_free() when you're done with it.
+ *
+ * Return value: the mode of @file as string.
+ **/
+gchar*
+thunar_file_get_mode_string (const ThunarFile *file)
+{
+  ThunarVfsFileType kind;
+  ThunarVfsFileMode mode;
+  gchar            *text;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  kind = thunar_file_get_kind (file);
+  mode = thunar_file_get_mode (file);
+  text = g_new (gchar, 11);
+
+  /* file type */
+  switch (kind)
+    {
+    case THUNAR_VFS_FILE_TYPE_SOCKET:     text[0] = 's'; break;
+    case THUNAR_VFS_FILE_TYPE_SYMLINK:    text[0] = 'l'; break;
+    case THUNAR_VFS_FILE_TYPE_REGULAR:    text[0] = '-'; break;
+    case THUNAR_VFS_FILE_TYPE_BLOCKDEV:   text[0] = 'b'; break;
+    case THUNAR_VFS_FILE_TYPE_DIRECTORY:  text[0] = 'd'; break;
+    case THUNAR_VFS_FILE_TYPE_CHARDEV:    text[0] = 'c'; break;
+    case THUNAR_VFS_FILE_TYPE_FIFO:       text[0] = 'f'; break;
+    case THUNAR_VFS_FILE_TYPE_UNKNOWN:    text[0] = ' '; break;
+    default:                              g_assert_not_reached ();
+    }
+
+  /* permission flags */
+  text[1] = (mode & THUNAR_VFS_FILE_MODE_USR_READ)  ? 'r' : '-';
+  text[2] = (mode & THUNAR_VFS_FILE_MODE_USR_WRITE) ? 'w' : '-';
+  text[3] = (mode & THUNAR_VFS_FILE_MODE_USR_EXEC)  ? 'x' : '-';
+  text[4] = (mode & THUNAR_VFS_FILE_MODE_GRP_READ)  ? 'r' : '-';
+  text[5] = (mode & THUNAR_VFS_FILE_MODE_GRP_WRITE) ? 'w' : '-';
+  text[6] = (mode & THUNAR_VFS_FILE_MODE_GRP_EXEC)  ? 'x' : '-';
+  text[7] = (mode & THUNAR_VFS_FILE_MODE_OTH_READ)  ? 'r' : '-';
+  text[8] = (mode & THUNAR_VFS_FILE_MODE_OTH_WRITE) ? 'w' : '-';
+  text[9] = (mode & THUNAR_VFS_FILE_MODE_OTH_EXEC)  ? 'x' : '-';
+
+  /* special flags */
+  if (G_UNLIKELY (mode & THUNAR_VFS_FILE_MODE_SUID))
+    text[3] = 's';
+  if (G_UNLIKELY (mode & THUNAR_VFS_FILE_MODE_SGID))
+    text[6] = 's';
+  if (G_UNLIKELY (mode & THUNAR_VFS_FILE_MODE_STICKY))
+    text[9] = 't';
+
+  text[10] = '\0';
+
+  return text;
+}
+
+
+
+/**
+ * thunar_file_get_size_string:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the size of the file as text in a human readable
+ * format. You'll need to free the result using g_free()
+ * if you're done with it.
+ *
+ * Return value: the size of @file in a human readable
+ *               format.
+ **/
+gchar*
+thunar_file_get_size_string (const ThunarFile *file)
+{
+  ThunarVfsFileSize size;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  size = thunar_file_get_size (file);
+
+  return thunar_vfs_humanize_size (size, NULL, 0);
+}
+
+
+
+/**
+ * thunar_file_get_volume:
+ * @file           : a #ThunarFile instance.
+ * @volume_manager : the #ThunarVfsVolumeManager to use for the volume lookup.
+ *
+ * Attempts to determine the #ThunarVfsVolume on which @file is located
+ * using the given @volume_manager. If @file cannot determine it's volume,
+ * then %NULL will be returned. Else a #ThunarVfsVolume instance is returned,
+ * which is owned by @volume_manager and thereby the caller must not free
+ * the returned object.
+ *
+ * Return value: the #ThunarVfsVolume for @file in @volume_manager or %NULL.
+ **/
+ThunarVfsVolume*
+thunar_file_get_volume (const ThunarFile       *file,
+                        ThunarVfsVolumeManager *volume_manager)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (volume_manager), NULL);
+  return thunar_vfs_volume_manager_get_volume_by_info (volume_manager, file->info);
+}
+
+
+
+/**
+ * thunar_file_get_group:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines the #ThunarVfsGroup for @file. If there's no
+ * group associated with @file or if the system is unable to
+ * determine the group, %NULL will be returned.
+ *
+ * The caller is responsible for freeing the returned object
+ * using g_object_unref().
+ *
+ * Return value: the #ThunarVfsGroup for @file or %NULL.
+ **/
+ThunarVfsGroup*
+thunar_file_get_group (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return thunar_vfs_user_manager_get_group_by_id (user_manager, file->info->gid);
+}
+
+
+
+/**
+ * thunar_file_get_user:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines the #ThunarVfsUser for @file. If there's no
+ * user associated with @file or if the system is unable
+ * to determine the user, %NULL will be returned.
+ *
+ * The caller is responsible for freeing the returned object
+ * using g_object_unref().
+ *
+ * Return value: the #ThunarVfsUser for @file or %NULL.
+ **/
+ThunarVfsUser*
+thunar_file_get_user (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return thunar_vfs_user_manager_get_user_by_id (user_manager, file->info->uid);
+}
+
+
+
+/**
+ * thunar_file_is_executable:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines whether the owner of the current process is allowed
+ * to execute the @file (or enter the directory refered to by
+ * @file).
+ *
+ * Return value: %TRUE if @file can be executed.
+ **/
+gboolean
+thunar_file_is_executable (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return ((file->info->flags & THUNAR_VFS_FILE_FLAGS_EXECUTABLE) != 0);
+}
+
+
+
+/**
+ * thunar_file_is_readable:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines whether the owner of the current process is allowed
+ * to read the @file.
+ *
+ * Return value: %TRUE if @file can be read.
+ **/
+gboolean
+thunar_file_is_readable (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return !thunar_file_denies_access_permission (file,
+                                                THUNAR_VFS_FILE_MODE_USR_READ,
+                                                THUNAR_VFS_FILE_MODE_GRP_READ,
+                                                THUNAR_VFS_FILE_MODE_OTH_READ);
+}
+
+
+
+/**
+ * thunar_file_is_renameable:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines whether @file can be renamed using
+ * #thunar_file_rename(). Note that the return
+ * value is just a guess and #thunar_file_rename()
+ * may fail even if this method returns %TRUE.
+ *
+ * Return value: %TRUE if @file can be renamed.
+ **/
+gboolean
+thunar_file_is_renameable (const ThunarFile *file)
+{
+  gboolean renameable = FALSE;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+
+  /* we cannot rename root nodes */
+  if (G_LIKELY (!thunar_file_is_root (file)))
+    {
+      /* we just do a guess here, by checking whether the folder is writable */
+      file = thunar_file_get_parent (file, NULL);
+      if (G_LIKELY (file != NULL))
+        {
+          renameable = thunar_file_is_writable (file);
+          g_object_unref (G_OBJECT (file));
+        }
+    }
+
+  return renameable;
+}
+
+
+
+/**
+ * thunar_file_is_writable:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines whether the owner of the current process is allowed
+ * to write the @file.
+ *
+ * Return value: %TRUE if @file can be read.
+ **/
+gboolean
+thunar_file_is_writable (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return !thunar_file_denies_access_permission (file,
+                                                THUNAR_VFS_FILE_MODE_USR_WRITE,
+                                                THUNAR_VFS_FILE_MODE_GRP_WRITE,
+                                                THUNAR_VFS_FILE_MODE_OTH_WRITE);
+
+
+}
+
+
+
+/**
+ * thunar_file_get_actions:
+ * @file   : a #ThunarFile instance.
+ * @window : a #GdkWindow instance.
+ *
+ * Returns additional #GtkAction<!---->s for @file.
+ *
+ * The caller is responsible to free the returned list
+ * using
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: additional #GtkAction<!---->s for @file.
+ **/
+GList*
+thunar_file_get_actions (ThunarFile *file,
+                         GtkWidget  *window)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
+  return NULL;
+}
+
+
+
+/**
+ * thunar_file_get_emblem_names:
+ * @file : a #ThunarFile instance.
+ *
+ * Determines the names of the emblems that should be displayed for
+ * @file. The returned list is owned by the caller, but the list
+ * items - the name strings - are owned by @file. So the caller
+ * must call g_list_free(), but don't g_free() the list items.
+ *
+ * Note that the strings contained in the returned list are
+ * not garantied to exist over the next iteration of the main
+ * loop. So in case you need the list of emblem names for
+ * a longer time, you'll need to take a copy of the strings.
+ *
+ * Return value: the names of the emblems for @file.
+ **/
+GList*
+thunar_file_get_emblem_names (ThunarFile *file)
+{
+  const ThunarVfsInfo *info = file->info;
+  const ThunarVfsPath *parent;
+  const gchar         *emblem_string;
+  gchar              **emblem_names;
+  GList               *emblems = NULL;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+
+  /* check if we need to load the emblems_list from the metafile */
+  if (G_UNLIKELY ((file->flags & THUNAR_FILE_OWNS_EMBLEM_NAMES) == 0))
+    {
+      emblem_string = thunar_file_get_metadata (file, THUNAR_METAFILE_KEY_EMBLEMS, "");
+      if (G_UNLIKELY (*emblem_string != '\0'))
+        {
+          emblem_names = g_strsplit (emblem_string, ";", -1);
+          g_object_set_qdata_full (G_OBJECT (file), thunar_file_emblem_names_quark,
+                                   emblem_names, (GDestroyNotify) g_strfreev);
+        }
+      file->flags |= THUNAR_FILE_OWNS_EMBLEM_NAMES;
+    }
+
+  /* determine the custom emblems */
+  emblem_names = g_object_get_qdata (G_OBJECT (file), thunar_file_emblem_names_quark);
+  if (G_UNLIKELY (emblem_names != NULL))
+    {
+      for (; *emblem_names != NULL; ++emblem_names)
+        emblems = g_list_append (emblems, *emblem_names);
+    }
+
+  if (G_UNLIKELY (strcmp (info->display_name, "Desktop") == 0))
+    {
+      parent = thunar_vfs_path_get_parent (info->path);
+      if (G_LIKELY (parent != NULL) && thunar_vfs_path_is_home (parent))
+        emblems = g_list_prepend (emblems, THUNAR_FILE_EMBLEM_NAME_DESKTOP);
+    }
+
+  if ((info->flags & THUNAR_VFS_FILE_FLAGS_SYMLINK) != 0)
+    emblems = g_list_prepend (emblems, THUNAR_FILE_EMBLEM_NAME_SYMBOLIC_LINK);
+
+  if (!thunar_file_is_readable (file))
+    emblems = g_list_prepend (emblems, THUNAR_FILE_EMBLEM_NAME_CANT_READ);
+
+  return emblems;
+}
+
+
+
+/**
+ * thunar_file_set_emblem_names:
+ * @file         : a #ThunarFile instance.
+ * @emblem_names : a #GList of emblem names.
+ *
+ * Sets the custom emblem name list of @file to @emblem_names
+ * and stores them in the @file<!---->s metadata.
+ **/
+void
+thunar_file_set_emblem_names (ThunarFile *file,
+                              GList      *emblem_names)
+{
+  GList  *lp;
+  gchar **emblems;
+  gchar  *emblems_string;
+  gint    n;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* allocate a zero-terminated array for the emblem names */
+  emblems = g_new0 (gchar *, g_list_length (emblem_names) + 1);
+
+  /* turn the emblem_names list into a zero terminated array */
+  for (lp = emblem_names, n = 0; lp != NULL; lp = lp->next)
+    {
+      /* skip special emblems */
+      if (strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_SYMBOLIC_LINK) == 0
+          || strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_CANT_READ) == 0
+          || strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_CANT_WRITE) == 0
+          || strcmp (lp->data, THUNAR_FILE_EMBLEM_NAME_DESKTOP) == 0)
+        continue;
+
+      /* add the emblem to our list */
+      emblems[n++] = g_strdup (lp->data);
+    }
+
+  /* associate the emblems with the file */
+  file->flags |= THUNAR_FILE_OWNS_EMBLEM_NAMES;
+  g_object_set_qdata_full (G_OBJECT (file), thunar_file_emblem_names_quark,
+                           emblems, (GDestroyNotify) g_strfreev);
+
+  /* store the emblem list in the file's metadata */
+  emblems_string = g_strjoinv (";", emblems);
+  thunar_file_set_metadata (file, THUNAR_METAFILE_KEY_EMBLEMS, emblems_string, "");
+  g_free (emblems_string);
+
+  /* tell everybody that we have changed */
+  thunar_file_changed (file);
+}
+
+
+
+/**
+ * thunar_file_get_icon_name:
+ * @file       : a #ThunarFile instance.
+ * @icon_state : the state of the @file<!---->s icon we are interested in.
+ * @icon_theme : the #GtkIconTheme on which to lookup up the icon name.
+ *
+ * Returns the name of the icon that can be used to present @file, based
+ * on the given @icon_state and @icon_theme.
+ *
+ * Return value: the icon name for @file in @icon_theme.
+ **/
+const gchar*
+thunar_file_get_icon_name (const ThunarFile   *file,
+                           ThunarFileIconState icon_state,
+                           GtkIconTheme       *icon_theme)
+{
+  const gchar *icon_name;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
+
+  /* special icon for the root node */
+  if (G_UNLIKELY (thunar_file_is_root (file))
+      && gtk_icon_theme_has_icon (icon_theme, "gnome-dev-harddisk"))
+    {
+      return "gnome-dev-harddisk";
+    }
+
+  /* special icon for the home node */
+  if (G_UNLIKELY (thunar_file_is_home (file))
+      && gtk_icon_theme_has_icon (icon_theme, "gnome-fs-home"))
+    {
+      return "gnome-fs-home";
+    }
+
+  /* try to be smart when determining icons for executable files
+   * in that we use the name of the file as icon name (which will
+   * work for quite a lot of binaries, e.g. 'Terminal', 'mousepad',
+   * 'Thunar', 'xfmedia', etc.).
+   */
+  if (G_UNLIKELY (thunar_file_is_executable (file)))
+    {
+      icon_name = thunar_vfs_path_get_name (file->info->path);
+      if (G_UNLIKELY (gtk_icon_theme_has_icon (icon_theme, icon_name)))
+        return icon_name;
+    }
+
+  /* default is the mime type icon */
+  icon_name = thunar_vfs_mime_info_lookup_icon_name (file->info->mime_info, icon_theme);
+
+  /* check if we have an accept icon for the icon we found */
+  if (icon_state == THUNAR_FILE_ICON_STATE_DROP && strcmp (icon_name, "gnome-fs-directory") == 0
+      && gtk_icon_theme_has_icon (icon_theme, "gnome-fs-directory-accept"))
+    {
+      return "gnome-fs-directory-accept";
+    }
+
+  return icon_name;
+}
+
+
+
+/**
+ * thunar_file_get_metadata:
+ * @file          : a #ThunarFile instance.
+ * @key           : a #ThunarMetaFileKey.
+ * @default_value : the default value for @key in @file
+ *                  which is returned when @key isn't
+ *                  explicitly set for @file (may be
+ *                  %NULL).
+ *
+ * Returns the metadata available for @key in @file.
+ *
+ * The returned string is owned by the @file and uses
+ * an internal buffer that will be overridden on the
+ * next call to any of the metadata retrieval methods.
+ *
+ * Return value: the metadata available for @key in @file
+ *               or @default_value if @key is not set for
+ *               @file.
+ **/
+const gchar*
+thunar_file_get_metadata (ThunarFile       *file,
+                          ThunarMetafileKey key,
+                          const gchar      *default_value)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (key < THUNAR_METAFILE_N_KEYS, NULL);
+
+  return thunar_metafile_fetch (thunar_file_get_metafile (file),
+                                file->info->path, key,
+                                default_value);
+}
+
+
+
+/**
+ * thunar_file_set_metadata:
+ * @file          : a #ThunarFile instance.
+ * @key           : a #ThunarMetafileKey.
+ * @value         : the new value for @key on @file.
+ * @default_value : the default for @key on @file.
+ *
+ * Sets the metadata available for @key in @file to
+ * the given @value.
+ **/
+void
+thunar_file_set_metadata (ThunarFile       *file,
+                          ThunarMetafileKey key,
+                          const gchar      *value,
+                          const gchar      *default_value)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (key < THUNAR_METAFILE_N_KEYS);
+  g_return_if_fail (default_value != NULL);
+  g_return_if_fail (value != NULL);
+
+  thunar_metafile_store (thunar_file_get_metafile (file),
+                         file->info->path, key, value,
+                         default_value);
+}
+
+
+
+/**
+ * thunar_file_watch:
+ * @file : a #ThunarFile instance.
+ *
+ * Tells @file to watch itself for changes. Not all #ThunarFile
+ * implementations must support this, but if a #ThunarFile
+ * implementation implements the thunar_file_watch() method,
+ * it must also implement the thunar_file_unwatch() method.
+ *
+ * The #ThunarFile base class implements automatic "ref
+ * counting" for watches, that says, you can call thunar_file_watch()
+ * multiple times, but the virtual method will be invoked only
+ * once. This also means that you MUST call thunar_file_unwatch()
+ * for every thunar_file_watch() invokation, else the application
+ * will abort.
+ **/
+void
+thunar_file_watch (ThunarFile *file)
+{
+  ThunarVfsMonitorHandle *handle;
+  gint                    watch_count;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_FILE_GET_WATCH_COUNT (file) >= 0);
+
+  watch_count = THUNAR_FILE_GET_WATCH_COUNT (file);
+
+  if (++watch_count == 1)
+    {
+      /* take a reference on the VFS monitor for this instance */
+      if (G_LIKELY (monitor == NULL))
+        {
+          monitor = thunar_vfs_monitor_get_default ();
+          g_object_add_weak_pointer (G_OBJECT (monitor), (gpointer) &monitor);
+        }
+      else
+        {
+          g_object_ref (G_OBJECT (monitor));
+        }
+
+      /* add us to the file monitor */
+      handle = thunar_vfs_monitor_add_file (monitor, file->info->path, thunar_file_monitor, file);
+      g_object_set_qdata_full (G_OBJECT (file), thunar_file_watch_handle_quark, handle, thunar_file_watch_free);
+    }
+
+  THUNAR_FILE_SET_WATCH_COUNT (file, watch_count);
+}
+
+
+
+/**
+ * thunar_file_unwatch:
+ * @file : a #ThunarFile instance.
+ *
+ * See thunar_file_watch() for a description of how watching
+ * #ThunarFile<!---->s works.
+ **/
+void
+thunar_file_unwatch (ThunarFile *file)
+{
+  gint watch_count;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_FILE_GET_WATCH_COUNT (file) > 0);
+
+  watch_count = THUNAR_FILE_GET_WATCH_COUNT (file);
+
+  if (--watch_count == 0)
+    {
+      /* just unset the watch handle */
+      g_object_set_qdata (G_OBJECT (file), thunar_file_watch_handle_quark, NULL);
+    }
+
+  THUNAR_FILE_SET_WATCH_COUNT (file, watch_count);
+}
+
+
+
+/**
+ * thunar_file_reload:
+ * @file : a #ThunarFile instance.
+ *
+ * Tells @file to reload its internal state, e.g. by reacquiring
+ * the file info from the underlying media.
+ *
+ * You must be able to handle the case that @file is
+ * destroyed during the reload call.
+ **/
+void
+thunar_file_reload (ThunarFile *file)
+{
+  ThunarVfsInfo *info;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* re-query the file info */
+  info = thunar_vfs_info_new_for_path (file->info->path, NULL);
+  if (G_UNLIKELY (info == NULL))
+    {
+      /* the file is no longer present */
+      thunar_file_destroy (file);
+    }
+  else
+    {
+      /* apply the new info... */
+      thunar_vfs_info_unref (file->info);
+      file->info = info;
+
+      /* ... and tell others */
+      thunar_file_changed (file);
+    }
+}
+
+
+ 
+/**
+ * thunar_file_changed:
+ * @file : a #ThunarFile instance.
+ *
+ * Emits the ::changed signal on @file. This function is meant to be called
+ * by derived classes whenever they notice changes to the @file.
+ **/
+void
+thunar_file_changed (ThunarFile *file)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_signal_emit (G_OBJECT (file), file_signals[CHANGED], 0);
+}
+
+
+
+/**
+ * thunar_file_destroy:
+ * @file : a #ThunarFile instance.
+ *
+ * Emits the ::destroy signal notifying all reference holders
+ * that they should release their references to the @file.
+ *
+ * This method is very similar to what gtk_object_destroy()
+ * does for #GtkObject<!---->s.
+ **/
+void
+thunar_file_destroy (ThunarFile *file)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  if (G_LIKELY ((file->flags & THUNAR_FILE_IN_DESTRUCTION) == 0))
+    g_object_run_dispose (G_OBJECT (file));
+}
+
+
+
+/**
+ * thunar_file_is_hidden:
+ * @file : a #ThunarFile instance.
+ *
+ * Checks whether @file can be considered a hidden file.
+ *
+ * Return value: %TRUE if @file is a hidden file, else %FALSE.
+ **/
+gboolean
+thunar_file_is_hidden (const ThunarFile *file)
+{
+  const gchar *p;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+
+  p = file->info->display_name;
+  if (*p != '.' && *p != '\0')
+    {
+      for (; p[1] != '\0'; ++p)
+        ;
+      return (*p == '~');
+    }
+
+  return TRUE;
+}
+
+
+
+/**
+ * thunar_file_cache_lookup:
+ * @path : a #ThunarVfsPath.
+ *
+ * Looks up the #ThunarFile for @path in the internal file
+ * cache and returns the file present for @path in the
+ * cache or %NULL if no #ThunarFile is cached for @path.
+ *
+ * Note that no reference is taken for the caller.
+ *
+ * This method should not be used but in very rare cases.
+ * Consider using thunar_file_get_for_path() instead.
+ *
+ * Return value: the #ThunarFile for @path in the internal
+ *               cache, or %NULL.
+ **/
+ThunarFile*
+thunar_file_cache_lookup (const ThunarVfsPath *path)
+{
+  /* allocate the ThunarFile cache on-demand */
+  if (G_UNLIKELY (file_cache == NULL))
+    file_cache = g_hash_table_new_full (thunar_vfs_path_hash, thunar_vfs_path_equal, (GDestroyNotify) thunar_vfs_path_unref, NULL);
+
+  return g_hash_table_lookup (file_cache, path);
+}
+
+
+
+/**
+ * thunar_file_list_copy:
+ * @file_list : a list of #ThunarFile<!---->s.
+ *
+ * Returns a deep-copy of @file_list, which must be
+ * freed using thunar_file_list_free().
+ *
+ * Return value: a deep copy of @file_list.
+ **/
+GList*
+thunar_file_list_copy (const GList *file_list)
+{
+  GList *list = g_list_copy ((GList *) file_list);
+  g_list_foreach (list, (GFunc) g_object_ref, NULL);
+  return list;
+}
+
+
+
+/**
+ * thunar_file_list_free:
+ * @file_list : a list of #ThunarFile<!---->s.
+ *
+ * Unrefs the #ThunarFile<!---->s contained in @file_list
+ * and frees the list itself.
+ **/
+void
+thunar_file_list_free (GList *file_list)
+{
+  g_list_foreach (file_list, (GFunc) g_object_unref, NULL);
+  g_list_free (file_list);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-file.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,520 @@
+/* $Id: thunar-file.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FILE_H__
+#define __THUNAR_FILE_H__
+
+#include <thunar/thunar-metafile.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarFileClass ThunarFileClass;
+typedef struct _ThunarFile      ThunarFile;
+
+#define THUNAR_TYPE_FILE            (thunar_file_get_type ())
+#define THUNAR_FILE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_FILE, ThunarFile))
+#define THUNAR_FILE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_FILE, ThunarFileClass))
+#define THUNAR_IS_FILE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_FILE))
+#define THUNAR_IS_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_FILE))
+#define THUNAR_FILE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_FILE, ThunarFileClass))
+
+/**
+ * ThunarFileDateType:
+ * @THUNAR_FILE_DATE_ACCESSED : date of last access to the file.
+ * @THUNAR_FILE_DATE_CHANGED  : date of last change to the file meta data or the content.
+ * @THUNAR_FILE_DATE_MODIFIED : date of last modification of the file's content.
+ *
+ * The various dates that can be queried about a #ThunarFile. Note, that not all
+ * #ThunarFile implementations support all types listed above. See the documentation
+ * of the thunar_file_get_date() method for details.
+ **/
+typedef enum
+{
+  THUNAR_FILE_DATE_ACCESSED,
+  THUNAR_FILE_DATE_CHANGED,
+  THUNAR_FILE_DATE_MODIFIED,
+} ThunarFileDateType;
+
+/**
+ * ThunarFileIconState:
+ * @THUNAR_FILE_ICON_STATE_DEFAULT : the default icon for the file.
+ * @THUNAR_FILE_ICON_STATE_DROP    : the drop accept icon for the file.
+ *
+ * The various file icon states that are used within the file manager
+ * views.
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_FILE_ICON_STATE_DEFAULT,
+  THUNAR_FILE_ICON_STATE_DROP,
+} ThunarFileIconState;
+
+/**
+ * ThunarFileThumbState:
+ * @THUNAR_FILE_THUMB_STATE_MASK    : the mask to extract the thumbnail state.
+ * @THUNAR_FILE_THUMB_STATE_UNKNOWN : unknown whether there's a thumbnail.
+ * @THUNAR_FILE_THUMB_STATE_NONE    : no thumbnail is available.
+ * @THUNAR_FILE_THUMB_STATE_READY   : a thumbnail is available.
+ * @THUNAR_FILE_THUMB_STATE_LOADING : a thumbnail is being generated.
+ *
+ * The state of the thumbnailing for a given #ThunarFile.
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_FILE_THUMB_STATE_MASK    = 0x03,
+  THUNAR_FILE_THUMB_STATE_UNKNOWN = 0x00,
+  THUNAR_FILE_THUMB_STATE_NONE    = 0x01,
+  THUNAR_FILE_THUMB_STATE_READY   = 0x02,
+  THUNAR_FILE_THUMB_STATE_LOADING = 0x03,
+} ThunarFileThumbState;
+
+#define THUNAR_FILE_EMBLEM_NAME_SYMBOLIC_LINK "emblem-symbolic-link"
+#define THUNAR_FILE_EMBLEM_NAME_CANT_READ "emblem-noread"
+#define THUNAR_FILE_EMBLEM_NAME_CANT_WRITE "emblem-nowrite"
+#define THUNAR_FILE_EMBLEM_NAME_DESKTOP "emblem-desktop"
+
+struct _ThunarFileClass
+{
+  GObjectClass __parent__;
+
+  /* signals */
+  void (*changed) (ThunarFile *file);
+  void (*destroy) (ThunarFile *file);
+  void (*renamed) (ThunarFile *file);
+};
+
+struct _ThunarFile
+{
+  GObject __parent__;
+
+  /*< private >*/
+  ThunarVfsInfo *info;
+  guint flags;
+};
+
+GType                            thunar_file_get_type             (void) G_GNUC_CONST;
+
+ThunarFile                      *thunar_file_get_for_info         (ThunarVfsInfo          *info);
+ThunarFile                      *thunar_file_get_for_path         (ThunarVfsPath          *path,
+                                                                   GError                **error);
+
+static inline gboolean           thunar_file_has_parent           (const ThunarFile       *file);
+ThunarFile                      *thunar_file_get_parent           (const ThunarFile       *file,
+                                                                   GError                **error);
+
+gboolean                         thunar_file_execute              (ThunarFile             *file,
+                                                                   GdkScreen              *screen,
+                                                                   GList                  *path_list,
+                                                                   GError                **error);
+
+gboolean                         thunar_file_rename               (ThunarFile             *file,
+                                                                   const gchar            *name,
+                                                                   GError                **error);
+
+GdkDragAction                    thunar_file_accepts_drop         (ThunarFile             *file,
+                                                                   GList                  *path_list,
+                                                                   GdkDragAction           actions);
+
+const gchar                     *thunar_file_get_display_name     (const ThunarFile       *file);
+const gchar                     *thunar_file_get_special_name     (const ThunarFile       *file);
+
+static inline ThunarVfsInfo     *thunar_file_get_info             (const ThunarFile       *file);
+static inline ThunarVfsPath     *thunar_file_get_path             (const ThunarFile       *file);
+static inline ThunarVfsMimeInfo *thunar_file_get_mime_info        (const ThunarFile       *file);
+ThunarVfsFileTime                thunar_file_get_date             (const ThunarFile       *file,
+                                                                   ThunarFileDateType      date_type);
+static inline ThunarVfsFileType  thunar_file_get_kind             (const ThunarFile       *file);
+static inline ThunarVfsFileMode  thunar_file_get_mode             (const ThunarFile       *file);
+static inline ThunarVfsFileSize  thunar_file_get_size             (const ThunarFile       *file);
+
+gchar                           *thunar_file_get_date_string      (const ThunarFile       *file,
+                                                                   ThunarFileDateType      date_type);
+gchar                           *thunar_file_get_mode_string      (const ThunarFile       *file);
+gchar                           *thunar_file_get_size_string      (const ThunarFile       *file);
+
+ThunarVfsVolume                 *thunar_file_get_volume           (const ThunarFile       *file,
+                                                                   ThunarVfsVolumeManager *volume_manager);
+
+ThunarVfsGroup                  *thunar_file_get_group            (const ThunarFile       *file);
+ThunarVfsUser                   *thunar_file_get_user             (const ThunarFile       *file);
+
+gboolean                         thunar_file_is_executable        (const ThunarFile       *file);
+gboolean                         thunar_file_is_readable          (const ThunarFile       *file);
+gboolean                         thunar_file_is_renameable        (const ThunarFile       *file);
+gboolean                         thunar_file_is_writable          (const ThunarFile       *file);
+
+GList                           *thunar_file_get_actions          (ThunarFile             *file,
+                                                                   GtkWidget              *window);
+
+GList                           *thunar_file_get_emblem_names     (ThunarFile              *file);
+void                             thunar_file_set_emblem_names     (ThunarFile              *file,
+                                                                   GList                   *emblem_names);
+
+static inline const gchar       *thunar_file_get_custom_icon      (const ThunarFile       *file);
+const gchar                     *thunar_file_get_icon_name        (const ThunarFile        *file,
+                                                                   ThunarFileIconState     icon_state,
+                                                                   GtkIconTheme           *icon_theme);
+
+const gchar                     *thunar_file_get_metadata         (ThunarFile             *file,
+                                                                   ThunarMetafileKey       key,
+                                                                   const gchar            *default_value);
+void                             thunar_file_set_metadata         (ThunarFile             *file,
+                                                                   ThunarMetafileKey       key,
+                                                                   const gchar            *value,
+                                                                   const gchar            *default_value);
+static inline gboolean           thunar_file_get_boolean_metadata (ThunarFile             *file,
+                                                                   ThunarMetafileKey       key,
+                                                                   gboolean                default_value);
+static inline void               thunar_file_set_boolean_metadata (ThunarFile             *file,
+                                                                   ThunarMetafileKey       key,
+                                                                   gboolean                value,
+                                                                   gboolean                default_value);
+
+void                             thunar_file_watch                (ThunarFile             *file);
+void                             thunar_file_unwatch              (ThunarFile             *file);
+
+void                             thunar_file_reload               (ThunarFile             *file);
+
+void                             thunar_file_changed              (ThunarFile             *file);
+void                             thunar_file_destroy              (ThunarFile             *file);
+
+static inline gboolean           thunar_file_is_directory         (const ThunarFile       *file);
+static inline gboolean           thunar_file_is_home              (const ThunarFile       *file);
+gboolean                         thunar_file_is_hidden            (const ThunarFile       *file);
+static inline gboolean           thunar_file_is_regular           (const ThunarFile       *file);
+static inline gboolean           thunar_file_is_root              (const ThunarFile       *file);
+static inline gboolean           thunar_file_is_symlink           (const ThunarFile       *file);
+
+
+ThunarFile                      *thunar_file_cache_lookup         (const ThunarVfsPath    *path);
+
+
+/* these methods are provided for ThunarIconFactory */
+static inline ThunarFileThumbState thunar_file_get_thumb_state (const ThunarFile    *file);
+static inline void                 thunar_file_set_thumb_state (ThunarFile          *file,
+                                                                ThunarFileThumbState thumb_state);
+
+
+GList *thunar_file_list_copy (const GList *file_list);
+void   thunar_file_list_free (GList       *file_list);
+
+
+/**
+ * thunar_file_has_parent:
+ * @file : a #ThunarFile instance.
+ *
+ * Checks whether it is possible to determine the parent #ThunarFile
+ * for @file.
+ *
+ * Return value: whether @file has a parent.
+ **/
+static inline gboolean
+thunar_file_has_parent (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return !thunar_file_is_root (file);
+}
+
+/**
+ * thunar_file_get_info:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the #ThunarVfsInfo for @file.
+ *
+ * Note, that there's no reference taken for the caller on the
+ * returned #ThunarVfsInfo, so if you need the object for a longer
+ * perioud, you'll need to take a reference yourself using the
+ * thunar_vfs_info_ref() method.
+ *
+ * Return value: the #ThunarVfsInfo for @file.
+ **/
+static inline ThunarVfsInfo*
+thunar_file_get_info (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return file->info;
+}
+
+/**
+ * thunar_file_get_path:
+ * @file  : a #ThunarFile instance.
+ *
+ * Returns the #ThunarVfsPath, that refers to the location of the @file.
+ *
+ * Note, that there's no reference taken for the caller on the
+ * returned #ThunarVfsPath, so if you need the object for a longer
+ * period, you'll need to take a reference yourself using the
+ * thunar_vfs_path_ref() function.
+ *
+ * Return value: the path to the @file.
+ **/
+static inline ThunarVfsPath*
+thunar_file_get_path (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return file->info->path;
+}
+
+/**
+ * thunar_file_get_mime_info:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the MIME type information for the given @file object. This
+ * function is garantied to always return a valid #ThunarVfsMimeInfo.
+ *
+ * Note, that there's no reference taken for the caller on the
+ * returned #ThunarVfsMimeInfo, so if you need the object for a
+ * longer period, you'll need to take a reference yourself using
+ * the thunar_vfs_mime_info_ref() function.
+ *
+ * Return value: the MIME type.
+ **/
+static inline ThunarVfsMimeInfo*
+thunar_file_get_mime_info (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return file->info->mime_info;
+}
+
+/**
+ * thunar_file_get_kind:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the kind of @file.
+ *
+ * Return value: the kind of @file.
+ **/
+static inline ThunarVfsFileType
+thunar_file_get_kind (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), THUNAR_VFS_FILE_TYPE_UNKNOWN);
+  return file->info->type;
+}
+
+/**
+ * thunar_file_get_mode:
+ * @file : a #ThunarFile instance.
+ *
+ * Returns the permission bits of @file.
+ *
+ * Return value: the permission bits of @file.
+ **/
+static inline ThunarVfsFileMode
+thunar_file_get_mode (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), 0);
+  return file->info->mode;
+}
+
+/**
+ * thunar_file_get_size:
+ * @file : a #ThunarFile instance.
+ *
+ * Tries to determine the size of @file in bytes and
+ * returns the size.
+ *
+ * Return value: the size of @file in bytes.
+ **/
+static inline ThunarVfsFileSize
+thunar_file_get_size (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return file->info->size;
+}
+
+/**
+ * thunar_file_get_custom_icon:
+ * @file : a #ThunarFile instance.
+ *
+ * Queries the custom icon from @file if any,
+ * else %NULL is returned. The custom icon
+ * can be either a themed icon name or an
+ * absolute path to an icon file in the local
+ * file system.
+ *
+ * Return value: the custom icon for @file
+ *               or %NULL.
+ **/
+static inline const gchar*
+thunar_file_get_custom_icon (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  return thunar_vfs_info_get_custom_icon (file->info);
+}
+
+/**
+ * thunar_file_get_boolean_metadata:
+ * @file          : a #ThunarFile instance.
+ * @key           : a #ThunarMetafileKey.
+ * @default_value : the default value.
+ *
+ * Specialized version of thunar_file_get_metadata()
+ * for boolean metadata values.
+ *
+ * Return value: the metadata for @key in @file if @key
+ *               exists, or @default_value.
+ **/
+static inline gboolean
+thunar_file_get_boolean_metadata (ThunarFile       *file,
+                                  ThunarMetafileKey key,
+                                  gboolean          default_value)
+{
+  const gchar *value;
+  value = thunar_file_get_metadata (file, key, default_value ? "true" : "false");
+  return (value[0] == 't' && value[1] == 'r'
+       && value[2] == 'u' && value[3] == 'e'
+       && value[4] == '\0');
+}
+
+
+
+/**
+ * thunar_file_set_boolean_metadata:
+ * @file          : a #ThunarFile instance.
+ * @key           : a #ThunarMetafileKey.
+ * @value         : the new value.
+ * @default_value : the default value for @key.
+ *
+ * Specialized version of thunar_file_set_metadata()
+ * for boolean metadata values.
+ **/
+static inline void
+thunar_file_set_boolean_metadata (ThunarFile       *file,
+                                  ThunarMetafileKey key,
+                                  gboolean          value,
+                                  gboolean          default_value)
+{
+  thunar_file_set_metadata (file, key, value ? "true" : "false",
+                            default_value ? "true" : "false");
+}
+
+
+
+/**
+ * thunar_file_is_directory:
+ * @file : a #ThunarFile instance.
+ *
+ * Checks whether @file refers to a directory.
+ *
+ * Return value: %TRUE if @file is a directory.
+ **/
+static inline gboolean
+thunar_file_is_directory (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return (file->info->type == THUNAR_VFS_FILE_TYPE_DIRECTORY);
+}
+
+/**
+ * thunar_file_is_home:
+ * @file : a #ThunarFile.
+ *
+ * Checks whether @file refers to the users home directory.
+ *
+ * Return value: %TRUE if @file is the users home directory.
+ **/
+static inline gboolean
+thunar_file_is_home (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return thunar_vfs_path_is_home (file->info->path);
+}
+
+/**
+ * thunar_file_is_regular:
+ * @file : a #ThunarFile.
+ *
+ * Checks whether @file refers to a regular file.
+ *
+ * Return value: %TRUE if @file is a regular file.
+ **/
+static inline gboolean
+thunar_file_is_regular (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return (file->info->type == THUNAR_VFS_FILE_TYPE_REGULAR);
+}
+
+/**
+ * thunar_file_is_root:
+ * @file : a #ThunarFile.
+ *
+ * Checks whether @file refers to the root directory.
+ *
+ * Return value: %TRUE if @file is the root directory.
+ **/
+static inline gboolean
+thunar_file_is_root (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return thunar_vfs_path_is_root (file->info->path);
+}
+
+/**
+ * thunar_file_is_symlink:
+ * @file : a #ThunarFile.
+ *
+ * Returns %TRUE if @file is a symbolic link.
+ *
+ * Return value: %TRUE if @file is a symbolic link.
+ **/
+static inline gboolean
+thunar_file_is_symlink (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
+  return ((file->info->flags & THUNAR_VFS_FILE_FLAGS_SYMLINK) != 0);
+}
+
+
+
+/**
+ * thunar_file_get_thumb_state:
+ * @file : a #ThunarFile.
+ *
+ * Returns the current #ThunarFileThumbState for @file.
+ *
+ * Return value: the #ThunarFileThumbState for @file.
+ **/
+static inline ThunarFileThumbState
+thunar_file_get_thumb_state (const ThunarFile *file)
+{
+  g_return_val_if_fail (THUNAR_IS_FILE (file), THUNAR_FILE_THUMB_STATE_NONE);
+  return (file->flags & THUNAR_FILE_THUMB_STATE_MASK);
+}
+
+/**
+ * thunar_file_set_thumb_state:
+ * @file        : a #ThunarFile.
+ * @thumb_state : the new #ThunarFileThumbState.
+ *
+ * Sets the #ThunarFileThumbState for @file
+ * to @thumb_state.
+ **/ 
+static inline void
+thunar_file_set_thumb_state (ThunarFile          *file,
+                             ThunarFileThumbState thumb_state)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  file->flags = (file->flags & ~THUNAR_FILE_THUMB_STATE_MASK) | thumb_state;
+}
+
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FILE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,595 @@
+/* $Id: thunar-folder.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-folder.h>
+
+
+
+/* property identifiers */
+enum
+{
+  PROP_0,
+  PROP_LOADING,
+};
+
+/* signal identifiers */
+enum
+{
+  ERROR,
+  FILES_ADDED,
+  FILES_REMOVED,
+  LAST_SIGNAL,
+};
+
+
+
+static void thunar_folder_class_init                  (ThunarFolderClass      *klass);
+static void thunar_folder_init                        (ThunarFolder           *folder);
+static void thunar_folder_finalize                    (GObject                *object);
+static void thunar_folder_get_property                (GObject                *object,
+                                                       guint                   prop_id,
+                                                       GValue                 *value,
+                                                       GParamSpec             *pspec);
+static void thunar_folder_error                       (ThunarVfsJob           *job,
+                                                       GError                 *error,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_infos_ready                 (ThunarVfsJob           *job,
+                                                       GList                  *infos,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_finished                    (ThunarVfsJob           *job,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_corresponding_file_destroy  (ThunarFile             *file,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_corresponding_file_renamed  (ThunarFile             *file,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_file_destroy                (ThunarFile             *file,
+                                                       ThunarFolder           *folder);
+static void thunar_folder_monitor                     (ThunarVfsMonitor       *monitor,
+                                                       ThunarVfsMonitorHandle *handle,
+                                                       ThunarVfsMonitorEvent   event,
+                                                       ThunarVfsPath          *handle_path,
+                                                       ThunarVfsPath          *event_path,
+                                                       gpointer                user_data);
+
+
+
+struct _ThunarFolderClass
+{
+  GtkObjectClass __parent__;
+
+  /* signals */
+  void (*error)         (ThunarFolder *folder,
+                         const GError *error);
+  void (*files_added)   (ThunarFolder *folder,
+                         GList        *files);
+  void (*files_removed) (ThunarFolder *folder,
+                         GList        *files);
+};
+
+struct _ThunarFolder
+{
+  GtkObject __parent__;
+
+  ThunarVfsJob           *job;
+
+  ThunarFile             *corresponding_file;
+  GList                  *files;
+
+  GClosure               *file_destroy_closure;
+  gint                    file_destroy_id;
+
+  ThunarVfsMonitor       *monitor;
+  ThunarVfsMonitorHandle *handle;
+};
+
+
+
+static guint  folder_signals[LAST_SIGNAL];
+static GQuark thunar_folder_quark;
+
+
+
+G_DEFINE_TYPE (ThunarFolder, thunar_folder, GTK_TYPE_OBJECT);
+
+
+
+static void
+thunar_folder_class_init (ThunarFolderClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_folder_finalize;
+  gobject_class->get_property = thunar_folder_get_property;
+
+  /**
+   * ThunarFolder::loading:
+   *
+   * Tells whether the contents of the #ThunarFolder are
+   * currently being loaded.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LOADING,
+                                   g_param_spec_boolean ("loading",
+                                                         _("Loading"),
+                                                         _("Whether the contents of the folder are currently being loaded"),
+                                                         FALSE,
+                                                         EXO_PARAM_READABLE));
+
+  /**
+   * ThunarFolder::error:
+   * @folder : a #ThunarFolder.
+   * @error  : the #GError describing the problem.
+   *
+   * Emitted when the #ThunarFolder fails to completly
+   * load the directory content because of an error.
+   **/
+  folder_signals[ERROR] =
+    g_signal_new ("error",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarFolderClass, error),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+  /**
+   * ThunarFolder::files-added:
+   *
+   * Emitted by the #ThunarFolder whenever new files have
+   * been added to a particular folder.
+   **/
+  folder_signals[FILES_ADDED] =
+    g_signal_new ("files-added",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarFolderClass, files_added),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+  /**
+   * ThunarFolder::files-removed:
+   *
+   * Emitted by the #ThunarFolder whenever a bunch of files
+   * is removed from the folder, which means they are not
+   * necessarily deleted from disk. This can be used to implement
+   * the reload of folders, which take longer to load.
+   **/
+  folder_signals[FILES_REMOVED] =
+    g_signal_new ("files-removed",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarFolderClass, files_removed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+}
+
+
+
+static void
+thunar_folder_init (ThunarFolder *folder)
+{
+  /* lookup the id for the "destroy" signal of ThunarFile's */
+  folder->file_destroy_id = g_signal_lookup ("destroy", THUNAR_TYPE_FILE);
+
+  /* generate the closure to connect to the "destroy" signal of all files */
+  folder->file_destroy_closure = g_cclosure_new (G_CALLBACK (thunar_folder_file_destroy), folder, NULL);
+  g_closure_ref (folder->file_destroy_closure);
+  g_closure_sink (folder->file_destroy_closure);
+
+  /* connect to the file alteration monitor */
+  folder->monitor = thunar_vfs_monitor_get_default ();
+}
+
+
+
+static void
+thunar_folder_finalize (GObject *object)
+{
+  ThunarFolder *folder = THUNAR_FOLDER (object);
+  GList        *lp;
+
+  /* disconnect from the file alteration monitor */
+  if (G_LIKELY (folder->handle != NULL))
+    thunar_vfs_monitor_remove (folder->monitor, folder->handle);
+  g_object_unref (G_OBJECT (folder->monitor));
+
+  /* cancel the pending job (if any) */
+  if (G_UNLIKELY (folder->job != NULL))
+    {
+      g_signal_handlers_disconnect_matched (folder->job, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, folder);
+      thunar_vfs_job_cancel (folder->job);
+      g_object_unref (G_OBJECT (folder->job));
+    }
+
+  /* disconnect from the corresponding file */
+  if (G_LIKELY (folder->corresponding_file != NULL))
+    {
+      /* drop the reference */
+      g_signal_handlers_disconnect_matched (G_OBJECT (folder->corresponding_file), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, folder);
+      g_object_set_qdata (G_OBJECT (folder->corresponding_file), thunar_folder_quark, NULL);
+      g_object_unref (G_OBJECT (folder->corresponding_file));
+    }
+
+  /* release references to the files */
+  for (lp = folder->files; lp != NULL; lp = lp->next)
+    {
+      g_signal_handlers_disconnect_matched (G_OBJECT (lp->data), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_CLOSURE,
+                                            folder->file_destroy_id, 0, folder->file_destroy_closure, NULL, NULL);
+      g_object_unref (G_OBJECT (lp->data));
+    }
+  g_list_free (folder->files);
+
+  /* drop the "destroy" closure */
+  g_closure_unref (folder->file_destroy_closure);
+
+  (*G_OBJECT_CLASS (thunar_folder_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_folder_get_property (GObject    *object,
+                            guint       prop_id,
+                            GValue     *value,
+                            GParamSpec *pspec)
+{
+  ThunarFolder *folder = THUNAR_FOLDER (object);
+
+  switch (prop_id)
+    {
+    case PROP_LOADING:
+      g_value_set_boolean (value, thunar_folder_get_loading (folder));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_folder_error (ThunarVfsJob *job,
+                     GError       *error,
+                     ThunarFolder *folder)
+{
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (folder->job == job);
+
+  /* tell the consumer about the problem */
+  g_signal_emit (G_OBJECT (folder), folder_signals[ERROR], 0, error);
+}
+
+
+
+static void
+thunar_folder_infos_ready (ThunarVfsJob *job,
+                           GList        *infos,
+                           ThunarFolder *folder)
+{
+  ThunarFile *file;
+  GList      *nfiles = NULL;
+  GList      *lp;
+
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (folder->handle == NULL);
+  g_return_if_fail (folder->job == job);
+
+  /* add the new files to our temporary list of new files */
+  for (lp = infos; lp != NULL; lp = lp->next)
+    {
+      /* get the file corresponding to the info */
+      file = thunar_file_get_for_info (lp->data);
+
+      /* add the file to the temporary list of new files */
+      nfiles = g_list_prepend (nfiles, file);
+
+      /* connect the "destroy" signal */
+      g_signal_connect_closure_by_id (G_OBJECT (file), folder->file_destroy_id,
+                                      0, folder->file_destroy_closure, TRUE);
+    }
+
+  /* check if we have any new files */
+  if (G_LIKELY (nfiles != NULL))
+    {
+      /* add the new files to our existing list of files */
+      folder->files = g_list_concat (folder->files, nfiles);
+
+      /* tell the consumers that we have new files */
+      g_signal_emit (G_OBJECT (folder), folder_signals[FILES_ADDED], 0, nfiles);
+    }
+}
+
+
+
+static void
+thunar_folder_finished (ThunarVfsJob *job,
+                        ThunarFolder *folder)
+{
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (THUNAR_IS_FILE (folder->corresponding_file));
+  g_return_if_fail (folder->handle == NULL);
+  g_return_if_fail (folder->job == job);
+
+  /* we did it, the folder is loaded */
+  g_signal_handlers_disconnect_matched (folder->job, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, folder);
+  g_object_unref (G_OBJECT (folder->job));
+  folder->job = NULL;
+
+  /* tell the consumers that we have loaded the directory */
+  g_object_notify (G_OBJECT (folder), "loading");
+
+  /* add us to the file alteration monitor */
+  folder->handle = thunar_vfs_monitor_add_directory (folder->monitor, thunar_file_get_path (folder->corresponding_file),
+                                                     thunar_folder_monitor, folder);
+}
+
+
+
+static void
+thunar_folder_corresponding_file_destroy (ThunarFile   *file,
+                                          ThunarFolder *folder)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (folder->corresponding_file == file);
+
+  /* the folder is useless now */
+  gtk_object_destroy (GTK_OBJECT (folder));
+}
+
+
+
+static void
+thunar_folder_corresponding_file_renamed (ThunarFile   *file,
+                                          ThunarFolder *folder)
+{
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (folder->corresponding_file == file);
+
+  /* re-register the VFS monitor handle if already connected */
+  if (G_LIKELY (folder->handle != NULL))
+    {
+      thunar_vfs_monitor_remove (folder->monitor, folder->handle);
+      folder->handle = thunar_vfs_monitor_add_directory (folder->monitor, thunar_file_get_path (file),
+                                                         thunar_folder_monitor, folder);
+    }
+}
+
+
+
+static void
+thunar_folder_file_destroy (ThunarFile   *file,
+                            ThunarFolder *folder)
+{
+  GList files;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (g_list_find (folder->files, file) != NULL);
+
+  /* disconnect from the file */
+  g_signal_handlers_disconnect_matched (G_OBJECT (file), G_SIGNAL_MATCH_CLOSURE, 0, 0, folder->file_destroy_closure, NULL, NULL);
+  folder->files = g_list_remove (folder->files, file);
+
+  /* tell everybody that the file is gone */
+  files.data = file; files.next = files.prev = NULL;
+  g_signal_emit (G_OBJECT (folder), folder_signals[FILES_REMOVED], 0, &files);
+
+  /* drop our reference to the file */
+  g_object_unref (G_OBJECT (file));
+}
+
+
+
+static void
+thunar_folder_monitor (ThunarVfsMonitor       *monitor,
+                       ThunarVfsMonitorHandle *handle,
+                       ThunarVfsMonitorEvent   event,
+                       ThunarVfsPath          *handle_path,
+                       ThunarVfsPath          *event_path,
+                       gpointer                user_data)
+{
+  ThunarFolder *folder = THUNAR_FOLDER (user_data);
+  ThunarFile   *file;
+  GList        *lp;
+  GList         list;
+
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (folder->monitor == monitor);
+  g_return_if_fail (folder->handle == handle);
+  g_return_if_fail (folder->job == NULL);
+
+  /* check on which file the event occurred */
+  if (!thunar_vfs_path_equal (event_path, thunar_file_get_path (folder->corresponding_file)))
+    {
+      /* check if we already ship the file */
+      for (lp = folder->files; lp != NULL; lp = lp->next)
+        if (thunar_vfs_path_equal (event_path, thunar_file_get_path (lp->data)))
+          break;
+
+      /* if we don't have it, add it if the event is not an "deleted" event */
+      if (G_UNLIKELY (lp == NULL && event != THUNAR_VFS_MONITOR_EVENT_DELETED))
+        {
+          /* allocate a file for the path */
+          file = thunar_file_get_for_path (event_path, NULL);
+          if (G_UNLIKELY (file == NULL))
+            return;
+
+          /* prepend it to our internal list */
+          g_signal_connect_closure_by_id (G_OBJECT (file), folder->file_destroy_id, 0, folder->file_destroy_closure, TRUE);
+          folder->files = g_list_prepend (folder->files, file);
+
+          /* tell others about the new file */
+          list.data = file; list.next = list.prev = NULL;
+          g_signal_emit (G_OBJECT (folder), folder_signals[FILES_ADDED], 0, &list);
+        }
+      else if (lp != NULL)
+        {
+          /* update/destroy the file */
+          if (event == THUNAR_VFS_MONITOR_EVENT_DELETED)
+            thunar_file_destroy (lp->data);
+          else
+            thunar_file_reload (lp->data);
+        }
+    }
+  else
+    {
+      /* update/destroy the corresponding file */
+      if (event == THUNAR_VFS_MONITOR_EVENT_DELETED)
+        thunar_file_destroy (folder->corresponding_file);
+      else
+        thunar_file_reload (folder->corresponding_file);
+    }
+}
+
+
+
+/**
+ * thunar_folder_get_for_file:
+ * @file : a #ThunarFile.
+ *
+ * Opens the specified @file as #ThunarFolder and
+ * returns a reference to the folder.
+ *
+ * The caller is responsible to free the returned
+ * object using g_object_unref() when no longer
+ * needed.
+ *
+ * Return value: the #ThunarFolder which corresponds
+ *               to @file.
+ **/
+ThunarFolder*
+thunar_folder_get_for_file (ThunarFile *file)
+{
+  ThunarFolder *folder;
+
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (thunar_file_is_directory (file), NULL);
+
+  /* determine the "thunar-folder" quark on-demand */
+  if (G_UNLIKELY (thunar_folder_quark == 0))
+    thunar_folder_quark = g_quark_from_static_string ("thunar-folder");
+
+  /* check if we already know that folder */
+  folder = g_object_get_qdata (G_OBJECT (file), thunar_folder_quark);
+  if (G_UNLIKELY (folder != NULL))
+    {
+      g_object_ref (G_OBJECT (folder));
+    }
+  else
+    {
+      /* allocate the new instance */
+      folder = g_object_new (THUNAR_TYPE_FOLDER, NULL);
+      folder->corresponding_file = file;
+      g_object_ref (G_OBJECT (file));
+
+      /* drop the floating reference */
+      g_assert (GTK_OBJECT_FLOATING (folder));
+      g_object_ref (G_OBJECT (folder));
+      gtk_object_sink (GTK_OBJECT (folder));
+
+      g_signal_connect (G_OBJECT (file), "destroy", G_CALLBACK (thunar_folder_corresponding_file_destroy), folder);
+      g_signal_connect (G_OBJECT (file), "renamed", G_CALLBACK (thunar_folder_corresponding_file_renamed), folder);
+
+      g_object_set_qdata (G_OBJECT (file), thunar_folder_quark, folder);
+
+      /* schedule the loading of the folder */
+      folder->job = thunar_vfs_listdir (thunar_file_get_path (file), NULL);
+      g_signal_connect (folder->job, "error", G_CALLBACK (thunar_folder_error), folder);
+      g_signal_connect (folder->job, "finished", G_CALLBACK (thunar_folder_finished), folder);
+      g_signal_connect (folder->job, "infos-ready", G_CALLBACK (thunar_folder_infos_ready), folder);
+    }
+
+  return folder;
+}
+
+
+
+/**
+ * thunar_folder_get_corresponding_file:
+ * @folder : a #ThunarFolder instance.
+ *
+ * Returns the #ThunarFile corresponding to this @folder.
+ *
+ * No reference is taken on the returned #ThunarFile for
+ * the caller, so if you need a persistent reference to
+ * the file, you'll have to call g_object_ref() yourself.
+ *
+ * Return value: the #ThunarFile corresponding to @folder.
+ **/
+ThunarFile*
+thunar_folder_get_corresponding_file (const ThunarFolder *folder)
+{
+  g_return_val_if_fail (THUNAR_IS_FOLDER (folder), NULL);
+  return folder->corresponding_file;
+}
+
+
+
+/**
+ * thunar_folder_get_files:
+ * @folder : a #ThunarFolder instance.
+ *
+ * Returns the list of files currently known for @folder.
+ * The returned list is owned by @folder and may not be freed!
+ *
+ * Return value: the list of #ThunarFiles for @folder.
+ **/
+GList*
+thunar_folder_get_files (const ThunarFolder *folder)
+{
+  g_return_val_if_fail (THUNAR_IS_FOLDER (folder), NULL);
+  return folder->files;
+}
+
+
+
+/**
+ * thunar_folder_get_loading:
+ * @folder : a #ThunarFolder instance.
+ *
+ * Tells whether the contents of the @folder are currently
+ * being loaded.
+ *
+ * Return value: %TRUE if @folder is loading, else %FALSE.
+ **/
+gboolean
+thunar_folder_get_loading (const ThunarFolder *folder)
+{
+  g_return_val_if_fail (THUNAR_IS_FOLDER (folder), FALSE);
+  return (folder->job != NULL);
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-folder.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-folder.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_FOLDER_H__
+#define __THUNAR_FOLDER_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarFolderClass ThunarFolderClass;
+typedef struct _ThunarFolder      ThunarFolder;
+
+#define THUNAR_TYPE_FOLDER            (thunar_folder_get_type ())
+#define THUNAR_FOLDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_FOLDER, ThunarFolder))
+#define THUNAR_FOLDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_FOLDER, ThunarFolderClass))
+#define THUNAR_IS_FOLDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_FOLDER))
+#define THUNAR_IS_FOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_FOLDER))
+#define THUNAR_FOLDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_FOLDER, ThunarFolderClass))
+
+GType         thunar_folder_get_type               (void) G_GNUC_CONST;
+
+ThunarFolder *thunar_folder_get_for_file           (ThunarFile         *file);
+
+ThunarFile   *thunar_folder_get_corresponding_file (const ThunarFolder *folder);
+GList        *thunar_folder_get_files              (const ThunarFolder *folder);
+gboolean      thunar_folder_get_loading            (const ThunarFolder *folder);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_FOLDER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,493 @@
+/* $Id: thunar-gdk-pixbuf-extensions.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ *
+ * Based on code originally written by Eazel, Inc. for the eel utility
+ * library.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MMINTRIN_H
+#include <mmintrin.h>
+#endif
+
+#include <thunar/thunar-gdk-pixbuf-extensions.h>
+
+
+
+/**
+ * thunar_gdk_pixbuf_colorize:
+ * @src   : the source #GdkPixbuf.
+ * @color : the new color.
+ *
+ * Creates a new #GdkPixbuf based on @src, which is
+ * colorized to @color.
+ *
+ * Return value: the colorized #GdkPixbuf.
+ **/
+GdkPixbuf*
+thunar_gdk_pixbuf_colorize (const GdkPixbuf *src,
+                            const GdkColor  *color)
+{
+  GdkPixbuf *dst;
+  gboolean   has_alpha;
+  gint       dst_row_stride;
+  gint       src_row_stride;
+  gint       width;
+  gint       height;
+  gint       i;
+
+  /* determine source parameters */
+  width = gdk_pixbuf_get_width (src);
+  height = gdk_pixbuf_get_height (src);
+  has_alpha = gdk_pixbuf_get_has_alpha (src);
+
+  /* allocate the destination pixbuf */
+  dst = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), has_alpha, gdk_pixbuf_get_bits_per_sample (src), width, height);
+
+  /* determine row strides on src/dst */
+  dst_row_stride = gdk_pixbuf_get_rowstride (dst);
+  src_row_stride = gdk_pixbuf_get_rowstride (src);
+
+#if defined(__GNUC__) && defined(__MMX__)
+  /* check if there's a good reason to use MMX */
+  if (G_LIKELY (has_alpha && dst_row_stride == width * 4 && src_row_stride == width * 4 && (width * height) % 2 == 0))
+    {
+      __m64 *pixdst = (__m64 *) gdk_pixbuf_get_pixels (dst);
+      __m64 *pixsrc = (__m64 *) gdk_pixbuf_get_pixels (src);
+      __m64  alpha_mask = _mm_set_pi8 (0xff, 0, 0, 0, 0xff, 0, 0, 0);
+      __m64  color_factor = _mm_set_pi16 (0, color->blue, color->green, color->red);
+      __m64  zero = _mm_setzero_si64 ();
+      __m64  src, alpha, hi, lo;
+
+      /* divide color components by 256 */
+      color_factor = _mm_srli_pi16 (color_factor, 8);
+
+      for (i = (width * height) >> 1; i > 0; --i)
+        {
+          /* read the source pixel */
+          src = *pixsrc;
+
+          /* remember the two alpha values */
+          alpha = _mm_and_si64 (alpha_mask, src);
+
+          /* extract the hi pixel */
+          hi = _mm_unpackhi_pi8 (src, zero);
+          hi = _mm_mullo_pi16 (hi, color_factor);
+
+          /* extract the lo pixel */
+          lo = _mm_unpacklo_pi8 (src, zero);
+          lo = _mm_mullo_pi16 (lo, color_factor);
+
+          /* prefetch the next two pixels */
+          __builtin_prefetch (++pixsrc, 0, 1);
+
+          /* divide by 256 */
+          hi = _mm_srli_pi16 (hi, 8);
+          lo = _mm_srli_pi16 (lo, 8);
+
+          /* combine the 2 pixels again */
+          src = _mm_packs_pu16 (lo, hi);
+
+          /* write back the calculated color together with the alpha */
+          *pixdst = _mm_or_si64 (alpha, src);
+
+          /* advance the dest pointer */
+          ++pixdst;
+        }
+
+      _mm_empty ();
+    }
+  else
+#endif
+    {
+      guchar *dst_pixels = gdk_pixbuf_get_pixels (dst);
+      guchar *src_pixels = gdk_pixbuf_get_pixels (src);
+      guchar *pixdst;
+      guchar *pixsrc;
+      gint    red_value = color->red / 255.0;
+      gint    green_value = color->green / 255.0;
+      gint    blue_value = color->blue / 255.0;
+      gint    j;
+
+      for (i = height; --i >= 0; )
+        {
+          pixdst = dst_pixels + i * dst_row_stride;
+          pixsrc = src_pixels + i * src_row_stride;
+
+          for (j = width; j > 0; --j)
+            {
+              *pixdst++ = (*pixsrc++ * red_value) >> 8;
+              *pixdst++ = (*pixsrc++ * green_value) >> 8;
+              *pixdst++ = (*pixsrc++ * blue_value) >> 8;
+              
+              if (has_alpha)
+                *pixdst++ = *pixsrc++;
+            }
+        }
+    }
+
+  return dst;
+}
+
+
+
+static void
+draw_frame_row (GdkPixbuf *frame_image,
+                gint       target_width,
+                gint       source_width,
+                gint       source_v_position,
+                gint       dest_v_position,
+                GdkPixbuf *result_pixbuf,
+                gint       left_offset,
+                gint       height)
+{
+  gint remaining_width;
+  gint slab_width;
+  gint h_offset;
+  
+  for (h_offset = 0, remaining_width = target_width; remaining_width > 0; h_offset += slab_width, remaining_width -= slab_width)
+    {
+      slab_width = remaining_width > source_width ? source_width : remaining_width;
+      gdk_pixbuf_copy_area (frame_image, left_offset, source_v_position, slab_width, height, result_pixbuf, left_offset + h_offset, dest_v_position);
+    }
+}
+
+
+
+static void
+draw_frame_column (GdkPixbuf *frame_image,
+                   gint       target_height,
+                   gint       source_height,
+                   gint       source_h_position,
+                   gint       dest_h_position,
+                   GdkPixbuf *result_pixbuf,
+                   gint       top_offset,
+                   gint       width)
+{
+  gint remaining_height;
+  gint slab_height;
+  gint v_offset;
+  
+  for (v_offset = 0, remaining_height = target_height; remaining_height > 0; v_offset += slab_height, remaining_height -= slab_height)
+    {
+      slab_height = remaining_height > source_height ? source_height : remaining_height;
+      gdk_pixbuf_copy_area (frame_image, source_h_position, top_offset, width, slab_height, result_pixbuf, dest_h_position, top_offset + v_offset);
+    }
+}
+
+
+
+/**
+ * thunar_gdk_pixbuf_frame:
+ * @src           : the source #GdkPixbuf.
+ * @frame         : the frame #GdkPixbuf.
+ * @left_offset   : the left frame offset.
+ * @top_offset    : the top frame offset.
+ * @right_offset  : the right frame offset.
+ * @bottom_offset : the bottom frame offset.
+ *
+ * Embeds @src in @frame and returns the result as
+ * new #GdkPixbuf.
+ *
+ * The caller is responsible to free the returned
+ * #GdkPixbuf using g_object_unref().
+ *
+ * Return value: the framed version of @src.
+ **/
+GdkPixbuf*
+thunar_gdk_pixbuf_frame (GdkPixbuf *src,
+                         GdkPixbuf *frame,
+                         gint       left_offset,
+                         gint       top_offset,
+                         gint       right_offset,
+                         gint       bottom_offset)
+{
+  GdkPixbuf *dst;
+  gint       dst_width;
+  gint       dst_height;
+  gint       frame_width;
+  gint       frame_height;
+  gint       src_width;
+  gint       src_height;
+
+  g_return_val_if_fail (GDK_IS_PIXBUF (src), NULL);
+  g_return_val_if_fail (GDK_IS_PIXBUF (frame), NULL);
+
+  src_width = gdk_pixbuf_get_width (src);
+  src_height = gdk_pixbuf_get_height (src);
+
+  frame_width = gdk_pixbuf_get_width (frame);
+  frame_height = gdk_pixbuf_get_height (frame);
+
+  dst_width = src_width + left_offset + right_offset;
+  dst_height = src_height + top_offset + bottom_offset;
+
+  dst = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, dst_width, dst_height);
+
+  /* fill the destination if the source has an alpha channel */
+  if (G_UNLIKELY (gdk_pixbuf_get_has_alpha (src)))
+    gdk_pixbuf_fill (dst, 0xffffffff);
+
+  /* draw the left top cornder and top row */
+  gdk_pixbuf_copy_area (frame, 0, 0, left_offset, top_offset, dst, 0, 0);
+  draw_frame_row (frame, src_width, frame_width - left_offset - right_offset, 0, 0, dst, left_offset, top_offset);
+
+  /* draw the right top corner and left column */
+  gdk_pixbuf_copy_area (frame, frame_width - right_offset, 0, right_offset, top_offset, dst, dst_width - right_offset, 0);
+  draw_frame_column (frame, src_height, frame_height - top_offset - bottom_offset, 0, 0, dst, top_offset, left_offset);
+
+  /* draw the bottom right corner and bottom row */
+  gdk_pixbuf_copy_area (frame, frame_width - right_offset, frame_height - bottom_offset, right_offset,
+                        bottom_offset, dst, dst_width - right_offset, dst_height - bottom_offset);
+  draw_frame_row (frame, src_width, frame_width - left_offset - right_offset, frame_height - bottom_offset,
+                  dst_height - bottom_offset, dst, left_offset, bottom_offset);
+
+  /* draw the bottom left corner and the right column */
+  gdk_pixbuf_copy_area (frame, 0, frame_height - bottom_offset, left_offset, bottom_offset, dst, 0, dst_height - bottom_offset);
+  draw_frame_column (frame, src_height, frame_height - top_offset - bottom_offset, frame_width - right_offset,
+                     dst_width - right_offset, dst, top_offset, right_offset);
+
+  /* copy the source pixbuf into the framed area */
+  gdk_pixbuf_copy_area (src, 0, 0, src_width, src_height, dst, left_offset, top_offset);
+
+  return dst;
+}
+
+
+
+/**
+ * thunar_gdk_pixbuf_lucent:
+ * @src     : the source #GdkPixbuf.
+ * @percent : the percentage of translucency.
+ *
+ * Returns a version of @src, whose pixels translucency is
+ * @percent of the original @src pixels.
+ *
+ * The caller is responsible to free the returned object
+ * using g_object_unref() when no longer needed.
+ *
+ * Return value: a translucent version of @src.
+ **/
+GdkPixbuf*
+thunar_gdk_pixbuf_lucent (const GdkPixbuf *src,
+                          guint            percent)
+{
+  GdkPixbuf *dst;
+  guchar    *dst_pixels;
+  guchar    *src_pixels;
+  guchar    *pixdst;
+  guchar    *pixsrc;
+  gint       dst_row_stride;
+  gint       src_row_stride;
+  gint       width;
+  gint       height;
+  gint       i, j;
+
+  g_return_val_if_fail (GDK_IS_PIXBUF (src), NULL);
+  g_return_val_if_fail (percent >= 0 && percent <= 100, NULL);
+
+  /* determine source parameters */
+  width = gdk_pixbuf_get_width (src);
+  height = gdk_pixbuf_get_height (src);
+
+  /* allocate the destination pixbuf */
+  dst = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), TRUE, gdk_pixbuf_get_bits_per_sample (src), width, height);
+
+  /* determine row strides on src/dst */
+  dst_row_stride = gdk_pixbuf_get_rowstride (dst);
+  src_row_stride = gdk_pixbuf_get_rowstride (src);
+
+  /* determine pixels on src/dst */
+  dst_pixels = gdk_pixbuf_get_pixels (dst);
+  src_pixels = gdk_pixbuf_get_pixels (src);
+
+  /* check if the source already contains an alpha channel */
+  if (G_LIKELY (gdk_pixbuf_get_has_alpha (src)))
+    {
+      for (i = height; --i >= 0; )
+        {
+          pixdst = dst_pixels + i * dst_row_stride;
+          pixsrc = src_pixels + i * src_row_stride;
+
+          for (j = width; --j >= 0; )
+            {
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = ((guint) *pixsrc++ * percent) / 100u;
+            }
+        }
+    }
+  else
+    {
+      /* pre-calculate the alpha value */
+      percent = (255u * percent) / 100u;
+
+      for (i = height; --i >= 0; )
+        {
+          pixdst = dst_pixels + i * dst_row_stride;
+          pixsrc = src_pixels + i * src_row_stride;
+
+          for (j = width; --j >= 0; )
+            {
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = *pixsrc++;
+              *pixdst++ = percent;
+            }
+        }
+    }
+
+  return dst;
+}
+
+
+
+static guchar
+lighten_channel (guchar cur_value)
+{
+  gint new_value = cur_value;
+
+  new_value += 24 + (new_value >> 3);
+  if (G_UNLIKELY (new_value > 255))
+    new_value = 255;
+
+  return (guchar) new_value;
+}
+
+
+
+/**
+ * thunar_gdk_pixbuf_spotlight:
+ * @src : the source #GdkPixbuf.
+ *
+ * Creates a lightened version of @src, suitable for
+ * prelit state display of icons.
+ *
+ * The caller is responsible to free the returned
+ * pixbuf using #g_object_unref().
+ *
+ * Return value: the lightened version of @src.
+ **/
+GdkPixbuf*
+thunar_gdk_pixbuf_spotlight (const GdkPixbuf *src)
+{
+  GdkPixbuf *dst;
+  gboolean   has_alpha;
+  gint       dst_row_stride;
+  gint       src_row_stride;
+  gint       width;
+  gint       height;
+  gint       i;
+
+  /* determine source parameters */
+  width = gdk_pixbuf_get_width (src);
+  height = gdk_pixbuf_get_height (src);
+  has_alpha = gdk_pixbuf_get_has_alpha (src);
+
+  /* allocate the destination pixbuf */
+  dst = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), has_alpha, gdk_pixbuf_get_bits_per_sample (src), width, height);
+
+  /* determine src/dst row strides */
+  dst_row_stride = gdk_pixbuf_get_rowstride (dst);
+  src_row_stride = gdk_pixbuf_get_rowstride (src);
+  
+#if defined(__GNUC__) && defined(__MMX__)
+  /* check if there's a good reason to use MMX */
+  if (G_LIKELY (has_alpha && dst_row_stride == width * 4 && src_row_stride == width * 4 && (width * height) % 2 == 0))
+    {
+      __m64 *pixdst = (__m64 *) gdk_pixbuf_get_pixels (dst);
+      __m64 *pixsrc = (__m64 *) gdk_pixbuf_get_pixels (src);
+      __m64  alpha_mask = _mm_set_pi8 (0xff, 0, 0, 0, 0xff, 0, 0, 0);
+      __m64  twentyfour = _mm_set_pi8 (0, 24, 24, 24, 0, 24, 24, 24);
+      __m64  zero = _mm_setzero_si64 ();
+
+      for (i = (width * height) >> 1; i > 0; --i)
+        {
+          /* read the source pixel */
+          __m64 src = *pixsrc;
+
+          /* remember the two alpha values */
+          __m64 alpha = _mm_and_si64 (alpha_mask, src);
+
+          /* extract the hi pixel */
+          __m64 hi = _mm_unpackhi_pi8 (src, zero);
+
+          /* extract the lo pixel */
+          __m64 lo = _mm_unpacklo_pi8 (src, zero);
+
+          /* add (x >> 3) to x */
+          hi = _mm_adds_pu16 (hi, _mm_srli_pi16 (hi, 3));
+          lo = _mm_adds_pu16 (lo, _mm_srli_pi16 (lo, 3));
+
+          /* prefetch next value */
+          __builtin_prefetch (++pixsrc, 0, 1);
+
+          /* combine the two pixels again */
+          src = _mm_packs_pu16 (lo, hi);
+
+          /* add 24 (with saturation) */
+          src = _mm_adds_pu8 (src, twentyfour);
+
+          /* drop the alpha channel from the temp color */
+          src = _mm_andnot_si64 (alpha_mask, src);
+
+          /* write back the calculated color */
+          *pixdst = _mm_or_si64 (alpha, src);
+
+          /* advance the dest pointer */
+          ++pixdst;
+        }
+
+      _mm_empty ();
+    }
+  else
+#endif
+    {
+      guchar *dst_pixels = gdk_pixbuf_get_pixels (dst);
+      guchar *src_pixels = gdk_pixbuf_get_pixels (src);
+      guchar *pixdst;
+      guchar *pixsrc;
+      gint    j;
+
+      for (i = height; --i >= 0; )
+        {
+          pixdst = dst_pixels + i * dst_row_stride;
+          pixsrc = src_pixels + i * src_row_stride;
+      
+          for (j = width; j > 0; --j)
+            {
+              *pixdst++ = lighten_channel (*pixsrc++);
+              *pixdst++ = lighten_channel (*pixsrc++);
+              *pixdst++ = lighten_channel (*pixsrc++);
+
+              if (G_LIKELY (has_alpha))
+                *pixdst++ = *pixsrc++;
+            }
+        }
+    }
+
+  return dst;
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gdk-pixbuf-extensions.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,44 @@
+/* $Id: thunar-gdk-pixbuf-extensions.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_GDK_PIXBUF_EXTENSIONS_H__
+#define __THUNAR_GDK_PIXBUF_EXTENSIONS_H__
+
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS;
+
+GdkPixbuf *thunar_gdk_pixbuf_colorize  (const GdkPixbuf *src,
+                                        const GdkColor  *color);
+
+GdkPixbuf *thunar_gdk_pixbuf_frame     (GdkPixbuf       *src,
+                                        GdkPixbuf       *frame,
+                                        gint             left_offset,
+                                        gint             top_offset,
+                                        gint             right_offset,
+                                        gint             bottom_offset);
+
+GdkPixbuf *thunar_gdk_pixbuf_lucent    (const GdkPixbuf *src,
+                                        guint            percent);
+
+GdkPixbuf *thunar_gdk_pixbuf_spotlight (const GdkPixbuf *src);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_GDK_PIXBUF_EXTENSIONS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,64 @@
+/* $Id: thunar-gobject-extensions.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 os-cillation e.K.
+ *
+ * Written by Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <glib-object.h>
+
+#include <thunar/thunar-gobject-extensions.h>
+
+
+
+static void transform_string_to_boolean (const GValue *src, GValue *dst);
+
+
+
+static void
+transform_string_to_boolean (const GValue *src,
+                             GValue       *dst)
+{
+  g_value_set_boolean (dst, strcmp (g_value_get_string (src), "FALSE") != 0);
+}
+
+
+
+/**
+ * thunar_g_initialize_transformations:
+ *
+ * Registers various transformation functions to the
+ * GLib Type System, which are used by g_value_transform()
+ * to transform between different kinds of values.
+ **/
+void
+thunar_g_initialize_transformations (void)
+{
+  if (!g_value_type_transformable (G_TYPE_STRING, G_TYPE_BOOLEAN))
+    g_value_register_transform_func (G_TYPE_STRING, G_TYPE_BOOLEAN, transform_string_to_boolean);
+}

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gobject-extensions.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,31 @@
+/* $Id: thunar-gobject-extensions.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 os-cillation e.K.
+ *
+ * Written by Benedikt Meurer <benny at xfce.org>.
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_GOBJECT_EXTENSIONS_H__
+#define __THUNAR_GOBJECT_EXTENSIONS_H__
+
+G_BEGIN_DECLS;
+
+void thunar_g_initialize_transformations (void) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_GOBJECT_EXTENSIONS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,58 @@
+/* $Id: thunar-gtk-extensions.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-gtk-extensions.h>
+
+
+
+/**
+ * thunar_gtk_action_group_set_action_sensitive:
+ * @action_group : a #GtkActionGroup.
+ * @action_name  : the name of a #GtkAction in @action_group.
+ * @sensitive    : the new sensitivity.
+ *
+ * Convenience function to change the sensitivity of an action
+ * in @action_group (whose name is @action_name) to @sensitive.
+ **/
+void
+thunar_gtk_action_group_set_action_sensitive (GtkActionGroup *action_group,
+                                              const gchar    *action_name,
+                                              gboolean        sensitive)
+{
+  GtkAction *action;
+
+  g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
+  g_return_if_fail (action_name != NULL && *action_name != '\0');
+
+  /* query the action from the group */
+  action = gtk_action_group_get_action (action_group, action_name);
+
+  /* apply the sensitivity to the action */
+#if GTK_CHECK_VERSION(2,6,0)
+  gtk_action_set_sensitive (action, sensitive);
+#else
+  g_object_set (G_OBJECT (action), "sensitive", sensitive, NULL);
+#endif
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-gtk-extensions.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,33 @@
+/* $Id: thunar-gtk-extensions.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_GTK_EXTENSIONS_H__
+#define __THUNAR_GTK_EXTENSIONS_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+void thunar_gtk_action_group_set_action_sensitive (GtkActionGroup *action_group,
+                                                   const gchar    *action_name,
+                                                   gboolean        sensitive);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_GTK_EXTENSIONS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,443 @@
+/* $Id: thunar-history.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-history.h>
+#include <thunar/thunar-navigator.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_ACTION_GROUP,
+  PROP_CURRENT_DIRECTORY,
+};
+
+
+
+static void         thunar_history_class_init             (ThunarHistoryClass   *klass);
+static void         thunar_history_navigator_init         (ThunarNavigatorIface *iface);
+static void         thunar_history_init                   (ThunarHistory        *history);
+static void         thunar_history_dispose                (GObject              *object);
+static void         thunar_history_finalize               (GObject              *object);
+static void         thunar_history_get_property           (GObject              *object,
+                                                           guint                 prop_id,
+                                                           GValue               *value,
+                                                           GParamSpec           *pspec);
+static void         thunar_history_set_property           (GObject              *object,
+                                                           guint                 prop_id,
+                                                           const GValue         *value,
+                                                           GParamSpec           *pspec);
+static ThunarFile  *thunar_history_get_current_directory  (ThunarNavigator      *navigator);
+static void         thunar_history_set_current_directory  (ThunarNavigator      *navigator,
+                                                           ThunarFile           *current_directory);
+static void         thunar_history_action_back            (GtkAction            *action,
+                                                           ThunarHistory        *history);
+static void         thunar_history_action_forward         (GtkAction            *action,
+                                                           ThunarHistory        *history);
+
+
+
+struct _ThunarHistoryClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarHistory
+{
+  GObject __parent__;
+
+  ThunarFile     *current_directory;
+
+  GtkActionGroup *action_group;
+
+  GtkAction      *action_back;
+  GtkAction      *action_forward;
+
+  GList          *back_list;
+  GList          *forward_list;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarHistory,
+                         thunar_history,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_NAVIGATOR,
+                                                thunar_history_navigator_init));
+
+
+
+static void
+thunar_history_class_init (ThunarHistoryClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_history_dispose;
+  gobject_class->finalize = thunar_history_finalize;
+  gobject_class->get_property = thunar_history_get_property;
+  gobject_class->set_property = thunar_history_set_property;
+
+  /**
+   * ThunarHistory::action-group:
+   *
+   * The #GtkActionGroup to which the #ThunarHistory<!---->s
+   * actions "back" and "forward" should be connected.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_ACTION_GROUP,
+                                   g_param_spec_object ("action-group",
+                                                        _("Action group"),
+                                                        _("Action group"),
+                                                        GTK_TYPE_ACTION_GROUP,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarHistory::current-directory:
+   *
+   * Inherited from #ThunarNavigator.
+   **/
+  g_object_class_override_property (gobject_class,
+                                    PROP_CURRENT_DIRECTORY,
+                                    "current-directory");
+}
+
+
+
+static void
+thunar_history_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_history_get_current_directory;
+  iface->set_current_directory = thunar_history_set_current_directory;
+}
+
+
+
+static void
+thunar_history_init (ThunarHistory *history)
+{
+  /* create the "back" action */
+  history->action_back = gtk_action_new ("back", _("Back"), _("Go to the previous visited folder"), GTK_STOCK_GO_BACK);
+  g_signal_connect (G_OBJECT (history->action_back), "activate", G_CALLBACK (thunar_history_action_back), history);
+  gtk_action_set_sensitive (history->action_back, FALSE);
+
+  /* create the "forward" action */
+  history->action_forward = gtk_action_new ("forward", _("Forward"), _("Go to the next visited folder"), GTK_STOCK_GO_FORWARD);
+  g_signal_connect (G_OBJECT (history->action_forward), "activate", G_CALLBACK (thunar_history_action_forward), history);
+  gtk_action_set_sensitive (history->action_forward, FALSE);
+}
+
+
+
+static void
+thunar_history_dispose (GObject *object)
+{
+  ThunarHistory *history = THUNAR_HISTORY (object);
+
+  /* disconnect from the current directory */
+  thunar_navigator_set_current_directory (THUNAR_NAVIGATOR (history), NULL);
+
+  /* disconnect from the action group */
+  thunar_history_set_action_group (history, NULL);
+
+  (*G_OBJECT_CLASS (thunar_history_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_history_finalize (GObject *object)
+{
+  ThunarHistory *history = THUNAR_HISTORY (object);
+
+  /* disconnect from the "forward" action */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (history->action_forward), thunar_history_action_forward, history);
+  g_object_unref (G_OBJECT (history->action_forward));
+
+  /* disconnect from the "back" action */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (history->action_back), thunar_history_action_back, history);
+  g_object_unref (G_OBJECT (history->action_back));
+
+  /* release the "forward" and "back" lists */
+  thunar_file_list_free (history->forward_list);
+  thunar_file_list_free (history->back_list);
+
+  (*G_OBJECT_CLASS (thunar_history_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_history_get_property (GObject    *object,
+                             guint       prop_id,
+                             GValue     *value,
+                             GParamSpec *pspec)
+{
+  ThunarHistory *history = THUNAR_HISTORY (object);
+
+  switch (prop_id)
+    {
+    case PROP_ACTION_GROUP:
+      g_value_set_object (value, thunar_history_get_action_group (history));
+      break;
+
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (history)));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_history_set_property (GObject      *object,
+                             guint         prop_id,
+                             const GValue *value,
+                             GParamSpec   *pspec)
+{
+  ThunarHistory *history = THUNAR_HISTORY (object);
+
+  switch (prop_id)
+    {
+    case PROP_ACTION_GROUP:
+      thunar_history_set_action_group (history, g_value_get_object (value));
+      break;
+
+    case PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (THUNAR_NAVIGATOR (history), g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarFile*
+thunar_history_get_current_directory (ThunarNavigator *navigator)
+{
+  ThunarHistory *history = THUNAR_HISTORY (navigator);
+  return history->current_directory;
+}
+
+
+
+static void
+thunar_history_set_current_directory (ThunarNavigator *navigator,
+                                      ThunarFile      *current_directory)
+{
+  ThunarHistory *history = THUNAR_HISTORY (navigator);
+
+  /* verify that we don't already use that directory */
+  if (G_UNLIKELY (current_directory == history->current_directory))
+    return;
+
+  /* we try to be smart and check if the new current directory
+   * is the first element on either "back" or "forward" and if
+   * so, perform the appropriate operation.
+   */
+  if (history->back_list != NULL && history->back_list->data == current_directory)
+    {
+      thunar_history_action_back (history->action_back, history);
+    }
+  else if (history->forward_list != NULL && history->forward_list->data == current_directory)
+    {
+      thunar_history_action_forward (history->action_forward, history);
+    }
+  else
+    {
+      /* clear the "forward" list */
+      gtk_action_set_sensitive (history->action_forward, FALSE);
+      thunar_file_list_free (history->forward_list);
+      history->forward_list = NULL;
+
+      /* prepend the previous current directory to the "back" list */
+      if (G_LIKELY (history->current_directory != NULL))
+        {
+          history->back_list = g_list_prepend (history->back_list, history->current_directory);
+          gtk_action_set_sensitive (history->action_back, TRUE);
+        }
+
+      /* activate the new current directory */
+      history->current_directory = current_directory;
+
+      /* connect to the new current directory */
+      if (G_LIKELY (current_directory != NULL))
+        g_object_ref (G_OBJECT (current_directory));
+    }
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (history), "current-directory");
+}
+
+
+
+static void
+thunar_history_action_back (GtkAction     *action,
+                            ThunarHistory *history)
+{
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_HISTORY (history));
+
+  /* make sure the "back" list isn't empty */
+  if (G_UNLIKELY (history->back_list == NULL))
+    return;
+
+  /* prepend the previous current directory to the "forward" list */
+  if (G_LIKELY (history->current_directory != NULL))
+    {
+      history->forward_list = g_list_prepend (history->forward_list, history->current_directory);
+      gtk_action_set_sensitive (history->action_forward, TRUE);
+    }
+
+  /* remove the first directory from the "back" list
+   * and make it the current directory.
+   */
+  history->current_directory = history->back_list->data;
+  history->back_list = g_list_delete_link (history->back_list, history->back_list);
+  gtk_action_set_sensitive (history->action_back, (history->back_list != NULL));
+
+  /* tell the other modules to change the current directory */
+  thunar_navigator_change_directory (THUNAR_NAVIGATOR (history), history->current_directory);
+}
+
+
+
+static void
+thunar_history_action_forward (GtkAction     *action,
+                               ThunarHistory *history)
+{
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_HISTORY (history));
+
+  /* make sure the "forward" list isn't empty */
+  if (G_UNLIKELY (history->forward_list == NULL))
+    return;
+
+  /* prepend the previous current directory to the "back" list */
+  if (G_LIKELY (history->current_directory != NULL))
+    {
+      history->back_list = g_list_prepend (history->back_list, history->current_directory);
+      gtk_action_set_sensitive (history->action_back, TRUE);
+    }
+
+  /* remove the first directory from the "forward" list
+   * and make it the current directory.
+   */
+  history->current_directory = history->forward_list->data;
+  history->forward_list = g_list_delete_link (history->forward_list, history->forward_list);
+  gtk_action_set_sensitive (history->action_forward, (history->forward_list != NULL));
+
+  /* tell the other modules to change the current directory */
+  thunar_navigator_change_directory (THUNAR_NAVIGATOR (history), history->current_directory);
+}
+
+
+
+/**
+ * thunar_history_new:
+ *
+ * Allocates a new #ThunarHistory object.
+ *
+ * Return value: the newly allocated #ThunarHistory object.
+ **/
+ThunarHistory*
+thunar_history_new (void)
+{
+  return g_object_new (THUNAR_TYPE_HISTORY, NULL);
+}
+
+
+
+/**
+ * thunar_history_get_action_group:
+ * @history : a #ThunarHistory.
+ *
+ * Returns the #GtkActionGroup to which @history
+ * is currently attached, or %NULL if @history is
+ * not attached to any #GtkActionGroup right now.
+ *
+ * Return value: the #GtkActionGroup to which
+ *               @history is currently attached.
+ **/
+GtkActionGroup*
+thunar_history_get_action_group (const ThunarHistory *history)
+{
+  g_return_val_if_fail (THUNAR_IS_HISTORY (history), NULL);
+  return history->action_group;
+}
+
+
+
+/**
+ * thunar_history_set_action_group:
+ * @history      : a #ThunarHistory.
+ * @action_group : a #GtkActionGroup or %NULL.
+ *
+ * Attaches @history to the specified @action_group,
+ * and thereby registers the actions "back" and
+ * "forward" provided by @history on the given
+ * @action_group.
+ **/
+void
+thunar_history_set_action_group (ThunarHistory  *history,
+                                 GtkActionGroup *action_group)
+{
+  g_return_if_fail (THUNAR_IS_HISTORY (history));
+  g_return_if_fail (action_group == NULL || GTK_IS_ACTION_GROUP (action_group));
+
+  /* verify that we don't already use that action group */
+  if (G_UNLIKELY (history->action_group == action_group))
+    return;
+
+  /* disconnect from the previous action group */
+  if (G_UNLIKELY (history->action_group != NULL))
+    {
+      gtk_action_group_remove_action (history->action_group, history->action_back);
+      gtk_action_group_remove_action (history->action_group, history->action_forward);
+      g_object_unref (G_OBJECT (history->action_group));
+    }
+
+  /* activate the new action group */
+  history->action_group = action_group;
+
+  /* connect to the new action group */
+  if (G_LIKELY (action_group != NULL))
+    {
+      g_object_ref (G_OBJECT (action_group));
+      gtk_action_group_add_action_with_accel (action_group, history->action_back, "<alt>Left");
+      gtk_action_group_add_action_with_accel (action_group, history->action_forward, "<alt>Right");
+    }
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (history), "action-group");
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-history.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-history.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_HISTORY_H__
+#define __THUNAR_HISTORY_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarHistoryClass ThunarHistoryClass;
+typedef struct _ThunarHistory      ThunarHistory;
+
+#define THUNAR_TYPE_HISTORY             (thunar_history_get_type ())
+#define THUNAR_HISTORY(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_HISTORY, ThunarHistory))
+#define THUNAR_HISTORY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_HISTORY, ThunarHistoryClass))
+#define THUNAR_IS_HISTORY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_HISTORY))
+#define THUNAR_IS_HISTORY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_HISTORY))
+#define THUNAR_HISTORY_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_HISTORY, ThunarHistoryClass))
+
+GType           thunar_history_get_type         (void) G_GNUC_CONST;
+
+ThunarHistory  *thunar_history_new              (void) G_GNUC_MALLOC;
+
+GtkActionGroup *thunar_history_get_action_group (const ThunarHistory *history);
+void            thunar_history_set_action_group (ThunarHistory       *history,
+                                                 GtkActionGroup      *action_group);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_HISTORY_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,872 @@
+/* $Id: thunar-icon-factory.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ *
+ * The basic idea for the icon factory implementation was borrowed from
+ * Nautilus initially, but the implementation is very different from
+ * what Nautilus does.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar/thunar-fallback-icon.h>
+#include <thunar/thunar-gdk-pixbuf-extensions.h>
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-thumbnail-frame.h>
+#include <thunar/thunar-thumbnail-generator.h>
+
+
+
+/* the timeout until the sweeper is run (in ms) */
+#define THUNAR_ICON_FACTORY_SWEEP_TIMEOUT (30 * 1000)
+
+/* the maximum length of the recently used list */
+#define MAX_RECENTLY (128u)
+
+enum
+{
+  PROP_0,
+  PROP_ICON_THEME,
+};
+
+
+
+typedef struct _ThunarIconKey ThunarIconKey;
+
+
+
+static void       thunar_icon_factory_class_init            (ThunarIconFactoryClass *klass);
+static void       thunar_icon_factory_init                  (ThunarIconFactory      *factory);
+static void       thunar_icon_factory_dispose               (GObject                *object);
+static void       thunar_icon_factory_finalize              (GObject                *object);
+static void       thunar_icon_factory_get_property          (GObject                *object,
+                                                             guint                   prop_id,
+                                                             GValue                 *value,
+                                                             GParamSpec             *pspec);
+static void       thunar_icon_factory_set_property          (GObject                *object,
+                                                             guint                   prop_id,
+                                                             const GValue           *value,
+                                                             GParamSpec             *pspec);
+static gboolean   thunar_icon_factory_changed               (GSignalInvocationHint  *ihint,
+                                                             guint                   n_param_values,
+                                                             const GValue           *param_values,
+                                                             gpointer                user_data);
+static gboolean   thunar_icon_factory_sweep_timer           (gpointer                user_data);
+static void       thunar_icon_factory_sweep_timer_destroy   (gpointer                user_data);
+static GdkPixbuf *thunar_icon_factory_load_from_file        (ThunarIconFactory      *factory,
+                                                             const gchar            *path,
+                                                             gint                    size);
+static GdkPixbuf *thunar_icon_factory_lookup_icon           (ThunarIconFactory      *factory,
+                                                             const gchar            *name,
+                                                             gint                    size,
+                                                             gboolean                wants_default);
+static void       thunar_icon_factory_mark_recently_used    (ThunarIconFactory      *factory,
+                                                             GdkPixbuf              *pixbuf);
+static guint      thunar_icon_key_hash                      (gconstpointer           data);
+static gboolean   thunar_icon_key_equal                     (gconstpointer           a,
+                                                             gconstpointer           b);
+
+
+
+struct _ThunarIconFactoryClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarIconFactory
+{
+  GObject __parent__;
+
+  ThunarThumbnailGenerator *thumbnail_generator;
+  ThunarVfsThumbFactory    *thumbnail_factory;
+  GdkPixbuf                *thumbnail_frame;
+
+  GdkPixbuf                *recently[MAX_RECENTLY];  /* ring buffer */
+  guint                     recently_pos;            /* insert position */
+
+  GHashTable               *icon_cache;
+
+  GtkIconTheme             *icon_theme;
+  GdkPixbuf                *fallback_icon;
+
+  gint                      changed_idle_id;
+  gint                      sweep_timer_id;
+
+  gulong                    changed_hook_id;
+};
+
+struct _ThunarIconKey
+{
+  gchar *name;
+  gint   size;
+};
+
+
+
+static GQuark thunar_icon_factory_quark = 0;
+static GQuark thunar_file_thumb_path_quark = 0;
+
+
+
+G_DEFINE_TYPE (ThunarIconFactory, thunar_icon_factory, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_icon_factory_class_init (ThunarIconFactoryClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* setup the thunar-file-thumb-path quark */
+  thunar_file_thumb_path_quark = g_quark_from_static_string ("thunar-file-thumb-path");
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_icon_factory_dispose;
+  gobject_class->finalize = thunar_icon_factory_finalize;
+  gobject_class->get_property = thunar_icon_factory_get_property;
+  gobject_class->set_property = thunar_icon_factory_set_property;
+
+  /**
+   * ThunarIconFactory:icon-theme:
+   *
+   * The #GtkIconTheme on which the given #ThunarIconFactory instance operates
+   * on.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_ICON_THEME,
+                                   g_param_spec_object ("icon-theme",
+                                                        _("Icon theme"),
+                                                        _("The icon theme used by the icon factory"),
+                                                        GTK_TYPE_ICON_THEME,
+                                                        G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_icon_factory_init (ThunarIconFactory *factory)
+{
+  /* initialize GSource ids */
+  factory->changed_idle_id = -1;
+  factory->sweep_timer_id = -1;
+
+  /* connect emission hook for the "changed" signal on the GtkIconTheme class. We use the emission
+   * hook way here, because that way we can make sure that the icon cache is definetly cleared
+   * before any other part of the application gets notified about the icon theme change.
+   */
+  factory->changed_hook_id = g_signal_add_emission_hook (g_signal_lookup ("changed", GTK_TYPE_ICON_THEME),
+                                                         0, thunar_icon_factory_changed, factory, NULL);
+
+  /* load the fallback icon */
+  factory->fallback_icon = gdk_pixbuf_new_from_inline (-1, thunar_fallback_icon, FALSE, NULL);
+
+  /* allocate the hash table for the icon cache */
+  factory->icon_cache = g_hash_table_new_full (thunar_icon_key_hash, thunar_icon_key_equal, g_free, g_object_unref);
+
+  /* allocate the thumbnail factory */
+  factory->thumbnail_factory = thunar_vfs_thumb_factory_new ((THUNAR_THUMBNAIL_SIZE > 128)
+                                                            ? THUNAR_VFS_THUMB_SIZE_LARGE
+                                                            : THUNAR_VFS_THUMB_SIZE_NORMAL);
+
+  /* allocate the thumbnail generator */
+  factory->thumbnail_generator = thunar_thumbnail_generator_new (factory->thumbnail_factory);
+
+  /* load the thumbnail frame */
+  factory->thumbnail_frame = gdk_pixbuf_new_from_inline (-1, thunar_thumbnail_frame, FALSE, NULL);
+}
+
+
+
+static void
+thunar_icon_factory_dispose (GObject *object)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (object);
+
+  g_return_if_fail (THUNAR_IS_ICON_FACTORY (factory));
+
+  if (G_UNLIKELY (factory->changed_idle_id >= 0))
+    g_source_remove (factory->changed_idle_id);
+
+  if (G_UNLIKELY (factory->sweep_timer_id >= 0))
+    g_source_remove (factory->sweep_timer_id);
+
+  (*G_OBJECT_CLASS (thunar_icon_factory_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_icon_factory_finalize (GObject *object)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (object);
+  guint              n;
+
+  g_return_if_fail (THUNAR_IS_ICON_FACTORY (factory));
+
+  /* clear the recently used list */
+  for (n = 0; n < MAX_RECENTLY; ++n)
+    if (G_LIKELY (factory->recently[n] != NULL))
+      g_object_unref (G_OBJECT (factory->recently[n]));
+
+  /* clear the icon cache hash table */
+  g_hash_table_destroy (factory->icon_cache);
+
+  /* drop the fallback icon reference */
+  g_object_unref (G_OBJECT (factory->fallback_icon));
+
+  /* release the thumbnail frame */
+  g_object_unref (G_OBJECT (factory->thumbnail_frame));
+
+  /* disconnect from the thumbnail factory */
+  g_object_unref (G_OBJECT (factory->thumbnail_factory));
+
+  /* disconnect from the thumbnail generator */
+  g_object_unref (G_OBJECT (factory->thumbnail_generator));
+
+  /* remove the "changed" emission hook from the GtkIconTheme class */
+  g_signal_remove_emission_hook (g_signal_lookup ("changed", GTK_TYPE_ICON_THEME), factory->changed_hook_id);
+
+  /* disconnect from the associated icon theme (if any) */
+  if (G_LIKELY (factory->icon_theme != NULL))
+    {
+      g_object_set_qdata (G_OBJECT (factory->icon_theme), thunar_icon_factory_quark, NULL);
+      g_object_unref (G_OBJECT (factory->icon_theme));
+    }
+
+  (*G_OBJECT_CLASS (thunar_icon_factory_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_icon_factory_get_property (GObject    *object,
+                                  guint       prop_id,
+                                  GValue     *value,
+                                  GParamSpec *pspec)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (object);
+
+  switch (prop_id)
+    {
+    case PROP_ICON_THEME:
+      g_value_set_object (value, factory->icon_theme);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_icon_factory_set_property (GObject      *object,
+                                  guint         prop_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (object);
+
+  g_return_if_fail (factory->icon_theme == NULL);
+  g_return_if_fail (thunar_icon_factory_quark != 0);
+
+  switch (prop_id)
+    {
+    case PROP_ICON_THEME:
+      /* connect to the icon-theme */
+      factory->icon_theme = g_value_get_object (value);
+      g_object_ref (G_OBJECT (factory->icon_theme));
+      g_object_set_qdata (G_OBJECT (factory->icon_theme),
+                          thunar_icon_factory_quark,
+                          factory);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static gboolean
+thunar_icon_factory_changed (GSignalInvocationHint *ihint,
+                             guint                  n_param_values,
+                             const GValue          *param_values,
+                             gpointer               user_data)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (user_data);
+  guint              n;
+
+  /* drop all items from the recently used list */
+  for (n = 0; n < MAX_RECENTLY; ++n)
+    if (G_LIKELY (factory->recently[n] != NULL))
+      {
+        g_object_unref (G_OBJECT (factory->recently[n]));
+        factory->recently[n] = NULL;
+      }
+
+  /* drop all items from the icon cache */
+  g_hash_table_foreach_remove (factory->icon_cache, (GHRFunc) exo_noop_true, NULL);
+
+  /* keep the emission hook alive */
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_icon_check_sweep (ThunarIconKey *key,
+                         GdkPixbuf     *pixbuf)
+{
+  return (G_OBJECT (pixbuf)->ref_count == 1);
+}
+
+
+
+static gboolean
+thunar_icon_factory_sweep_timer (gpointer user_data)
+{
+  ThunarIconFactory *factory = THUNAR_ICON_FACTORY (user_data);
+
+  g_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), FALSE);
+
+  GDK_THREADS_ENTER ();
+
+  /* ditch all icons whose ref_count is 1 */
+  g_hash_table_foreach_remove (factory->icon_cache, (GHRFunc) thunar_icon_check_sweep, factory);
+
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_icon_factory_sweep_timer_destroy (gpointer user_data)
+{
+  THUNAR_ICON_FACTORY (user_data)->sweep_timer_id = -1;
+}
+
+
+
+static inline gboolean
+thumbnail_needs_frame (const GdkPixbuf *thumbnail,
+                       gint             width,
+                       gint             height)
+{
+  const guchar *pixels;
+  gint          rowstride;
+  gint          n;
+
+  /* don't add frames to small thumbnails */
+  if (width < THUNAR_THUMBNAIL_SIZE && height < THUNAR_THUMBNAIL_SIZE)
+    return FALSE;
+
+  /* always add a frame to thumbnails w/o alpha channel */
+  if (G_LIKELY (!gdk_pixbuf_get_has_alpha (thumbnail)))
+    return TRUE;
+
+  /* get a pointer to the thumbnail data */
+  pixels = gdk_pixbuf_get_pixels (thumbnail);
+
+  /* check if we have a transparent pixel on the first row */
+  for (n = width * 4; n > 0; n -= 4)
+    if (pixels[n - 1] < 255u)
+      return FALSE;
+
+  /* determine the rowstride */
+  rowstride = gdk_pixbuf_get_rowstride (thumbnail);
+
+  /* skip the first row */
+  pixels += rowstride;
+
+  /* check if we have a transparent pixel in the first or last column */
+  for (n = height - 2; n > 0; --n, pixels += rowstride)
+    if (pixels[3] < 255u || pixels[width * 4 - 1] < 255u)
+      return FALSE;
+
+  /* check if we have a transparent pixel on the last row */
+  for (n = width * 4; n > 0; n -= 4)
+    if (pixels[n - 1] < 255u)
+      return FALSE;
+
+  return TRUE;
+}
+
+
+
+static GdkPixbuf*
+thunar_icon_factory_load_from_file (ThunarIconFactory *factory,
+                                    const gchar       *path,
+                                    gint               size)
+{
+  GdkPixbuf *pixbuf;
+  GdkPixbuf *tmp;
+  gint       width;
+  gint       height;
+
+  /* try to load the image from the file */
+  pixbuf = gdk_pixbuf_new_from_file (path, NULL);
+  if (G_LIKELY (pixbuf != NULL))
+    {
+      /* determine the dimensions of the pixbuf */
+      width = gdk_pixbuf_get_width (pixbuf);
+      height = gdk_pixbuf_get_height (pixbuf);
+
+      /* add a frame around thumbnail (large) images */
+      if (strstr (path, G_DIR_SEPARATOR_S ".thumbnails" G_DIR_SEPARATOR_S) != NULL
+          && thumbnail_needs_frame (pixbuf, width, height))
+        {
+          /* perform the scaling first (if required) */
+          if (G_LIKELY (width > size || height > size))
+            {
+              tmp = exo_gdk_pixbuf_scale_ratio (pixbuf, size);
+              g_object_unref (G_OBJECT (pixbuf));
+              pixbuf = tmp;
+            }
+
+          /* add the frame */
+          tmp = thunar_gdk_pixbuf_frame (pixbuf, factory->thumbnail_frame, 3, 3, 6, 6);
+          g_object_unref (G_OBJECT (pixbuf));
+          pixbuf = tmp;
+        }
+      else if (G_LIKELY (width > size || height > size))
+        {
+          /* scale down the non-thumbnailed icon */
+          tmp = exo_gdk_pixbuf_scale_ratio (pixbuf, size);
+          g_object_unref (G_OBJECT (pixbuf));
+          pixbuf = tmp;
+        }
+    }
+
+  return pixbuf;
+}
+
+
+
+static GdkPixbuf*
+thunar_icon_factory_lookup_icon (ThunarIconFactory *factory,
+                                 const gchar       *name,
+                                 gint               size,
+                                 gboolean           wants_default)
+{
+  ThunarIconKey  lookup_key;
+  ThunarIconKey *key;
+  GtkIconInfo   *icon_info;
+  GdkPixbuf     *pixbuf = NULL;
+
+  g_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), NULL);
+  g_return_val_if_fail (name != NULL && *name != '\0', NULL);
+  g_return_val_if_fail (size > 0, NULL);
+
+  /* prepare the lookup key */
+  lookup_key.name = (gchar *) name;
+  lookup_key.size = size;
+
+  /* check if we already have a cached version of the icon */
+  if (!g_hash_table_lookup_extended (factory->icon_cache, &lookup_key, NULL, (gpointer) &pixbuf))
+    {
+      /* check if we have to load a file instead of a themed icon */
+      if (G_UNLIKELY (g_path_is_absolute (name)))
+        {
+          pixbuf = thunar_icon_factory_load_from_file (factory, name, size);
+        }
+      else
+        {
+          /* check if the icon theme contains an icon of that name */
+          icon_info = gtk_icon_theme_lookup_icon (factory->icon_theme, name, size, 0);
+          if (G_LIKELY (icon_info != NULL))
+            {
+              /* try to load the icon returned from the icon theme */
+              pixbuf = gtk_icon_info_load_icon (icon_info, NULL);
+              gtk_icon_info_free (icon_info);
+            }
+        }
+
+      /* use fallback icon if no pixbuf could be loaded */
+      if (G_UNLIKELY (pixbuf == NULL))
+        {
+          /* check if we are allowed to return the fallback icon */
+          if (!wants_default)
+            return NULL;
+
+          /* already have the fallback icon loaded at 48x48 */
+          if (G_LIKELY (size == 48))
+            return g_object_ref (G_OBJECT (factory->fallback_icon));
+
+          /* return a scaled version of the fallback icon */
+          return exo_gdk_pixbuf_scale_ratio (factory->fallback_icon, size);
+        }
+
+      /* generate a key for the new cached icon */
+      key = g_malloc (sizeof (ThunarIconKey) + strlen (name) + 1);
+      key->name = ((gchar *) key) + sizeof (ThunarIconKey);
+      key->size = size;
+      strcpy (key->name, name);
+
+      /* insert the new icon into the cache */
+      g_hash_table_insert (factory->icon_cache, key, pixbuf);
+    }
+
+  /* add the icon to the recently used list */
+  thunar_icon_factory_mark_recently_used (factory, pixbuf);
+
+  return g_object_ref (G_OBJECT (pixbuf));
+}
+
+
+
+static void
+thunar_icon_factory_mark_recently_used (ThunarIconFactory *factory,
+                                        GdkPixbuf         *pixbuf)
+{
+  guint n;
+
+  g_return_if_fail (THUNAR_IS_ICON_FACTORY (factory));
+  g_return_if_fail (GDK_IS_PIXBUF (pixbuf));
+
+  /* check if the icon is already on the list */
+  for (n = 0; n < MAX_RECENTLY; ++n)
+    if (G_UNLIKELY (factory->recently[n] == pixbuf))
+      return;
+
+  /* ditch the previous item on the current insert position,
+   * which - if present - is the oldest item in the list.
+   */
+  if (G_LIKELY (factory->recently[factory->recently_pos] != NULL))
+    g_object_unref (G_OBJECT (factory->recently[factory->recently_pos]));
+
+  /* insert the new pixbuf into the list */
+  factory->recently[factory->recently_pos] = pixbuf;
+  g_object_ref (G_OBJECT (pixbuf));
+
+  /* advance the insert position */
+  factory->recently_pos = (factory->recently_pos + 1) % MAX_RECENTLY;
+
+  /* schedule the sweeper */
+  if (G_UNLIKELY (factory->sweep_timer_id < 0))
+    {
+      factory->sweep_timer_id = g_timeout_add_full (G_PRIORITY_LOW, THUNAR_ICON_FACTORY_SWEEP_TIMEOUT,
+                                                    thunar_icon_factory_sweep_timer, factory,
+                                                    thunar_icon_factory_sweep_timer_destroy);
+    }
+}
+
+
+
+static guint
+thunar_icon_key_hash (gconstpointer data)
+{
+  const ThunarIconKey *key = data;
+  const gchar         *p;
+  guint                h;
+
+  h = (guint) key->size << 5;
+
+  for (p = key->name; *p != '\0'; ++p)
+    h = (h << 5) - h + *p;
+
+  return h;
+}
+
+
+
+static gboolean
+thunar_icon_key_equal (gconstpointer a,
+                       gconstpointer b)
+{
+  const ThunarIconKey *a_key = a;
+  const ThunarIconKey *b_key = b;
+
+  /* compare sizes first */
+  if (a_key->size != b_key->size)
+    return FALSE;
+
+  /* do a full string comparison on the names */
+  return (strcmp (a_key->name, b_key->name) == 0);
+}
+
+
+
+/**
+ * thunar_icon_factory_get_default:
+ *
+ * Returns the #ThunarIconFactory that operates on the default #GtkIconTheme.
+ * The default #ThunarIconFactory instance will be around for the time the
+ * programs runs, starting with the first call to this function.
+ *
+ * The caller is responsible to free the returned object using
+ * g_object_unref() when no longer needed.
+ *
+ * Return value: the #ThunarIconFactory for the default icon theme.
+ **/
+ThunarIconFactory*
+thunar_icon_factory_get_default (void)
+{
+  static ThunarIconFactory *factory = NULL;
+
+  if (G_UNLIKELY (factory == NULL))
+    {
+      factory = thunar_icon_factory_get_for_icon_theme (gtk_icon_theme_get_default ());
+      g_object_add_weak_pointer (G_OBJECT (factory), (gpointer) &factory);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (factory));
+    }
+
+  return factory;
+}
+
+
+
+/**
+ * thunar_icon_factory_get_for_icon_theme:
+ * @icon_theme : a #GtkIconTheme instance.
+ *
+ * Determines the proper #ThunarIconFactory to be used with the specified
+ * @icon_theme and returns it.
+ *
+ * You need to explicitly free the returned #ThunarIconFactory object
+ * using #g_object_unref() when you are done with it.
+ *
+ * Return value: the #ThunarIconFactory for @icon_theme.
+ **/
+ThunarIconFactory*
+thunar_icon_factory_get_for_icon_theme (GtkIconTheme *icon_theme)
+{
+  ThunarIconFactory *factory;
+
+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
+
+  /* generate the quark on-demand */
+  if (G_UNLIKELY (thunar_icon_factory_quark == 0))
+    thunar_icon_factory_quark = g_quark_from_static_string ("thunar-icon-factory");
+
+  /* check if the given icon theme already knows about an icon factory */
+  factory = g_object_get_qdata (G_OBJECT (icon_theme), thunar_icon_factory_quark);
+  if (G_UNLIKELY (factory == NULL))
+    {
+      factory = g_object_new (THUNAR_TYPE_ICON_FACTORY,
+                              "icon-theme", icon_theme,
+                              NULL);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (factory));
+    }
+
+  return factory;
+}
+
+
+
+/**
+ * thunar_icon_factory_get_icon_theme:
+ * @factory : a #ThunarIconFactory instance.
+ *
+ * Returns the #GtkIconTheme associated with @factory.
+ *
+ * Return value: the #GtkIconTheme associated with @factory.
+ **/
+GtkIconTheme*
+thunar_icon_factory_get_icon_theme (const ThunarIconFactory *factory)
+{
+  g_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), NULL);
+  return factory->icon_theme;
+}
+
+
+
+/**
+ * thunar_icon_factory_load_icon:
+ * @factory       : a #ThunarIconFactory instance.
+ * @name          : name of the icon to load.
+ * @size          : desired icon size.
+ * @attach_points : location to store the attach points to or %NULL.
+ * @wants_default : %TRUE to return the fallback icon if no icon of @name
+ *                  is found in the @factory.
+ *
+ * Looks up the icon named @name in the icon theme associated with @factory
+ * and returns a pixbuf for the icon at the given @size. This function will
+ * return a default fallback icon if the requested icon could not be found
+ * and @wants_default is %TRUE, else %NULL will be returned in that case.
+ *
+ * Call g_object_unref() on the returned pixbuf when you are
+ * done with it.
+ *
+ * Return value: the pixbuf for the icon named @name at @size.
+ **/
+GdkPixbuf*
+thunar_icon_factory_load_icon (ThunarIconFactory        *factory,
+                               const gchar              *name,
+                               gint                      size,
+                               ThunarEmblemAttachPoints *attach_points,
+                               gboolean                  wants_default)
+{
+  g_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), NULL);
+  g_return_val_if_fail (size > 0, NULL);
+  
+  /* cannot happen unless there's no XSETTINGS manager
+   * for the default screen, but just in case...
+   */
+  if (G_UNLIKELY (name == NULL || *name == '\0'))
+    {
+      /* check if the caller will happly accept the fallback icon */
+      if (G_LIKELY (wants_default))
+        {
+          if (G_LIKELY (size == 48))
+            return g_object_ref (G_OBJECT (factory->fallback_icon));
+          else
+            return exo_gdk_pixbuf_scale_ratio (factory->fallback_icon, size);
+        }
+      else
+        {
+          return NULL;
+        }
+    }
+
+  /* lookup the icon */
+  return thunar_icon_factory_lookup_icon (factory, name, size, wants_default);
+}
+
+
+
+/**
+ * thunar_icon_factory_load_file_icon:
+ * @factory    : a #ThunarIconFactory instance.
+ * @file       : a #ThunarFile.
+ * @icon_state : the desired icon state.
+ * @icon_size  : the desired icon size.
+ *
+ * The caller is responsible to free the returned object using
+ * g_object_unref() when no longer needed.
+ *
+ * Return value: the #GdkPixbuf icon.
+ **/
+GdkPixbuf*
+thunar_icon_factory_load_file_icon (ThunarIconFactory  *factory,
+                                    ThunarFile         *file,
+                                    ThunarFileIconState icon_state,
+                                    gint                icon_size)
+{
+  ThunarFileThumbState thumb_state;
+  ThunarVfsInfo       *info;
+  const gchar         *icon_name;
+  GdkPixbuf           *icon;
+  gchar               *thumb_path;
+
+  g_return_val_if_fail (THUNAR_IS_ICON_FACTORY (factory), NULL);
+  g_return_val_if_fail (THUNAR_IS_FILE (file), NULL);
+  g_return_val_if_fail (icon_size > 0, NULL);
+
+  /* check if there's a custom icon for the file */
+  icon_name = thunar_file_get_custom_icon (file);
+  if (G_UNLIKELY (icon_name != NULL))
+    {
+      /* try to load the icon */
+      icon = thunar_icon_factory_lookup_icon (factory, icon_name, icon_size, FALSE);
+      if (G_LIKELY (icon != NULL))
+        return icon;
+    }
+
+  /* check if we can display a thumbnail */
+  if (thunar_file_is_regular (file))
+    {
+      /* determine the thumbnail state */
+      thumb_state = thunar_file_get_thumb_state (file);
+
+      /* check if we haven't yet determine the thumbnail state */
+      if (thumb_state == THUNAR_FILE_THUMB_STATE_UNKNOWN)
+        {
+          /* determine the ThunarVfsInfo for the file */
+          info = thunar_file_get_info (file);
+
+          /* try to load an existing thumbnail for the file */
+          thumb_path = thunar_vfs_thumb_factory_lookup_thumbnail (factory->thumbnail_factory, info);
+
+          /* check if we can generate a thumbnail in case there's none yet */
+          if (G_UNLIKELY (thumb_path == NULL && thunar_vfs_thumb_factory_can_thumbnail (factory->thumbnail_factory, info)))
+            {
+              /* schedule the thumbnail loading for the file */
+              thunar_thumbnail_generator_enqueue (factory->thumbnail_generator, file);
+
+              /* set the thumbnail state to "loading" */
+              thumb_state = THUNAR_FILE_THUMB_STATE_LOADING;
+            }
+
+          if (G_LIKELY (thumb_path != NULL))
+            {
+              thumb_state = THUNAR_FILE_THUMB_STATE_READY;
+              g_object_set_qdata_full (G_OBJECT (file), thunar_file_thumb_path_quark, thumb_path, g_free);
+            }
+          else if (thumb_state != THUNAR_FILE_THUMB_STATE_LOADING)
+            {
+              thumb_state = THUNAR_FILE_THUMB_STATE_NONE;
+            }
+
+          /* apply the new state */
+          thunar_file_set_thumb_state (file, thumb_state);
+        }
+
+      /* check if we have a thumbnail path loaded */
+      if (thumb_state == THUNAR_FILE_THUMB_STATE_READY)
+        {
+          thumb_path = g_object_get_qdata (G_OBJECT (file), thunar_file_thumb_path_quark);
+          if (G_LIKELY (thumb_path != NULL))
+            {
+              // FIXME: Check mtime and URI for the returned icon
+              icon = thunar_icon_factory_lookup_icon (factory, thumb_path, icon_size, FALSE);
+              if (G_LIKELY (icon != NULL))
+                return icon;
+            }
+        }
+
+      /* check if we are currently loading a thumbnail */
+      if (G_UNLIKELY (thumb_state == THUNAR_FILE_THUMB_STATE_LOADING))
+        {
+          /* check if the icon theme supports the loading icon */
+          icon = thunar_icon_factory_lookup_icon (factory, "gnome-fs-loading-icon", icon_size, FALSE);
+          if (G_LIKELY (icon != NULL))
+            return icon;
+        }
+    }
+
+  /* lookup the icon name for the icon in the given state */
+  icon_name = thunar_file_get_icon_name (file, icon_state, factory->icon_theme);
+
+  /* load the icon of the given name */
+  return thunar_icon_factory_load_icon (factory, icon_name, icon_size, NULL, TRUE);
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-factory.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,85 @@
+/* $Id: thunar-icon-factory.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_ICON_FACTORY_H__
+#define __THUNAR_ICON_FACTORY_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarIconFactoryClass ThunarIconFactoryClass;
+typedef struct _ThunarIconFactory      ThunarIconFactory;
+
+#define THUNAR_TYPE_ICON_FACTORY            (thunar_icon_factory_get_type ())
+#define THUNAR_ICON_FACTORY(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_ICON_FACTORY, ThunarIconFactory))
+#define THUNAR_ICON_FACTORY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_ICON_FACTORY, ThunarIconFactoryClass))
+#define THUNAR_IS_ICON_FACTORY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_ICON_FACTORY))
+#define THUNAR_IS_ICON_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_ICON_FACTORY))
+#define THUNAR_ICON_FACTORY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_ICON_FACTORY, ThunarIconFactoryClass))
+
+/**
+ * THUNAR_THUMBNAIL_SIZE:
+ * The icon size which is used for loading and storing
+ * thumbnails in Thunar.
+ **/
+#define THUNAR_THUMBNAIL_SIZE (128)
+
+/**
+ * THUNAR_EMBLEM_MAX_ATTACH_POINTS:
+ * The maximum number of attach points for icons managed
+ * by the #ThunarIconFactory.
+ **/
+#define THUNAR_EMBLEM_MAX_ATTACH_POINTS (12)
+
+/**
+ * ThunarEmblemAttachPoints:
+ * Holds the emblem attach points for a given icon.
+ */
+typedef struct
+{
+	gint     num_points;
+	GdkPoint points[THUNAR_EMBLEM_MAX_ATTACH_POINTS];
+} ThunarEmblemAttachPoints;
+
+GType                  thunar_icon_factory_get_type           (void) G_GNUC_CONST;
+
+ThunarIconFactory     *thunar_icon_factory_get_default        (void);
+ThunarIconFactory     *thunar_icon_factory_get_for_icon_theme (GtkIconTheme             *icon_theme);
+
+GtkIconTheme          *thunar_icon_factory_get_icon_theme     (const ThunarIconFactory  *factory);
+
+#if 0
+ThunarVfsThumbFactory *thunar_icon_factory_get_thumb_factory  (const ThunarIconFactory  *factory);
+#endif
+
+GdkPixbuf             *thunar_icon_factory_load_icon          (ThunarIconFactory        *factory,
+                                                               const gchar              *name,
+                                                               gint                      size,
+                                                               ThunarEmblemAttachPoints *attach_points,
+                                                               gboolean                  wants_default);
+
+GdkPixbuf             *thunar_icon_factory_load_file_icon     (ThunarIconFactory        *factory,
+                                                               ThunarFile               *file,
+                                                               ThunarFileIconState       icon_state,
+                                                               gint                      icon_size);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_ICON_FACTORY_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,528 @@
+/* $Id: thunar-icon-renderer.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-clipboard-manager.h>
+#include <thunar/thunar-file.h>
+#include <thunar/thunar-gdk-pixbuf-extensions.h>
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-icon-renderer.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_DROP_FILE,
+  PROP_FILE,
+  PROP_FOLLOW_STATE,
+  PROP_SIZE,
+};
+
+
+
+static void thunar_icon_renderer_class_init    (ThunarIconRendererClass *klass);
+static void thunar_icon_renderer_init          (ThunarIconRenderer      *icon_renderer);
+static void thunar_icon_renderer_finalize      (GObject                 *object);
+static void thunar_icon_renderer_get_property  (GObject                 *object,
+                                                guint                    prop_id,
+                                                GValue                  *value,
+                                                GParamSpec              *pspec);
+static void thunar_icon_renderer_set_property  (GObject                 *object,
+                                                guint                    prop_id,
+                                                const GValue            *value,
+                                                GParamSpec              *pspec);
+static void thunar_icon_renderer_get_size      (GtkCellRenderer         *renderer,
+                                                GtkWidget               *widget,
+                                                GdkRectangle            *rectangle,
+                                                gint                    *x_offset,
+                                                gint                    *y_offset,
+                                                gint                    *width,
+                                                gint                    *height);
+static void thunar_icon_renderer_render        (GtkCellRenderer         *renderer,
+                                                GdkWindow               *window,
+                                                GtkWidget               *widget,
+                                                GdkRectangle            *background_area,
+                                                GdkRectangle            *cell_area,
+                                                GdkRectangle            *expose_area,
+                                                GtkCellRendererState     flags);
+
+
+
+struct _ThunarIconRendererClass
+{
+  GtkCellRendererClass __parent__;
+};
+
+struct _ThunarIconRenderer
+{
+  GtkCellRenderer __parent__;
+
+  ThunarFile *drop_file;
+  ThunarFile *file;
+  gboolean    follow_state;
+  gint        size;
+};
+
+
+
+G_DEFINE_TYPE (ThunarIconRenderer, thunar_icon_renderer, GTK_TYPE_CELL_RENDERER);
+
+
+
+static void
+thunar_icon_renderer_class_init (ThunarIconRendererClass *klass)
+{
+  GtkCellRendererClass *gtkcell_renderer_class;
+  GObjectClass         *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_icon_renderer_finalize;
+  gobject_class->get_property = thunar_icon_renderer_get_property;
+  gobject_class->set_property = thunar_icon_renderer_set_property;
+
+  gtkcell_renderer_class = GTK_CELL_RENDERER_CLASS (klass);
+  gtkcell_renderer_class->get_size = thunar_icon_renderer_get_size;
+  gtkcell_renderer_class->render = thunar_icon_renderer_render;
+
+  /**
+   * ThunarIconRenderer:drop-file:
+   *
+   * The file which should be rendered in the drop
+   * accept state.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_DROP_FILE,
+                                   g_param_spec_object ("drop-file",
+                                                        _("Drop file"),
+                                                        _("The file which should be rendered in as drop acceptor"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarIconRenderer:file:
+   *
+   * The file whose icon to render.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("The file whose icon to render"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarIconRenderer::follow-state:
+   *
+   * Specifies whether the icon renderer should render icons
+   * based on the selection state of the items. This is necessary
+   * for #ExoIconView, which doesn't draw any item state indicators
+   * itself.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FOLLOW_STATE,
+                                   g_param_spec_boolean ("follow-state",
+                                                         _("Follow state"),
+                                                         _("Follow state"),
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarIconRenderer:icon-size:
+   *
+   * The icon size in pixels.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_SIZE,
+                                   g_param_spec_int ("size",
+                                                     _("Icon size"),
+                                                     _("The icon size in pixels"),
+                                                     1, G_MAXINT, 24,
+                                                     EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_icon_renderer_init (ThunarIconRenderer *icon_renderer)
+{
+  icon_renderer->size = 24;
+}
+
+
+
+static void
+thunar_icon_renderer_finalize (GObject *object)
+{
+  ThunarIconRenderer *icon_renderer = THUNAR_ICON_RENDERER (object);
+
+  /* free the icon data */
+  if (G_UNLIKELY (icon_renderer->drop_file != NULL))
+    g_object_unref (G_OBJECT (icon_renderer->drop_file));
+  if (G_LIKELY (icon_renderer->file != NULL))
+    g_object_unref (G_OBJECT (icon_renderer->file));
+
+  (*G_OBJECT_CLASS (thunar_icon_renderer_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_icon_renderer_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  ThunarIconRenderer *icon_renderer = THUNAR_ICON_RENDERER (object);
+
+  switch (prop_id)
+    {
+    case PROP_DROP_FILE:
+      g_value_set_object (value, icon_renderer->drop_file);
+      break;
+
+    case PROP_FILE:
+      g_value_set_object (value, icon_renderer->file);
+      break;
+
+    case PROP_FOLLOW_STATE:
+      g_value_set_boolean (value, icon_renderer->follow_state);
+      break;
+
+    case PROP_SIZE:
+      g_value_set_int (value, icon_renderer->size);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_icon_renderer_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  ThunarIconRenderer *icon_renderer = THUNAR_ICON_RENDERER (object);
+
+  switch (prop_id)
+    {
+    case PROP_DROP_FILE:
+      if (G_LIKELY (icon_renderer->drop_file != NULL))
+        g_object_unref (G_OBJECT (icon_renderer->drop_file));
+      icon_renderer->drop_file = g_value_get_object (value);
+      if (G_LIKELY (icon_renderer->drop_file != NULL))
+        g_object_ref (G_OBJECT (icon_renderer->drop_file));
+      break;
+
+    case PROP_FILE:
+      if (G_LIKELY (icon_renderer->file != NULL))
+        g_object_unref (G_OBJECT (icon_renderer->file));
+      icon_renderer->file = g_value_get_object (value);
+      if (G_LIKELY (icon_renderer->file != NULL))
+        g_object_ref (G_OBJECT (icon_renderer->file));
+      break;
+
+    case PROP_FOLLOW_STATE:
+      icon_renderer->follow_state = g_value_get_boolean (value);
+      break;
+
+    case PROP_SIZE:
+      icon_renderer->size = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+
+static void
+thunar_icon_renderer_get_size (GtkCellRenderer *renderer,
+                               GtkWidget       *widget,
+                               GdkRectangle    *rectangle,
+                               gint            *x_offset,
+                               gint            *y_offset,
+                               gint            *width,
+                               gint            *height)
+{
+  ThunarIconRenderer *icon_renderer = THUNAR_ICON_RENDERER (renderer);
+
+  if (rectangle != NULL)
+    {
+      if (x_offset != NULL)
+        {
+          *x_offset = ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ? 1.0 - renderer->xalign : renderer->xalign)
+                    * (rectangle->width - icon_renderer->size);
+          *x_offset = MAX (*x_offset, 0) + renderer->xpad;
+        }
+
+      if (y_offset != NULL)
+        {
+          *y_offset = renderer->yalign * (rectangle->height - icon_renderer->size);
+          *y_offset = MAX (*y_offset, 0) + renderer->ypad;
+        }
+    }
+  else
+    {
+      if (x_offset != NULL)
+        *x_offset = 0;
+
+      if (y_offset != NULL)
+        *y_offset = 0;
+    }
+
+  if (G_LIKELY (width != NULL))
+    *width = (gint) renderer->xpad * 2 + icon_renderer->size;
+
+  if (G_LIKELY (height != NULL))
+    *height = (gint) renderer->ypad * 2 + icon_renderer->size;
+}
+
+
+
+static void
+thunar_icon_renderer_render (GtkCellRenderer     *renderer,
+                             GdkWindow           *window,
+                             GtkWidget           *widget,
+                             GdkRectangle        *background_area,
+                             GdkRectangle        *cell_area,
+                             GdkRectangle        *expose_area,
+                             GtkCellRendererState flags)
+{
+  ThunarClipboardManager *clipboard;
+  ThunarFileIconState     icon_state;
+  ThunarIconRenderer     *icon_renderer = THUNAR_ICON_RENDERER (renderer);
+  ThunarIconFactory      *icon_factory;
+  GtkIconTheme           *icon_theme;
+  GdkRectangle            emblem_area;
+  GdkRectangle            icon_area;
+  GdkRectangle            draw_area;
+  GtkStateType            state;
+  GdkPixbuf              *emblem;
+  GdkPixbuf              *icon;
+  GdkPixbuf              *temp;
+  GList                  *emblems;
+  GList                  *lp;
+  gint                    max_emblems;
+  gint                    position;
+
+  if (G_UNLIKELY (icon_renderer->file == NULL))
+    return;
+
+  /* determine the icon state */
+  icon_state = (icon_renderer->drop_file != icon_renderer->file)
+             ? THUNAR_FILE_ICON_STATE_DEFAULT
+             : THUNAR_FILE_ICON_STATE_DROP;
+
+  /* load the main icon */
+  icon_theme = gtk_icon_theme_get_for_screen (gdk_drawable_get_screen (window));
+  icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+  icon = thunar_icon_factory_load_file_icon (icon_factory, icon_renderer->file, icon_state, icon_renderer->size);
+  if (G_UNLIKELY (icon == NULL))
+    {
+      g_object_unref (G_OBJECT (icon_factory));
+      return;
+    }
+
+  /* pre-light the item if we're dragging about it */
+  if (G_UNLIKELY (icon_state == THUNAR_FILE_ICON_STATE_DROP))
+    flags |= GTK_CELL_RENDERER_PRELIT;
+
+  /* determine the real icon size */
+  icon_area.width = gdk_pixbuf_get_width (icon);
+  icon_area.height = gdk_pixbuf_get_height (icon);
+
+  /* scale down the icon on-demand */
+  if (G_UNLIKELY (icon_area.width > cell_area->width || icon_area.height > cell_area->height))
+    {
+      temp = exo_gdk_pixbuf_scale_ratio (icon, icon_renderer->size);
+      g_object_unref (G_OBJECT (icon));
+      icon = temp;
+
+      icon_area.width = gdk_pixbuf_get_width (icon);
+      icon_area.height = gdk_pixbuf_get_height (icon);
+    }
+
+  icon_area.x = cell_area->x + (cell_area->width - icon_area.width) / 2;
+  icon_area.y = cell_area->y + (cell_area->height - icon_area.height) / 2;
+
+  /* check whether the icon is affected by the expose event */
+  if (gdk_rectangle_intersect (expose_area, &icon_area, &draw_area))
+    {
+      /* use a translucent icon to represent cutted files to the user */
+      clipboard = thunar_clipboard_manager_get_for_display (gtk_widget_get_display (widget));
+      if (thunar_clipboard_manager_has_cutted_file (clipboard, icon_renderer->file))
+        {
+          temp = thunar_gdk_pixbuf_lucent (icon, 50);
+          g_object_unref (G_OBJECT (icon));
+          icon = temp;
+        }
+      g_object_unref (G_OBJECT (clipboard));
+
+      /* colorize the icon if we should follow the selection state */
+      if ((flags & (GTK_CELL_RENDERER_SELECTED | GTK_CELL_RENDERER_PRELIT)) != 0 && icon_renderer->follow_state)
+        {
+          if ((flags & GTK_CELL_RENDERER_SELECTED) != 0)
+            {
+              state = GTK_WIDGET_HAS_FOCUS (widget) ? GTK_STATE_SELECTED : GTK_STATE_ACTIVE;
+              temp = thunar_gdk_pixbuf_colorize (icon, &widget->style->base[state]);
+              g_object_unref (G_OBJECT (icon));
+              icon = temp;
+            }
+
+          if ((flags & GTK_CELL_RENDERER_PRELIT) != 0)
+            {
+              temp = thunar_gdk_pixbuf_spotlight (icon);
+              g_object_unref (G_OBJECT (icon));
+              icon = temp;
+            }
+        }
+
+      /* render the invalid parts of the icon */
+      gdk_draw_pixbuf (window, widget->style->black_gc, icon,
+                       draw_area.x - icon_area.x, draw_area.y - icon_area.y,
+                       draw_area.x, draw_area.y, draw_area.width, draw_area.height,
+                       GDK_RGB_DITHER_NORMAL, 0, 0);
+    }
+
+  /* release the file's icon */
+  g_object_unref (G_OBJECT (icon));
+
+  /* display the primary emblem as well (if any) */
+  emblems = thunar_file_get_emblem_names (icon_renderer->file);
+  if (G_UNLIKELY (emblems != NULL))
+    {
+      /* render up to four emblems for sizes from 48 onwards, else up to 2 emblems */
+      max_emblems = (icon_renderer->size < 48) ? 2 : 4;
+
+      /* render the emblems */
+      for (lp = emblems, position = 0; lp != NULL && position < max_emblems; lp = lp->next)
+        {
+          /* check if we have the emblem in the icon theme */
+          emblem = thunar_icon_factory_load_icon (icon_factory, lp->data, icon_renderer->size, NULL, FALSE);
+          if (G_UNLIKELY (emblem == NULL))
+            continue;
+
+          /* determine the dimensions of the emblem */
+          emblem_area.width = gdk_pixbuf_get_width (emblem);
+          emblem_area.height = gdk_pixbuf_get_height (emblem);
+
+          /* shrink insane emblems */
+          if (G_UNLIKELY (MAX (emblem_area.width, emblem_area.height) > (2 * icon_renderer->size) / 3))
+            {
+              /* scale down the emblem */
+              temp = exo_gdk_pixbuf_scale_ratio (emblem, (2 * icon_renderer->size) / 3);
+              g_object_unref (G_OBJECT (emblem));
+              emblem = temp;
+
+              /* determine the size again */
+              emblem_area.width = gdk_pixbuf_get_width (emblem);
+              emblem_area.height = gdk_pixbuf_get_height (emblem);
+            }
+
+          /* determine a good position for the emblem, depending on the position index */
+          switch (position)
+            {
+            case 0: /* right/bottom */
+              emblem_area.x = MIN (icon_area.x + icon_area.width - emblem_area.width / 2,
+                                   cell_area->x + cell_area->width - emblem_area.width);
+              emblem_area.y = MIN (icon_area.y + icon_area.height - emblem_area.height / 2,
+                                   cell_area->y + cell_area->height -emblem_area.height);
+              break;
+
+            case 1: /* left/bottom */
+              emblem_area.x = MAX (icon_area.x - emblem_area.width / 2,
+                                   cell_area->x);
+              emblem_area.y = MIN (icon_area.y + icon_area.height - emblem_area.height / 2,
+                                   cell_area->y + cell_area->height -emblem_area.height);
+              break;
+
+            case 2: /* left/top */
+              emblem_area.x = MAX (icon_area.x - emblem_area.width / 2,
+                                   cell_area->x);
+              emblem_area.y = MAX (icon_area.y - emblem_area.height / 2,
+                                   cell_area->y);
+              break;
+
+            case 3: /* right/top */
+              emblem_area.x = MIN (icon_area.x + icon_area.width - emblem_area.width / 2,
+                                   cell_area->x + cell_area->width - emblem_area.width);
+              emblem_area.y = MAX (icon_area.y - emblem_area.height / 2,
+                                   cell_area->y);
+              break;
+
+            default:
+              g_assert_not_reached ();
+            }
+
+          /* render the emblem */
+          if (gdk_rectangle_intersect (expose_area, &emblem_area, &draw_area))
+            {
+              gdk_draw_pixbuf (window, widget->style->black_gc, emblem,
+                               draw_area.x - emblem_area.x, draw_area.y - emblem_area.y,
+                               draw_area.x, draw_area.y, draw_area.width, draw_area.height,
+                               GDK_RGB_DITHER_NORMAL, 0, 0);
+            }
+
+          /* release the emblem */
+          g_object_unref (G_OBJECT (emblem));
+
+          /* advance the position index */
+          ++position;
+        }
+
+      /* release the emblem name list */
+      g_list_free (emblems);
+    }
+
+  /* release our reference on the icon factory */
+  g_object_unref (G_OBJECT (icon_factory));
+}
+
+
+
+/**
+ * thunar_icon_renderer_new:
+ *
+ * Creates a new #ThunarIconRenderer. Adjust rendering
+ * parameters using object properties. Object properties can be
+ * set globally with #g_object_set. Also, with #GtkTreeViewColumn,
+ * you can bind a property to a value in a #GtkTreeModel.
+ *
+ * Return value: the newly allocated #ThunarIconRenderer.
+ **/
+GtkCellRenderer*
+thunar_icon_renderer_new (void)
+{
+  return g_object_new (THUNAR_TYPE_ICON_RENDERER, NULL);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-renderer.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-icon-renderer.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_ICON_RENDERER_H__
+#define __THUNAR_ICON_RENDERER_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarIconRendererClass ThunarIconRendererClass;
+typedef struct _ThunarIconRenderer      ThunarIconRenderer;
+
+#define THUNAR_TYPE_ICON_RENDERER            (thunar_icon_renderer_get_type ())
+#define THUNAR_ICON_RENDERER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_ICON_RENDERER, ThunarIconRenderer))
+#define THUNAR_ICON_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_ICON_RENDERER, ThunarIconRendererClass))
+#define THUNAR_IS_ICON_RENDERER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_ICON_RENDERER))
+#define THUNAR_IS_ICON_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_ICON_RENDERER))
+#define THUNAR_ICON_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_ICON_RENDERER, ThunarIconRendererClass))
+
+GType            thunar_icon_renderer_get_type (void) G_GNUC_CONST;
+
+GtkCellRenderer *thunar_icon_renderer_new      (void) G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_ICON_RENDERER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,40 @@
+/* automatically generated from ./thunar-icon-view-ui.xml */
+static const unsigned thunar_icon_view_ui_length = 1725u;
+#ifdef __SUNPRO_C
+#pragma align 4 (thunar_icon_view_ui)
+#endif
+#ifdef __GNUC__
+static const char thunar_icon_view_ui[] __attribute__ ((__aligned__ (4))) =
+#else
+static const char thunar_icon_view_ui[] =
+#endif
+{
+  "<ui>\n\n  <!--\n    $Id: thunar-icon-view-ui.xml 17033 2005-08-19 23:18"
+  ":46Z benny $\n\n    Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>"
+  "\n\n    Thunar icon view user interface description file. Do NOT\n    s"
+  "imply edit this file if you don\'t know how the whole system\n    works"
+  ", because it\'s too easy to break something.\n  -->\n\n  <menubar name="
+  "\"main-menu\">\n    <menu action=\"view-menu\" name=\"view-menu\">\n   "
+  "   <placeholder name=\"placeholder-view-items-actions\">\n        <menu"
+  " action=\"arrange-items-menu\" name=\"arrange-items-menu\">\n          "
+  "<menuitem action=\"sort-by-name\" name=\"sort-by-name\" />\n          <"
+  "menuitem action=\"sort-by-size\" name=\"sort-by-size\" />\n          <m"
+  "enuitem action=\"sort-by-type\" name=\"sort-by-type\" />\n          <me"
+  "nuitem action=\"sort-by-mtime\" name=\"sort-by-mtime\" />\n          <s"
+  "eparator />\n          <menuitem action=\"sort-ascending\" name=\"sort-"
+  "ascending\" />\n          <menuitem action=\"sort-descending\" name=\"s"
+  "ort-descending\" />\n        </menu>\n      </placeholder>\n    </menu>"
+  "\n  </menubar>\n\n  <popup action=\"folder-context-menu\" name=\"folder"
+  "-context-menu\">\n    <placeholder name=\"placeholder-view-items-action"
+  "s\">\n      <menu action=\"arrange-items-menu\" name=\"arrange-items-me"
+  "nu\">\n        <menuitem action=\"sort-by-name\" name=\"sort-by-name\" "
+  "/>\n        <menuitem action=\"sort-by-size\" name=\"sort-by-size\" />\n"
+  "        <menuitem action=\"sort-by-type\" name=\"sort-by-type\" />\n   "
+  "     <menuitem action=\"sort-by-mtime\" name=\"sort-by-mtime\" />\n    "
+  "    <separator />\n        <menuitem action=\"sort-ascending\" name=\"s"
+  "ort-ascending\" />\n        <menuitem action=\"sort-descending\" name=\""
+  "sort-descending\" />\n      </menu>\n    </placeholder>\n  </popup>\n\n"
+  "</ui>\n\n<!-- vi: set ts=2 sw=2 et ai nocindent syntax=xml: -->\n"
+};
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view-ui.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,45 @@
+<ui>
+
+  <!--
+    $Id: thunar-icon-view-ui.xml 17033 2005-08-19 23:18:46Z benny $
+
+    Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+
+    Thunar icon view user interface description file. Do NOT
+    simply edit this file if you don't know how the whole system
+    works, because it's too easy to break something.
+  -->
+
+  <menubar name="main-menu">
+    <menu action="view-menu" name="view-menu">
+      <placeholder name="placeholder-view-items-actions">
+        <menu action="arrange-items-menu" name="arrange-items-menu">
+          <menuitem action="sort-by-name" name="sort-by-name" />
+          <menuitem action="sort-by-size" name="sort-by-size" />
+          <menuitem action="sort-by-type" name="sort-by-type" />
+          <menuitem action="sort-by-mtime" name="sort-by-mtime" />
+          <separator />
+          <menuitem action="sort-ascending" name="sort-ascending" />
+          <menuitem action="sort-descending" name="sort-descending" />
+        </menu>
+      </placeholder>
+    </menu>
+  </menubar>
+
+  <popup action="folder-context-menu" name="folder-context-menu">
+    <placeholder name="placeholder-view-items-actions">
+      <menu action="arrange-items-menu" name="arrange-items-menu">
+        <menuitem action="sort-by-name" name="sort-by-name" />
+        <menuitem action="sort-by-size" name="sort-by-size" />
+        <menuitem action="sort-by-type" name="sort-by-type" />
+        <menuitem action="sort-by-mtime" name="sort-by-mtime" />
+        <separator />
+        <menuitem action="sort-ascending" name="sort-ascending" />
+        <menuitem action="sort-descending" name="sort-descending" />
+      </menu>
+    </placeholder>
+  </popup>
+
+</ui>
+
+<!-- vi: set ts=2 sw=2 et ai nocindent syntax=xml: -->

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,752 @@
+/* $Id: thunar-icon-view.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#include <thunar/thunar-icon-view.h>
+#include <thunar/thunar-icon-view-ui.h>
+
+#if !GTK_CHECK_VERSION(2,7,1) && defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO)
+#include <cairo/cairo-xlib.h>
+#include <gdk/gdkx.h>
+#endif
+
+
+
+static void         thunar_icon_view_class_init             (ThunarIconViewClass *klass);
+static void         thunar_icon_view_init                   (ThunarIconView      *icon_view);
+static AtkObject   *thunar_icon_view_get_accessible         (GtkWidget           *widget);
+static void         thunar_icon_view_connect_ui_manager     (ThunarStandardView  *standard_view,
+                                                             GtkUIManager        *ui_manager);
+static void         thunar_icon_view_disconnect_ui_manager  (ThunarStandardView  *standard_view,
+                                                             GtkUIManager        *ui_manager);
+static GList       *thunar_icon_view_get_selected_items     (ThunarStandardView  *standard_view);
+static void         thunar_icon_view_select_all             (ThunarStandardView  *standard_view);
+static void         thunar_icon_view_unselect_all           (ThunarStandardView  *standard_view);
+static void         thunar_icon_view_select_path            (ThunarStandardView  *standard_view,
+                                                             GtkTreePath         *path);
+static void         thunar_icon_view_set_cursor             (ThunarStandardView  *standard_view,
+                                                             GtkTreePath         *path,
+                                                             gboolean             start_editing);
+static void         thunar_icon_view_scroll_to_path         (ThunarStandardView  *standard_view,
+                                                             GtkTreePath         *path);
+static GtkTreePath *thunar_icon_view_get_path_at_pos        (ThunarStandardView  *standard_view,
+                                                             gint                 x,
+                                                             gint                 y);
+static void         thunar_icon_view_highlight_path         (ThunarStandardView  *standard_view,
+                                                             GtkTreePath         *path);
+static GtkAction   *thunar_icon_view_gesture_action         (ThunarIconView      *icon_view);
+static void         thunar_icon_view_action_sort            (GtkAction           *action,
+                                                             GtkAction           *current,
+                                                             ThunarStandardView  *standard_view);
+static gboolean     thunar_icon_view_button_press_event     (ExoIconView         *view,
+                                                             GdkEventButton      *event,
+                                                             ThunarIconView      *icon_view);
+static gboolean     thunar_icon_view_button_release_event   (ExoIconView         *view,
+                                                             GdkEventButton      *event,
+                                                             ThunarIconView      *icon_view);
+static gboolean     thunar_icon_view_expose_event           (ExoIconView         *view,
+                                                             GdkEventExpose      *event,
+                                                             ThunarIconView      *icon_view);
+static gboolean     thunar_icon_view_key_press_event        (ExoIconView         *view,
+                                                             GdkEventKey         *event,
+                                                             ThunarIconView      *icon_view);
+static gboolean     thunar_icon_view_motion_notify_event    (ExoIconView         *view,
+                                                             GdkEventMotion      *event,
+                                                             ThunarIconView      *icon_view);
+static void         thunar_icon_view_item_activated         (ExoIconView         *view,
+                                                             GtkTreePath         *path,
+                                                             ThunarIconView      *icon_view);
+static void         thunar_icon_view_sort_column_changed    (GtkTreeSortable     *sortable,
+                                                             ThunarIconView      *icon_view);
+
+
+
+struct _ThunarIconViewClass
+{
+  ThunarStandardViewClass __parent__;
+};
+
+struct _ThunarIconView
+{
+  ThunarStandardView __parent__;
+
+  /* the UI manager merge id for the icon view */
+  gint ui_merge_id;
+
+  /* mouse gesture support */
+  gint gesture_start_x;
+  gint gesture_start_y;
+  gint gesture_current_x;
+  gint gesture_current_y;
+  gint gesture_expose_id;
+  gint gesture_motion_id;
+  gint gesture_release_id;
+};
+
+
+
+static const GtkActionEntry action_entries[] =
+{
+  { "arrange-items-menu", NULL, N_ ("Arran_ge Items"), NULL, NULL, NULL, },
+};
+
+static const GtkRadioActionEntry column_action_entries[] =
+{
+  { "sort-by-name", NULL, N_ ("Sort By _Name"), NULL, N_ ("Keep items sorted by their name in rows"), THUNAR_LIST_MODEL_COLUMN_NAME, },
+  { "sort-by-size", NULL, N_ ("Sort By _Size"), NULL, N_ ("Keep items sorted by their size in rows"), THUNAR_LIST_MODEL_COLUMN_SIZE, },
+  { "sort-by-type", NULL, N_ ("Sort By _Type"), NULL, N_ ("Keep items sorted by their type in rows"), THUNAR_LIST_MODEL_COLUMN_TYPE, },
+  { "sort-by-mtime", NULL, N_ ("Sort By Modification _Date"), NULL, N_ ("Keep items sorted by their modification date in rows"), THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED, },
+};
+
+static const GtkRadioActionEntry order_action_entries[] =
+{
+  { "sort-ascending", NULL, N_ ("_Ascending"), NULL, N_ ("Sort items in ascending order"), GTK_SORT_ASCENDING, },
+  { "sort-descending", NULL, N_ ("_Descending"), NULL, N_ ("Sort items in descending order"), GTK_SORT_DESCENDING, },
+};
+
+
+
+G_DEFINE_TYPE (ThunarIconView, thunar_icon_view, THUNAR_TYPE_STANDARD_VIEW);
+
+
+
+static void
+thunar_icon_view_class_init (ThunarIconViewClass *klass)
+{
+  ThunarStandardViewClass *thunarstandard_view_class;
+  GtkWidgetClass          *gtkwidget_class;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->get_accessible = thunar_icon_view_get_accessible;
+
+  thunarstandard_view_class = THUNAR_STANDARD_VIEW_CLASS (klass);
+  thunarstandard_view_class->connect_ui_manager = thunar_icon_view_connect_ui_manager;
+  thunarstandard_view_class->disconnect_ui_manager = thunar_icon_view_disconnect_ui_manager;
+  thunarstandard_view_class->get_selected_items = thunar_icon_view_get_selected_items;
+  thunarstandard_view_class->select_all = thunar_icon_view_select_all;
+  thunarstandard_view_class->unselect_all = thunar_icon_view_unselect_all;
+  thunarstandard_view_class->select_path = thunar_icon_view_select_path;
+  thunarstandard_view_class->set_cursor = thunar_icon_view_set_cursor;
+  thunarstandard_view_class->scroll_to_path = thunar_icon_view_scroll_to_path;
+  thunarstandard_view_class->get_path_at_pos = thunar_icon_view_get_path_at_pos;
+  thunarstandard_view_class->highlight_path = thunar_icon_view_highlight_path;
+}
+
+
+
+static void
+thunar_icon_view_init (ThunarIconView *icon_view)
+{
+  GtkWidget *view;
+
+  /* create the real view */
+  view = exo_icon_view_new ();
+  g_signal_connect (G_OBJECT (view), "button-press-event", G_CALLBACK (thunar_icon_view_button_press_event), icon_view);
+  g_signal_connect (G_OBJECT (view), "key-press-event", G_CALLBACK (thunar_icon_view_key_press_event), icon_view);
+  g_signal_connect (G_OBJECT (view), "item-activated", G_CALLBACK (thunar_icon_view_item_activated), icon_view);
+  g_signal_connect_swapped (G_OBJECT (view), "selection-changed", G_CALLBACK (thunar_standard_view_selection_changed), icon_view);
+  gtk_container_add (GTK_CONTAINER (icon_view), view);
+  gtk_widget_show (view);
+
+  /* initialize the icon view properties */
+  exo_icon_view_set_selection_mode (EXO_ICON_VIEW (view), GTK_SELECTION_MULTIPLE);
+
+  /* add the icon renderer */
+  g_object_set (G_OBJECT (THUNAR_STANDARD_VIEW (icon_view)->icon_renderer),
+                "follow-state", TRUE,
+                "size", 48,
+                "ypad", 3u,
+                NULL);
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (view), THUNAR_STANDARD_VIEW (icon_view)->icon_renderer, FALSE);
+  gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (view), THUNAR_STANDARD_VIEW (icon_view)->icon_renderer,
+                                 "file", THUNAR_LIST_MODEL_COLUMN_FILE);
+
+  /* add the name renderer */
+  g_object_set (G_OBJECT (THUNAR_STANDARD_VIEW (icon_view)->name_renderer),
+                "follow-state", TRUE,
+                "wrap-mode", PANGO_WRAP_WORD_CHAR,
+                "wrap-width", 128,
+                "yalign", 0.0f,
+                NULL);
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (view), THUNAR_STANDARD_VIEW (icon_view)->name_renderer, TRUE);
+  gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (view), THUNAR_STANDARD_VIEW (icon_view)->name_renderer,
+                                 "text", THUNAR_LIST_MODEL_COLUMN_NAME);
+
+  /* setup the icon view actions */
+  gtk_action_group_add_actions (THUNAR_STANDARD_VIEW (icon_view)->action_group,
+                                action_entries, G_N_ELEMENTS (action_entries),
+                                GTK_WIDGET (icon_view));
+  gtk_action_group_add_radio_actions (THUNAR_STANDARD_VIEW (icon_view)->action_group, column_action_entries,
+                                      G_N_ELEMENTS (column_action_entries), THUNAR_LIST_MODEL_COLUMN_NAME,
+                                      G_CALLBACK (thunar_icon_view_action_sort), icon_view);
+  gtk_action_group_add_radio_actions (THUNAR_STANDARD_VIEW (icon_view)->action_group, order_action_entries,
+                                      G_N_ELEMENTS (order_action_entries), GTK_SORT_ASCENDING,
+                                      G_CALLBACK (thunar_icon_view_action_sort), icon_view);
+
+  /* we need to listen to sort column changes to sync the menu items */
+  g_signal_connect (G_OBJECT (THUNAR_STANDARD_VIEW (icon_view)->model), "sort-column-changed",
+                    G_CALLBACK (thunar_icon_view_sort_column_changed), icon_view);
+  thunar_icon_view_sort_column_changed (GTK_TREE_SORTABLE (THUNAR_STANDARD_VIEW (icon_view)->model), icon_view);
+}
+
+
+
+static AtkObject*
+thunar_icon_view_get_accessible (GtkWidget *widget)
+{
+  AtkObject *object;
+
+  /* query the atk object for the icon view class */
+  object = GTK_WIDGET_CLASS (thunar_icon_view_parent_class)->get_accessible (widget);
+
+  /* set custom Atk properties for the icon view */
+  if (G_LIKELY (object != NULL))
+    {
+      atk_object_set_name (object, _("Icon view"));
+      atk_object_set_description (object, _("Icon based directory listing"));
+    }
+
+  return object;
+}
+
+
+
+static void
+thunar_icon_view_connect_ui_manager (ThunarStandardView *standard_view,
+                                     GtkUIManager       *ui_manager)
+{
+  ThunarIconView *icon_view = THUNAR_ICON_VIEW (standard_view);
+  GError         *error = NULL;
+
+  icon_view->ui_merge_id = gtk_ui_manager_add_ui_from_string (ui_manager, thunar_icon_view_ui,
+                                                              thunar_icon_view_ui_length, &error);
+  if (G_UNLIKELY (icon_view->ui_merge_id == 0))
+    {
+      g_error ("Failed to merge ThunarIconView menus: %s", error->message);
+      g_error_free (error);
+    }
+}
+
+
+
+static void
+thunar_icon_view_disconnect_ui_manager (ThunarStandardView *standard_view,
+                                        GtkUIManager       *ui_manager)
+{
+  gtk_ui_manager_remove_ui (ui_manager, THUNAR_ICON_VIEW (standard_view)->ui_merge_id);
+}
+
+
+
+static GList*
+thunar_icon_view_get_selected_items (ThunarStandardView *standard_view)
+{
+  return exo_icon_view_get_selected_items (EXO_ICON_VIEW (GTK_BIN (standard_view)->child));
+}
+
+
+
+static void
+thunar_icon_view_select_all (ThunarStandardView *standard_view)
+{
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+  exo_icon_view_select_all (EXO_ICON_VIEW (GTK_BIN (standard_view)->child));
+}
+
+
+
+static void
+thunar_icon_view_unselect_all (ThunarStandardView *standard_view)
+{
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+  exo_icon_view_unselect_all (EXO_ICON_VIEW (GTK_BIN (standard_view)->child));
+}
+
+
+
+static void
+thunar_icon_view_select_path (ThunarStandardView *standard_view,
+                              GtkTreePath        *path)
+{
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+  exo_icon_view_select_path (EXO_ICON_VIEW (GTK_BIN (standard_view)->child), path);
+}
+
+
+
+static void
+thunar_icon_view_set_cursor (ThunarStandardView *standard_view,
+                             GtkTreePath        *path,
+                             gboolean            start_editing)
+{
+  GtkCellRendererMode mode;
+
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+
+  /* make sure the name renderer is editable */
+  mode = standard_view->name_renderer->mode;
+  standard_view->name_renderer->mode = GTK_CELL_RENDERER_MODE_EDITABLE;
+
+  /* tell the icon view to start editing the given item */
+  exo_icon_view_set_cursor (EXO_ICON_VIEW (GTK_BIN (standard_view)->child), path, standard_view->name_renderer, start_editing);
+
+  /* reset the name renderer mode */
+  standard_view->name_renderer->mode = mode;
+}
+
+
+
+static void
+thunar_icon_view_scroll_to_path (ThunarStandardView *standard_view,
+                                 GtkTreePath        *path)
+{
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+  exo_icon_view_scroll_to_path (EXO_ICON_VIEW (GTK_BIN (standard_view)->child), path, FALSE, 0.0f, 0.0f);
+}
+
+
+
+static GtkTreePath*
+thunar_icon_view_get_path_at_pos (ThunarStandardView *standard_view,
+                                  gint                x,
+                                  gint                y)
+{
+  g_return_val_if_fail (THUNAR_IS_ICON_VIEW (standard_view), NULL);
+  return exo_icon_view_get_path_at_pos (EXO_ICON_VIEW (GTK_BIN (standard_view)->child), x, y);
+}
+
+
+
+static void
+thunar_icon_view_highlight_path (ThunarStandardView *standard_view,
+                                 GtkTreePath        *path)
+{
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (standard_view));
+  exo_icon_view_set_drag_dest_item (EXO_ICON_VIEW (GTK_BIN (standard_view)->child), path, EXO_ICON_VIEW_DROP_INTO);
+}
+
+
+
+static GtkAction*
+thunar_icon_view_gesture_action (ThunarIconView *icon_view)
+{
+  if (icon_view->gesture_start_y - icon_view->gesture_current_y > 40
+      && ABS (icon_view->gesture_start_x - icon_view->gesture_current_x) < 40)
+    {
+      return gtk_ui_manager_get_action (THUNAR_STANDARD_VIEW (icon_view)->ui_manager, "/main-menu/go-menu/open-parent");
+    }
+  else if (icon_view->gesture_start_x - icon_view->gesture_current_x > 40
+      && ABS (icon_view->gesture_start_y - icon_view->gesture_current_y) < 40)
+    {
+      return gtk_ui_manager_get_action (THUNAR_STANDARD_VIEW (icon_view)->ui_manager, "/main-menu/go-menu/back");
+    }
+  else if (icon_view->gesture_current_x - icon_view->gesture_start_x > 40
+      && ABS (icon_view->gesture_start_y - icon_view->gesture_current_y) < 40)
+    {
+      return gtk_ui_manager_get_action (THUNAR_STANDARD_VIEW (icon_view)->ui_manager, "/main-menu/go-menu/forward");
+    }
+
+  return NULL;
+}
+
+
+
+static void
+thunar_icon_view_action_sort (GtkAction          *action,
+                              GtkAction          *current,
+                              ThunarStandardView *standard_view)
+{
+  GtkSortType order;
+  gint        column;
+
+  /* query the new sort column id */
+  action = gtk_action_group_get_action (standard_view->action_group, "sort-by-name");
+  column = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
+
+  /* query the new sort order */
+  action = gtk_action_group_get_action (standard_view->action_group, "sort-ascending");
+  order = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
+
+  /* apply the new settings */
+  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (standard_view->model), column, order);
+}
+
+
+
+static gboolean
+thunar_icon_view_button_press_event (ExoIconView    *view,
+                                     GdkEventButton *event,
+                                     ThunarIconView *icon_view)
+{
+  GtkTreePath *path;
+  GtkTreeIter  iter;
+  ThunarFile  *file;
+  GtkAction   *action;
+
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3)
+    {
+      /* open the context menu on right clicks */
+      if (exo_icon_view_get_item_at_pos (view, event->x, event->y, &path, NULL))
+        {
+          /* select the path on which the user clicked if not selected yet */
+          if (!exo_icon_view_path_is_selected (view, path))
+            {
+              /* we don't unselect all other items if Control is active */
+              if ((event->state & GDK_CONTROL_MASK) == 0)
+                exo_icon_view_unselect_all (view);
+              exo_icon_view_select_path (view, path);
+            }
+          gtk_tree_path_free (path);
+
+          /* queue the menu popup */
+          thunar_standard_view_queue_popup (THUNAR_STANDARD_VIEW (icon_view), event);
+        }
+      else if ((event->state & gtk_accelerator_get_default_mod_mask ()) == 0)
+        {
+          /* user clicked on an empty area, so we unselect everything
+           * to make sure that the folder context menu is opened.
+           */
+          exo_icon_view_unselect_all (view);
+      
+          /* open the context menu */
+          thunar_standard_view_context_menu (THUNAR_STANDARD_VIEW (icon_view), event->button, event->time);
+        }
+
+      return TRUE;
+    }
+  else if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS) && event->button == 2)
+    {
+      /* unselect all currently selected items */
+      exo_icon_view_unselect_all (view);
+
+      /* determine the path to the item that was middle-clicked */
+      if (exo_icon_view_get_item_at_pos (view, event->x, event->y, &path, NULL))
+        {
+          /* select only the path to the item on which the user clicked */
+          exo_icon_view_select_path (view, path);
+
+          /* if the event was a double-click, then we'll open the file or folder (folder's are opened in new windows) */
+          if (G_LIKELY (event->type == GDK_2BUTTON_PRESS))
+            {
+              /* determine the file for the path */
+              gtk_tree_model_get_iter (GTK_TREE_MODEL (THUNAR_STANDARD_VIEW (icon_view)->model), &iter, path);
+              file = thunar_list_model_get_file (THUNAR_STANDARD_VIEW (icon_view)->model, &iter);
+              if (G_LIKELY (file != NULL))
+                {
+                  /* determine the action to perform depending on the type of the file */
+                  action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (icon_view)->action_group,
+                                                        thunar_file_is_directory (file) ? "open-in-new-window" : "open");
+      
+                  /* emit the action */
+                  if (G_LIKELY (action != NULL))
+                    gtk_action_activate (action);
+
+                  /* release the file reference */
+                  g_object_unref (G_OBJECT (file));
+                }
+            }
+
+          /* cleanup */
+          gtk_tree_path_free (path);
+        }
+      else if (event->type == GDK_BUTTON_PRESS)
+        {
+          icon_view->gesture_start_x = icon_view->gesture_current_x = event->x;
+          icon_view->gesture_start_y = icon_view->gesture_current_y = event->y;
+          icon_view->gesture_expose_id = g_signal_connect_after (G_OBJECT (view), "expose-event",
+                                                                 G_CALLBACK (thunar_icon_view_expose_event),
+                                                                 G_OBJECT (icon_view));
+          icon_view->gesture_motion_id = g_signal_connect (G_OBJECT (view), "motion-notify-event",
+                                                           G_CALLBACK (thunar_icon_view_motion_notify_event),
+                                                           G_OBJECT (icon_view));
+          icon_view->gesture_release_id = g_signal_connect (G_OBJECT (view), "button-release-event",
+                                                            G_CALLBACK (thunar_icon_view_button_release_event),
+                                                            G_OBJECT (icon_view));
+        }
+
+      /* don't run the default handler here */
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_icon_view_button_release_event (ExoIconView    *view,
+                                       GdkEventButton *event,
+                                       ThunarIconView *icon_view)
+{
+  GtkAction *action;
+
+  g_return_val_if_fail (EXO_IS_ICON_VIEW (view), FALSE);
+  g_return_val_if_fail (THUNAR_IS_ICON_VIEW (icon_view), FALSE);
+  g_return_val_if_fail (icon_view->gesture_expose_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_motion_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_release_id > 0, FALSE);
+
+  /* run the selected action (if any) */
+  action = thunar_icon_view_gesture_action (icon_view);
+  if (G_LIKELY (action != NULL))
+    gtk_action_activate (action);
+
+  /* unregister the "expose-event" handler */
+  g_signal_handler_disconnect (G_OBJECT (view), icon_view->gesture_expose_id);
+  icon_view->gesture_expose_id = 0;
+
+  /* unregister the "motion-notify-event" handler */
+  g_signal_handler_disconnect (G_OBJECT (view), icon_view->gesture_motion_id);
+  icon_view->gesture_motion_id = 0;
+
+  /* unregister the "button-release-event" handler */
+  g_signal_handler_disconnect (G_OBJECT (view), icon_view->gesture_release_id);
+  icon_view->gesture_release_id = 0;
+
+  /* redraw the icon view */
+  gtk_widget_queue_draw (GTK_WIDGET (view));
+
+  return FALSE;
+}
+
+
+
+#if GTK_CHECK_VERSION(2,7,1)
+static cairo_t*
+get_cairo_context (GdkWindow *window)
+{
+  return gdk_cairo_create (window);
+}
+#elif defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO)
+static cairo_t*
+get_cairo_context (GdkWindow *window)
+{
+  cairo_surface_t *surface;
+  GdkDrawable     *drawable;
+  cairo_t         *cr;
+  gint             w;
+  gint             h;
+  gint             x;
+  gint             y;
+
+  gdk_window_get_internal_paint_info (window, &drawable, &x, &y);
+  gdk_drawable_get_size (drawable, &w, &h);
+
+  surface = cairo_xlib_surface_create (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+                                       gdk_x11_visual_get_xvisual (gdk_drawable_get_visual (drawable)), w, h);
+  cr = cairo_create (surface);
+  cairo_surface_destroy (surface);
+
+  cairo_translate (cr, -x, -y);
+
+  return cr;
+}
+#endif
+
+
+
+static gboolean
+thunar_icon_view_expose_event (ExoIconView    *view,
+                               GdkEventExpose *event,
+                               ThunarIconView *icon_view)
+{
+  GtkIconSet *stock_icon_set;
+  GtkAction  *action = NULL;
+  GdkPixbuf  *stock_icon = NULL;
+  gchar      *stock_id;
+#if GTK_CHECK_VERSION(2,7,1) || (defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO))
+  GdkColor    bg;
+  cairo_t    *cr;
+#endif
+
+  g_return_val_if_fail (EXO_IS_ICON_VIEW (view), FALSE);
+  g_return_val_if_fail (THUNAR_IS_ICON_VIEW (icon_view), FALSE);
+  g_return_val_if_fail (icon_view->gesture_expose_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_motion_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_release_id > 0, FALSE);
+
+  /* shade the icon view content while performing mouse gestures */
+#if GTK_CHECK_VERSION(2,7,1) || (defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO))
+  cr = get_cairo_context (event->window);
+  bg = GTK_WIDGET (view)->style->base[GTK_STATE_NORMAL];
+  cairo_set_source_rgba (cr, bg.red / 65535.0, bg.green / 65535.0, bg.blue / 65535.0, 0.7);
+  cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height);
+  cairo_clip (cr);
+  cairo_paint (cr);
+  cairo_destroy (cr);
+#endif
+
+  /* determine the gesture action */
+  action = thunar_icon_view_gesture_action (icon_view);
+  if (G_LIKELY (action != NULL))
+    {
+      /* determine the stock icon for the action */
+      g_object_get (G_OBJECT (action), "stock-id", &stock_id, NULL);
+
+      /* lookup the icon set for the stock icon */
+      stock_icon_set = gtk_style_lookup_icon_set (GTK_WIDGET (view)->style, stock_id);
+      if (G_LIKELY (stock_icon_set != NULL))
+        {
+          stock_icon = gtk_icon_set_render_icon (stock_icon_set, GTK_WIDGET (view)->style,
+                                                 gtk_widget_get_direction (GTK_WIDGET (view)),
+                                                 gtk_action_is_sensitive (action) ? 0 : GTK_STATE_INSENSITIVE,
+                                                 GTK_ICON_SIZE_DND, GTK_WIDGET (view), NULL);
+        }
+
+      /* draw the rendered icon */
+      if (G_LIKELY (stock_icon != NULL))
+        {
+          /* render the stock icon into the icon view window */
+          gdk_draw_pixbuf (event->window, NULL, stock_icon, 0, 0,
+                           icon_view->gesture_start_x - gdk_pixbuf_get_width (stock_icon) / 2,
+                           icon_view->gesture_start_y - gdk_pixbuf_get_height (stock_icon) / 2,
+                           gdk_pixbuf_get_width (stock_icon), gdk_pixbuf_get_height (stock_icon),
+                           GDK_RGB_DITHER_NONE, 0, 0);
+
+          /* release the stock icon */
+          g_object_unref (G_OBJECT (stock_icon));
+        }
+
+      /* release the stock id */
+      g_free (stock_id);
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_icon_view_key_press_event (ExoIconView    *view,
+                                  GdkEventKey    *event,
+                                  ThunarIconView *icon_view)
+{
+  /* popup context menu if "Menu" or "<Shift>F10" is pressed */
+  if (event->keyval == GDK_Menu || ((event->state & GDK_SHIFT_MASK) != 0 && event->keyval == GDK_F10))
+    {
+      thunar_standard_view_context_menu (THUNAR_STANDARD_VIEW (icon_view), 0, event->time);
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_icon_view_motion_notify_event (ExoIconView    *view,
+                                      GdkEventMotion *event,
+                                      ThunarIconView *icon_view)
+{
+  GdkRectangle area;
+
+  g_return_val_if_fail (EXO_IS_ICON_VIEW (view), FALSE);
+  g_return_val_if_fail (THUNAR_IS_ICON_VIEW (icon_view), FALSE);
+  g_return_val_if_fail (icon_view->gesture_expose_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_motion_id > 0, FALSE);
+  g_return_val_if_fail (icon_view->gesture_release_id > 0, FALSE);
+
+  /* schedule a complete redraw on the first motion event */
+  if (icon_view->gesture_current_x == icon_view->gesture_start_x
+      && icon_view->gesture_current_y == icon_view->gesture_start_y)
+    {
+      gtk_widget_queue_draw (GTK_WIDGET (view));
+    }
+  else
+    {
+      /* otherwise, just redraw the action icon area */
+      gtk_icon_size_lookup (GTK_ICON_SIZE_DND, &area.width, &area.height);
+      area.x = icon_view->gesture_start_x - area.width / 2;
+      area.y = icon_view->gesture_start_y - area.height / 2;
+      gdk_window_invalidate_rect (event->window, &area, TRUE);
+    }
+
+  /* update the current gesture position */
+  icon_view->gesture_current_x = event->x;
+  icon_view->gesture_current_y = event->y;
+
+  /* don't execute the default motion notify handler */
+  return TRUE;
+}
+
+
+
+static void
+thunar_icon_view_item_activated (ExoIconView    *view,
+                                 GtkTreePath    *path,
+                                 ThunarIconView *icon_view)
+{
+  GtkAction *action;
+
+  g_return_if_fail (THUNAR_IS_ICON_VIEW (icon_view));
+
+  /* be sure to have only the double clicked item selected */
+  exo_icon_view_unselect_all (view);
+  exo_icon_view_select_path (view, path);
+
+  /* emit the "open" action */
+  action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (icon_view)->action_group, "open");
+  if (G_LIKELY (action != NULL))
+    gtk_action_activate (action);
+}
+
+
+
+static void
+thunar_icon_view_sort_column_changed (GtkTreeSortable *sortable,
+                                      ThunarIconView  *icon_view)
+{
+  GtkSortType order;
+  GtkAction  *action;
+  gint        column;
+
+  if (gtk_tree_sortable_get_sort_column_id (sortable, &column, &order))
+    {
+      /* apply the new sort column */
+      action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (icon_view)->action_group, "sort-by-name");
+      exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), column);
+
+      /* apply the new sort order */
+      action = gtk_action_group_get_action (THUNAR_STANDARD_VIEW (icon_view)->action_group, "sort-ascending");
+      exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), order);
+    }
+}
+
+
+
+/**
+ * thunar_icon_view_new:
+ *
+ * Allocates a new #ThunarIconView instance, which is not
+ * associated with any #ThunarListModel yet.
+ *
+ * Return value: the newly allocated #ThunarIconView instance.
+ **/
+GtkWidget*
+thunar_icon_view_new (void)
+{
+  return g_object_new (THUNAR_TYPE_ICON_VIEW, NULL);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-icon-view.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-icon-view.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_ICON_VIEW_H__
+#define __THUNAR_ICON_VIEW_H__
+
+#include <thunar/thunar-standard-view.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarIconViewClass ThunarIconViewClass;
+typedef struct _ThunarIconView      ThunarIconView;
+
+#define THUNAR_TYPE_ICON_VIEW             (thunar_icon_view_get_type ())
+#define THUNAR_ICON_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_ICON_VIEW, ThunarIconView))
+#define THUNAR_ICON_VIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_ICON_VIEW, ThunarIconViewClass))
+#define THUNAR_IS_ICON_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_ICON_VIEW))
+#define THUNAR_IS_ICON_VIEW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((obj), THUNAR_TYPE_ICON_VIEW))
+#define THUNAR_ICON_VIEW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_ICON_VIEW, ThunarIconViewClass))
+
+GType      thunar_icon_view_get_type        (void) G_GNUC_CONST;
+
+GtkWidget *thunar_icon_view_new             (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_ICON_VIEW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,842 @@
+/* $Id: thunar-launcher.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-chooser-dialog.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-launcher.h>
+#include <thunar/thunar-open-with-action.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_ACTION_GROUP,
+  PROP_SELECTED_FILES,
+  PROP_WIDGET,
+};
+
+enum
+{
+  OPEN_DIRECTORY,
+  LAST_SIGNAL,
+};
+
+
+
+static void thunar_launcher_class_init                (ThunarLauncherClass      *klass);
+static void thunar_launcher_init                      (ThunarLauncher           *launcher);
+static void thunar_launcher_dispose                   (GObject                  *object);
+static void thunar_launcher_finalize                  (GObject                  *object);
+static void thunar_launcher_get_property              (GObject                  *object,
+                                                       guint                     prop_id,
+                                                       GValue                   *value,
+                                                       GParamSpec               *pspec);
+static void thunar_launcher_set_property              (GObject                  *object,
+                                                       guint                     prop_id,
+                                                       const GValue             *value,
+                                                       GParamSpec               *pspec);
+static void thunar_launcher_execute_files             (ThunarLauncher           *launcher,
+                                                       GList                    *files);
+static void thunar_launcher_open_paths                (ThunarVfsMimeApplication *application,
+                                                       GList                    *path_list,
+                                                       ThunarLauncher           *launcher);
+static void thunar_launcher_open_files                (ThunarLauncher           *launcher,
+                                                       GList                    *files);
+static void thunar_launcher_open_new_windows          (ThunarLauncher           *launcher,
+                                                       GList                    *directories);
+static void thunar_launcher_update                    (ThunarLauncher           *launcher);
+static void thunar_launcher_action_open               (GtkAction                *action,
+                                                       ThunarLauncher           *launcher);
+static void thunar_launcher_action_open_with          (GtkAction                *action,
+                                                       ThunarLauncher           *launcher);
+static void thunar_launcher_action_open_application   (GtkAction                *action,
+                                                       ThunarVfsMimeApplication *application,
+                                                       GList                    *path_list,
+                                                       ThunarLauncher           *launcher);
+static void thunar_launcher_action_open_in_new_window (GtkAction                *action,
+                                                       ThunarLauncher           *launcher);
+
+
+
+struct _ThunarLauncherClass
+{
+  GObjectClass __parent__;
+
+  void (*open_directory) (ThunarLauncher *launcher,
+                          ThunarFile     *directory);
+};
+
+struct _ThunarLauncher
+{
+  GObject __parent__;
+
+  GtkActionGroup *action_group;
+  GList          *selected_files;
+  GtkWidget      *widget;
+
+  GtkAction      *action_open;
+  GtkAction      *action_open_in_new_window;
+  GtkAction      *action_open_with;
+};
+
+
+
+static guint launcher_signals[LAST_SIGNAL];
+
+
+
+G_DEFINE_TYPE (ThunarLauncher, thunar_launcher, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_launcher_class_init (ThunarLauncherClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_launcher_dispose;
+  gobject_class->finalize = thunar_launcher_finalize;
+  gobject_class->get_property = thunar_launcher_get_property;
+  gobject_class->set_property = thunar_launcher_set_property;
+
+  /**
+   * ThunarLauncher:action-group:
+   *
+   * The #GtkActionGroup to which this launcher should
+   * add its #GtkActions.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_ACTION_GROUP,
+                                   g_param_spec_object ("action-group",
+                                                        _("Action group"),
+                                                        _("Action group"),
+                                                        GTK_TYPE_ACTION_GROUP,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarLauncher:selected-files:
+   *
+   * The list of selected #ThunarFile<!---->s.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_SELECTED_FILES,
+                                   g_param_spec_pointer ("selected-files",
+                                                         _("Selected files"),
+                                                         _("Selected files"),
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarLauncher:widget:
+   *
+   * The #GtkWidget with which this launcher is
+   * associated.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_WIDGET,
+                                   g_param_spec_object ("widget",
+                                                        _("Widget"),
+                                                        _("Widget"),
+                                                        GTK_TYPE_WIDGET,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarLauncher::open-directory:
+   * @launcher  : a #ThunarLauncher.
+   * @directory : a #ThunarFile referring to the new directory.
+   *
+   * Invoked whenever the user requests to open a new @directory
+   * based on the @launcher in the current window (if possible).
+   **/
+  launcher_signals[OPEN_DIRECTORY] =
+    g_signal_new ("open-directory",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarLauncherClass, open_directory),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1, THUNAR_TYPE_FILE);
+}
+
+
+
+static void
+thunar_launcher_init (ThunarLauncher *launcher)
+{
+  /* the "Open" action */
+  launcher->action_open = gtk_action_new ("open", _("_Open"), _("Open the selected items"), GTK_STOCK_OPEN);
+  g_signal_connect (G_OBJECT (launcher->action_open), "activate", G_CALLBACK (thunar_launcher_action_open), launcher);
+
+  /* the "Open in New Window" action */
+  launcher->action_open_in_new_window = gtk_action_new ("open-in-new-window", _("Open in New Window"), _("Open the selected directories in new Thunar windows"), NULL);
+  g_signal_connect (G_OBJECT (launcher->action_open_in_new_window), "activate", G_CALLBACK (thunar_launcher_action_open_in_new_window), launcher);
+
+  /* the "Open with" action */
+  launcher->action_open_with = thunar_open_with_action_new ("open-with", _("Open With"));
+  g_signal_connect (G_OBJECT (launcher->action_open_with), "open-application", G_CALLBACK (thunar_launcher_action_open_application), launcher);
+  g_signal_connect (G_OBJECT (launcher->action_open_with), "activate", G_CALLBACK (thunar_launcher_action_open_with), launcher);
+}
+
+
+
+static void
+thunar_launcher_dispose (GObject *object)
+{
+  ThunarLauncher *launcher = THUNAR_LAUNCHER (object);
+
+  thunar_launcher_set_action_group (launcher, NULL);
+  thunar_launcher_set_selected_files (launcher, NULL);
+  thunar_launcher_set_widget (launcher, NULL);
+
+  (*G_OBJECT_CLASS (thunar_launcher_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_launcher_finalize (GObject *object)
+{
+  ThunarLauncher *launcher = THUNAR_LAUNCHER (object);
+
+  /* drop all actions */
+  g_object_unref (G_OBJECT (launcher->action_open));
+  g_object_unref (G_OBJECT (launcher->action_open_in_new_window));
+  g_object_unref (G_OBJECT (launcher->action_open_with));
+
+  (*G_OBJECT_CLASS (thunar_launcher_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_launcher_get_property (GObject    *object,
+                              guint       prop_id,
+                              GValue     *value,
+                              GParamSpec *pspec)
+{
+  ThunarLauncher *launcher = THUNAR_LAUNCHER (object);
+
+  switch (prop_id)
+    {
+    case PROP_ACTION_GROUP:
+      g_value_set_object (value, thunar_launcher_get_action_group (launcher));
+      break;
+
+    case PROP_SELECTED_FILES:
+      g_value_set_pointer (value, thunar_launcher_get_selected_files (launcher));
+      break;
+
+    case PROP_WIDGET:
+      g_value_set_object (value, thunar_launcher_get_widget (launcher));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_launcher_set_property (GObject      *object,
+                              guint         prop_id,
+                              const GValue *value,
+                              GParamSpec   *pspec)
+{
+  ThunarLauncher *launcher = THUNAR_LAUNCHER (object);
+
+  switch (prop_id)
+    {
+    case PROP_ACTION_GROUP:
+      thunar_launcher_set_action_group (launcher, g_value_get_object (value));
+      break;
+
+    case PROP_SELECTED_FILES:
+      thunar_launcher_set_selected_files (launcher, g_value_get_pointer (value));
+      break;
+
+    case PROP_WIDGET:
+      thunar_launcher_set_widget (launcher, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_launcher_execute_files (ThunarLauncher *launcher,
+                               GList          *files)
+{
+  ThunarFile *file;
+  GdkScreen  *screen;
+  GError     *error = NULL;
+  GList      *lp;
+
+  /* determine the screen on which to run the file(s) */
+  screen = (launcher->widget != NULL)
+         ? gtk_widget_get_screen (launcher->widget)
+         : gdk_screen_get_default ();
+
+  /* execute all selected files */
+  for (lp = files; lp != NULL; lp = lp->next)
+    {
+      file = THUNAR_FILE (lp->data);
+      if (!thunar_file_execute (file, screen, NULL, &error))
+        {
+          /* display an error message to the user */
+          thunar_dialogs_show_error (launcher->widget, error, _("Unable to execute file `%s'"), thunar_file_get_display_name (file));
+
+          /* release the error */
+          g_error_free (error);
+          break;
+        }
+    }
+}
+
+
+
+static void
+thunar_launcher_open_paths (ThunarVfsMimeApplication *application,
+                            GList                    *path_list,
+                            ThunarLauncher           *launcher)
+{
+  GdkScreen *screen;
+  GError    *error = NULL;
+  gchar     *name;
+  gchar     *text;
+  guint      n;
+
+  /* determine the screen on which to launch the application */
+  screen = (launcher->widget != NULL) ? gtk_widget_get_screen (launcher->widget) : NULL;
+
+  /* try to execute the application with the given URIs */
+  if (!thunar_vfs_mime_application_exec (application, screen, path_list, &error))
+    {
+      /* figure out the appropriate error message */
+      n = g_list_length (path_list);
+      if (G_LIKELY (n == 1))
+        {
+          name = g_filename_display_name (thunar_vfs_path_get_name (path_list->data));
+          text = g_strdup_printf (_("Unable to open \"%s\"."), name);
+          g_free (name);
+        }
+      else
+        {
+          text = g_strdup_printf (ngettext ("Unable to open %d file.", "Unable to open %d files.", n), n);
+        }
+
+      /* display an error dialog */
+      thunar_dialogs_show_error (launcher->widget, error, text);
+
+      /* release the error */
+      g_error_free (error);
+    }
+}
+
+
+
+static void
+thunar_launcher_open_files (ThunarLauncher *launcher,
+                            GList          *files)
+{
+  ThunarVfsMimeApplication *application;
+  ThunarVfsMimeDatabase    *database;
+  ThunarVfsMimeInfo        *info;
+  GHashTable               *applications;
+  GtkWidget                *window;
+  GtkWidget                *dialog;
+  GList                    *path_list;
+  GList                    *lp;
+
+  /* allocate a hash table to associate applications to URIs */
+  applications = g_hash_table_new_full (thunar_vfs_mime_application_hash,
+                                        thunar_vfs_mime_application_equal,
+                                        (GDestroyNotify) thunar_vfs_mime_application_unref,
+                                        (GDestroyNotify) thunar_vfs_path_list_free);
+
+  /* take a reference on the mime database */
+  database = thunar_vfs_mime_database_get_default ();
+
+  for (lp = files; lp != NULL; lp = lp->next)
+    {
+      /* determine the default application for the MIME type */
+      info = thunar_file_get_mime_info (lp->data);
+      application = thunar_vfs_mime_database_get_default_application (database, info);
+
+      /* check if we have an application here */
+      if (G_LIKELY (application != NULL))
+        {
+          /* check if we have that application already */
+          path_list = g_hash_table_lookup (applications, application);
+          if (G_LIKELY (path_list != NULL))
+            {
+              /* take a copy of the list as the old one will be dropped by the insert */
+              path_list = thunar_vfs_path_list_copy (path_list);
+            }
+
+          /* append our new URI to the list */
+          path_list = thunar_vfs_path_list_append (path_list, thunar_file_get_path (lp->data));
+
+          /* (re)insert the URI list for the application */
+          g_hash_table_insert (applications, application, path_list);
+        }
+      else
+        {
+          window = (launcher->widget != NULL) ? gtk_widget_get_toplevel (launcher->widget) : NULL;
+          dialog = thunar_chooser_dialog_new ((GtkWindow *) window, lp->data, TRUE);
+          gtk_dialog_run (GTK_DIALOG (dialog));
+          gtk_widget_destroy (dialog);
+          break;
+        }
+    }
+
+  /* run all collected applications */
+  g_hash_table_foreach (applications, (GHFunc) thunar_launcher_open_paths, launcher);
+
+  /* release the reference on the mime database */
+  g_object_unref (G_OBJECT (database));
+
+  /* drop the applications hash table */
+  g_hash_table_destroy (applications);
+}
+
+
+
+static void
+thunar_launcher_open_new_windows (ThunarLauncher *launcher,
+                                  GList          *directories)
+{
+  ThunarApplication *application;
+  GtkWidget         *message;
+  GtkWidget         *window;
+  GdkScreen         *screen;
+  GList             *lp;
+  gint               response = GTK_RESPONSE_YES;
+  gint               n;
+
+  /* query the application object */
+  application = thunar_application_get ();
+
+  /* ask the user if we would open more than one new window */
+  n = g_list_length (directories);
+  if (G_UNLIKELY (n > 1))
+    {
+      /* open a message dialog */
+      window = (launcher->widget != NULL) ? gtk_widget_get_toplevel (launcher->widget) : NULL;
+      message = gtk_message_dialog_new ((GtkWindow *) window,
+                                        GTK_DIALOG_DESTROY_WITH_PARENT
+                                        | GTK_DIALOG_MODAL,
+                                        GTK_MESSAGE_QUESTION,
+                                        GTK_BUTTONS_YES_NO,
+                                        _("Are you sure you want to open all folders?"));
+      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
+                                                ngettext ("This will open %d separate window.",
+                                                          "This will open %d separate windows.",
+                                                          n),
+                                                n);
+      response = gtk_dialog_run (GTK_DIALOG (message));
+      gtk_widget_destroy (message);
+    }
+
+  /* open n new windows if the user approved it */
+  if (G_LIKELY (response == GTK_RESPONSE_YES))
+    {
+      /* determine the screen on which to open the new windows */
+      screen = (launcher->widget != NULL) ? gtk_widget_get_screen (launcher->widget) : NULL;
+
+      /* open all requested windows */
+      for (lp = directories; lp != NULL; lp = lp->next)
+        thunar_application_open_window (application, lp->data, screen);
+    }
+
+  /* release the application object */
+  g_object_unref (G_OBJECT (application));
+}
+
+
+
+static void
+thunar_launcher_update (ThunarLauncher *launcher)
+{
+  GList *items;
+  GList *lp;
+  gchar  text[256];
+  gint   n_directories = 0;
+  gint   n_executables = 0;
+  gint   n_files = 0;
+  gint   n_items;
+
+  /* determine the number of selected items */
+  items = launcher->selected_files;
+  n_items = g_list_length (items);
+
+  /* determine the number of files/directories */
+  for (lp = items; lp != NULL; lp = lp->next)
+    {
+      if (thunar_file_is_directory (lp->data))
+        {
+          ++n_directories;
+        }
+      else
+        {
+          if (thunar_file_is_executable (lp->data))
+            ++n_executables;
+          ++n_files;
+        }
+    }
+
+  if (G_UNLIKELY (n_directories == n_items))
+    {
+      /* we turn the "Open" label into "Open in n New Windows" if we have only directories */
+      if (n_directories > 1)
+        g_snprintf (text, sizeof (text), ngettext ("Open in %d New Window", "Open in %d New Windows", n_directories), n_directories);
+      else
+        g_strlcpy (text, _("_Open"), sizeof (text));
+
+      g_object_set (G_OBJECT (launcher->action_open_in_new_window),
+                    "sensitive", (n_directories > 0),
+                    "visible", (n_directories <= 1),
+                    NULL);
+
+      g_object_set (G_OBJECT (launcher->action_open),
+                    "label", text,
+                    "sensitive", (n_directories > 0),
+                    NULL);
+    }
+  else
+    {
+      /* we turn the "Open" label into "Execute" if we have only one executable file */
+      if (G_UNLIKELY (n_executables == 1 && n_items == 1))
+        g_object_set (G_OBJECT (launcher->action_open), "label", _("_Execute"), NULL);
+      else
+        g_object_set (G_OBJECT (launcher->action_open), "label", _("_Open"), NULL);
+
+#if GTK_CHECK_VERSION(2,6,0)
+      gtk_action_set_sensitive (launcher->action_open, (n_items > 0));
+      gtk_action_set_visible (launcher->action_open_in_new_window, FALSE);
+#else
+      g_object_set (G_OBJECT (launcher->action_open), "sensitive", (n_items > 0), NULL);
+      g_object_set (G_OBJECT (launcher->action_open_in_new_window), "visible", FALSE, NULL);
+#endif
+    }
+
+  /* update the "Open With" action */
+  thunar_open_with_action_set_file (THUNAR_OPEN_WITH_ACTION (launcher->action_open_with),
+                                    (n_items == 1) ? THUNAR_FILE (items->data) : NULL);
+}
+
+
+
+static void
+thunar_launcher_action_open (GtkAction      *action,
+                             ThunarLauncher *launcher)
+{
+  GList *directories = NULL;
+  GList *files = NULL;
+  GList *lp;
+  gint   n_selected_files;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+
+  /* separate files and directories */
+  n_selected_files = g_list_length (launcher->selected_files);
+  for (lp = launcher->selected_files; lp != NULL; lp = lp->next)
+    {
+      if (thunar_file_is_directory (lp->data))
+        directories = g_list_append (directories, g_object_ref (lp->data));
+      else
+        files = g_list_append (files, g_object_ref (lp->data));
+    }
+
+  /* open the directories */
+  if (directories != NULL)
+    {
+      /* open new windows if we have more than one selected item */
+      if (G_UNLIKELY (n_selected_files == 1))
+        g_signal_emit (G_OBJECT (launcher), launcher_signals[OPEN_DIRECTORY], 0, directories->data);
+      else
+        thunar_launcher_open_new_windows (launcher, directories);
+      thunar_file_list_free (directories);
+    }
+
+  /* open the files */
+  if (files != NULL)
+    {
+      if (g_list_length (files) == 1 && thunar_file_is_executable (files->data))
+        thunar_launcher_execute_files (launcher, files);
+      else
+        thunar_launcher_open_files (launcher, files);
+      thunar_file_list_free (files);
+    }
+}
+
+
+
+static void
+thunar_launcher_action_open_with (GtkAction      *action,
+                                  ThunarLauncher *launcher)
+{
+  ThunarFile *file;
+  GtkWidget  *dialog;
+  GtkWindow  *window;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+
+  /* determine the first selected file */
+  file = g_list_nth_data (launcher->selected_files, 0);
+  if (G_UNLIKELY (file == NULL))
+    return;
+
+  window = (launcher->widget != NULL) ? (GtkWindow *) gtk_widget_get_toplevel (launcher->widget) : NULL;
+  dialog = thunar_chooser_dialog_new (window, file, TRUE);
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+}
+
+
+
+static void
+thunar_launcher_action_open_application (GtkAction                *action,
+                                         ThunarVfsMimeApplication *application,
+                                         GList                    *path_list,
+                                         ThunarLauncher           *launcher)
+{
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+
+  /* open the URIs (if any) using the given application */
+  if (G_LIKELY (path_list != NULL))
+    thunar_launcher_open_paths (application, path_list, launcher);
+}
+
+
+
+static void
+thunar_launcher_action_open_in_new_window (GtkAction      *action,
+                                           ThunarLauncher *launcher)
+{
+  GList *directories;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+
+  /* take an additional reference on the launcher to make sure we don't get destroyed in the meantime */
+  g_object_ref (G_OBJECT (launcher));
+
+  /* open the directories */
+  directories = thunar_file_list_copy (launcher->selected_files);
+  thunar_launcher_open_new_windows (launcher, directories);
+  thunar_file_list_free (directories);
+
+  /* release the additional reference */
+  g_object_unref (G_OBJECT (launcher));
+}
+
+
+
+/**
+ * thunar_launcher_new:
+ *
+ * Allocates a new #ThunarLauncher instance and
+ * returns it.
+ *
+ * Return value: the newly allocated #ThunarLauncher instance.
+ **/
+ThunarLauncher*
+thunar_launcher_new (void)
+{
+  return g_object_new (THUNAR_TYPE_LAUNCHER, NULL);
+}
+
+
+
+/**
+ * thunar_launcher_get_action_group:
+ * @launcher : a #ThunarLauncher.
+ *
+ * Returns the #GtkActionGroup for the @launcher.
+ *
+ * Return value: the #GtkActionGroup for @launcher.
+ **/
+GtkActionGroup*
+thunar_launcher_get_action_group (const ThunarLauncher *launcher)
+{
+  g_return_val_if_fail (THUNAR_IS_LAUNCHER (launcher), NULL);
+  return launcher->action_group;
+}
+
+
+
+/**
+ * thunar_launcher_set_action_group:
+ * @launcher     : a #ThunarLauncher.
+ * @action_group : a #GtkActionGroup or %NULL.
+ *
+ * Disconnects @launcher from any previously set
+ * #GtkActionGroup. If @action_group is a valid
+ * #GtkActionGroup, then @launcher will connect
+ * its actions ("open", "open-in-new-window" and
+ * "open-with") to @action_group.
+ **/
+void
+thunar_launcher_set_action_group (ThunarLauncher *launcher,
+                                  GtkActionGroup *action_group)
+{
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+  g_return_if_fail (action_group == NULL || GTK_IS_ACTION_GROUP (action_group));
+
+  /* disconnect from the previous action group */
+  if (G_UNLIKELY (launcher->action_group != NULL))
+    {
+      gtk_action_group_remove_action (launcher->action_group, launcher->action_open);
+      gtk_action_group_remove_action (launcher->action_group, launcher->action_open_in_new_window);
+      gtk_action_group_remove_action (launcher->action_group, launcher->action_open_with);
+      g_object_unref (G_OBJECT (launcher->action_group));
+    }
+
+  /* activate the new action group */
+  launcher->action_group = action_group;
+
+  /* connect to the new action group */
+  if (G_LIKELY (action_group != NULL))
+    {
+      g_object_ref (G_OBJECT (action_group));
+      gtk_action_group_add_action_with_accel (action_group, launcher->action_open, "<control>O");
+      gtk_action_group_add_action_with_accel (action_group, launcher->action_open_in_new_window, "<shift><control>O");
+      gtk_action_group_add_action (action_group, launcher->action_open_with);
+    }
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (launcher), "action-group");
+}
+
+
+
+/**
+ * thunar_launcher_get_selected_files:
+ * @launcher : a #ThunarLauncher.
+ *
+ * Returns the selected files currently set for @launcher.
+ *
+ * Return value: the list of selected #ThunarFile<!---->s
+ *               for @launcher.
+ **/
+GList*
+thunar_launcher_get_selected_files (const ThunarLauncher *launcher)
+{
+  g_return_val_if_fail (THUNAR_IS_LAUNCHER (launcher), NULL);
+  return launcher->selected_files;
+}
+
+
+
+/**
+ * thunar_launcher_set_selected_files:
+ * @launcher       : a #ThunarLauncher.
+ * @selected_files : a list of selected #ThunarFile<!---->s.
+ *
+ * Installs @selected_files for @launcher.
+ **/
+void
+thunar_launcher_set_selected_files (ThunarLauncher *launcher,
+                                    GList          *selected_files)
+{
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+
+  /* disconnect from the previously selected files */
+  if (G_LIKELY (launcher->selected_files != NULL))
+    thunar_file_list_free (launcher->selected_files);
+
+  /* activate the new selected files list */
+  launcher->selected_files = thunar_file_list_copy (selected_files);
+
+  /* update the user interface */
+  thunar_launcher_update (launcher);
+
+  /* notify interested parties */
+  g_object_notify (G_OBJECT (launcher), "selected-files");
+}
+
+
+
+/**
+ * thunar_launcher_get_widget:
+ * @launcher : a #ThunarLauncher.
+ *
+ * Returns the #GtkWidget with which @launcher is associated
+ * currently or %NULL.
+ *
+ * Return value: the #GtkWidget associated with @launcher or %NULL.
+ **/
+GtkWidget*
+thunar_launcher_get_widget (const ThunarLauncher *launcher)
+{
+  g_return_val_if_fail (THUNAR_IS_LAUNCHER (launcher), NULL);
+  return launcher->widget;
+}
+
+
+
+/**
+ * thunar_launcher_set_widget:
+ * @launcher : a #ThunarLauncher.
+ * @widget   : a #GtkWidget or %NULL.
+ *
+ * Tells @launcher to use @widget to determine the screen on
+ * which to launch applications and such.
+ **/
+void
+thunar_launcher_set_widget (ThunarLauncher *launcher,
+                            GtkWidget      *widget)
+{
+  g_return_if_fail (THUNAR_IS_LAUNCHER (launcher));
+  g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+
+  /* verify that the widgets differ */
+  if (G_UNLIKELY (launcher->widget == widget))
+    return;
+
+  /* disconnect from the previously set widget */
+  if (G_UNLIKELY (launcher->widget != NULL))
+    g_object_unref (G_OBJECT (launcher->widget));
+
+  /* activate the new widget */
+  launcher->widget = widget;
+
+  /* connect to the new widget */
+  if (G_LIKELY (widget != NULL))
+    g_object_ref (G_OBJECT (widget));
+  
+  /* notify listeners */
+  g_object_notify (G_OBJECT (launcher), "widget");
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-launcher.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,55 @@
+/* $Id: thunar-launcher.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LAUNCHER_H__
+#define __THUNAR_LAUNCHER_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarLauncherClass ThunarLauncherClass;
+typedef struct _ThunarLauncher      ThunarLauncher;
+
+#define THUNAR_TYPE_LAUNCHER            (thunar_launcher_get_type ())
+#define THUNAR_LAUNCHER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LAUNCHER, ThunarLauncher))
+#define THUNAR_LAUNCHER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_LAUNCHER, ThunarLauncherClass))
+#define THUNAR_IS_LAUNCHER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LAUNCHER))
+#define THUNAR_IS_LAUNCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_LAUNCHER))
+#define THUNAR_LAUNCHER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_LAUNCHER, ThunarLauncherClass))
+
+GType           thunar_launcher_get_type            (void) G_GNUC_CONST;
+
+ThunarLauncher *thunar_launcher_new                 (void) G_GNUC_MALLOC;
+
+GtkActionGroup *thunar_launcher_get_action_group    (const ThunarLauncher *launcher);
+void            thunar_launcher_set_action_group    (ThunarLauncher       *launcher,
+                                                     GtkActionGroup       *action_group);
+
+GList          *thunar_launcher_get_selected_files  (const ThunarLauncher *launcher);
+void            thunar_launcher_set_selected_files  (ThunarLauncher       *launcher,
+                                                     GList                *selected_files);
+
+GtkWidget      *thunar_launcher_get_widget          (const ThunarLauncher *launcher);
+void            thunar_launcher_set_widget          (ThunarLauncher       *launcher,
+                                                     GtkWidget            *widget);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LAUNCHER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1985 @@
+/* $Id: thunar-list-model.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-list-model.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_FOLDER,
+  PROP_FOLDERS_FIRST,
+  PROP_NUM_FILES,
+  PROP_SHOW_HIDDEN,
+};
+
+/* Signal identifiers */
+enum
+{
+  ERROR,
+  LAST_SIGNAL,
+};
+
+
+
+typedef struct _Row       Row;
+typedef struct _SortTuple SortTuple;
+
+
+
+static void               thunar_list_model_init                  (ThunarListModel        *store);
+static void               thunar_list_model_class_init            (ThunarListModelClass   *klass);
+static void               thunar_list_model_tree_model_init       (GtkTreeModelIface      *iface);
+static void               thunar_list_model_drag_dest_init        (GtkTreeDragDestIface   *iface);
+static void               thunar_list_model_sortable_init         (GtkTreeSortableIface   *iface);
+static void               thunar_list_model_finalize              (GObject                *object);
+static void               thunar_list_model_dispose               (GObject                *object);
+static void               thunar_list_model_get_property          (GObject                *object,
+                                                                   guint                   prop_id,
+                                                                   GValue                 *value,
+                                                                   GParamSpec             *pspec);
+static void               thunar_list_model_set_property          (GObject                *object,
+                                                                   guint                   prop_id,
+                                                                   const GValue           *value,
+                                                                   GParamSpec             *pspec);
+static GtkTreeModelFlags  thunar_list_model_get_flags             (GtkTreeModel           *model);
+static gint               thunar_list_model_get_n_columns         (GtkTreeModel           *model);
+static GType              thunar_list_model_get_column_type       (GtkTreeModel           *model,
+                                                                   gint                    index);
+static gboolean           thunar_list_model_get_iter              (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter,
+                                                                   GtkTreePath            *path);
+static GtkTreePath       *thunar_list_model_get_path              (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter);
+static void               thunar_list_model_get_value             (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter,
+                                                                   gint                    column,
+                                                                   GValue                 *value);
+static gboolean           thunar_list_model_iter_next             (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter);
+static gboolean           thunar_list_model_iter_children         (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter,
+                                                                   GtkTreeIter            *parent);
+static gboolean           thunar_list_model_iter_has_child        (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter);
+static gint               thunar_list_model_iter_n_children       (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter);
+static gboolean           thunar_list_model_iter_nth_child        (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter,
+                                                                   GtkTreeIter            *parent,
+                                                                   gint                    n);
+static gboolean           thunar_list_model_iter_parent           (GtkTreeModel           *model,
+                                                                   GtkTreeIter            *iter,
+                                                                   GtkTreeIter            *child);
+static gboolean           thunar_list_model_drag_data_received    (GtkTreeDragDest        *dest,
+                                                                   GtkTreePath            *path,
+                                                                   GtkSelectionData       *data);
+static gboolean           thunar_list_model_row_drop_possible     (GtkTreeDragDest        *dest,
+                                                                   GtkTreePath            *path,
+                                                                   GtkSelectionData       *data);
+static gboolean           thunar_list_model_get_sort_column_id    (GtkTreeSortable        *sortable,
+                                                                   gint                   *sort_column_id,
+                                                                   GtkSortType            *order);
+static void               thunar_list_model_set_sort_column_id    (GtkTreeSortable        *sortable,
+                                                                   gint                    sort_column_id,
+                                                                   GtkSortType             order);
+static void               thunar_list_model_set_default_sort_func (GtkTreeSortable        *sortable,
+                                                                   GtkTreeIterCompareFunc  func,
+                                                                   gpointer                data,
+                                                                   GtkDestroyNotify        destroy);
+static void               thunar_list_model_set_sort_func         (GtkTreeSortable        *sortable,
+                                                                   gint                    sort_column_id,
+                                                                   GtkTreeIterCompareFunc  func,
+                                                                   gpointer                data,
+                                                                   GtkDestroyNotify        destroy);
+static gboolean           thunar_list_model_has_default_sort_func (GtkTreeSortable        *sortable);
+static gint               thunar_list_model_cmp                   (ThunarListModel        *store,
+                                                                   ThunarFile             *a,
+                                                                   ThunarFile             *b);
+static gint               thunar_list_model_cmp_array             (gconstpointer           a,
+                                                                   gconstpointer           b,
+                                                                   gpointer                user_data);
+static gint               thunar_list_model_cmp_list              (gconstpointer           a,
+                                                                   gconstpointer           b,
+                                                                   gpointer                user_data);
+static gboolean           thunar_list_model_remove                (ThunarListModel        *store,
+                                                                   GtkTreeIter            *iter,
+                                                                   gboolean                silently);
+static void               thunar_list_model_sort                  (ThunarListModel        *store);
+static void               thunar_list_model_file_changed          (ThunarFile             *file,
+                                                                   ThunarListModel        *store);
+static void               thunar_list_model_folder_destroy        (ThunarFolder           *folder,
+                                                                   ThunarListModel        *store);
+static void               thunar_list_model_folder_error          (ThunarFolder           *folder,
+                                                                   const GError           *error,
+                                                                   ThunarListModel        *store);
+static void               thunar_list_model_files_added           (ThunarFolder           *folder,
+                                                                   GList                  *files,
+                                                                   ThunarListModel        *store);
+static void               thunar_list_model_files_removed         (ThunarFolder           *folder,
+                                                                   GList                  *files,
+                                                                   ThunarListModel        *store);
+static gint               sort_by_date_accessed                   (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_date_modified                   (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_mime_type                       (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_name                            (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_permissions                     (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_size                            (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+static gint               sort_by_type                            (const ThunarFile       *a,
+                                                                   const ThunarFile       *b);
+
+
+
+struct _ThunarListModelClass
+{
+  GObjectClass __parent__;
+
+  /* signals */
+  void (*error) (ThunarListModel *store,
+                 const GError    *error);
+};
+
+struct _ThunarListModel
+{
+  GObject __parent__;
+
+  guint          stamp;
+  Row           *rows;
+  gint           nrows;
+  GList         *hidden;
+  GMemChunk     *row_chunk;
+  ThunarFolder  *folder;
+  gboolean       show_hidden;
+
+  ThunarVfsVolumeManager *volume_manager;
+
+  /* ids and closures for the "changed" signal of
+   * ThunarFile's used to speed up signal registrations.
+   */
+  GClosure      *file_changed_closure;
+  gint           file_changed_id;
+
+  /* ids for the "row-inserted" and "row-deleted" signals
+   * of GtkTreeModel to speed up folder changing.
+   */
+  guint          row_inserted_id;
+  guint          row_deleted_id;
+
+  gboolean       sort_folders_first;
+  gint           sort_sign;   /* 1 = ascending, -1 descending */
+  gint         (*sort_func) (const ThunarFile *a,
+                             const ThunarFile *b);
+};
+
+struct _Row
+{
+  ThunarFile *file;
+  Row        *next;
+};
+
+struct _SortTuple
+{
+  gint offset;
+  Row *row;
+};
+
+
+
+static guint list_model_signals[LAST_SIGNAL];
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarListModel,
+                         thunar_list_model,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+                                                thunar_list_model_tree_model_init)
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_DEST,
+                                                thunar_list_model_drag_dest_init)
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_SORTABLE,
+                                                thunar_list_model_sortable_init));
+
+
+
+static void
+thunar_list_model_class_init (ThunarListModelClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class               = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_list_model_finalize;
+  gobject_class->dispose      = thunar_list_model_dispose;
+  gobject_class->get_property = thunar_list_model_get_property;
+  gobject_class->set_property = thunar_list_model_set_property;
+
+  /**
+   * ThunarListModel:folder:
+   *
+   * The folder presented by this #ThunarListModel.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FOLDER,
+                                   g_param_spec_object ("folder",
+                                                        _("Folder"),
+                                                        _("The stores folder"),
+                                                        THUNAR_TYPE_FOLDER,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarListModel::folders-first:
+   *
+   * Tells whether to always sort folders before other files.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FOLDERS_FIRST,
+                                   g_param_spec_boolean ("folders-first",
+                                                         _("Folders first"),
+                                                         _("Folders first in sorting"),
+                                                         TRUE,
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarListModel::num-files:
+   *
+   * The number of files in the folder presented by this #ThunarListModel.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_NUM_FILES,
+                                   g_param_spec_uint ("num-files",
+                                                      _("Number of files"),
+                                                      _("Number of visible files"),
+                                                      0, UINT_MAX, 0,
+                                                      EXO_PARAM_READABLE));
+
+  /**
+   * ThunarListModel::show-hidden:
+   *
+   * Tells whether to include hidden (and backup) files.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_SHOW_HIDDEN,
+                                   g_param_spec_boolean ("show-hidden",
+                                                         _("Show hidden"),
+                                                         _("Whether to display hidden files"),
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarListModel::error:
+   * @store : a #ThunarListModel.
+   * @error : a #GError that describes the problem.
+   *
+   * Emitted when an error occurs while loading the
+   * @store content.
+   **/
+  list_model_signals[ERROR] =
+    g_signal_new ("error",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarListModelClass, error),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+}
+
+
+
+static void
+thunar_list_model_tree_model_init (GtkTreeModelIface *iface)
+{
+  iface->get_flags        = thunar_list_model_get_flags;
+  iface->get_n_columns    = thunar_list_model_get_n_columns;
+  iface->get_column_type  = thunar_list_model_get_column_type;
+  iface->get_iter         = thunar_list_model_get_iter;
+  iface->get_path         = thunar_list_model_get_path;
+  iface->get_value        = thunar_list_model_get_value;
+  iface->iter_next        = thunar_list_model_iter_next;
+  iface->iter_children    = thunar_list_model_iter_children;
+  iface->iter_has_child   = thunar_list_model_iter_has_child;
+  iface->iter_n_children  = thunar_list_model_iter_n_children;
+  iface->iter_nth_child   = thunar_list_model_iter_nth_child;
+  iface->iter_parent      = thunar_list_model_iter_parent;
+}
+
+
+
+static void
+thunar_list_model_drag_dest_init (GtkTreeDragDestIface *iface)
+{
+  iface->drag_data_received = thunar_list_model_drag_data_received;
+  iface->row_drop_possible = thunar_list_model_row_drop_possible;
+}
+
+
+
+static void
+thunar_list_model_sortable_init (GtkTreeSortableIface *iface)
+{
+  iface->get_sort_column_id     = thunar_list_model_get_sort_column_id;
+  iface->set_sort_column_id     = thunar_list_model_set_sort_column_id;
+  iface->set_sort_func          = thunar_list_model_set_sort_func;
+  iface->set_default_sort_func  = thunar_list_model_set_default_sort_func;
+  iface->has_default_sort_func  = thunar_list_model_has_default_sort_func;
+}
+
+
+
+static void
+thunar_list_model_init (ThunarListModel *store)
+{
+  store->stamp                = g_random_int ();
+  store->row_chunk            = g_mem_chunk_create (Row, 512, G_ALLOC_ONLY);
+
+  store->volume_manager       = thunar_vfs_volume_manager_get_default ();
+
+  store->file_changed_closure = g_cclosure_new_object (G_CALLBACK (thunar_list_model_file_changed), G_OBJECT (store));
+  store->file_changed_id      = g_signal_lookup ("changed", THUNAR_TYPE_FILE);
+
+  store->row_inserted_id      = g_signal_lookup ("row-inserted", GTK_TYPE_TREE_MODEL);
+  store->row_deleted_id       = g_signal_lookup ("row-deleted", GTK_TYPE_TREE_MODEL);
+
+  store->sort_folders_first   = TRUE;
+  store->sort_sign            = 1;
+  store->sort_func            = sort_by_name;
+
+  /* take over ownership of the "changed" closure */
+  g_closure_ref (store->file_changed_closure);
+  g_closure_sink (store->file_changed_closure);
+}
+
+
+
+static void
+thunar_list_model_dispose (GObject *object)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (object);
+
+  /* unlink from the folder (if any) */
+  thunar_list_model_set_folder (store, NULL);
+
+  (*G_OBJECT_CLASS (thunar_list_model_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_list_model_finalize (GObject *object)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (object);
+
+  /* drop the row memory chunk */
+  g_mem_chunk_destroy (store->row_chunk);
+
+  /* disconnect from the volume manager */
+  g_object_unref (G_OBJECT (store->volume_manager));
+
+  /* get rid of the "changed" closure */
+  g_closure_unref (store->file_changed_closure);
+
+  (*G_OBJECT_CLASS (thunar_list_model_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_list_model_get_property (GObject    *object,
+                                guint       prop_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (object);
+
+  switch (prop_id)
+    {
+    case PROP_FOLDER:
+      g_value_set_object (value, thunar_list_model_get_folder (store));
+      break;
+
+    case PROP_FOLDERS_FIRST:
+      g_value_set_boolean (value, thunar_list_model_get_folders_first (store));
+      break;
+
+    case PROP_NUM_FILES:
+      g_value_set_uint (value, thunar_list_model_get_num_files (store));
+      break;
+
+    case PROP_SHOW_HIDDEN:
+      g_value_set_boolean (value, thunar_list_model_get_show_hidden (store));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_list_model_set_property (GObject      *object,
+                                guint         prop_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (object);
+
+  switch (prop_id)
+    {
+    case PROP_FOLDER:
+      thunar_list_model_set_folder (store, g_value_get_object (value));
+      break;
+
+    case PROP_FOLDERS_FIRST:
+      thunar_list_model_set_folders_first (store, g_value_get_boolean (value));
+      break;
+
+    case PROP_SHOW_HIDDEN:
+      thunar_list_model_set_show_hidden (store, g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static GtkTreeModelFlags
+thunar_list_model_get_flags (GtkTreeModel *model)
+{
+  return GTK_TREE_MODEL_ITERS_PERSIST | GTK_TREE_MODEL_LIST_ONLY;
+}
+
+
+
+static gint
+thunar_list_model_get_n_columns (GtkTreeModel *model)
+{
+  return THUNAR_LIST_MODEL_N_COLUMNS;
+}
+
+
+
+static GType
+thunar_list_model_get_column_type (GtkTreeModel *model,
+                                   gint          index)
+{
+  switch (index)
+    {
+    case THUNAR_LIST_MODEL_COLUMN_DATE_ACCESSED:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_FILE:
+      return THUNAR_TYPE_FILE;
+
+    case THUNAR_LIST_MODEL_COLUMN_MIME_TYPE:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_NAME:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_PERMISSIONS:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_SIZE:
+      return G_TYPE_STRING;
+
+    case THUNAR_LIST_MODEL_COLUMN_TYPE:
+      return G_TYPE_STRING;
+    }
+
+  g_assert_not_reached ();
+  return (GType) -1;
+}
+
+
+
+static gboolean
+thunar_list_model_get_iter (GtkTreeModel *model,
+                            GtkTreeIter  *iter,
+                            GtkTreePath  *path)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (model);
+  gint             index;
+  gint             n;
+  Row             *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+  g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
+
+  index = gtk_tree_path_get_indices (path)[0];
+  if (G_UNLIKELY (index >= store->nrows))
+    return FALSE;
+
+  /* use fast-forward, skipping every second comparison */
+  for (n = index / 2, row = store->rows; n-- > 0; row = row->next->next)
+    ;
+
+  /* advance for odd indices */
+  if ((index % 2) == 1)
+    row = row->next;
+
+  iter->stamp = store->stamp;
+  iter->user_data = row;
+
+  return TRUE;
+}
+
+
+
+static GtkTreePath*
+thunar_list_model_get_path (GtkTreeModel *model,
+                            GtkTreeIter  *iter)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (model);
+  GtkTreePath     *path;
+  gint             index = 0;
+  Row             *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+  g_return_val_if_fail (iter->stamp == store->stamp, NULL);
+
+  for (row = store->rows; row != NULL; ++index, row = row->next)
+    if (row == iter->user_data)
+      break;
+
+  if (G_UNLIKELY (row == NULL))
+    return NULL;
+
+  path = gtk_tree_path_new ();
+  gtk_tree_path_append_index (path, index);
+  return path;
+}
+
+
+
+static void
+thunar_list_model_get_value (GtkTreeModel *model,
+                             GtkTreeIter  *iter,
+                             gint          column,
+                             GValue       *value)
+{
+  ThunarVfsMimeInfo *mime_info;
+  gchar             *str;
+  Row               *row;
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (model));
+  g_return_if_fail (iter->stamp == (THUNAR_LIST_MODEL (model))->stamp);
+
+  row = (Row *) iter->user_data;
+  g_assert (row != NULL);
+
+  switch (column)
+    {
+    case THUNAR_LIST_MODEL_COLUMN_DATE_ACCESSED:
+      g_value_init (value, G_TYPE_STRING);
+      str = thunar_file_get_date_string (row->file, THUNAR_FILE_DATE_ACCESSED);
+      g_value_take_string (value, str);
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED:
+      g_value_init (value, G_TYPE_STRING);
+      str = thunar_file_get_date_string (row->file, THUNAR_FILE_DATE_MODIFIED);
+      g_value_take_string (value, str);
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_FILE:
+      g_value_init (value, THUNAR_TYPE_FILE);
+      g_value_set_object (value, row->file);
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_MIME_TYPE:
+      g_value_init (value, G_TYPE_STRING);
+      mime_info = thunar_file_get_mime_info (row->file);
+      g_value_set_string (value, thunar_vfs_mime_info_get_name (mime_info));
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_NAME:
+      g_value_init (value, G_TYPE_STRING);
+      g_value_set_static_string (value, thunar_file_get_display_name (row->file));
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_PERMISSIONS:
+      g_value_init (value, G_TYPE_STRING);
+      g_value_take_string (value, thunar_file_get_mode_string (row->file));
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_SIZE:
+      g_value_init (value, G_TYPE_STRING);
+      str = thunar_file_get_size_string (row->file);
+      g_value_take_string (value, str);
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_TYPE:
+      g_value_init (value, G_TYPE_STRING);
+      mime_info = thunar_file_get_mime_info (row->file);
+      if (G_UNLIKELY (strcmp (thunar_vfs_mime_info_get_name (mime_info), "inode/symlink") == 0))
+        g_value_set_static_string (value, _("broken link"));
+      else if (G_UNLIKELY (thunar_file_is_symlink (row->file)))
+        g_value_take_string (value, g_strdup_printf (_("link to %s"), thunar_vfs_mime_info_get_comment (mime_info)));
+      else
+        g_value_set_static_string (value, thunar_vfs_mime_info_get_comment (mime_info));
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
+}
+
+
+
+static gboolean
+thunar_list_model_iter_next (GtkTreeModel *model,
+                             GtkTreeIter  *iter)
+{
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (model), FALSE);
+  g_return_val_if_fail (iter->stamp == (THUNAR_LIST_MODEL (model))->stamp, FALSE);
+
+  iter->user_data = ((Row *) iter->user_data)->next;
+  return (iter->user_data != NULL);
+}
+
+
+
+static gboolean
+thunar_list_model_iter_children (GtkTreeModel *model,
+                                 GtkTreeIter  *iter,
+                                 GtkTreeIter  *parent)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (model);
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+
+  if (G_LIKELY (parent == NULL && store->rows != NULL))
+    {
+      iter->stamp = store->stamp;
+      iter->user_data = store->rows;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_list_model_iter_has_child (GtkTreeModel *model,
+                                  GtkTreeIter  *iter)
+{
+  return FALSE;
+}
+
+
+
+static gint
+thunar_list_model_iter_n_children (GtkTreeModel *model,
+                                   GtkTreeIter  *iter)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (model);
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), 0);
+
+  return (iter == NULL) ? store->nrows : 0;
+}
+
+
+
+static gboolean
+thunar_list_model_iter_nth_child (GtkTreeModel *model,
+                                  GtkTreeIter  *iter,
+                                  GtkTreeIter  *parent,
+                                  gint          n)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (model);
+  Row        *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+
+  if (G_UNLIKELY (parent != NULL))
+    return FALSE;
+
+  for (row = store->rows; row != NULL && n > 0; --n, row = row->next)
+    ;
+
+  if (G_LIKELY (row != NULL))
+    {
+      iter->stamp = store->stamp;
+      iter->user_data = row;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_list_model_iter_parent (GtkTreeModel *model,
+                               GtkTreeIter  *iter,
+                               GtkTreeIter  *child)
+{
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_list_model_drag_data_received (GtkTreeDragDest  *dest,
+                                      GtkTreePath      *path,
+                                      GtkSelectionData *data)
+{
+  // TODO: Implement this function
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_list_model_row_drop_possible (GtkTreeDragDest  *dest,
+                                     GtkTreePath      *path,
+                                     GtkSelectionData *data)
+{
+  // TODO: Implement this function
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_list_model_get_sort_column_id (GtkTreeSortable *sortable,
+                                      gint            *sort_column_id,
+                                      GtkSortType     *order)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (sortable);
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+
+  if (store->sort_func == sort_by_mime_type)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_MIME_TYPE;
+  else if (store->sort_func == sort_by_name)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_NAME;
+  else if (store->sort_func == sort_by_permissions)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_PERMISSIONS;
+  else if (store->sort_func == sort_by_size)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_SIZE;
+  else if (store->sort_func == sort_by_date_accessed)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_DATE_ACCESSED;
+  else if (store->sort_func == sort_by_date_modified)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED;
+  else if (store->sort_func == sort_by_type)
+    *sort_column_id = THUNAR_LIST_MODEL_COLUMN_TYPE;
+  else
+    g_assert_not_reached ();
+
+  if (store->sort_sign > 0)
+    *order = GTK_SORT_ASCENDING;
+  else
+    *order = GTK_SORT_DESCENDING;
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_list_model_set_sort_column_id (GtkTreeSortable *sortable,
+                                      gint             sort_column_id,
+                                      GtkSortType      order)
+{
+  ThunarListModel *store = THUNAR_LIST_MODEL (sortable);
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  switch (sort_column_id)
+    {
+    case THUNAR_LIST_MODEL_COLUMN_DATE_ACCESSED:
+      store->sort_func = sort_by_date_accessed;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED:
+      store->sort_func = sort_by_date_modified;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_MIME_TYPE:
+      store->sort_func = sort_by_mime_type;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_NAME:
+      store->sort_func = sort_by_name;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_PERMISSIONS:
+      store->sort_func = sort_by_permissions;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_SIZE:
+      store->sort_func = sort_by_size;
+      break;
+
+    case THUNAR_LIST_MODEL_COLUMN_TYPE:
+      store->sort_func = sort_by_type;
+      break;
+
+    default:
+      g_assert_not_reached ();
+    }
+
+  store->sort_sign = (order == GTK_SORT_ASCENDING) ? 1 : -1;
+
+  /* re-sort the store */
+  thunar_list_model_sort (store);
+
+  /* notify listining parties */
+  gtk_tree_sortable_sort_column_changed (sortable);
+}
+
+
+
+static void
+thunar_list_model_set_default_sort_func (GtkTreeSortable       *sortable,
+                                         GtkTreeIterCompareFunc func,
+                                         gpointer               data,
+                                         GtkDestroyNotify       destroy)
+{
+  g_error ("ThunarListModel has sorting facilities built-in!");
+}
+
+
+
+static void
+thunar_list_model_set_sort_func (GtkTreeSortable       *sortable,
+                                 gint                   sort_column_id,
+                                 GtkTreeIterCompareFunc func,
+                                 gpointer               data,
+                                 GtkDestroyNotify       destroy)
+{
+  g_error ("ThunarListModel has sorting facilities built-in!");
+}
+
+
+
+static gboolean
+thunar_list_model_has_default_sort_func (GtkTreeSortable *sortable)
+{
+  return FALSE;
+}
+
+
+
+static gint
+thunar_list_model_cmp (ThunarListModel *store,
+                       ThunarFile      *a,
+                       ThunarFile      *b)
+{
+  gboolean isdir_a;
+  gboolean isdir_b;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), -1);
+  g_return_val_if_fail (THUNAR_IS_FILE (a), -1);
+  g_return_val_if_fail (THUNAR_IS_FILE (b), -1);
+
+  if (G_LIKELY (store->sort_folders_first))
+    {
+      isdir_a = thunar_file_is_directory (a);
+      isdir_b = thunar_file_is_directory (b);
+
+      if (isdir_a && !isdir_b)
+        return -1;
+      else if (!isdir_a && isdir_b)
+        return 1;
+    }
+
+  return store->sort_func (a, b) * store->sort_sign;
+}
+
+
+
+static gint
+thunar_list_model_cmp_array (gconstpointer a,
+                             gconstpointer b,
+                             gpointer      user_data)
+{
+  return thunar_list_model_cmp (THUNAR_LIST_MODEL (user_data),
+                                ((SortTuple *) a)->row->file,
+                                ((SortTuple *) b)->row->file);
+}
+
+
+
+static gint
+thunar_list_model_cmp_list (gconstpointer a,
+                            gconstpointer b,
+                            gpointer      user_data)
+{
+  return -thunar_list_model_cmp (THUNAR_LIST_MODEL (user_data),
+                                 THUNAR_FILE (a),
+                                 THUNAR_FILE (b));
+}
+
+
+
+static gboolean
+thunar_list_model_remove (ThunarListModel *store,
+                          GtkTreeIter     *iter,
+                          gboolean         silently)
+{
+  GtkTreePath *path;
+  Row         *next;
+  Row         *prev = NULL;
+  Row         *tmp;
+  Row         *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+  g_return_val_if_fail (iter->stamp == store->stamp, FALSE);
+
+  row  = (Row *) iter->user_data;
+  next = row->next;
+  path = thunar_list_model_get_path (GTK_TREE_MODEL (store), iter);
+
+  /* delete data associated with this row */
+  g_signal_handlers_disconnect_matched (G_OBJECT (row->file), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_CLOSURE,
+                                        store->file_changed_id, 0, store->file_changed_closure, NULL, NULL);
+  g_object_unref (row->file);
+
+  /* remove the link from the list */
+  for (tmp = store->rows; tmp != NULL; prev = tmp, tmp = tmp->next)
+    {
+      if (tmp == row)
+        {
+          if (prev != NULL)
+            prev->next = tmp->next;
+          else
+            store->rows = tmp->next;
+
+          tmp->next = NULL;
+          store->nrows -= 1;
+          break;
+        }
+    }
+
+  /* notify other parties */
+  if (G_LIKELY (!silently))
+    {
+      gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), path);
+      g_object_notify (G_OBJECT (store), "num-files");
+    }
+  gtk_tree_path_free (path);
+
+  if (next != NULL)
+    {
+      iter->stamp     = store->stamp;
+      iter->user_data = next;
+      return TRUE;
+    }
+  else
+    {
+      iter->stamp = 0;
+      return FALSE;
+    }
+}
+
+
+
+static void
+thunar_list_model_sort (ThunarListModel *store)
+{
+  GtkTreePath *path;
+  SortTuple   *sort_array;
+  gint        *new_order;
+  gint         n;
+  Row         *row;
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  if (G_UNLIKELY (store->nrows <= 1))
+    return;
+
+  /* be sure to not overuse the stack */
+  if (G_LIKELY (store->nrows < 2000))
+    sort_array = g_newa (SortTuple, store->nrows);
+  else
+    sort_array = g_new (SortTuple, store->nrows);
+
+  /* generate the sort array of tuples */
+  for (n = 0, row = store->rows; n < store->nrows; ++n, row = row->next)
+    {
+      sort_array[n].offset = n;
+      sort_array[n].row = row;
+    }
+
+  /* sort the array using QuickSort */
+  g_qsort_with_data (sort_array, store->nrows, sizeof (SortTuple), thunar_list_model_cmp_array, store);
+
+  /* update our internals and generate the new order */
+  new_order = g_newa (gint, store->nrows);
+  for (n = 0; n < store->nrows - 1; ++n)
+    {
+      new_order[n] = sort_array[n].offset;
+      sort_array[n].row->next = sort_array[n + 1].row;
+    }
+  new_order[n] = sort_array[n].offset;
+  sort_array[n].row->next = NULL;
+  store->rows = sort_array[0].row;
+
+  /* tell the view about the new item order */
+  path = gtk_tree_path_new ();
+  gtk_tree_model_rows_reordered (GTK_TREE_MODEL (store), path, NULL, new_order);
+  gtk_tree_path_free (path);
+
+  /* clean up if we used the heap */
+  if (G_UNLIKELY (store->nrows >= 2000))
+    g_free (sort_array);
+}
+
+
+
+static void
+thunar_list_model_file_changed (ThunarFile      *file,
+                                ThunarListModel *store)
+{
+  GtkTreePath *path;
+  GtkTreeIter  iter;
+  gint         n;
+  Row         *row;
+
+  g_return_if_fail (THUNAR_IS_FILE (file));
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  for (n = 0, row = store->rows; row != NULL; ++n, row = row->next)
+    if (G_UNLIKELY (row->file == file))
+      {
+        iter.stamp = store->stamp;
+        iter.user_data = row;
+
+        /* notify the view that it has to redraw the file */
+        path = gtk_tree_path_new_from_indices (n, -1);
+        gtk_tree_model_row_changed (GTK_TREE_MODEL (store), path, &iter);
+        gtk_tree_path_free (path);
+
+        /* re-sort the model as the file may have changed its name */
+        thunar_list_model_sort (store);
+
+        return;
+      }
+
+  g_assert_not_reached ();
+}
+
+
+
+static void
+thunar_list_model_folder_destroy (ThunarFolder    *folder,
+                                  ThunarListModel *store)
+{
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  thunar_list_model_set_folder (store, NULL);
+
+  // TODO: What to do when the folder is deleted?
+}
+
+
+
+static void
+thunar_list_model_folder_error (ThunarFolder    *folder,
+                                const GError    *error,
+                                ThunarListModel *store)
+{
+  g_return_if_fail (error != NULL);
+  g_return_if_fail (THUNAR_IS_FOLDER (folder));
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  /* forward the error signal */
+  g_signal_emit (G_OBJECT (store), list_model_signals[ERROR], 0, error);
+
+  /* reset the current folder */
+  thunar_list_model_set_folder (store, NULL);
+}
+
+
+
+static void
+thunar_list_model_files_added (ThunarFolder    *folder,
+                               GList           *files,
+                               ThunarListModel *store)
+{
+  GtkTreePath  *path;
+  GtkTreeIter   iter;
+  ThunarFile   *file;
+  gint          index = 0;
+  Row          *row;
+  Row          *prev = NULL;
+
+  // TODO: pre-sort files to get faster insert?!
+  for (; files != NULL; files = files->next)
+    {
+      /* take a reference on that file */
+      file = THUNAR_FILE (files->data);
+      g_object_ref (G_OBJECT (file));
+
+      /* check if the file should be hidden */
+      if (!store->show_hidden && thunar_file_is_hidden (file))
+        {
+          store->hidden = g_list_prepend (store->hidden, file);
+        }
+      else
+        {
+          row = g_chunk_new (Row, store->row_chunk);
+          row->file = file;
+          g_signal_connect_closure_by_id (G_OBJECT (file), store->file_changed_id,
+                                          0, store->file_changed_closure, TRUE);
+
+          /* find the position to insert the file to */
+          if (G_UNLIKELY (store->rows == NULL || thunar_list_model_cmp (store, file, store->rows->file) < 0))
+            {
+              prev        = NULL;
+              index       = 0;
+              row->next   = store->rows;
+              store->rows = row;
+            }
+          else
+            {
+              /* We use a simple optimization here to avoid going through the whole
+               * list if the current file is to be inserted right before or after
+               * the previous item (which is common).
+               */
+              if (G_UNLIKELY (prev == NULL || thunar_list_model_cmp (store, file, prev->file) < 0))
+                {
+                  prev = store->rows;
+                  index = 1;
+                }
+
+              for (; prev->next != NULL; ++index, prev = prev->next)
+                if (thunar_list_model_cmp (store, file, prev->next->file) < 0)
+                  break;
+
+              row->next  = prev->next;
+              prev->next = row;
+            }
+
+          iter.stamp = store->stamp;
+          iter.user_data = row;
+
+          path = gtk_tree_path_new_from_indices (index, -1);
+          gtk_tree_model_row_inserted (GTK_TREE_MODEL (store), path, &iter);
+          gtk_tree_path_free (path);
+
+          store->nrows += 1;
+        }
+    }
+
+  /* number of visible files may have changed */
+  g_object_notify (G_OBJECT (store), "num-files");
+}
+
+
+
+static void
+thunar_list_model_files_removed (ThunarFolder    *folder,
+                                 GList           *files,
+                                 ThunarListModel *store)
+{
+  GtkTreeIter iter;
+  ThunarFile *file;
+  GList      *lp;
+  Row        *row;
+
+  /* drop all the referenced files from the model */
+  for (lp = files; lp != NULL; lp = lp->next)
+    {
+      /* reference the file */
+      file = THUNAR_FILE (lp->data);
+
+      /* check if file is currently shown */
+      for (row = store->rows; row != NULL; row = row->next)
+        if (row->file == file)
+          {
+            iter.stamp = store->stamp;
+            iter.user_data = row;
+            thunar_list_model_remove (store, &iter, FALSE);
+            return;
+          }
+
+      /* file is hidden */
+      g_assert (g_list_find (store->hidden, file) != NULL);
+      store->hidden = g_list_remove (store->hidden, file);
+      g_object_unref (G_OBJECT (file));
+    }
+}
+
+
+
+static gint
+sort_by_date_accessed (const ThunarFile *a,
+                       const ThunarFile *b)
+{
+  ThunarVfsFileTime date_a;
+  ThunarVfsFileTime date_b;
+
+  date_a = thunar_file_get_date (a, THUNAR_FILE_DATE_ACCESSED);
+  date_b = thunar_file_get_date (b, THUNAR_FILE_DATE_ACCESSED);
+
+  if (date_a < date_b)
+    return -1;
+  else if (date_a > date_b)
+    return 1;
+
+  return sort_by_name (a, b);
+}
+
+
+
+static gint
+sort_by_date_modified (const ThunarFile *a,
+                       const ThunarFile *b)
+{
+  ThunarVfsFileTime date_a;
+  ThunarVfsFileTime date_b;
+
+  date_a = thunar_file_get_date (a, THUNAR_FILE_DATE_MODIFIED);
+  date_b = thunar_file_get_date (b, THUNAR_FILE_DATE_MODIFIED);
+
+  if (date_a < date_b)
+    return -1;
+  else if (date_a > date_b)
+    return 1;
+
+  return sort_by_name (a, b);
+}
+
+
+
+static gint
+sort_by_mime_type (const ThunarFile *a,
+                   const ThunarFile *b)
+{
+  ThunarVfsMimeInfo *info_a;
+  ThunarVfsMimeInfo *info_b;
+  gint               result;
+
+  info_a = thunar_file_get_mime_info (a);
+  info_b = thunar_file_get_mime_info (b);
+
+  result = strcasecmp (thunar_vfs_mime_info_get_name (info_a),
+                       thunar_vfs_mime_info_get_name (info_b));
+
+  if (result == 0)
+    result = sort_by_name (a, b);
+
+  return result;
+}
+
+
+
+static gint
+sort_by_name (const ThunarFile *a,
+              const ThunarFile *b)
+{
+  return strcmp (thunar_file_get_display_name (a),
+                 thunar_file_get_display_name (b));
+}
+
+
+
+static gint
+sort_by_permissions (const ThunarFile *a,
+                     const ThunarFile *b)
+{
+  ThunarVfsFileMode mode_a;
+  ThunarVfsFileMode mode_b;
+
+  mode_a = thunar_file_get_mode (a);
+  mode_b = thunar_file_get_mode (b);
+
+  if (mode_a < mode_b)
+    return -1;
+  else if (mode_a > mode_b)
+    return 1;
+
+  return sort_by_name (a, b);
+}
+
+
+
+static gint
+sort_by_size (const ThunarFile *a,
+              const ThunarFile *b)
+{
+  ThunarVfsFileSize size_a;
+  ThunarVfsFileSize size_b;
+
+  size_a = thunar_file_get_size (a);
+  size_b = thunar_file_get_size (b);
+
+  if (size_a < size_b)
+    return -1;
+  else if (size_a > size_b)
+    return 1;
+
+  return sort_by_name (a, b);
+}
+
+
+
+static gint
+sort_by_type (const ThunarFile *a,
+              const ThunarFile *b)
+{
+  ThunarVfsMimeInfo *info_a;
+  ThunarVfsMimeInfo *info_b;
+  gint               result;
+
+  info_a = thunar_file_get_mime_info (a);
+  info_b = thunar_file_get_mime_info (b);
+
+  result = strcasecmp (thunar_vfs_mime_info_get_comment (info_a),
+                       thunar_vfs_mime_info_get_comment (info_b));
+
+  if (result == 0)
+    result = sort_by_name (a, b);
+
+  return result;
+}
+
+
+
+/**
+ * thunar_list_model_new:
+ *
+ * Allocates a new #ThunarListModel not associated with
+ * any #ThunarFolder.
+ *
+ * Return value: the newly allocated #ThunarListModel.
+ **/
+ThunarListModel*
+thunar_list_model_new (void)
+{
+  return g_object_new (THUNAR_TYPE_LIST_MODEL, NULL);
+}
+
+
+
+/**
+ * thunar_list_model_new_with_folder:
+ * @folder : a valid #ThunarFolder object.
+ *
+ * Allocates a new #ThunarListModel instance and associates
+ * it with @folder.
+ *
+ * Return value: the newly created #ThunarListModel instance.
+ **/
+ThunarListModel*
+thunar_list_model_new_with_folder (ThunarFolder *folder)
+{
+  g_return_val_if_fail (THUNAR_IS_FOLDER (folder), NULL);
+
+  /* allocate the new list model */
+  return g_object_new (THUNAR_TYPE_LIST_MODEL,
+                       "folder", folder,
+                       NULL);
+}
+
+
+
+/**
+ * thunar_list_model_get_folder:
+ * @store : a valid #ThunarListModel object.
+ *
+ * Return value: the #ThunarFolder @store is associated with
+ *               or %NULL if @store has no folder.
+ **/
+ThunarFolder*
+thunar_list_model_get_folder (ThunarListModel *store)
+{
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+  return store->folder;
+}
+
+
+
+/**
+ * thunar_list_model_set_folder:
+ * @store  : a valid #ThunarListModel.
+ * @folder : a #ThunarFolder or %NULL.
+ **/
+void
+thunar_list_model_set_folder (ThunarListModel *store,
+                              ThunarFolder    *folder)
+{
+  GtkTreePath *path;
+  GtkTreeIter  iter;
+  ThunarFile  *file;
+  gboolean     has_handler;
+  GList       *files;
+  GList       *lp;
+  Row         *row;
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+  g_return_if_fail (folder == NULL || THUNAR_IS_FOLDER (folder));
+
+  /* check if we're not already using that folder */
+  if (G_UNLIKELY (store->folder == folder))
+    return;
+
+  /* unlink from the previously active folder (if any) */
+  if (G_LIKELY (store->folder != NULL))
+    {
+      /* check if we have any handlers connected for "row-deleted" */
+      has_handler = g_signal_has_handler_pending (G_OBJECT (store), store->row_deleted_id, 0, FALSE);
+
+      /* remove existing entries */
+      path = gtk_tree_path_new ();
+      gtk_tree_path_append_index (path, 0);
+      while (store->nrows > 0)
+        {
+          /* grab the next row */
+          row = store->rows;
+
+          /* delete data associated with this row */
+          g_signal_handlers_disconnect_matched (G_OBJECT (row->file), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_CLOSURE,
+                                                store->file_changed_id, 0, store->file_changed_closure, NULL, NULL);
+          g_object_unref (G_OBJECT (row->file));
+
+          /* remove the row from the list */
+          store->rows = row->next;
+          store->nrows--;
+
+          /* notify the view(s) if they're actually
+           * interested in the "row-deleted" signal.
+           */
+          if (G_UNLIKELY (has_handler))
+            gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), path);
+        }
+      gtk_tree_path_free (path);
+
+      /* reset the row chunk as all rows have been freed now */
+      g_mem_chunk_reset (store->row_chunk);
+
+      /* remove hidden entries */
+      g_list_foreach (store->hidden, (GFunc) g_object_unref, NULL);
+      g_list_free (store->hidden);
+      store->hidden = NULL;
+
+      /* unregister signals and drop the reference */
+      g_signal_handlers_disconnect_matched (G_OBJECT (store->folder), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, store);
+      g_object_unref (G_OBJECT (store->folder));
+    }
+
+  /* ... just to be sure! */
+  g_assert (store->rows == NULL);
+  g_assert (store->nrows == 0);
+
+  /* activate the new folder */
+  store->folder = folder;
+
+  /* connect to the new folder (if any) */
+  if (folder != NULL)
+    {
+      g_object_ref (G_OBJECT (folder));
+
+      /* sort the files _before_ adding them to the store (reverse order -> prepend below) */
+      files = g_list_copy (thunar_folder_get_files (folder));
+      if (G_LIKELY (files != NULL))
+        {
+          files = g_list_sort_with_data (files, thunar_list_model_cmp_list, store);
+
+          /* insert the files */
+          for (lp = files; lp != NULL; lp = lp->next)
+            {
+              /* take a reference on the file */
+              file = THUNAR_FILE (lp->data);
+              g_object_ref (G_OBJECT (file));
+
+              /* check if this file should be shown/hidden */
+              if (!store->show_hidden && thunar_file_is_hidden (file))
+                {
+                  store->hidden = g_list_prepend (store->hidden, file);
+                }
+              else
+                {
+                  row = g_chunk_new (Row, store->row_chunk);
+                  row->file = file;
+                  g_signal_connect_closure_by_id (G_OBJECT (file), store->file_changed_id,
+                                                  0, store->file_changed_closure, TRUE);
+                  row->next = store->rows;
+
+                  store->rows = row;
+                  store->nrows += 1;
+                }
+            }
+
+          /* check if we have any handlers connected for "row-inserted" */
+          if (g_signal_has_handler_pending (G_OBJECT (store), store->row_inserted_id, 0, FALSE))
+            {
+              /* notify other parties only if anyone is actually
+               * interested in the "row-inserted" signal.
+               */
+              path = gtk_tree_path_new ();
+              gtk_tree_path_append_index (path, 0);
+              for (row = store->rows; row != NULL; row = row->next)
+                {
+                  iter.stamp = store->stamp;
+                  iter.user_data = row;
+                  gtk_tree_model_row_inserted (GTK_TREE_MODEL (store), path, &iter);
+                  gtk_tree_path_next (path);
+                }
+              gtk_tree_path_free (path);
+            }
+
+          /* cleanup */
+          g_list_free (files);
+        }
+
+      /* connect signals to the new folder */
+      g_signal_connect (G_OBJECT (store->folder), "destroy",
+                        G_CALLBACK (thunar_list_model_folder_destroy), store);
+      g_signal_connect (G_OBJECT (store->folder), "error",
+                        G_CALLBACK (thunar_list_model_folder_error), store);
+      g_signal_connect (G_OBJECT (store->folder), "files-added",
+                        G_CALLBACK (thunar_list_model_files_added), store);
+      g_signal_connect (G_OBJECT (store->folder), "files-removed",
+                        G_CALLBACK (thunar_list_model_files_removed), store);
+    }
+
+  /* notify listeners that we have a new folder */
+  g_object_freeze_notify (G_OBJECT (store));
+  g_object_notify (G_OBJECT (store), "folder");
+  g_object_notify (G_OBJECT (store), "num-files");
+  g_object_thaw_notify (G_OBJECT (store));
+}
+
+
+
+/**
+ * thunar_list_model_get_folders_first:
+ * @store : a #ThunarListModel.
+ *
+ * Determines whether @store lists folders first.
+ *
+ * Return value: %TRUE if @store lists folders first.
+ **/
+gboolean
+thunar_list_model_get_folders_first (ThunarListModel *store)
+{
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+  return store->sort_folders_first;
+}
+
+
+
+/**
+ * thunar_list_model_set_folders_first:
+ * @store         : a #ThunarListModel.
+ * @folders_first : %TRUE to let @store list folders first.
+ **/
+void
+thunar_list_model_set_folders_first (ThunarListModel *store,
+                                     gboolean         folders_first)
+{
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  /* check if the new setting differs */
+  if ((store->sort_folders_first && folders_first)
+   || (!store->sort_folders_first && !folders_first))
+    return;
+
+  /* apply the new setting (re-sorting the store) */
+  store->sort_folders_first = folders_first;
+  g_object_notify (G_OBJECT (store), "folders-first");
+  thunar_list_model_sort (store);
+}
+
+
+
+/**
+ * thunar_list_model_get_show_hidden:
+ * @store : a #ThunarListModel.
+ *
+ * Return value: %TRUE if hidden files will be shown, else %FALSE.
+ **/
+gboolean
+thunar_list_model_get_show_hidden (ThunarListModel *store)
+{
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), FALSE);
+  return store->show_hidden;
+}
+
+
+
+/**
+ * thunar_list_model_set_show_hidden:
+ * @store       : a #ThunarListModel.
+ * @show_hidden : %TRUE if hidden files should be shown, else %FALSE.
+ **/
+void
+thunar_list_model_set_show_hidden (ThunarListModel *store,
+                                   gboolean         show_hidden)
+{
+  GtkTreePath  *path;
+  GtkTreeIter   iter;
+  ThunarFile   *file;
+  GList        *hidden_rows;
+  GList        *files;
+  GList        *lp;
+  Row          *prev;
+  Row          *row;
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (store));
+
+  /* check if the settings differ */
+  if ((store->show_hidden && show_hidden) || (!store->show_hidden && !show_hidden))
+    return;
+
+  store->show_hidden = show_hidden;
+
+  if (store->show_hidden)
+    {
+      /* merge all hidden elements */
+      for (files = store->hidden; files != NULL; files = files->next)
+        {
+          file = THUNAR_FILE (files->data);
+
+          row = g_chunk_new (Row, store->row_chunk);
+          row->file = file;
+          g_signal_connect_closure_by_id (G_OBJECT (file), store->file_changed_id,
+                                          0, store->file_changed_closure, TRUE);
+
+          if (G_UNLIKELY (store->rows == NULL || thunar_list_model_cmp (store, file, store->rows->file) < 0))
+            {
+              row->next   = store->rows;
+              store->rows = row;
+            }
+          else
+            {
+              for (prev = store->rows; prev->next != NULL; prev = prev->next)
+                if (thunar_list_model_cmp (store, file, prev->next->file) < 0)
+                  break;
+
+              row->next = prev->next;
+              prev->next = row;
+            }
+
+          iter.stamp = store->stamp;
+          iter.user_data = row;
+
+          path = thunar_list_model_get_path (GTK_TREE_MODEL (store), &iter);
+          gtk_tree_model_row_inserted (GTK_TREE_MODEL (store), path, &iter);
+          gtk_tree_path_free (path);
+
+          store->nrows += 1;
+        }
+      g_list_free (store->hidden);
+      store->hidden = NULL;
+    }
+  else
+    {
+      g_assert (store->hidden == NULL);
+
+      /* unmerge all hidden elements */
+      for (hidden_rows = files = NULL, row = store->rows; row != NULL; row = row->next)
+        if (thunar_file_is_hidden (row->file))
+          {
+            hidden_rows = g_list_prepend (hidden_rows, row);
+            files = g_list_prepend (files, g_object_ref (row->file));
+          }
+
+      if (files != NULL)
+        {
+          for (lp = hidden_rows; lp != NULL; lp = lp->next)
+            {
+              iter.stamp = store->stamp;
+              iter.user_data = lp->data;
+              thunar_list_model_remove (store, &iter, FALSE);
+            }
+          g_list_free (hidden_rows);
+
+          store->hidden = files;
+        }
+    }
+
+  /* notify listeners about the new setting */
+  g_object_freeze_notify (G_OBJECT (store));
+  g_object_notify (G_OBJECT (store), "num-files");
+  g_object_notify (G_OBJECT (store), "show-hidden");
+  g_object_thaw_notify (G_OBJECT (store));
+}
+
+
+
+/**
+ * thunar_list_model_get_file:
+ * @store : a #ThunarListModel.
+ * @iter  : a valid #GtkTreeIter for @store.
+ *
+ * Returns the #ThunarFile referred to by @iter. Free
+ * the returned object using #g_object_unref() when
+ * you are done with it.
+ *
+ * Return value: the #ThunarFile.
+ **/
+ThunarFile*
+thunar_list_model_get_file (ThunarListModel *store,
+                            GtkTreeIter     *iter)
+{
+  Row *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+  g_return_val_if_fail (iter->stamp == store->stamp, NULL);
+
+  row = (Row *) iter->user_data;
+
+  g_assert (row != NULL);
+
+  return g_object_ref (row->file);
+}
+
+
+
+/**
+ * thunar_list_model_get_num_files:
+ * @store : a #ThunarListModel.
+ *
+ * Counts the number of visible files for @store, taking into account the
+ * current setting of "show-hidden".
+ *
+ * Return value: ahe number of visible files in @store.
+ **/
+gint
+thunar_list_model_get_num_files (ThunarListModel *store)
+{
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), 0);
+  return store->nrows;
+}
+
+
+
+/**
+ * thunar_list_model_get_paths_for_files:
+ * @store : a #ThunarListModel instance.
+ * @files : a list of #ThunarFile<!---->s.
+ *
+ * Determines the list of #GtkTreePath<!---->s for the #ThunarFile<!---->s
+ * found in the @files list. If a #ThunarFile from the @files list is not
+ * available in @store, no #GtkTreePath will be returned for it. So, in effect,
+ * only #GtkTreePath<!---->s for the subset of @files available in @store will
+ * be returned.
+ *
+ * The caller is responsible to free the returned list using:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #GtkTreePath<!---->s for @files.
+ **/
+GList*
+thunar_list_model_get_paths_for_files (ThunarListModel *store,
+                                       GList           *files)
+{
+  GList *paths = NULL;
+  gint   index = 0;
+  Row   *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+
+  /* find the rows for the given files */
+  for (row = store->rows; row != NULL; ++index, row = row->next)
+    if (g_list_find (files, row->file) != NULL)
+      paths = g_list_prepend (paths, gtk_tree_path_new_from_indices (index, -1));
+
+  return paths;
+}
+
+
+
+/**
+ * thunar_list_model_get_paths_for_pattern:
+ * @store   : a #ThunarListModel instance.
+ * @pattern : the pattern to match.
+ *
+ * Looks up all rows in the @store that match @pattern and returns
+ * a list of #GtkTreePath<!---->s corresponding to the rows.
+ *
+ * The caller is responsible to free the returned list using:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #GtkTreePath<!---->s that match @pattern.
+ **/
+GList*
+thunar_list_model_get_paths_for_pattern (ThunarListModel *store,
+                                         const gchar     *pattern)
+{
+  GPatternSpec *pspec;
+  GList        *paths = NULL;
+  gint          index = 0;
+  Row          *row;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+  g_return_val_if_fail (g_utf8_validate (pattern, -1, NULL), NULL);
+
+  /* compile the pattern */
+  pspec = g_pattern_spec_new (pattern);
+
+  /* find all rows that match the given pattern */
+  for (row = store->rows; row != NULL; ++index, row = row->next)
+    if (g_pattern_match_string (pspec, thunar_file_get_display_name (row->file)))
+      paths = g_list_prepend (paths, gtk_tree_path_new_from_indices (index, -1));
+
+  /* release the pattern */
+  g_pattern_spec_free (pspec);
+
+  return paths;
+}
+
+
+
+/**
+ * thunar_list_model_get_statusbar_text:
+ * @store          : a #ThunarListModel instance.
+ * @selected_items : the list of selected items (as GtkTreePath's).
+ *
+ * Generates the statusbar text for @store with the given
+ * @selected_items.
+ *
+ * This function is used by the #ThunarStandardView (and thereby
+ * implicitly by #ThunarIconView and #ThunarDetailsView) to
+ * calculate the text to display in the statusbar for a given
+ * file selection.
+ *
+ * The caller is reponsible to free the returned text using
+ * g_free() when it's no longer needed.
+ *
+ * Return value: the statusbar text for @store with the given
+ *               @selected_items.
+ **/
+gchar*
+thunar_list_model_get_statusbar_text (ThunarListModel *store,
+                                      GList           *selected_items)
+{
+  ThunarVfsMimeInfo *mime_info;
+  ThunarVfsFileSize  size_summary;
+  ThunarVfsFileSize  size;
+  ThunarVfsVolume   *volume;
+  GtkTreeIter        iter;
+  ThunarFile        *file;
+  GList             *lp;
+  gchar             *size_string;
+  gchar             *text;
+  gint               n;
+
+  g_return_val_if_fail (THUNAR_IS_LIST_MODEL (store), NULL);
+
+  if (selected_items == NULL)
+    {
+      /* try to determine a file for the current folder */
+      file = (store->folder != NULL) ? thunar_folder_get_corresponding_file (store->folder) : NULL;
+      volume = (file != NULL) ? thunar_file_get_volume (file, store->volume_manager) : NULL;
+
+      if (G_LIKELY (volume != NULL && thunar_vfs_volume_get_free_space (volume, &size)))
+        {
+          size_string = thunar_vfs_humanize_size (size, NULL, 0);
+          text = g_strdup_printf (ngettext ("%d item, Free space: %s", "%d items, Free space: %s", store->nrows), store->nrows, size_string);
+          g_free (size_string);
+        }
+      else
+        {
+          text = g_strdup_printf (ngettext ("%d item", "%d items", store->nrows), store->nrows);
+        }
+    }
+  else if (selected_items->next == NULL)
+    {
+      /* resolve the iter for the single path */
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, selected_items->data);
+
+      /* get the file for the given iter */
+      file = ((Row *) iter.user_data)->file;
+
+      /* calculate the text to be displayed */
+      mime_info = thunar_file_get_mime_info (file);
+      size_string = thunar_file_get_size_string (file);
+      if (G_UNLIKELY (strcmp (thunar_vfs_mime_info_get_name (mime_info), "inode/symlink") == 0))
+        {
+          text = g_strdup_printf (_("\"%s\" broken link"), thunar_file_get_display_name (file));
+        }
+      else if (G_UNLIKELY (thunar_file_is_symlink (file)))
+        {
+          text = g_strdup_printf (_("\"%s\" (%s) link to %s"), thunar_file_get_display_name (file),
+                                  size_string, thunar_vfs_mime_info_get_comment (mime_info));
+        }
+      else
+        {
+          text = g_strdup_printf (_("\"%s\" (%s) %s"), thunar_file_get_display_name (file),
+                                  size_string, thunar_vfs_mime_info_get_comment (mime_info));
+        }
+      g_free (size_string);
+    }
+  else
+    {
+      /* sum up all sizes */
+      for (lp = selected_items, n = 0, size_summary = 0; lp != NULL; lp = lp->next, ++n)
+        {
+          gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, lp->data);
+          size_summary += thunar_file_get_size (((Row *) iter.user_data)->file);
+        }
+
+      if (size_summary > 0)
+        {
+          size_string = thunar_vfs_humanize_size (size_summary, NULL, 0);
+          text = g_strdup_printf (ngettext ("%d item selected", "%d items selected (%s)", n), n, size_string);
+          g_free (size_string);
+        }
+      else
+        {
+          text = g_strdup_printf (ngettext ("%d item selected", "%d items selected", n), n);
+        }
+    }
+
+  return text;
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-list-model.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,88 @@
+/* $Id: thunar-list-model.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LIST_MODEL_H__
+#define __THUNAR_LIST_MODEL_H__
+
+#include <thunar/thunar-folder.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarListModelClass ThunarListModelClass;
+typedef struct _ThunarListModel      ThunarListModel;
+
+#define THUNAR_TYPE_LIST_MODEL            (thunar_list_model_get_type ())
+#define THUNAR_LIST_MODEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LIST_MODEL, ThunarListModel))
+#define THUNAR_LIST_MODEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_LIST_MODEL, ThunarListModelClass))
+#define THUNAR_IS_LIST_MODEL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LIST_MODEL))
+#define THUNAR_IS_LIST_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_LIST_MODEL))
+#define THUNAR_LIST_MODEL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_LIST_MODEL, ThunarListModelClass))
+
+/**
+ * ThunarListModelColumn:
+ *
+ * Columns exported by #ThunarListModel using the #GtkTreeModel
+ * interface.
+ **/
+typedef enum
+{
+  THUNAR_LIST_MODEL_COLUMN_DATE_ACCESSED,
+  THUNAR_LIST_MODEL_COLUMN_DATE_MODIFIED,
+  THUNAR_LIST_MODEL_COLUMN_FILE,
+  THUNAR_LIST_MODEL_COLUMN_MIME_TYPE,
+  THUNAR_LIST_MODEL_COLUMN_NAME,
+  THUNAR_LIST_MODEL_COLUMN_PERMISSIONS,
+  THUNAR_LIST_MODEL_COLUMN_SIZE,
+  THUNAR_LIST_MODEL_COLUMN_TYPE,
+  THUNAR_LIST_MODEL_N_COLUMNS,
+} ThunarListModelColumn;
+
+GType            thunar_list_model_get_type               (void) G_GNUC_CONST;
+
+ThunarListModel *thunar_list_model_new                    (void);
+ThunarListModel *thunar_list_model_new_with_folder        (ThunarFolder     *folder);
+
+ThunarFolder    *thunar_list_model_get_folder             (ThunarListModel  *store);
+void             thunar_list_model_set_folder             (ThunarListModel  *store,
+                                                           ThunarFolder     *folder);
+
+gboolean         thunar_list_model_get_folders_first      (ThunarListModel  *store);
+void             thunar_list_model_set_folders_first      (ThunarListModel  *store,
+                                                           gboolean          folders_first);
+
+gboolean         thunar_list_model_get_show_hidden        (ThunarListModel  *store);
+void             thunar_list_model_set_show_hidden        (ThunarListModel  *store,
+                                                           gboolean          show_hidden);
+
+ThunarFile      *thunar_list_model_get_file               (ThunarListModel  *store,
+                                                           GtkTreeIter      *iter);
+
+gint             thunar_list_model_get_num_files          (ThunarListModel  *store);
+
+GList           *thunar_list_model_get_paths_for_files    (ThunarListModel  *store,
+                                                           GList            *files);
+GList           *thunar_list_model_get_paths_for_pattern  (ThunarListModel  *store,
+                                                           const gchar      *pattern);
+
+gchar           *thunar_list_model_get_statusbar_text     (ThunarListModel  *store,
+                                                           GList            *selected_items);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LIST_MODEL_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,85 @@
+/* $Id: thunar-location-bar.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-location-bar.h>
+
+
+
+GType
+thunar_location_bar_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarLocationBarIface),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarLocationBar",
+                                     &info, 0);
+
+      g_type_interface_add_prerequisite (type, THUNAR_TYPE_NAVIGATOR);
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunar_location_bar_accept_focus:
+ * @location_bar : a #ThunarLocationBar.
+ *
+ * If the implementation of the #ThunarLocationBar interface
+ * supports entering a location into a text widget, then the
+ * text widget will be focused and the method will return
+ * %TRUE. The #ThunarLocationEntry is an example for such
+ * an implementation.
+ *
+ * Else if the implementation offers no way to enter a new
+ * location as text, it will simply return %FALSE here. The
+ * #ThunarLocationButtons class is an example for such an
+ * implementation.
+ *
+ * Return value: %TRUE if the @location_bar gave focus to
+ *               a text entry widget provided by @location_bar,
+ *               else %FALSE.
+ **/
+gboolean
+thunar_location_bar_accept_focus (ThunarLocationBar *location_bar)
+{
+  g_return_val_if_fail (THUNAR_IS_LOCATION_BAR (location_bar), FALSE);
+  return (*THUNAR_LOCATION_BAR_GET_IFACE (location_bar)->accept_focus) (location_bar);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-bar.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,49 @@
+/* $Id: thunar-location-bar.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LOCATION_BAR_H__
+#define __THUNAR_LOCATION_BAR_H__
+
+#include <thunar/thunar-navigator.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarLocationBarIface ThunarLocationBarIface;
+typedef struct _ThunarLocationBar      ThunarLocationBar;
+
+#define THUNAR_TYPE_LOCATION_BAR            (thunar_location_bar_get_type ())
+#define THUNAR_LOCATION_BAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LOCATION_BAR, ThunarLocationBar))
+#define THUNAR_IS_LOCATION_BAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LOCATION_BAR))
+#define THUNAR_LOCATION_BAR_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_TYPE_LOCATION_BAR, ThunarLocationBarIface))
+
+struct _ThunarLocationBarIface
+{
+  GTypeInterface __parent__;
+
+  /* virtual methods */
+  gboolean (*accept_focus) (ThunarLocationBar *location_bar);
+};
+
+GType    thunar_location_bar_get_type     (void) G_GNUC_CONST;
+
+gboolean thunar_location_bar_accept_focus (ThunarLocationBar *location_bar);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LOCATION_BAR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1289 @@
+/* $Id: thunar-location-buttons.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ *
+ * Based on code written by Jonathan Blandford <jrb at gnome.org> for
+ * Red Hat, Inc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-location-buttons.h>
+
+
+
+#define THUNAR_LOCATION_BUTTONS_SCROLL_TIMEOUT  (200)
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CURRENT_DIRECTORY,
+};
+
+
+
+static void        thunar_location_buttons_class_init             (ThunarLocationButtonsClass *klass);
+static void        thunar_location_buttons_navigator_init         (ThunarNavigatorIface       *iface);
+static void        thunar_location_buttons_location_bar_init      (ThunarLocationBarIface     *iface);
+static void        thunar_location_buttons_init                   (ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_finalize               (GObject                    *object);
+static void        thunar_location_buttons_get_property           (GObject                    *object,
+                                                                   guint                       prop_id,
+                                                                   GValue                     *value,
+                                                                   GParamSpec                 *pspec);
+static void        thunar_location_buttons_set_property           (GObject                    *object,
+                                                                   guint                       prop_id,
+                                                                   const GValue               *value,
+                                                                   GParamSpec                 *pspec);
+static ThunarFile *thunar_location_buttons_get_current_directory  (ThunarNavigator            *navigator);
+static void        thunar_location_buttons_set_current_directory  (ThunarNavigator            *navigator,
+                                                                   ThunarFile                 *current_directory);
+static gboolean    thunar_location_buttons_accept_focus           (ThunarLocationBar          *location_bar);
+static void        thunar_location_buttons_unmap                  (GtkWidget                  *widget);
+static void        thunar_location_buttons_size_request           (GtkWidget                  *widget,
+                                                                   GtkRequisition             *requisition);
+static void        thunar_location_buttons_size_allocate          (GtkWidget                  *widget,
+                                                                   GtkAllocation              *allocation);
+static void        thunar_location_buttons_state_changed          (GtkWidget                  *widget,
+                                                                   GtkStateType                previous_state);
+static void        thunar_location_buttons_style_set              (GtkWidget                  *widget,
+                                                                   GtkStyle                   *previous_style);
+static void        thunar_location_buttons_grab_notify            (GtkWidget                  *widget,
+                                                                   gboolean                    was_grabbed);
+static void        thunar_location_buttons_add                    (GtkContainer               *container,
+                                                                   GtkWidget                  *widget);
+static void        thunar_location_buttons_remove                 (GtkContainer               *container,
+                                                                   GtkWidget                  *widget);
+static void        thunar_location_buttons_forall                 (GtkContainer               *container,
+                                                                   gboolean                    include_internals,
+                                                                   GtkCallback                 callback,
+                                                                   gpointer                    callback_data);
+static GtkWidget  *thunar_location_buttons_make_button            (ThunarLocationButtons      *buttons,
+                                                                   ThunarFile                 *file);
+static void        thunar_location_buttons_remove_1               (GtkContainer               *container,
+                                                                   GtkWidget                  *widget);
+static gboolean    thunar_location_buttons_scroll_timeout         (gpointer                    user_data);
+static void        thunar_location_buttons_scroll_timeout_destroy (gpointer                    user_data);
+static void        thunar_location_buttons_stop_scrolling         (ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_update_sliders         (ThunarLocationButtons      *buttons);
+static gboolean    thunar_location_buttons_slider_button_press    (GtkWidget                  *button,
+                                                                   GdkEventButton             *event,
+                                                                   ThunarLocationButtons      *buttons);
+static gboolean    thunar_location_buttons_slider_button_release  (GtkWidget                  *button,
+                                                                   GdkEventButton             *event,
+                                                                   ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_scroll_left            (GtkWidget                  *button,
+                                                                   ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_scroll_right           (GtkWidget                  *button,
+                                                                   ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_clicked                (GtkWidget                  *button,
+                                                                   ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_drag_data_get          (GtkWidget                  *button,
+                                                                   GdkDragContext             *context,
+                                                                   GtkSelectionData           *selection_data,
+                                                                   guint                       info,
+                                                                   guint                       time,
+                                                                   ThunarLocationButtons      *buttons);
+static void        thunar_location_buttons_drag_leave             (GtkWidget                  *button,
+                                                                   GdkDragContext             *context,
+                                                                   guint                       time,
+                                                                   ThunarLocationButtons      *buttons);
+static gboolean    thunar_location_buttons_drag_motion            (GtkWidget                  *button,
+                                                                   GdkDragContext             *context,
+                                                                   gint                        x,
+                                                                   gint                        y,
+                                                                   guint                       time,
+                                                                   ThunarLocationButtons      *buttons);
+static gboolean    thunar_location_buttons_enter_timeout          (gpointer                    user_data);
+static void        thunar_location_buttons_enter_timeout_destroy  (gpointer                    user_data);
+
+
+
+struct _ThunarLocationButtonsClass
+{
+  GtkContainerClass __parent__;
+};
+
+struct _ThunarLocationButtons
+{
+  GtkContainer __parent__;
+
+  GtkWidget   *left_slider;
+  GtkWidget   *right_slider;
+
+  ThunarFile  *current_directory;
+
+  gint         slider_width;
+  gboolean     ignore_click : 1;
+
+  GList       *list;
+  GList       *first_scrolled_button;
+
+  gint         scroll_timeout_id;
+
+  GtkWidget   *enter_button;
+  gint         enter_timeout_id;
+};
+
+
+static GQuark gtk_label_quark = 0;
+static GQuark thunar_file_quark = 0;
+
+static const GtkTargetEntry drag_targets[] =
+{
+  { "text/uri-list", 0, 0 },
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarLocationButtons,
+                         thunar_location_buttons,
+                         GTK_TYPE_CONTAINER,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_NAVIGATOR,
+                                                thunar_location_buttons_navigator_init)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_LOCATION_BAR,
+                                                thunar_location_buttons_location_bar_init));
+
+
+
+static void
+thunar_location_buttons_class_init (ThunarLocationButtonsClass *klass)
+{
+  GtkContainerClass *gtkcontainer_class;
+  GtkWidgetClass    *gtkwidget_class;
+  GObjectClass      *gobject_class;
+
+  gtk_label_quark = g_quark_from_static_string ("gtk-label");
+  thunar_file_quark = g_quark_from_static_string ("thunar-file");
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_location_buttons_finalize;
+  gobject_class->get_property = thunar_location_buttons_get_property;
+  gobject_class->set_property = thunar_location_buttons_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->unmap = thunar_location_buttons_unmap;
+  gtkwidget_class->size_request = thunar_location_buttons_size_request;
+  gtkwidget_class->size_allocate = thunar_location_buttons_size_allocate;
+  gtkwidget_class->state_changed = thunar_location_buttons_state_changed;
+  gtkwidget_class->style_set = thunar_location_buttons_style_set;
+  gtkwidget_class->grab_notify = thunar_location_buttons_grab_notify;
+
+  gtkcontainer_class = GTK_CONTAINER_CLASS (klass);
+  gtkcontainer_class->add = thunar_location_buttons_add;
+  gtkcontainer_class->remove = thunar_location_buttons_remove;
+  gtkcontainer_class->forall = thunar_location_buttons_forall;
+
+  g_object_class_override_property (gobject_class,
+                                    PROP_CURRENT_DIRECTORY,
+                                    "current-directory");
+
+  /**
+   * ThunarLocationButtons:spacing:
+   *
+   * The amount of space between the path buttons.
+   **/
+  gtk_widget_class_install_style_property (gtkwidget_class,
+                                           g_param_spec_int ("spacing",
+                                                             _("Spacing"),
+                                                             _("The amount of space between the path buttons"),
+                                                             0, G_MAXINT, 3,
+                                                             G_PARAM_READABLE));
+}
+
+
+
+static void
+thunar_location_buttons_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_location_buttons_get_current_directory;
+  iface->set_current_directory = thunar_location_buttons_set_current_directory;
+}
+
+
+
+static void
+thunar_location_buttons_location_bar_init (ThunarLocationBarIface *iface)
+{
+  iface->accept_focus = thunar_location_buttons_accept_focus;
+}
+
+
+
+static void
+thunar_location_buttons_init (ThunarLocationButtons *buttons)
+{
+  GtkWidget *arrow;
+
+  GTK_WIDGET_SET_FLAGS (buttons, GTK_NO_WINDOW);
+  gtk_widget_set_redraw_on_allocate (GTK_WIDGET (buttons), FALSE);
+
+  buttons->enter_timeout_id = -1;
+  buttons->scroll_timeout_id = -1;
+
+  gtk_widget_push_composite_child ();
+
+  buttons->left_slider = gtk_button_new ();
+  g_signal_connect (G_OBJECT (buttons->left_slider), "button-press-event",
+                    G_CALLBACK (thunar_location_buttons_slider_button_press), buttons);
+  g_signal_connect (G_OBJECT (buttons->left_slider), "button-release-event",
+                    G_CALLBACK (thunar_location_buttons_slider_button_release), buttons);
+  g_signal_connect (G_OBJECT (buttons->left_slider), "clicked",
+                    G_CALLBACK (thunar_location_buttons_scroll_left), buttons);
+  gtk_container_add (GTK_CONTAINER (buttons), buttons->left_slider);
+  gtk_widget_show (buttons->left_slider);
+
+  arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_OUT);
+  gtk_container_add (GTK_CONTAINER (buttons->left_slider), arrow);
+  gtk_widget_show (arrow);
+
+  buttons->right_slider = gtk_button_new ();
+  g_signal_connect (G_OBJECT (buttons->right_slider), "button-press-event",
+                    G_CALLBACK (thunar_location_buttons_slider_button_press), buttons);
+  g_signal_connect (G_OBJECT (buttons->right_slider), "button-release-event",
+                    G_CALLBACK (thunar_location_buttons_slider_button_release), buttons);
+  g_signal_connect (G_OBJECT (buttons->right_slider), "clicked",
+                    G_CALLBACK (thunar_location_buttons_scroll_right), buttons);
+  gtk_container_add (GTK_CONTAINER (buttons), buttons->right_slider);
+  gtk_widget_show (buttons->right_slider);
+
+  arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_OUT);
+  gtk_container_add (GTK_CONTAINER (buttons->right_slider), arrow);
+  gtk_widget_show (arrow);
+
+  gtk_widget_pop_composite_child ();
+}
+
+
+
+static void
+thunar_location_buttons_finalize (GObject *object)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (object);
+
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+
+  /* be sure to cancel any enter timeout */
+  if (G_UNLIKELY (buttons->enter_timeout_id >= 0))
+    g_source_remove (buttons->enter_timeout_id);
+
+  /* be sure to cancel the scrolling */
+  thunar_location_buttons_stop_scrolling (buttons);
+
+  /* release from the current_directory */
+  thunar_navigator_set_current_directory (THUNAR_NAVIGATOR (buttons), NULL);
+
+  G_OBJECT_CLASS (thunar_location_buttons_parent_class)->finalize (object);
+}
+
+
+
+static void
+thunar_location_buttons_get_property (GObject    *object,
+                                      guint       prop_id,
+                                      GValue     *value,
+                                      GParamSpec *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (navigator));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_location_buttons_set_property (GObject      *object,
+                                      guint         prop_id,
+                                      const GValue *value,
+                                      GParamSpec   *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (navigator, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarFile*
+thunar_location_buttons_get_current_directory (ThunarNavigator *navigator)
+{
+  g_return_val_if_fail (THUNAR_IS_LOCATION_BUTTONS (navigator), NULL);
+  return THUNAR_LOCATION_BUTTONS (navigator)->current_directory;
+}
+
+
+
+static void
+thunar_location_buttons_set_current_directory (ThunarNavigator *navigator,
+                                               ThunarFile      *current_directory)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (navigator);
+  ThunarFile            *file_parent;
+  ThunarFile            *file;
+  GtkWidget             *button;
+  GList                 *lp;
+
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+  g_return_if_fail (current_directory == NULL || THUNAR_IS_FILE (current_directory));
+
+  /* verify that we're not already using the new directory */
+  if (G_UNLIKELY (buttons->current_directory == current_directory))
+    return;
+
+  /* check if we already have a button for that directory */
+  for (lp = buttons->list; lp != NULL; lp = lp->next)
+    if (g_object_get_qdata (G_OBJECT (lp->data), thunar_file_quark) == current_directory)
+      break;
+
+  /* if we already have a button for that directory, just activate it */
+  if (G_UNLIKELY (lp != NULL))
+    {
+      /* fake a "clicked" event for that button */
+      gtk_button_clicked (GTK_BUTTON (lp->data));
+    }
+  else
+    {
+      /* regenerate the button list */
+      if (G_LIKELY (buttons->current_directory != NULL))
+        {
+          g_object_unref (G_OBJECT (buttons->current_directory));
+
+          /* remove all buttons */
+          while (buttons->list != NULL)
+            gtk_container_remove (GTK_CONTAINER (buttons), buttons->list->data);
+
+          /* clear the first scrolled button state */
+          buttons->first_scrolled_button = NULL;
+        }
+
+      buttons->current_directory = current_directory;
+
+      if (G_LIKELY (current_directory != NULL))
+        {
+          g_object_ref (G_OBJECT (current_directory));
+
+          gtk_widget_push_composite_child ();
+
+          /* add the new buttons */
+          for (file = current_directory; file != NULL; file = file_parent)
+            {
+              button = thunar_location_buttons_make_button (buttons, file);
+              buttons->list = g_list_append (buttons->list, button);
+              gtk_container_add (GTK_CONTAINER (buttons), button);
+              gtk_widget_show (button);
+
+              /* we use 'Home' as possible root, as well as real root nodes */
+              if (!thunar_file_is_home (file) && !thunar_file_is_root (file))
+                file_parent = thunar_file_get_parent (file, NULL);
+              else 
+                file_parent = NULL;
+
+              if (G_LIKELY (file != current_directory))
+                g_object_unref (G_OBJECT (file));
+            }
+
+          gtk_widget_pop_composite_child ();
+        }
+    }
+
+  g_object_notify (G_OBJECT (buttons), "current-directory");
+}
+
+
+
+static gboolean
+thunar_location_buttons_accept_focus (ThunarLocationBar *location_bar)
+{
+  return FALSE;
+}
+
+
+
+static void
+thunar_location_buttons_unmap (GtkWidget *widget)
+{
+  /* be sure to stop the scroll timer before the buttons are unmapped */
+  thunar_location_buttons_stop_scrolling (THUNAR_LOCATION_BUTTONS (widget));
+
+  /* do the real unmap */
+  GTK_WIDGET_CLASS (thunar_location_buttons_parent_class)->unmap (widget);
+}
+
+
+
+static void
+thunar_location_buttons_size_request (GtkWidget      *widget,
+                                      GtkRequisition *requisition)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (widget);
+  GtkRequisition         child_requisition;
+  GList                 *lp;
+  gint                   spacing;
+
+  gtk_widget_style_get (GTK_WIDGET (buttons),
+                        "spacing", &spacing,
+                        NULL);
+
+  requisition->width = 0;
+  requisition->height = 0;
+
+  /* calculate the size of the biggest button */
+  for (lp = buttons->list; lp != NULL; lp = lp->next)
+    {
+      gtk_widget_size_request (GTK_WIDGET (lp->data), &child_requisition);
+      requisition->width = MAX (child_requisition.width, requisition->width);
+      requisition->height = MAX (child_requisition.height, requisition->height);
+    }
+
+  /* add space for the sliders if we have more than one path */
+  buttons->slider_width = MIN (requisition->height * 2 / 3 + 5, requisition->height);
+  if (buttons->list != NULL && buttons->list->next != NULL)
+    requisition->width += (spacing + buttons->slider_width) * 2;
+
+  gtk_widget_size_request (buttons->left_slider, &child_requisition);
+  gtk_widget_size_request (buttons->right_slider, &child_requisition);
+
+  requisition->width += GTK_CONTAINER (widget)->border_width * 2;
+  requisition->height += GTK_CONTAINER (widget)->border_width * 2;
+
+  widget->requisition = *requisition;
+}
+
+
+
+static void
+thunar_location_buttons_size_allocate (GtkWidget     *widget,
+                                       GtkAllocation *allocation)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (widget);
+  GtkTextDirection       direction;
+  GtkAllocation          child_allocation;
+  GtkWidget             *child;
+  gboolean               need_sliders = FALSE;
+  gboolean               reached_end;
+  GList                 *first_button;
+  GList                 *lp;
+  gint                   left_slider_offset = 0;
+  gint                   right_slider_offset = 0;
+  gint                   allocation_width;
+  gint                   border_width;
+  gint                   slider_space;
+  gint                   spacing;
+  gint                   width;
+
+  gtk_widget_style_get (GTK_WIDGET (buttons),
+                        "spacing", &spacing,
+                        NULL);
+
+  widget->allocation = *allocation;
+
+  /* if no path is set, we don't have to allocate anything */
+  if (G_UNLIKELY (buttons->list == NULL))
+    return;
+
+  direction = gtk_widget_get_direction (widget);
+  border_width = GTK_CONTAINER (buttons)->border_width;
+  allocation_width = allocation->width - 2 * border_width;
+
+  /* check if we need to display the sliders */
+  width = GTK_WIDGET (buttons->list->data)->requisition.width;
+  for (lp = buttons->list->next; lp != NULL; lp = lp->next)
+    width += GTK_WIDGET (lp->data)->requisition.width + spacing;
+
+  if (width <= allocation_width)
+    {
+      first_button = g_list_last (buttons->list);
+    }
+  else
+    {
+      reached_end = FALSE;
+      slider_space = 2 * (spacing + buttons->slider_width);
+
+      if (buttons->first_scrolled_button != NULL)
+        first_button = buttons->first_scrolled_button;
+      else
+        first_button = buttons->list;
+      need_sliders = TRUE;
+
+      width = GTK_WIDGET (first_button->data)->requisition.width;
+      for (lp = first_button->prev; lp != NULL && !reached_end; lp = lp->prev)
+        {
+          child = lp->data;
+          if (width + child->requisition.width + spacing + slider_space + allocation_width)
+            reached_end = TRUE;
+          else
+            width += child->requisition.width + spacing;
+        }
+
+      while (first_button->next != NULL && !reached_end)
+        {
+          child = first_button->data;
+          if (width + child->requisition.width + spacing + slider_space > allocation_width)
+            {
+              reached_end = TRUE;
+            }
+          else
+            {
+              width += child->requisition.width + spacing;
+              first_button = first_button->next;
+            }
+        }
+    }
+
+  /* Now we allocate space to the buttons */
+  child_allocation.y = allocation->y + border_width;
+  child_allocation.height = MAX (1, allocation->height - border_width * 2);
+
+  if (G_UNLIKELY (direction == GTK_TEXT_DIR_RTL))
+    {
+      child_allocation.x = allocation->x + allocation->width - border_width;
+      if (need_sliders)
+        {
+          child_allocation.x -= spacing + buttons->slider_width;
+          left_slider_offset = allocation->width - border_width - buttons->slider_width;
+        }
+    }
+  else
+    {
+      child_allocation.x = allocation->x + border_width;
+      if (need_sliders)
+        {
+          left_slider_offset = border_width;
+          child_allocation.x += spacing + buttons->slider_width;
+        }
+    }
+
+  for (lp = first_button; lp != NULL; lp = lp->prev)
+    {
+      child = lp->data;
+
+      child_allocation.width = child->requisition.width;
+      if (G_UNLIKELY (direction == GTK_TEXT_DIR_RTL))
+        child_allocation.x -= child_allocation.width;
+
+      /* check to see if we don't have any more space to allocate buttons */
+      if (need_sliders && direction == GTK_TEXT_DIR_RTL)
+        {
+          if (child_allocation.x - spacing - buttons->slider_width < widget->allocation.x + border_width)
+            break;
+        }
+      else if (need_sliders && direction == GTK_TEXT_DIR_LTR)
+        {
+          if (child_allocation.x + child_allocation.width + spacing + buttons->slider_width > widget->allocation.x + border_width + allocation_width)
+            break;
+        }
+
+      gtk_widget_set_child_visible (GTK_WIDGET (lp->data), TRUE);
+      gtk_widget_size_allocate (child, &child_allocation);
+
+      if (direction == GTK_TEXT_DIR_RTL)
+        {
+          child_allocation.x -= spacing;
+          right_slider_offset = border_width;
+        }
+      else
+        {
+          child_allocation.x += child_allocation.width + spacing;
+          right_slider_offset = allocation->width - border_width - buttons->slider_width;
+        }
+    }
+
+  /* now we go hide all the buttons that don't fit */
+  for (; lp != NULL; lp = lp->prev)
+    gtk_widget_set_child_visible (GTK_WIDGET (lp->data), FALSE);
+  for (lp = first_button->next; lp != NULL; lp = lp->next)
+    gtk_widget_set_child_visible (GTK_WIDGET (lp->data), FALSE);
+
+  if (need_sliders)
+    {
+      child_allocation.width = buttons->slider_width;
+      child_allocation.x = left_slider_offset + allocation->x;
+      gtk_widget_size_allocate (buttons->left_slider, &child_allocation);
+      gtk_widget_set_child_visible (buttons->left_slider, TRUE);
+      gtk_widget_show_all (buttons->left_slider);
+
+      child_allocation.x = right_slider_offset + allocation->x;
+      gtk_widget_size_allocate (buttons->right_slider, &child_allocation);
+      gtk_widget_set_child_visible (buttons->right_slider, TRUE);
+      gtk_widget_show_all (buttons->right_slider);
+
+      thunar_location_buttons_update_sliders (buttons);
+    }
+  else
+    {
+      gtk_widget_set_child_visible (buttons->left_slider, FALSE);
+      gtk_widget_set_child_visible (buttons->right_slider, FALSE);
+    }
+}
+
+
+
+static void
+thunar_location_buttons_state_changed (GtkWidget   *widget,
+                                       GtkStateType previous_state)
+{
+  if (!GTK_WIDGET_IS_SENSITIVE (widget))
+    thunar_location_buttons_stop_scrolling (THUNAR_LOCATION_BUTTONS (widget));
+}
+
+
+
+static void
+thunar_location_buttons_style_set (GtkWidget *widget,
+                                   GtkStyle  *previous_style)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (widget);
+  ThunarIconFactory     *icon_factory;
+  GtkIconTheme          *icon_theme;
+  ThunarFile            *file;
+  GdkPixbuf             *icon;
+  GList                 *children;
+  GList                 *lp;
+  gint                   size;
+
+  if (G_LIKELY (GTK_WIDGET_REALIZED (widget)))
+    {
+      /* lookup the icon size for buttons */
+      gtk_icon_size_lookup (GTK_ICON_SIZE_BUTTON, &size, &size);
+
+      /* determine the icon factory to use */
+      icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+      icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+      /* update the icons for every button */
+      for (lp = buttons->list; lp != NULL; lp = lp->next)
+        {
+          file = g_object_get_qdata (G_OBJECT (lp->data), thunar_file_quark);
+          children = gtk_container_get_children (GTK_CONTAINER (GTK_BIN (lp->data)->child));
+          icon = thunar_icon_factory_load_file_icon (icon_factory, file, THUNAR_FILE_ICON_STATE_DEFAULT, size);
+          gtk_drag_source_set_icon_pixbuf (GTK_WIDGET (lp->data), icon);
+          gtk_image_set_from_pixbuf (GTK_IMAGE (children->data), icon);
+          g_object_unref (G_OBJECT (icon));
+          g_list_free (children);
+        }
+
+      /* release the icon factory */
+      g_object_unref (G_OBJECT (icon_factory));
+    }
+
+  (*GTK_WIDGET_CLASS (thunar_location_buttons_parent_class)->style_set) (widget, previous_style);
+}
+
+
+
+static void
+thunar_location_buttons_grab_notify (GtkWidget *widget,
+                                     gboolean   was_grabbed)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (widget);
+
+  if (!was_grabbed)
+    thunar_location_buttons_stop_scrolling (buttons);
+}
+
+
+
+static void
+thunar_location_buttons_add (GtkContainer *container,
+                             GtkWidget    *widget)
+{
+  gtk_widget_set_parent (widget, GTK_WIDGET (container));
+}
+
+
+
+static void
+thunar_location_buttons_remove (GtkContainer *container,
+                                GtkWidget    *widget)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (container);
+  GList                 *lp;
+
+  if (widget == buttons->left_slider)
+    {
+      thunar_location_buttons_remove_1 (container, widget);
+      buttons->left_slider = NULL;
+      return;
+    }
+  else if (widget == buttons->right_slider)
+    {
+      thunar_location_buttons_remove_1 (container, widget);
+      buttons->right_slider = NULL;
+      return;
+    }
+
+  for (lp = buttons->list; lp != NULL; lp = lp->next)
+    if (widget == GTK_WIDGET (lp->data))
+      {
+        thunar_location_buttons_remove_1 (container, widget);
+        buttons->list = g_list_remove_link (buttons->list, lp);
+        g_list_free (lp);
+        return;
+      }
+}
+
+
+
+static void
+thunar_location_buttons_forall (GtkContainer *container,
+                                gboolean      include_internals,
+                                GtkCallback   callback,
+                                gpointer      callback_data)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (container);
+  GtkWidget             *child;
+  GList                 *lp;
+
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+  g_return_if_fail (callback != NULL);
+
+  for (lp = buttons->list; lp != NULL; )
+    {
+      child = GTK_WIDGET (lp->data);
+      lp = lp->next;
+
+      (*callback) (child, callback_data);
+    }
+
+  if (buttons->left_slider != NULL)
+    (*callback) (buttons->left_slider, callback_data);
+
+  if (buttons->right_slider != NULL)
+    (*callback) (buttons->right_slider, callback_data);
+}
+
+
+
+static GtkWidget*
+thunar_location_buttons_make_button (ThunarLocationButtons *buttons,
+                                     ThunarFile            *file)
+{
+  ThunarIconFactory *icon_factory;
+  GtkWidget         *button;
+  GtkWidget         *image;
+  GtkWidget         *label;
+  GtkWidget         *hbox;
+  GdkPixbuf         *icon;
+  gchar             *markup;
+  gint               size;
+
+  gtk_icon_size_lookup (GTK_ICON_SIZE_BUTTON, &size, &size);
+
+  /* allocate the button */
+  button = gtk_toggle_button_new ();
+
+  /* don't allow location buttons to grab the focus */
+  GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);
+
+  /* setup drag support for the button */
+  gtk_drag_source_set (GTK_WIDGET (button), GDK_BUTTON1_MASK, drag_targets,
+                       G_N_ELEMENTS (drag_targets), GDK_ACTION_LINK);
+  gtk_drag_dest_set (GTK_WIDGET (button), GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION, drag_targets,
+                     G_N_ELEMENTS (drag_targets), GDK_ACTION_ASK | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
+  g_signal_connect (G_OBJECT (button), "drag-data-get", G_CALLBACK (thunar_location_buttons_drag_data_get), buttons);
+  g_signal_connect (G_OBJECT (button), "drag-leave", G_CALLBACK (thunar_location_buttons_drag_leave), buttons);
+  g_signal_connect (G_OBJECT (button), "drag-motion", G_CALLBACK (thunar_location_buttons_drag_motion), buttons);
+
+  hbox = gtk_hbox_new (FALSE, 2);
+  gtk_container_add (GTK_CONTAINER (button), hbox);
+  gtk_widget_show (hbox);
+
+  image = gtk_image_new ();
+  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+  gtk_widget_show (image);
+
+  icon_factory = thunar_icon_factory_get_default ();
+  icon = thunar_icon_factory_load_file_icon (icon_factory, file, THUNAR_FILE_ICON_STATE_DEFAULT, size);
+  gtk_drag_source_set_icon_pixbuf (button, icon);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (image), icon);
+  g_object_unref (G_OBJECT (icon_factory));
+  g_object_unref (G_OBJECT (icon));
+
+  if (!thunar_file_is_root (file))
+    {
+      /* only non-root nodes have a label */
+      label = gtk_label_new (thunar_file_get_special_name (file));
+      g_object_set_qdata (G_OBJECT (button), gtk_label_quark, label);
+      gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+      gtk_widget_show (label);
+
+      /* current directory gets a bold label */
+      if (file == buttons->current_directory)
+        {
+          markup = g_markup_printf_escaped ("<b>%s</b>", thunar_file_get_special_name (file));
+          gtk_label_set_markup (GTK_LABEL (label), markup);
+          g_free (markup);
+        }
+    }
+
+  /* the current directory is toggled */
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), (file == buttons->current_directory));
+
+  /* take a reference on the ThunarFile for the button */
+  g_object_set_qdata_full (G_OBJECT (button), thunar_file_quark, file, g_object_unref);
+  g_object_ref (G_OBJECT (file));
+
+  /* get notifications about user actions */
+  g_signal_connect (G_OBJECT (button), "clicked",
+                    G_CALLBACK (thunar_location_buttons_clicked), buttons);
+
+  return button;
+}
+
+
+
+static void
+thunar_location_buttons_remove_1 (GtkContainer *container,
+                                  GtkWidget    *widget)
+{
+  gboolean need_resize = GTK_WIDGET_VISIBLE (widget);
+  gtk_widget_unparent (widget);
+  if (G_LIKELY (need_resize))
+    gtk_widget_queue_resize (GTK_WIDGET (container));
+}
+
+
+
+static gboolean
+thunar_location_buttons_scroll_timeout (gpointer user_data)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (user_data);
+
+  GDK_THREADS_ENTER ();
+
+  if (GTK_WIDGET_HAS_FOCUS (buttons->left_slider))
+    thunar_location_buttons_scroll_left (buttons->left_slider, buttons);
+  else if (GTK_WIDGET_HAS_FOCUS (buttons->right_slider))
+    thunar_location_buttons_scroll_right (buttons->right_slider, buttons);
+
+  GDK_THREADS_LEAVE ();
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_location_buttons_scroll_timeout_destroy (gpointer user_data)
+{
+  GDK_THREADS_ENTER ();
+  THUNAR_LOCATION_BUTTONS (user_data)->scroll_timeout_id = -1;
+  GDK_THREADS_LEAVE ();
+}
+
+
+
+static void
+thunar_location_buttons_stop_scrolling (ThunarLocationButtons *buttons)
+{
+  if (buttons->scroll_timeout_id >= 0)
+    g_source_remove (buttons->scroll_timeout_id);
+}
+
+
+
+static void
+thunar_location_buttons_update_sliders (ThunarLocationButtons *buttons)
+{
+  GtkWidget *button;
+
+  if (G_LIKELY (buttons->list != NULL))
+    {
+      button = GTK_WIDGET (buttons->list->data);
+      if (gtk_widget_get_child_visible (button))
+        gtk_widget_set_sensitive (buttons->right_slider, FALSE);
+      else
+        gtk_widget_set_sensitive (buttons->right_slider, TRUE);
+
+      button = GTK_WIDGET (g_list_last (buttons->list)->data);
+      if (gtk_widget_get_child_visible (button))
+        gtk_widget_set_sensitive (buttons->left_slider, FALSE);
+      else
+        gtk_widget_set_sensitive (buttons->left_slider, TRUE);
+    }
+}
+
+
+
+static gboolean
+thunar_location_buttons_slider_button_press (GtkWidget             *button,
+                                             GdkEventButton        *event,
+                                             ThunarLocationButtons *buttons)
+{
+  if (!GTK_WIDGET_HAS_FOCUS (button))
+    gtk_widget_grab_focus (button);
+
+  if (event->type != GDK_BUTTON_PRESS || event->button != 1)
+    return FALSE;
+
+  buttons->ignore_click = FALSE;
+
+  if (button == buttons->left_slider)
+    thunar_location_buttons_scroll_left (button, buttons);
+  else if (button == buttons->right_slider)
+    thunar_location_buttons_scroll_right (button, buttons);
+
+  if (G_LIKELY (buttons->scroll_timeout_id < 0))
+    {
+      buttons->scroll_timeout_id = g_timeout_add_full (G_PRIORITY_LOW, THUNAR_LOCATION_BUTTONS_SCROLL_TIMEOUT,
+                                                       thunar_location_buttons_scroll_timeout, buttons,
+                                                       thunar_location_buttons_scroll_timeout_destroy);
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_location_buttons_slider_button_release (GtkWidget             *button,
+                                               GdkEventButton        *event,
+                                               ThunarLocationButtons *buttons)
+{
+  if (event->type == GDK_BUTTON_RELEASE)
+    {
+      thunar_location_buttons_stop_scrolling (buttons);
+      buttons->ignore_click = TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_location_buttons_scroll_left (GtkWidget             *button,
+                                     ThunarLocationButtons *buttons)
+{
+  GList *lp;
+
+  if (G_UNLIKELY (buttons->ignore_click))
+    {
+      buttons->ignore_click = FALSE;
+      return;
+    }
+
+  gtk_widget_queue_resize (GTK_WIDGET (buttons));
+
+  for (lp = g_list_last (buttons->list); lp != NULL; lp = lp->prev)
+    if (lp->prev != NULL && gtk_widget_get_child_visible (GTK_WIDGET (lp->prev->data)))
+      {
+        buttons->first_scrolled_button = lp;
+        break;
+      }
+}
+
+
+
+static void
+thunar_location_buttons_scroll_right (GtkWidget             *button,
+                                      ThunarLocationButtons *buttons)
+{
+  GtkTextDirection direction;
+  GList           *right_button = NULL;
+  GList           *left_button = NULL;
+  GList           *lp;
+  gint             space_available;
+  gint             space_needed;
+  gint             border_width;
+  gint             spacing;
+
+  if (G_UNLIKELY (buttons->ignore_click))
+    {
+      buttons->ignore_click = FALSE;
+      return;
+    }
+
+  gtk_widget_style_get (GTK_WIDGET (buttons),
+                        "spacing", &spacing,
+                        NULL);
+
+  gtk_widget_queue_resize (GTK_WIDGET (buttons));
+
+  border_width = GTK_CONTAINER (buttons)->border_width;
+  direction = gtk_widget_get_direction (GTK_WIDGET (buttons));
+
+  /* find the button at the 'left' end that we have to make visible */
+  for (lp = buttons->list; lp != NULL; lp = lp->next)
+    if (lp->next != NULL && gtk_widget_get_child_visible (GTK_WIDGET (lp->next->data)))
+      {
+        right_button = lp;
+        break;
+      }
+
+  /* find the last visible button on the 'right' end */
+  for (lp = g_list_last (buttons->list); lp != NULL; lp = lp->prev)
+    if (gtk_widget_get_child_visible (GTK_WIDGET (lp->data)))
+      {
+        left_button = lp;
+        break;
+      }
+
+  space_needed = GTK_WIDGET (right_button->data)->allocation.width + spacing;
+  if (direction == GTK_TEXT_DIR_RTL)
+    {
+      space_available = buttons->right_slider->allocation.x - GTK_WIDGET (buttons)->allocation.x;
+    }
+  else
+    {
+      space_available = (GTK_WIDGET (buttons)->allocation.x + GTK_WIDGET (buttons)->allocation.width - border_width)
+                      - (buttons->right_slider->allocation.x + buttons->right_slider->allocation.width);
+    }
+
+  /* We have space_available extra space that's not being used.  We
+   * need space_needed space to make the button fit.  So we walk down
+   * from the end, removing buttons until we get all the space we
+   * need.
+   */
+  while (space_available < space_needed)
+    {
+      space_available += GTK_WIDGET (left_button->data)->allocation.width + spacing;
+      left_button = left_button->prev;
+      buttons->first_scrolled_button = left_button;
+    }
+}
+
+
+
+static void
+thunar_location_buttons_clicked (GtkWidget             *button,
+                                 ThunarLocationButtons *buttons)
+{
+  ThunarFile *directory;
+  GtkWidget  *label;
+  gchar      *markup;
+  GList      *lp;
+
+  g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+
+  /* determine the directory associated with the clicked button */
+  directory = g_object_get_qdata (G_OBJECT (button), thunar_file_quark);
+
+  /* disconnect from previous current directory (if any) */
+  if (G_LIKELY (buttons->current_directory != NULL))
+    g_object_unref (G_OBJECT (buttons->current_directory));
+
+  /* setup the new current directory */
+  buttons->current_directory = directory;
+  g_object_ref (G_OBJECT (directory));
+
+  /* update all buttons */
+  for (lp = buttons->list; lp != NULL; lp = lp->next)
+    {
+      /* query button data */
+      button = GTK_WIDGET (lp->data);
+      label = g_object_get_qdata (G_OBJECT (button), gtk_label_quark);
+      directory = g_object_get_qdata (G_OBJECT (button), thunar_file_quark);
+
+      /* update the label (if any) */
+      if (G_LIKELY (label != NULL))
+        {
+          /* current directory gets a bold label */
+          if (directory == buttons->current_directory)
+            {
+              markup = g_markup_printf_escaped ("<b>%s</b>", thunar_file_get_special_name (directory));
+              gtk_label_set_markup (GTK_LABEL (label), markup);
+              g_free (markup);
+            }
+          else
+            {
+              gtk_label_set_text (GTK_LABEL (label), thunar_file_get_special_name (directory));
+            }
+        }
+
+      /* update the toggle button state (making sure to not recurse with the "clicked" handler) */
+      g_signal_handlers_block_by_func (G_OBJECT (button), thunar_location_buttons_clicked, buttons);
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), directory == buttons->current_directory);
+      g_signal_handlers_unblock_by_func (G_OBJECT (button), thunar_location_buttons_clicked, buttons);
+    }
+
+  /* notify the surrounding module that we want to change
+   * to a different directory.
+   */
+  thunar_navigator_change_directory (THUNAR_NAVIGATOR (buttons), buttons->current_directory);
+}
+
+
+
+static void
+thunar_location_buttons_drag_data_get (GtkWidget             *button,
+                                       GdkDragContext        *context,
+                                       GtkSelectionData      *selection_data,
+                                       guint                  info,
+                                       guint                  time,
+                                       ThunarLocationButtons *buttons)
+{
+  ThunarFile *file;
+  GList       path_list;
+  gchar      *uri_string;
+
+  g_return_if_fail (GTK_IS_WIDGET (button));
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+
+  /* determine the uri of the file in question */
+  file = g_object_get_qdata (G_OBJECT (button), thunar_file_quark);
+
+  /* transform the path into an uri list string */
+  path_list.data = thunar_file_get_path (file); path_list.next = path_list.prev = NULL;
+  uri_string = thunar_vfs_path_list_to_string (&path_list);
+
+  /* set the uri list for the drag selection */
+  gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) uri_string, strlen (uri_string));
+
+  /* cleanup */
+  g_free (uri_string);
+}
+
+
+
+static void
+thunar_location_buttons_drag_leave (GtkWidget             *button,
+                                    GdkDragContext        *context,
+                                    guint                  time,
+                                    ThunarLocationButtons *buttons)
+{
+  g_return_if_fail (GTK_IS_BUTTON (button));
+  g_return_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons));
+
+  /* be sure to cancel any running enter timeout */
+  if (G_LIKELY (buttons->enter_timeout_id >= 0))
+    g_source_remove (buttons->enter_timeout_id);
+}
+
+
+
+static gboolean
+thunar_location_buttons_drag_motion (GtkWidget             *button,
+                                     GdkDragContext        *context,
+                                     gint                   x,
+                                     gint                   y,
+                                     guint                  time,
+                                     ThunarLocationButtons *buttons)
+{
+  g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE);
+  g_return_val_if_fail (THUNAR_IS_LOCATION_BUTTONS (buttons), FALSE);
+
+  /* schedule the enter timeout if not already done */
+  if (G_UNLIKELY (buttons->enter_timeout_id < 0))
+    {
+      /* remember the new button */
+      buttons->enter_button = button;
+      g_object_add_weak_pointer (G_OBJECT (button), (gpointer) &buttons->enter_button);
+
+      /* schedule the timeout */
+      buttons->enter_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 500, thunar_location_buttons_enter_timeout,
+                                                      buttons, thunar_location_buttons_enter_timeout_destroy);
+    }
+
+  /* tell GDK that it cannot drop here */
+  gdk_drag_status (context, 0, time);
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_location_buttons_enter_timeout (gpointer user_data)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (user_data);
+
+  GDK_THREADS_ENTER ();
+
+  /* We emulate a "clicked" event here, because else the buttons
+   * would be destroyed and replaced by new buttons, which causes
+   * the Gtk DND code to dump core once the mouse leaves the area
+   * of the new button.
+   *
+   * Besides that, handling this as "clicked" event allows the user
+   * to go back to the initial directory.
+   */
+  if (G_LIKELY (buttons->enter_button != NULL))
+    thunar_location_buttons_clicked (buttons->enter_button, buttons);
+
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_location_buttons_enter_timeout_destroy (gpointer user_data)
+{
+  ThunarLocationButtons *buttons = THUNAR_LOCATION_BUTTONS (user_data);
+
+  /* disconnect from the remembered button */
+  if (G_LIKELY (buttons->enter_button != NULL))
+    {
+      g_object_remove_weak_pointer (G_OBJECT (buttons->enter_button), (gpointer) &buttons->enter_button);
+      buttons->enter_button = NULL;
+    }
+
+  /* reset the timeout id */
+  buttons->enter_timeout_id = -1;
+}
+
+
+
+/**
+ * thunar_location_buttons_new:
+ * 
+ * Creates a new #ThunarLocationButtons object, that does
+ * not display any path by default.
+ *
+ * Return value: the newly allocated #ThunarLocationButtons object.
+ **/
+GtkWidget*
+thunar_location_buttons_new (void)
+{
+  return g_object_new (THUNAR_TYPE_LOCATION_BUTTONS, NULL);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-buttons.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-location-buttons.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LOCATION_BUTTONS_H__
+#define __THUNAR_LOCATION_BUTTONS_H__
+
+#include <thunar/thunar-location-bar.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarLocationButtonsClass ThunarLocationButtonsClass;
+typedef struct _ThunarLocationButtons      ThunarLocationButtons;
+
+#define THUNAR_TYPE_LOCATION_BUTTONS            (thunar_location_buttons_get_type ())
+#define THUNAR_LOCATION_BUTTONS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LOCATION_BUTTONS, ThunarLocationButtons))
+#define THUNAR_LOCATION_BUTTONS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_LOCATION_BUTTONS, ThunarLocationButtonsClass))
+#define THUNAR_IS_LOCATION_BUTTONS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LOCATION_BUTTONS))
+#define THUNAR_IS_LOCATION_BUTTONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_LOCATION_BUTTONS))
+#define THUNAR_LOCATION_BUTTONS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_LOCATION_BUTTONS, ThunarLocationButtonsClass))
+
+GType      thunar_location_buttons_get_type (void) G_GNUC_CONST;
+
+GtkWidget *thunar_location_buttons_new      (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LOCATION_BUTTONS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,173 @@
+/* $Id: thunar-location-dialog.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-location-dialog.h>
+#include <thunar/thunar-path-entry.h>
+
+
+
+static void thunar_location_dialog_class_init (ThunarLocationDialogClass *klass);
+static void thunar_location_dialog_init       (ThunarLocationDialog      *location_dialog);
+
+
+
+struct _ThunarLocationDialogClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarLocationDialog
+{
+  GtkDialog __parent__;
+
+  GtkWidget *entry;
+};
+
+
+
+G_DEFINE_TYPE (ThunarLocationDialog, thunar_location_dialog, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_location_dialog_class_init (ThunarLocationDialogClass *klass)
+{
+}
+
+
+
+static gboolean
+transform_object_to_boolean (const GValue *src_value,
+                             GValue       *dst_value,
+                             gpointer      user_data)
+{
+  g_value_set_boolean (dst_value, (g_value_get_object (src_value) != NULL));
+  return TRUE;
+}
+
+
+
+static void
+thunar_location_dialog_init (ThunarLocationDialog *location_dialog)
+{
+  AtkRelationSet *relations;
+  AtkRelation    *relation;
+  AtkObject      *object;
+  GtkWidget      *cancel_button;
+  GtkWidget      *open_button;
+  GtkWidget      *hbox;
+  GtkWidget      *label;
+
+  gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (location_dialog)->vbox), 2);
+  gtk_container_set_border_width (GTK_CONTAINER (location_dialog), 5);
+  gtk_dialog_set_has_separator (GTK_DIALOG (location_dialog), FALSE);
+  gtk_window_set_default_size (GTK_WINDOW (location_dialog), 350, -1);
+  gtk_window_set_title (GTK_WINDOW (location_dialog), _("Open Location"));
+
+  cancel_button = gtk_dialog_add_button (GTK_DIALOG (location_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+  open_button = gtk_dialog_add_button (GTK_DIALOG (location_dialog), GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT);
+  gtk_window_set_default (GTK_WINDOW (location_dialog), open_button);
+
+  hbox = g_object_new (GTK_TYPE_HBOX,
+                       "border-width", 5,
+                       "spacing", 12,
+                       NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (location_dialog)->vbox), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new_with_mnemonic (_("_Location:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  location_dialog->entry = thunar_path_entry_new ();
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), location_dialog->entry);
+  gtk_entry_set_activates_default (GTK_ENTRY (location_dialog->entry), TRUE);
+  gtk_box_pack_start (GTK_BOX (hbox), location_dialog->entry, TRUE, TRUE, 0);
+  gtk_widget_show (location_dialog->entry);
+
+  /* set Atk label relation for the entry */
+  object = gtk_widget_get_accessible (location_dialog->entry);
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
+  /* the "Open" button is only sensitive if a valid file is entered */
+  exo_binding_new_full (G_OBJECT (location_dialog->entry), "current-file",
+                        G_OBJECT (open_button), "sensitive",
+                        transform_object_to_boolean, NULL, NULL);
+}
+
+
+
+/**
+ * thunar_location_dialog_new:
+ * 
+ * Allocates a new #ThunarLocationDialog instance.
+ *
+ * Return value: the newly allocated #ThunarLocationDialog.
+ **/
+GtkWidget*
+thunar_location_dialog_new (void)
+{
+  return g_object_new (THUNAR_TYPE_LOCATION_DIALOG, NULL);
+}
+
+
+
+/**
+ * thunar_location_dialog_get_selected_file:
+ * @location_dialog : a #ThunarLocationDialog.
+ *
+ * Returns the file selected for the @dialog or
+ * %NULL if the file entered is not valid.
+ *
+ * Return value: the selected #ThunarFile or %NULL.
+ **/
+ThunarFile*
+thunar_location_dialog_get_selected_file (ThunarLocationDialog *location_dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_LOCATION_DIALOG (location_dialog), NULL);
+  return thunar_path_entry_get_current_file (THUNAR_PATH_ENTRY (location_dialog->entry));
+}
+
+
+
+/**
+ * thunar_location_dialog_set_selected_file:
+ * @location_dialog : a #ThunarLocationDialog.
+ * @selected_file   : a #ThunarFile or %NULL.
+ *
+ * Sets the file for @location_dialog to @selected_file.
+ **/
+void
+thunar_location_dialog_set_selected_file (ThunarLocationDialog *location_dialog,
+                                          ThunarFile           *selected_file)
+{
+  g_return_if_fail (THUNAR_IS_LOCATION_DIALOG (location_dialog));
+  g_return_if_fail (selected_file == NULL || THUNAR_IS_FILE (selected_file));
+  thunar_path_entry_set_current_file (THUNAR_PATH_ENTRY (location_dialog->entry), selected_file);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-dialog.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-location-dialog.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LOCATION_DIALOG_H__
+#define __THUNAR_LOCATION_DIALOG_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarLocationDialogClass ThunarLocationDialogClass;
+typedef struct _ThunarLocationDialog      ThunarLocationDialog;
+
+#define THUNAR_TYPE_LOCATION_DIALOG             (thunar_location_dialog_get_type ())
+#define THUNAR_LOCATION_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LOCATION_DIALOG, ThunarLocationDialog))
+#define THUNAR_LOCATION_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_LOCATION_DIALOG, ThunarLocationDialogClass))
+#define THUNAR_IS_LOCATION_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LOCATION_DIALOG))
+#define THUNAR_IS_LOCATION_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_LOCATION_DIALOG))
+#define THUNAR_LOCATION_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_LOCATION_DIALOG, ThunarLocationDialogClass))
+
+GType       thunar_location_dialog_get_type          (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_location_dialog_new               (void);
+
+ThunarFile *thunar_location_dialog_get_selected_file (ThunarLocationDialog *location_dialog);
+void        thunar_location_dialog_set_selected_file (ThunarLocationDialog *location_dialog,
+                                                      ThunarFile           *selected_file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LOCATION_DIALOG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,287 @@
+/* $Id: thunar-location-entry.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-location-entry.h>
+#include <thunar/thunar-path-entry.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CURRENT_DIRECTORY,
+};
+
+
+
+static void        thunar_location_entry_class_init            (ThunarLocationEntryClass *klass);
+static void        thunar_location_entry_navigator_init        (ThunarNavigatorIface     *iface);
+static void        thunar_location_entry_location_bar_init     (ThunarLocationBarIface   *iface);
+static void        thunar_location_entry_init                  (ThunarLocationEntry      *location_entry);
+static void        thunar_location_entry_finalize              (GObject                  *object);
+static void        thunar_location_entry_get_property          (GObject                  *object,
+                                                                guint                     prop_id,
+                                                                GValue                   *value,
+                                                                GParamSpec               *pspec);
+static void        thunar_location_entry_set_property          (GObject                  *object,
+                                                                guint                     prop_id,
+                                                                const GValue             *value,
+                                                                GParamSpec               *pspec);
+static ThunarFile *thunar_location_entry_get_current_directory (ThunarNavigator          *navigator);
+static void        thunar_location_entry_set_current_directory (ThunarNavigator          *navigator,
+                                                                ThunarFile               *current_directory);
+static gboolean    thunar_location_entry_accept_focus          (ThunarLocationBar        *location_bar);
+static void        thunar_location_entry_activate              (ThunarLocationEntry      *location_entry);
+
+
+
+struct _ThunarLocationEntryClass
+{
+  GtkHBoxClass __parent__;
+};
+
+struct _ThunarLocationEntry
+{
+  GtkHBox __parent__;
+
+  ThunarFile *current_directory;
+  GtkWidget  *path_entry;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarLocationEntry,
+                         thunar_location_entry,
+                         GTK_TYPE_HBOX,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_NAVIGATOR,
+                                                thunar_location_entry_navigator_init)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_LOCATION_BAR,
+                                                thunar_location_entry_location_bar_init));
+
+
+
+static void
+thunar_location_entry_class_init (ThunarLocationEntryClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_location_entry_finalize;
+  gobject_class->get_property = thunar_location_entry_get_property;
+  gobject_class->set_property = thunar_location_entry_set_property;
+
+  g_object_class_override_property (gobject_class,
+                                    PROP_CURRENT_DIRECTORY,
+                                    "current-directory");
+}
+
+
+
+static void
+thunar_location_entry_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_location_entry_get_current_directory;
+  iface->set_current_directory = thunar_location_entry_set_current_directory;
+}
+
+
+
+static void
+thunar_location_entry_location_bar_init (ThunarLocationBarIface *iface)
+{
+  iface->accept_focus = thunar_location_entry_accept_focus;
+}
+
+
+
+static gboolean
+transform_object_to_boolean (const GValue *src_value,
+                             GValue       *dst_value,
+                             gpointer      user_data)
+{
+  g_value_set_boolean (dst_value, (g_value_get_object (src_value) != NULL));
+  return TRUE;
+}
+
+
+
+static void
+thunar_location_entry_init (ThunarLocationEntry *location_entry)
+{
+  GtkWidget *button;
+  GtkWidget *image;
+
+  gtk_box_set_spacing (GTK_BOX (location_entry), 2);
+
+  location_entry->path_entry = thunar_path_entry_new ();
+  g_signal_connect_swapped (G_OBJECT (location_entry->path_entry), "activate",
+                            G_CALLBACK (thunar_location_entry_activate), location_entry);
+  gtk_box_pack_start (GTK_BOX (location_entry), location_entry->path_entry, TRUE, TRUE, 0);
+  gtk_widget_show (location_entry->path_entry);
+
+  button = g_object_new (GTK_TYPE_BUTTON, "relief", GTK_RELIEF_NONE, NULL);
+  g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (thunar_location_entry_activate), location_entry);
+  gtk_box_pack_start (GTK_BOX (location_entry), button, FALSE, FALSE, 0);
+  gtk_widget_show (button);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_MENU);
+  gtk_container_add (GTK_CONTAINER (button), image);
+  gtk_widget_show (image);
+
+  /* the "Go" button is only sensitive if a valid file is entered */
+  exo_binding_new_full (G_OBJECT (location_entry->path_entry), "current-file",
+                        G_OBJECT (button), "sensitive",
+                        transform_object_to_boolean, NULL, NULL);
+}
+
+
+
+static void
+thunar_location_entry_finalize (GObject *object)
+{
+  ThunarLocationEntry *location_entry = THUNAR_LOCATION_ENTRY (object);
+
+  if (G_LIKELY (location_entry->current_directory != NULL))
+    g_object_unref (G_OBJECT (location_entry->current_directory));
+
+  G_OBJECT_CLASS (thunar_location_entry_parent_class)->finalize (object);
+}
+
+
+
+static void
+thunar_location_entry_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (navigator));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_location_entry_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  ThunarNavigator *navigator = THUNAR_NAVIGATOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (navigator, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarFile*
+thunar_location_entry_get_current_directory (ThunarNavigator *navigator)
+{
+  return THUNAR_LOCATION_ENTRY (navigator)->current_directory;
+}
+
+
+
+static void
+thunar_location_entry_set_current_directory (ThunarNavigator *navigator,
+                                             ThunarFile      *current_directory)
+{
+  ThunarLocationEntry *location_entry = THUNAR_LOCATION_ENTRY (navigator);
+
+  if (G_LIKELY (location_entry->current_directory != NULL))
+    g_object_unref (G_OBJECT (location_entry->current_directory));
+
+  location_entry->current_directory = current_directory;
+
+  if (G_LIKELY (current_directory != NULL))
+    g_object_ref (G_OBJECT (current_directory));
+
+  thunar_path_entry_set_current_file (THUNAR_PATH_ENTRY (location_entry->path_entry), current_directory);
+
+  g_object_notify (G_OBJECT (location_entry), "current-directory");
+}
+
+
+
+static gboolean
+thunar_location_entry_accept_focus (ThunarLocationBar *location_bar)
+{
+  ThunarLocationEntry *location_entry = THUNAR_LOCATION_ENTRY (location_bar);
+
+  /* select the whole path in the path entry */
+  gtk_editable_select_region (GTK_EDITABLE (location_entry->path_entry), 0, -1);
+
+  /* give the keyboard focus to the path entry */
+  gtk_widget_grab_focus (location_entry->path_entry);
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_location_entry_activate (ThunarLocationEntry *location_entry)
+{
+  ThunarFile *file;
+
+  file = thunar_path_entry_get_current_file (THUNAR_PATH_ENTRY (location_entry->path_entry));
+  if (G_LIKELY (file != NULL))
+    thunar_navigator_change_directory (THUNAR_NAVIGATOR (location_entry), file);
+}
+
+
+
+/**
+ * thunar_location_entry_new:
+ *
+ * Allocates a new #ThunarLocationEntry instance.
+ *
+ * Return value: the newly allocated #ThunarLocationEntry.
+ **/
+GtkWidget*
+thunar_location_entry_new (void)
+{
+  return g_object_new (THUNAR_TYPE_LOCATION_ENTRY, NULL);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-location-entry.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-location-entry.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_LOCATION_ENTRY_H__
+#define __THUNAR_LOCATION_ENTRY_H__
+
+#include <thunar/thunar-location-bar.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarLocationEntryClass ThunarLocationEntryClass;
+typedef struct _ThunarLocationEntry      ThunarLocationEntry;
+
+#define THUNAR_TYPE_LOCATION_ENTRY            (thunar_location_entry_get_type ())
+#define THUNAR_LOCATION_ENTRY(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_LOCATION_ENTRY, ThunarLocationEntry))
+#define THUNAR_LOCATION_ENTRY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_LOCATION_ENTRY, ThunarLocationEntryClass))
+#define THUNAR_IS_LOCATION_ENTRY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_LOCATION_ENTRY))
+#define THUNAR_IS_LOCATION_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_LOCATION_ENTRY))
+#define THUNAR_LOCATION_ENTRY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_LOCATION_ENTRY, ThunarLocationEntryClass))
+
+GType      thunar_location_entry_get_type (void) G_GNUC_CONST;
+
+GtkWidget *thunar_location_entry_new      (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_LOCATION_ENTRY_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,160 @@
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* BOOLEAN:VOID (thunar-marshal.list:1) */
+void
+_thunar_marshal_BOOLEAN__VOID (GClosure     *closure,
+                               GValue       *return_value,
+                               guint         n_param_values,
+                               const GValue *param_values,
+                               gpointer      invocation_hint,
+                               gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__VOID) (gpointer     data1,
+                                                  gpointer     data2);
+  register GMarshalFunc_BOOLEAN__VOID callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 1);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__VOID) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:BOXED,POINTER (thunar-marshal.list:2) */
+void
+_thunar_marshal_VOID__BOXED_POINTER (GClosure     *closure,
+                                     GValue       *return_value,
+                                     guint         n_param_values,
+                                     const GValue *param_values,
+                                     gpointer      invocation_hint,
+                                     gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__BOXED_POINTER) (gpointer     data1,
+                                                    gpointer     arg_1,
+                                                    gpointer     arg_2,
+                                                    gpointer     data2);
+  register GMarshalFunc_VOID__BOXED_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_boxed (param_values + 1),
+            g_marshal_value_peek_pointer (param_values + 2),
+            data2);
+}
+
+/* VOID:STRING,STRING (thunar-marshal.list:3) */
+void
+_thunar_marshal_VOID__STRING_STRING (GClosure     *closure,
+                                     GValue       *return_value,
+                                     guint         n_param_values,
+                                     const GValue *param_values,
+                                     gpointer      invocation_hint,
+                                     gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer     data1,
+                                                    gpointer     arg_1,
+                                                    gpointer     arg_2,
+                                                    gpointer     data2);
+  register GMarshalFunc_VOID__STRING_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            data2);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,36 @@
+
+#ifndef ___thunar_marshal_MARSHAL_H__
+#define ___thunar_marshal_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* BOOLEAN:VOID (thunar-marshal.list:1) */
+extern void _thunar_marshal_BOOLEAN__VOID (GClosure     *closure,
+                                           GValue       *return_value,
+                                           guint         n_param_values,
+                                           const GValue *param_values,
+                                           gpointer      invocation_hint,
+                                           gpointer      marshal_data);
+
+/* VOID:BOXED,POINTER (thunar-marshal.list:2) */
+extern void _thunar_marshal_VOID__BOXED_POINTER (GClosure     *closure,
+                                                 GValue       *return_value,
+                                                 guint         n_param_values,
+                                                 const GValue *param_values,
+                                                 gpointer      invocation_hint,
+                                                 gpointer      marshal_data);
+
+/* VOID:STRING,STRING (thunar-marshal.list:3) */
+extern void _thunar_marshal_VOID__STRING_STRING (GClosure     *closure,
+                                                 GValue       *return_value,
+                                                 guint         n_param_values,
+                                                 const GValue *param_values,
+                                                 gpointer      invocation_hint,
+                                                 gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* ___thunar_marshal_MARSHAL_H__ */
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.list
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.list	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-marshal.list	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,3 @@
+BOOLEAN:VOID
+VOID:BOXED,POINTER
+VOID:STRING,STRING

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,409 @@
+/* $Id: thunar-metafile.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <tdb/tdb.h>
+
+#include <thunar/thunar-metafile.h>
+
+
+
+static void     thunar_metafile_class_init  (ThunarMetafileClass  *klass);
+static void     thunar_metafile_init        (ThunarMetafile       *metafile);
+static void     thunar_metafile_finalize    (GObject              *object);
+static TDB_DATA thunar_metafile_read        (ThunarMetafile       *metafile,
+                                             TDB_DATA              data);
+
+
+
+struct _ThunarMetafileClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarMetafile
+{
+  GObject __parent__;
+
+  TDB_CONTEXT *context;
+  TDB_DATA     data;
+};
+
+
+
+G_DEFINE_TYPE (ThunarMetafile, thunar_metafile, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_metafile_class_init (ThunarMetafileClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_metafile_finalize;
+}
+
+
+
+static void
+thunar_metafile_init (ThunarMetafile *metafile)
+{
+  gchar *path;
+
+  /* determine the path to the metafile database (create directories as required) */
+  path = xfce_resource_save_location (XFCE_RESOURCE_CACHE, "Thunar/metafile.tdb", TRUE);
+  if (G_UNLIKELY (path == NULL))
+    {
+      path = xfce_resource_save_location (XFCE_RESOURCE_CACHE, "Thunar/", FALSE);
+      g_warning ("Failed to create the Thunar cache directory in %s", path);
+      g_free (path);
+      return;
+    }
+
+  /* try to open the metafile database file */
+  metafile->context = tdb_open (path, 0, TDB_DEFAULT, O_CREAT | O_RDWR, 0600);
+  if (G_UNLIKELY (metafile->context == NULL))
+    g_warning ("Failed to open metafile database in %s: %s.", path, g_strerror (errno));
+
+  /* release the path */
+  g_free (path);
+}
+
+
+
+static void
+thunar_metafile_finalize (GObject *object)
+{
+  ThunarMetafile *metafile = THUNAR_METAFILE (object);
+
+  /* close the database (if open) */
+  if (G_LIKELY (metafile->context != NULL))
+    tdb_close (metafile->context);
+
+  /* release any pending data */
+  if (G_LIKELY (metafile->data.dptr != NULL))
+    free (metafile->data.dptr);
+
+  (*G_OBJECT_CLASS (thunar_metafile_parent_class)->finalize) (object);
+}
+
+
+
+static TDB_DATA
+thunar_metafile_read (ThunarMetafile *metafile,
+                      TDB_DATA        data)
+{
+  /* perform the fetch operation on the database */
+  data = tdb_fetch (metafile->context, data);
+  if (G_UNLIKELY (data.dptr != NULL))
+    {
+      /* validate the result */
+      if (data.dsize < sizeof (guint32)
+          || (data.dsize % sizeof (guint32)) != 0
+          || data.dptr[data.dsize - 1] != '\0')
+        {
+          free (data.dptr);
+          data.dptr = NULL;
+          data.dsize = 0;
+        }
+    }
+
+  return data;
+}
+
+
+
+/**
+ * thunar_metafile_get_default:
+ *
+ * Returns a reference to the default #ThunarMetafile
+ * instance. There can be only one #ThunarMetafile
+ * instance at any time.
+ *
+ * The caller is responsible to free the returned
+ * object using g_object_unref() when no longer
+ * needed.
+ *
+ * Return value: a reference to the default #ThunarMetafile
+ *               instance.
+ **/
+ThunarMetafile*
+thunar_metafile_get_default (void)
+{
+  static ThunarMetafile *metafile = NULL;
+
+  if (G_UNLIKELY (metafile == NULL))
+    {
+      /* allocate a new metafile instance. */
+      metafile = g_object_new (THUNAR_TYPE_METAFILE, NULL);
+      g_object_add_weak_pointer (G_OBJECT (metafile), (gpointer) &metafile);
+    }
+  else
+    {
+      /* take a reference for the caller */
+      g_object_ref (G_OBJECT (metafile));
+    }
+
+  return metafile;
+}
+
+
+
+/**
+ * thunar_metafile_fetch:
+ * @metafile      : a #ThunarMetafile.
+ * @path          : a #ThunarVfsPath.
+ * @key           : a #ThunarMetafileKey.
+ * @default_value : the default value for @key,
+ *                  which may be %NULL.
+ *
+ * Fetches the value for @key on @path in
+ * @metafile. Returns a pointer to the
+ * value if found, or the default value
+ * if the @key is explicitly not set for
+ * @path in @metafile, as specified in
+ * @default_value.
+ *
+ * The returned string is owned by @metafile
+ * and is only valid until the next call to
+ * thunar_metafile_fetch(), so you might need
+ * to take a copy of the value if you need to
+ * keep for a longer period.
+ *
+ * Return value: the value for @key on @path
+ *               in @metafile or the default
+ *               value for @key, as specified
+ *               by @default_value.
+ **/
+const gchar*
+thunar_metafile_fetch (ThunarMetafile   *metafile,
+                       ThunarVfsPath    *path,
+                       ThunarMetafileKey key,
+                       const gchar      *default_value)
+{
+  const guchar *dend;
+  const guchar *dp;
+  TDB_DATA      key_data;
+  gssize        key_size;
+  gchar         key_path[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  g_return_val_if_fail (THUNAR_IS_METAFILE (metafile), NULL);
+  g_return_val_if_fail (key < THUNAR_METAFILE_N_KEYS, NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  /* check if the database handle is available */
+  if (G_UNLIKELY (metafile->context == NULL))
+    goto use_default_value;
+
+  /* determine the string representation of the path */
+  key_size = thunar_vfs_path_to_string (path, key_path, sizeof (key_path), NULL);
+  if (G_UNLIKELY (key_size <= 0))
+    goto use_default_value;
+
+  /* generate the key data */
+  key_data.dptr = key_path;
+  key_data.dsize = key_size - 1;
+
+  /* release any earlier result data */
+  if (G_LIKELY (metafile->data.dptr != NULL))
+    free (metafile->data.dptr);
+
+  /* perform the fetch operation on the database */
+  metafile->data = thunar_metafile_read (metafile, key_data);
+  if (G_LIKELY (metafile->data.dptr == NULL))
+    goto use_default_value;
+
+  /* lookup the value for the given key */
+  dp = (const guchar *) metafile->data.dptr;
+  dend = dp + metafile->data.dsize;
+  for (;;)
+    {
+      /* check if we have a match */
+      if (*dp == (guint) key)
+        return (const gchar *) (dp + 1);
+
+      /* lookup the next entry */
+      do
+        {
+          /* skip another 4 bytes */
+          dp += sizeof (guint32);
+          if (G_UNLIKELY (dp == dend))
+            goto use_default_value;
+        }
+      while (*(dp - 1) != '\0');
+    }
+
+  /* use the default value */
+use_default_value:
+  return default_value;
+}
+
+
+
+/**
+ * thunar_metafile_store:
+ * @metafile      : a #ThunarMetafile.
+ * @path          : a #ThunarVfsPath.
+ * @key           : a #ThunarMetafileKey.
+ * @value         : the new value for @key on @path.
+ * @default_value : the default value for @key on @path.
+ *
+ * Stores the given @value for @key on @path in
+ * @metafile.
+ *
+ * No error is returned from this method, but
+ * the store operation may nevertheless fail,
+ * so don't depend on the success of the operation.
+ *
+ * Note that if @value equals the @default_value
+ * for @key, it isn't stored in the @metafile to
+ * save memory.
+ **/
+void
+thunar_metafile_store (ThunarMetafile   *metafile,
+                       ThunarVfsPath    *path,
+                       ThunarMetafileKey key,
+                       const gchar      *value,
+                       const gchar      *default_value)
+{
+  TDB_DATA value_data;
+  TDB_DATA key_data;
+  gssize   value_size;
+  gssize   key_size;
+  gchar   *buffer;
+  gchar   *bp;
+  gchar    key_path[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  g_return_if_fail (THUNAR_IS_METAFILE (metafile));
+  g_return_if_fail (key < THUNAR_METAFILE_N_KEYS);
+  g_return_if_fail (default_value != NULL);
+  g_return_if_fail (value != NULL);
+  g_return_if_fail (path != NULL);
+
+  /* check if the database handle is available */
+  if (G_UNLIKELY (metafile->context == NULL))
+    return;
+
+  /* determine the string representation of the path */
+  key_size = thunar_vfs_path_to_string (path, key_path, sizeof (key_path), NULL);
+  if (G_UNLIKELY (key_size <= 0))
+    return;
+
+  /* generate the key data */
+  key_data.dptr = key_path;
+  key_data.dsize = key_size - 1;
+
+  /* fetch the current value for the key */
+  value_data = thunar_metafile_read (metafile, key_data);
+
+  /* determine the size required for the new value */
+  value_size = strlen (value) + 2;
+  value_size = ((value_size + sizeof (guint32) - 1) / sizeof (guint32)) * sizeof (guint32);
+
+  /* allocate a buffer to merge the existing value set with the new value */
+  buffer = g_new0 (gchar, value_data.dsize + value_size);
+
+  /* copy the new value to the buffer if it's not equal to the default value */
+  if (G_LIKELY (strcmp (value, default_value) != 0))
+    {
+      buffer[0] = key;
+      strcpy (buffer + 1, value);
+      bp = buffer + value_size;
+    }
+  else
+    {
+      bp = buffer;
+    }
+
+  /* copy the existing entries (if any) */
+  if (G_LIKELY (value_data.dptr != NULL))
+    {
+      const guchar *vp = (const guchar *) value_data.dptr;
+      const guchar *vend = vp + value_data.dsize;
+      const guchar *vx;
+
+      for (; vp < vend; vp = vx)
+        {
+          /* grab a pointer to the next entry (thereby calc
+           * the length of this entry).
+           */
+          for (vx = vp + sizeof (guint32); *(vx - 1) != '\0'; vx += sizeof (guint32))
+            ;
+
+          /* verify the vx pointer */
+          g_assert (vx <= vend);
+          g_assert (vx > vp);
+
+          /* check if we should copy the entry */
+          if (*vp != key)
+            {
+              memcpy (bp, vp, vx - vp);
+              bp += (vx - vp);
+            }
+        }
+
+      /* verify the buffer space */
+      g_assert (bp <= buffer + value_data.dsize + value_size);
+      g_assert ((bp - buffer) % sizeof (guint32) == 0);
+
+      /* release the previous value set */
+      free (value_data.dptr);
+    }
+
+  /* delete the key from the database if the new
+   * value set is the same as the default value set.
+   */
+  if (G_UNLIKELY (bp == buffer))
+    {
+      tdb_delete (metafile->context, key_data);
+    }
+  else
+    {
+      /* setup the new value set */
+      value_data.dptr = buffer;
+      value_data.dsize = bp - buffer;
+
+      /* execute the store operation */
+      tdb_store (metafile->context, key_data, value_data, TDB_REPLACE);
+    }
+
+  /* free the buffer space */
+  g_free (buffer);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-metafile.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,64 @@
+/* $Id: thunar-metafile.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_METAFILE_H__
+#define __THUNAR_METAFILE_H__
+
+#include <thunar-vfs/thunar-vfs.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarMetafileClass ThunarMetafileClass;
+typedef struct _ThunarMetafile      ThunarMetafile;
+
+#define THUNAR_TYPE_METAFILE            (thunar_metafile_get_type ())
+#define THUNAR_METAFILE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_METAFILE, ThunarMetafile))
+#define THUNAR_METAFILE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_METAFILE, ThunarMetafileClass))
+#define THUNAR_IS_METAFILE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_METAFILE))
+#define THUNAR_IS_METAFILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_METAFILE))
+#define THUNAR_METAFILE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_METAFILE, ThunarMetafileClass))
+
+/**
+ * ThunarMetafileKey:
+ * @THUNAR_METAFILE_KEY_EMBLEMS :
+ **/
+typedef enum /*< enum >*/
+{
+  THUNAR_METAFILE_KEY_EMBLEMS,
+  THUNAR_METAFILE_N_KEYS,
+} ThunarMetafileKey;
+
+GType           thunar_metafile_get_type    (void) G_GNUC_CONST;
+
+ThunarMetafile *thunar_metafile_get_default (void);
+
+const gchar    *thunar_metafile_fetch       (ThunarMetafile   *metafile,
+                                             ThunarVfsPath    *path,
+                                             ThunarMetafileKey key,
+                                             const gchar      *default_value);
+
+void            thunar_metafile_store       (ThunarMetafile   *metafile,
+                                             ThunarVfsPath    *path,
+                                             ThunarMetafileKey key,
+                                             const gchar      *value,
+                                             const gchar      *default_value);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_METAFILE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,211 @@
+/* $Id: thunar-navigator.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-navigator.h>
+
+
+
+enum
+{
+  CHANGE_DIRECTORY,
+  LAST_SIGNAL,
+};
+
+
+
+static void thunar_navigator_base_init  (gpointer klass);
+static void thunar_navigator_class_init (gpointer klass);
+
+
+
+static guint navigator_signals[LAST_SIGNAL];
+
+
+
+GType
+thunar_navigator_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarNavigatorIface),
+        (GBaseInitFunc) thunar_navigator_base_init,
+        NULL,
+        (GClassInitFunc) thunar_navigator_class_init,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarNavigator",
+                                     &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_navigator_base_init (gpointer klass)
+{
+  static gboolean initialized = FALSE;
+
+  if (G_UNLIKELY (!initialized))
+    {
+      /**
+       * ThunarNavigator::change-directory:
+       * @navigator : a #ThunarNavigator instance.
+       * @directory : a #ThunarFile referring to the new directory.
+       *
+       * Invoked by implementing classes whenever the user requests
+       * to changed the current directory to @directory from within
+       * the @navigator instance (e.g. for the location buttons bar,
+       * this signal would be invoked whenever the user clicks on
+       * a path button).
+       *
+       * The @navigator must not apply the @directory to the
+       * "current-directory" property directly. But
+       * instead, it must wait for the surrounding module (usually
+       * a #ThunarWindow instance) to explicitly inform the
+       * @navigator to change it's current directory using
+       * the #thunar_navigator_set_current_directory() method
+       * or the "current-directory" property.
+       **/
+      navigator_signals[CHANGE_DIRECTORY] =
+        g_signal_new ("change-directory",
+                      G_TYPE_FROM_INTERFACE (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ThunarNavigatorIface, change_directory),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, THUNAR_TYPE_FILE);
+
+      initialized = TRUE;
+    }
+}
+
+
+
+static void
+thunar_navigator_class_init (gpointer klass)
+{
+  /**
+   * ThunarNavigator:current-directory:
+   *
+   * The directory currently displayed by this #ThunarNavigator
+   * instance or %NULL if no directory is currently displayed
+   * (it's up to the implementing class to define the appearance
+   * of a navigator that has no directory associated with it).
+   *
+   * Whenever a navigator wants the surrounding module (usually
+   * a #ThunarWindow) to change to another directory, it should
+   * invoke the "change-directory" signal using the
+   * #thunar_navigator_change_directory() method. It should
+   * not directly change the "current-directory" property,
+   * but wait for the surrounding module to change the
+   * "current-directory" property afterwards.
+   **/
+  g_object_interface_install_property (klass,
+                                       g_param_spec_object ("current-directory",
+                                                            _("Current directory"),
+                                                            _("The directory currently displayed by the navigator"),
+                                                            THUNAR_TYPE_FILE,
+                                                            EXO_PARAM_READWRITE));
+}
+
+
+
+/**
+ * thunar_navigator_get_current_directory:
+ * @navigator : a #ThunarNavigator instance.
+ *
+ * Returns the directory currently displayed by @navigator
+ * or %NULL, if @navigator does not currently display and
+ * directory.
+ *
+ * Return value: the current directory of @navigator or %NULL.
+ **/
+ThunarFile*
+thunar_navigator_get_current_directory (ThunarNavigator *navigator)
+{
+  g_return_val_if_fail (THUNAR_IS_NAVIGATOR (navigator), NULL);
+  return THUNAR_NAVIGATOR_GET_IFACE (navigator)->get_current_directory (navigator);
+}
+
+
+
+/**
+ * thunar_navigator_set_current_directory:
+ * @navigator         : a #ThunarNavigator instance.
+ * @current_directory : the new directory to display or %NULL.
+ *
+ * Sets a new current directory that should be displayed by
+ * the @navigator.
+ **/
+void
+thunar_navigator_set_current_directory (ThunarNavigator *navigator,
+                                        ThunarFile      *current_directory)
+{
+  g_return_if_fail (THUNAR_IS_NAVIGATOR (navigator));
+  g_return_if_fail (current_directory == NULL || THUNAR_IS_FILE (current_directory));
+  THUNAR_NAVIGATOR_GET_IFACE (navigator)->set_current_directory (navigator, current_directory);
+}
+
+
+
+/**
+ * thunar_navigator_change_directory:
+ * @navigator : a #ThunarNavigator instance.
+ * @directory : a #ThunarFile referring to a directory.
+ *
+ * Emits the "change-directory" signal on @navigator with
+ * the specified @directory.
+ *
+ * Derived classes should invoke this method whenever the user
+ * selects a new directory from within @navigator. The derived
+ * class should not perform any directory changing operations
+ * itself, but leave it up to the surrounding module (usually
+ * a #ThunarWindow instance) to change the directory.
+ *
+ * It should never ever be called from outside a #ThunarNavigator
+ * implementation, as that may led to unexpected results!
+ **/
+void
+thunar_navigator_change_directory (ThunarNavigator *navigator,
+                                   ThunarFile      *directory)
+{
+  g_return_if_fail (THUNAR_IS_NAVIGATOR (navigator));
+  g_return_if_fail (THUNAR_IS_FILE (directory));
+  g_return_if_fail (thunar_file_is_directory (directory));
+
+  g_signal_emit (G_OBJECT (navigator), navigator_signals[CHANGE_DIRECTORY], 0, directory);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-navigator.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,60 @@
+/* $Id: thunar-navigator.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_NAVIGATOR_H__
+#define __THUNAR_NAVIGATOR_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarNavigatorIface ThunarNavigatorIface;
+typedef struct _ThunarNavigator      ThunarNavigator;
+
+#define THUNAR_TYPE_NAVIGATOR           (thunar_navigator_get_type ())
+#define THUNAR_NAVIGATOR(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_NAVIGATOR, ThunarNavigator))
+#define THUNAR_IS_NAVIGATOR(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_NAVIGATOR))
+#define THUNAR_NAVIGATOR_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_TYPE_NAVIGATOR, ThunarNavigatorIface))
+
+struct _ThunarNavigatorIface
+{
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarFile *(*get_current_directory) (ThunarNavigator *navigator);
+  void        (*set_current_directory) (ThunarNavigator *navigator,
+                                        ThunarFile      *current_directory);
+
+  /* signals */
+  void        (*change_directory)      (ThunarNavigator *navigator,
+                                        ThunarFile      *directory);
+};
+
+GType       thunar_navigator_get_type              (void) G_GNUC_CONST;
+
+ThunarFile *thunar_navigator_get_current_directory (ThunarNavigator *navigator);
+void        thunar_navigator_set_current_directory (ThunarNavigator *navigator,
+                                                    ThunarFile      *current_directory);
+
+void        thunar_navigator_change_directory      (ThunarNavigator *navigator,
+                                                    ThunarFile      *directory);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_NAVIGATOR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,511 @@
+/* $Id: thunar-open-with-action.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-marshal.h>
+#include <thunar/thunar-open-with-action.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_FILE,
+};
+
+enum
+{
+  OPEN_APPLICATION,
+  LAST_SIGNAL,
+};
+
+
+
+static void       thunar_open_with_action_class_init        (ThunarOpenWithActionClass *klass);
+static void       thunar_open_with_action_init              (ThunarOpenWithAction      *open_with_action);
+static void       thunar_open_with_action_dispose           (GObject                   *object);
+static void       thunar_open_with_action_finalize          (GObject                   *object);
+static void       thunar_open_with_action_get_property      (GObject                   *object,
+                                                             guint                      prop_id,
+                                                             GValue                    *value,
+                                                             GParamSpec                *pspec);
+static void       thunar_open_with_action_set_property      (GObject                   *object,
+                                                             guint                      prop_id,
+                                                             const GValue              *value,
+                                                             GParamSpec                *pspec);
+static GtkWidget *thunar_open_with_action_create_menu_item  (GtkAction                 *action);
+static void       thunar_open_with_action_activated         (GtkWidget                 *item,
+                                                             ThunarOpenWithAction      *open_with_action);
+static void       thunar_open_with_action_menu_mapped       (GtkWidget                 *menu,
+                                                             ThunarOpenWithAction      *open_with_action);
+static void       thunar_open_with_action_file_destroy      (ThunarFile                *file,
+                                                             ThunarOpenWithAction      *open_with_action);
+
+
+
+struct _ThunarOpenWithActionClass
+{
+  GtkActionClass __parent__;
+
+  void (*open_application) (ThunarOpenWithAction     *action,
+                            ThunarVfsMimeApplication *application,
+                            GList                    *path_list);
+};
+
+struct _ThunarOpenWithAction
+{
+  GtkAction __parent__;
+
+  ThunarVfsMimeDatabase *mime_database;
+  ThunarFile            *file;
+};
+
+
+
+static guint open_with_action_signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (ThunarOpenWithAction, thunar_open_with_action, GTK_TYPE_ACTION);
+
+
+
+static void
+thunar_open_with_action_class_init (ThunarOpenWithActionClass *klass)
+{
+  GtkActionClass *gtkaction_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_open_with_action_dispose;
+  gobject_class->finalize = thunar_open_with_action_finalize;
+  gobject_class->get_property = thunar_open_with_action_get_property;
+  gobject_class->set_property = thunar_open_with_action_set_property;
+
+  gtkaction_class = GTK_ACTION_CLASS (klass);
+  gtkaction_class->create_menu_item = thunar_open_with_action_create_menu_item;
+
+  /**
+   * ThunarOpenWithAction:file:
+   *
+   * The #ThunarFile for which to display the MIME application
+   * selector menu.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("File"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarOpenWithAction::open-application:
+   * @open_with_action : a #ThunarOpenWithAction.
+   * @application      : a #ThunarVfsMimeApplication.
+   * @path_list        : a list of #ThunarVfsPath<!---->s.
+   *
+   * Emitted by @open_with_action whenever the user requests to
+   * open @path_list with @application.
+   **/
+  open_with_action_signals[OPEN_APPLICATION] =
+    g_signal_new ("open-application",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarOpenWithActionClass, open_application),
+                  NULL, NULL, _thunar_marshal_VOID__BOXED_POINTER,
+                  G_TYPE_NONE, 2, THUNAR_VFS_TYPE_MIME_APPLICATION, G_TYPE_POINTER);
+}
+
+
+
+static void
+thunar_open_with_action_init (ThunarOpenWithAction *open_with_action)
+{
+  open_with_action->mime_database = thunar_vfs_mime_database_get_default ();
+}
+
+
+
+static void
+thunar_open_with_action_dispose (GObject *object)
+{
+  ThunarOpenWithAction *open_with_action = THUNAR_OPEN_WITH_ACTION (object);
+
+  thunar_open_with_action_set_file (open_with_action, NULL);
+
+  (*G_OBJECT_CLASS (thunar_open_with_action_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_open_with_action_finalize (GObject *object)
+{
+  ThunarOpenWithAction *open_with_action = THUNAR_OPEN_WITH_ACTION (object);
+
+  g_object_unref (G_OBJECT (open_with_action->mime_database));
+
+  (*G_OBJECT_CLASS (thunar_open_with_action_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_open_with_action_get_property (GObject    *object,
+                                      guint       prop_id,
+                                      GValue     *value,
+                                      GParamSpec *pspec)
+{
+  ThunarOpenWithAction *open_with_action = THUNAR_OPEN_WITH_ACTION (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      g_value_set_object (value, thunar_open_with_action_get_file (open_with_action));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_open_with_action_set_property (GObject      *object,
+                                      guint         prop_id,
+                                      const GValue *value,
+                                      GParamSpec   *pspec)
+{
+  ThunarOpenWithAction *open_with_action = THUNAR_OPEN_WITH_ACTION (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      thunar_open_with_action_set_file (open_with_action, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static GtkWidget*
+thunar_open_with_action_create_menu_item (GtkAction *action)
+{
+  GtkWidget *item;
+  GtkWidget *menu;
+
+  g_return_val_if_fail (THUNAR_IS_OPEN_WITH_ACTION (action), NULL);
+
+  /* let GtkAction allocate the menu item */
+  item = (*GTK_ACTION_CLASS (thunar_open_with_action_parent_class)->create_menu_item) (action);
+
+  /* associate an empty submenu with the item (will be filled when mapped) */
+  menu = gtk_menu_new ();
+  g_signal_connect (G_OBJECT (menu), "map", G_CALLBACK (thunar_open_with_action_menu_mapped), action);
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
+
+  return item;
+}
+
+
+
+static void
+thunar_open_with_action_activated (GtkWidget            *item,
+                                   ThunarOpenWithAction *open_with_action)
+{
+  ThunarVfsMimeApplication *application;
+  ThunarFile               *file;
+  GList                     path_list;
+
+  g_return_if_fail (THUNAR_IS_OPEN_WITH_ACTION (open_with_action));
+  g_return_if_fail (GTK_IS_MENU_ITEM (item));
+
+  /* verify that the file is still alive */
+  file = open_with_action->file;
+  if (G_UNLIKELY (file == NULL))
+    return;
+
+  /* query the launch parameters for this application item */
+  application = g_object_get_data (G_OBJECT (item), "thunar-vfs-mime-application");
+
+  /* generate a single item list */
+  path_list.data = thunar_file_get_path (file);
+  path_list.next = NULL;
+  path_list.prev = NULL;
+
+  /* emit the "open-application" signal */
+  g_signal_emit (G_OBJECT (open_with_action), open_with_action_signals[OPEN_APPLICATION], 0, application, &path_list);
+}
+
+
+
+static void
+thunar_open_with_action_menu_mapped (GtkWidget            *menu,
+                                     ThunarOpenWithAction *open_with_action)
+{
+  ThunarVfsMimeApplication *default_application;
+  ThunarVfsMimeInfo        *info;
+  ThunarIconFactory        *icon_factory;
+  GtkIconTheme             *icon_theme;
+  const gchar              *icon_name;
+  GdkPixbuf                *icon;
+  GtkWidget                *image;
+  GtkWidget                *item;
+  GList                    *applications;
+  GList                    *lp;
+  gchar                    *text;
+  gint                      icon_size;
+
+  g_return_if_fail (THUNAR_IS_OPEN_WITH_ACTION (open_with_action));
+  g_return_if_fail (GTK_IS_MENU_SHELL (menu));
+
+  /* check if we already added our children to the submenu (or we don't have a file) */
+  if (G_LIKELY (GTK_MENU_SHELL (menu)->children != NULL || open_with_action->file == NULL))
+    return;
+
+  /* determine the mime info for the file (may fail) */
+  info = thunar_file_get_mime_info (open_with_action->file);
+
+  /* determine the icon size for menus */
+  gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &icon_size, &icon_size);
+
+  /* determine the icon factory */
+  icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (menu));
+  icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+  /* determine all applications that are claim to be able to handle the file */
+  applications = thunar_vfs_mime_database_get_applications (open_with_action->mime_database, info);
+
+  /* determine the default application (fallback to the first available application) */
+  default_application = thunar_vfs_mime_database_get_default_application (open_with_action->mime_database, info);
+  if (G_UNLIKELY (default_application == NULL && applications != NULL))
+    default_application = thunar_vfs_mime_application_ref (applications->data);
+
+  /* add a menu entry for the default application */
+  if (G_LIKELY (default_application != NULL))
+    {
+      /* drop the default application from the application list */
+      lp = g_list_find (applications, default_application);
+      if (G_LIKELY (lp != NULL))
+        {
+          applications = g_list_delete_link (applications, lp);
+          thunar_vfs_mime_application_unref (default_application);
+        }
+
+      text = g_strdup_printf (_("%s (default)"), thunar_vfs_mime_application_get_name (default_application));
+      item = gtk_image_menu_item_new_with_label (text);
+      g_object_set_data_full (G_OBJECT (item), "thunar-vfs-mime-application", default_application, (GDestroyNotify) thunar_vfs_mime_application_unref);
+      g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (thunar_open_with_action_activated), open_with_action);
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+      g_free (text);
+
+      /* setup the icon for the application */
+      icon_name = thunar_vfs_mime_application_lookup_icon_name (default_application, icon_theme);
+      icon = thunar_icon_factory_load_icon (icon_factory, icon_name, icon_size, NULL, FALSE);
+      image = gtk_image_new_from_pixbuf (icon);
+      gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+      gtk_widget_show (image);
+      if (G_LIKELY (icon != NULL))
+        g_object_unref (icon);
+
+      item = gtk_separator_menu_item_new ();
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+    }
+
+  /* add the other possible applications */
+  if (G_LIKELY (applications != NULL))
+    {
+      for (lp = applications; lp != NULL; lp = lp->next)
+        {
+          item = gtk_image_menu_item_new_with_label (thunar_vfs_mime_application_get_name (lp->data));
+          g_object_set_data_full (G_OBJECT (item), "thunar-vfs-mime-application", lp->data, (GDestroyNotify) thunar_vfs_mime_application_unref);
+          g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (thunar_open_with_action_activated), open_with_action);
+          gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+          gtk_widget_show (item);
+
+          /* setup the icon for the application */
+          icon_name = thunar_vfs_mime_application_lookup_icon_name (lp->data, icon_theme);
+          icon = thunar_icon_factory_load_icon (icon_factory, icon_name, icon_size, NULL, FALSE);
+          image = gtk_image_new_from_pixbuf (icon);
+          gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+          gtk_widget_show (image);
+          if (G_LIKELY (icon != NULL))
+            g_object_unref (icon);
+        }
+
+      item = gtk_separator_menu_item_new ();
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+      gtk_widget_show (item);
+
+      g_list_free (applications);
+    }
+
+  /* add our custom children */
+  item = gtk_image_menu_item_new_with_label (_("Other Application..."));
+  g_signal_connect_swapped (G_OBJECT (item), "activate", G_CALLBACK (gtk_action_activate), open_with_action);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show (item);
+
+  /* clean up */
+  g_object_unref (G_OBJECT (icon_factory));
+}
+
+
+
+static void
+thunar_open_with_action_file_destroy (ThunarFile           *file,
+                                      ThunarOpenWithAction *open_with_action)
+{
+  g_return_if_fail (THUNAR_IS_OPEN_WITH_ACTION (open_with_action));
+  g_return_if_fail (open_with_action->file == file);
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* just unset the file here (will automatically hide the action) */
+  thunar_open_with_action_set_file (open_with_action, NULL);
+}
+
+
+
+/**
+ * thunar_open_with_action_new:
+ * @name  : the name of the #ThunarOpenWithAction.
+ * @label : the label of the #ThunarOpenWithAction.
+ *
+ * Allocates a new #ThunarOpenWithAction instance
+ * and returns it.
+ *
+ * Return value: the newly allocated #ThunarOpenWithAction
+ *               instance.
+ **/
+GtkAction*
+thunar_open_with_action_new (const gchar *name,
+                             const gchar *label)
+{
+  g_return_val_if_fail (name != NULL, NULL);
+
+  return g_object_new (THUNAR_TYPE_OPEN_WITH_ACTION,
+                       "hide-if-empty", FALSE,
+                       "label", label,
+                       "name", name,
+                       "visible", FALSE,
+                       NULL);
+}
+
+
+
+/**
+ * thunar_open_with_action_get_file:
+ * @open_with_action : a #ThunarOpenWithAction.
+ *
+ * Returns the #ThunarFile set for the @open_with_action,
+ * which may be %NULL.
+ *
+ * Return value: the #ThunarFile for @open_with_action.
+ **/
+ThunarFile*
+thunar_open_with_action_get_file (ThunarOpenWithAction *open_with_action)
+{
+  g_return_val_if_fail (THUNAR_IS_OPEN_WITH_ACTION (open_with_action), NULL);
+  return open_with_action->file;
+}
+
+
+
+/**
+ * thunar_open_with_action_set_file:
+ * @open_with_action : a #ThunarOpenWithAction.
+ * @file             : a #ThunarFile or %NULL.
+ *
+ * Tells @open_with_action to display a selector menu
+ * for @file.
+ *
+ * The @open_with_action will be visible if @file is
+ * not %NULL, else it's invisible.
+ **/
+void
+thunar_open_with_action_set_file (ThunarOpenWithAction *open_with_action,
+                                  ThunarFile           *file)
+{
+  GtkWidget *menu;
+  GSList    *lp;
+  GList     *children;
+
+  g_return_if_fail (THUNAR_IS_OPEN_WITH_ACTION (open_with_action));
+  g_return_if_fail (file == NULL || THUNAR_IS_FILE (file));
+
+  /* check that we have different files */
+  if (G_UNLIKELY (open_with_action->file == file))
+    return;
+
+  /* disconnect from the previous file */
+  if (G_LIKELY (open_with_action->file != NULL))
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (open_with_action->file), thunar_open_with_action_file_destroy, open_with_action);
+      g_object_unref (G_OBJECT (open_with_action->file));
+    }
+
+  /* activate the new file */
+  open_with_action->file = file;
+
+  /* connect to the new file */
+  if (G_LIKELY (file != NULL))
+    {
+      g_object_ref (G_OBJECT (file));
+      g_signal_connect (G_OBJECT (file), "destroy", G_CALLBACK (thunar_open_with_action_file_destroy), open_with_action);
+    }
+
+  /* clear menus for all menu proxies (will be rebuild on-demand) */
+  for (lp = gtk_action_get_proxies (GTK_ACTION (open_with_action)); lp != NULL; lp = lp->next)
+    if (G_LIKELY (GTK_IS_MENU_ITEM (lp->data)))
+      {
+        menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (lp->data));
+        if (G_LIKELY (menu != NULL))
+          {
+            children = gtk_container_get_children (GTK_CONTAINER (menu));
+            g_list_foreach (children, (GFunc) gtk_widget_destroy, NULL);
+            g_list_free (children);
+          }
+      }
+        
+
+  /* toggle the visibility of the action */
+#if GTK_CHECK_VERSION(2,6,0)
+  gtk_action_set_visible (GTK_ACTION (open_with_action), (file != NULL && !thunar_file_is_directory (file)));
+#else
+  g_object_set (G_OBJECT (open_with_action), "visible", (file != NULL && !thunar_file_is_directory (file)), NULL);
+#endif
+
+  /* notify listeners */
+  g_object_notify (G_OBJECT (open_with_action), "file");
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-open-with-action.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+/* $Id: thunar-open-with-action.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_OPEN_WITH_ACTION_H__
+#define __THUNAR_OPEN_WITH_ACTION_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarOpenWithActionClass ThunarOpenWithActionClass;
+typedef struct _ThunarOpenWithAction      ThunarOpenWithAction;
+
+#define THUNAR_TYPE_OPEN_WITH_ACTION            (thunar_open_with_action_get_type ())
+#define THUNAR_OPEN_WITH_ACTION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_OPEN_WITH_ACTION, ThunarOpenWithAction))
+#define THUNAR_OPEN_WITH_ACTION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_OPEN_WITH_ACTION, ThunarOpenWithActionClass))
+#define THUNAR_IS_OPEN_WITH_ACTION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_OPEN_WITH_ACTION))
+#define THUNAR_IS_OPEN_WITH_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_OPEN_WITH_ACTION))
+#define THUNAR_OPEN_WITH_ACTION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_OPEN_WITH_ACTION, ThunarOpenWithActionClass))
+
+GType       thunar_open_with_action_get_type (void) G_GNUC_CONST;
+
+GtkAction  *thunar_open_with_action_new      (const gchar          *name,
+                                              const gchar          *label) G_GNUC_MALLOC;
+
+ThunarFile *thunar_open_with_action_get_file (ThunarOpenWithAction *open_with_action);
+void        thunar_open_with_action_set_file (ThunarOpenWithAction *open_with_action,
+                                              ThunarFile           *file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_OPEN_WITH_ACTION_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,763 @@
+/* $Id: thunar-path-entry.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ *
+ * The icon code is based on ideas from SexyIconEntry, which was written by
+ * Christian Hammond <chipx86 at chipx86.com>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-path-entry.h>
+
+
+
+#define ICON_MARGIN (2)
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CURRENT_FILE,
+};
+
+
+
+static void     thunar_path_entry_class_init            (ThunarPathEntryClass *klass);
+static void     thunar_path_entry_editable_init         (GtkEditableClass     *iface);
+static void     thunar_path_entry_init                  (ThunarPathEntry      *path_entry);
+static void     thunar_path_entry_finalize              (GObject              *object);
+static void     thunar_path_entry_get_property          (GObject              *object,  
+                                                         guint                 prop_id,
+                                                         GValue               *value,
+                                                         GParamSpec           *pspec);
+static void     thunar_path_entry_set_property          (GObject              *object,  
+                                                         guint                 prop_id,
+                                                         const GValue         *value,
+                                                         GParamSpec           *pspec);
+static void     thunar_path_entry_size_request          (GtkWidget            *widget,
+                                                         GtkRequisition       *requisition);
+static void     thunar_path_entry_size_allocate         (GtkWidget            *widget,
+                                                         GtkAllocation        *allocation);
+static void     thunar_path_entry_realize               (GtkWidget            *widget);
+static void     thunar_path_entry_unrealize             (GtkWidget            *widget);
+static gboolean thunar_path_entry_focus                 (GtkWidget            *widget,
+                                                         GtkDirectionType      direction);
+static gboolean thunar_path_entry_expose_event          (GtkWidget            *widget,
+                                                         GdkEventExpose       *event);
+static gboolean thunar_path_entry_button_press_event    (GtkWidget            *widget,
+                                                         GdkEventButton       *event);
+static gboolean thunar_path_entry_button_release_event  (GtkWidget            *widget,
+                                                         GdkEventButton       *event);
+static gboolean thunar_path_entry_motion_notify_event   (GtkWidget            *widget,
+                                                         GdkEventMotion       *event);
+static void     thunar_path_entry_drag_data_get         (GtkWidget            *widget,
+                                                         GdkDragContext       *context,
+                                                         GtkSelectionData     *selection_data,
+                                                         guint                 info,
+                                                         guint                 time);
+static void     thunar_path_entry_activate              (GtkEntry             *entry);
+static void     thunar_path_entry_changed               (GtkEditable          *editable);
+static void     thunar_path_entry_get_borders           (ThunarPathEntry      *path_entry,
+                                                         gint                 *xborder,
+                                                         gint                 *yborder);
+static void     thunar_path_entry_get_text_area_size    (ThunarPathEntry      *path_entry,
+                                                         gint                 *x,
+                                                         gint                 *y,
+                                                         gint                 *width,
+                                                         gint                 *height);
+
+
+
+struct _ThunarPathEntryClass
+{
+  GtkEntryClass __parent__;
+};
+
+struct _ThunarPathEntry
+{
+  GtkEntry __parent__;
+
+  ThunarIconFactory *icon_factory;
+  ThunarFile        *current_file;
+  GdkWindow         *icon_area;
+
+  gint               drag_button;
+  gint               drag_x;
+  gint               drag_y;
+};
+
+
+
+static const GtkTargetEntry drag_targets[] =
+{
+  { "text/uri-list", 0, 0, },
+};
+
+static GtkEditableClass *thunar_path_entry_editable_parent_iface;
+
+G_DEFINE_TYPE_WITH_CODE (ThunarPathEntry,
+                         thunar_path_entry,
+                         GTK_TYPE_ENTRY,
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
+                                                thunar_path_entry_editable_init));
+
+
+
+static void
+thunar_path_entry_class_init (ThunarPathEntryClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GtkEntryClass  *gtkentry_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_path_entry_finalize;
+  gobject_class->get_property = thunar_path_entry_get_property;
+  gobject_class->set_property = thunar_path_entry_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->size_request = thunar_path_entry_size_request;
+  gtkwidget_class->size_allocate = thunar_path_entry_size_allocate;
+  gtkwidget_class->realize = thunar_path_entry_realize;
+  gtkwidget_class->unrealize = thunar_path_entry_unrealize;
+  gtkwidget_class->focus = thunar_path_entry_focus;
+  gtkwidget_class->expose_event = thunar_path_entry_expose_event;
+  gtkwidget_class->button_press_event = thunar_path_entry_button_press_event;
+  gtkwidget_class->button_release_event = thunar_path_entry_button_release_event;
+  gtkwidget_class->motion_notify_event = thunar_path_entry_motion_notify_event;
+  gtkwidget_class->drag_data_get = thunar_path_entry_drag_data_get;
+
+  gtkentry_class = GTK_ENTRY_CLASS (klass);
+  gtkentry_class->activate = thunar_path_entry_activate;
+
+  /**
+   * ThunarPathEntry:current-file:
+   *
+   * The #ThunarFile currently displayed by the path entry or %NULL.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_CURRENT_FILE,
+                                   g_param_spec_object ("current-file",
+                                                        _("Current file"),
+                                                        _("The currently displayed file"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarPathEntry:icon-size:
+   *
+   * The preferred size of the icon displayed in the path entry.
+   **/
+  gtk_widget_class_install_style_property (gtkwidget_class,
+                                           g_param_spec_int ("icon-size",
+                                                             _("Icon size"),
+                                                             _("The icon size for the path entry"),
+                                                             1, G_MAXINT, 16, EXO_PARAM_READABLE));
+}
+
+
+
+static void
+thunar_path_entry_editable_init (GtkEditableClass *iface)
+{
+  thunar_path_entry_editable_parent_iface = g_type_interface_peek_parent (iface);
+
+  iface->changed = thunar_path_entry_changed;
+}
+
+
+
+static void
+thunar_path_entry_init (ThunarPathEntry *path_entry)
+{
+  path_entry->drag_button = -1;
+}
+
+
+
+static void
+thunar_path_entry_finalize (GObject *object)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (object);
+
+  if (G_LIKELY (path_entry->current_file != NULL))
+    g_object_unref (G_OBJECT (path_entry->current_file));
+
+  G_OBJECT_CLASS (thunar_path_entry_parent_class)->finalize (object);
+}
+
+
+
+static void
+thunar_path_entry_get_property (GObject    *object,  
+                                guint       prop_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_FILE:
+      g_value_set_object (value, thunar_path_entry_get_current_file (path_entry));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_path_entry_set_property (GObject      *object,  
+                                guint         prop_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_FILE:
+      thunar_path_entry_set_current_file (path_entry, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_path_entry_size_request (GtkWidget      *widget,
+                                GtkRequisition *requisition)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  gint             text_height;
+  gint             icon_size;
+  gint             xborder;
+  gint             yborder;
+
+  gtk_widget_style_get (GTK_WIDGET (widget),
+                        "icon-size", &icon_size,
+                        NULL);
+
+  GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->size_request (widget, requisition);
+
+  thunar_path_entry_get_text_area_size (path_entry, &xborder, &yborder, NULL, &text_height);
+
+  requisition->width += icon_size + xborder + 2 * ICON_MARGIN;
+  requisition->height = 2 * yborder + MAX (icon_size + 2 * ICON_MARGIN, text_height);
+}
+
+
+
+static void
+thunar_path_entry_size_allocate (GtkWidget     *widget,
+                                 GtkAllocation *allocation)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  GtkAllocation    icon_allocation;
+  GtkAllocation    text_allocation;
+  gint             icon_size;
+  gint             text_height;
+  gint             xborder;
+  gint             yborder;
+
+  gtk_widget_style_get (GTK_WIDGET (widget),
+                        "icon-size", &icon_size,
+                        NULL);
+
+  widget->allocation = *allocation;
+
+  thunar_path_entry_get_text_area_size (path_entry, &xborder, &yborder, NULL, &text_height);
+
+  text_allocation.y = yborder;
+  text_allocation.width = allocation->width - icon_size - 2 * xborder - 2 * ICON_MARGIN;
+  text_allocation.height = text_height;
+
+  icon_allocation.y = yborder;
+  icon_allocation.width = icon_size + 2 * ICON_MARGIN;
+  icon_allocation.height = MAX (icon_size + 2 * ICON_MARGIN, text_height);
+
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+    {
+      text_allocation.x = xborder;
+      icon_allocation.x = allocation->width - icon_allocation.width - xborder - 2 * ICON_MARGIN;
+    }
+  else
+    {
+      icon_allocation.x = xborder;
+      text_allocation.x = allocation->width - text_allocation.width - xborder;
+    }
+
+  GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->size_allocate (widget, allocation);
+
+  if (GTK_WIDGET_REALIZED (widget))
+    {
+      gdk_window_move_resize (GTK_ENTRY (path_entry)->text_area,
+                              text_allocation.x,
+                              text_allocation.y,
+                              text_allocation.width,
+                              text_allocation.height);
+
+      gdk_window_move_resize (path_entry->icon_area,
+                              icon_allocation.x,
+                              icon_allocation.y,
+                              icon_allocation.width,
+                              icon_allocation.height);
+    }
+}
+
+
+
+static void
+thunar_path_entry_realize (GtkWidget *widget)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  GdkWindowAttr    attributes;
+  GtkIconTheme    *icon_theme;
+  gint             attributes_mask;
+  gint             text_height;
+  gint             icon_size;
+  gint             spacing;
+
+  /* query the proper icon factory */
+  icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+  path_entry->icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+  gtk_widget_style_get (GTK_WIDGET (widget),
+                        "icon-size", &icon_size,
+                        NULL);
+
+  GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->realize (widget);
+
+  thunar_path_entry_get_text_area_size (path_entry, NULL, NULL, NULL, &text_height);
+  spacing = widget->requisition.height -text_height;
+
+  attributes.window_type = GDK_WINDOW_CHILD;
+  attributes.wclass = GDK_INPUT_OUTPUT;
+  attributes.visual = gtk_widget_get_visual (widget);
+  attributes.colormap = gtk_widget_get_colormap (widget);
+  attributes.event_mask = gtk_widget_get_events (widget)
+                        | GDK_BUTTON_PRESS_MASK
+                        | GDK_BUTTON_RELEASE_MASK
+                        | GDK_ENTER_NOTIFY_MASK
+                        | GDK_EXPOSURE_MASK
+                        | GDK_LEAVE_NOTIFY_MASK
+                        | GDK_POINTER_MOTION_MASK;
+  attributes.x = widget->allocation.x + widget->allocation.width - icon_size - spacing;
+  attributes.y = widget->allocation.y + (widget->allocation.height - widget->requisition.height) / 2;
+  attributes.width = icon_size + spacing;
+  attributes.height = widget->requisition.height;
+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+  path_entry->icon_area = gdk_window_new (widget->window, &attributes, attributes_mask);
+  gdk_window_set_user_data (path_entry->icon_area, widget);
+  gdk_window_set_background (path_entry->icon_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);
+  gdk_window_show (path_entry->icon_area);
+
+  gtk_widget_queue_resize (widget);
+}
+
+
+
+static void
+thunar_path_entry_unrealize (GtkWidget *widget)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+
+  /* destroy the icon window */
+  gdk_window_set_user_data (path_entry->icon_area, NULL);
+  gdk_window_destroy (path_entry->icon_area);
+  path_entry->icon_area = NULL;
+
+  /* disconnect from the icon factory */
+  g_object_unref (G_OBJECT (path_entry->icon_factory));
+  path_entry->icon_factory = NULL;
+
+  /* let the GtkWidget class do the rest */
+  GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->unrealize (widget);
+}
+
+
+
+static gboolean
+thunar_path_entry_focus (GtkWidget       *widget,
+                         GtkDirectionType direction)
+{
+  return GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->focus (widget, direction);
+}
+
+
+
+static gboolean
+thunar_path_entry_expose_event (GtkWidget      *widget,
+                                GdkEventExpose *event)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  GdkPixbuf       *icon;
+  gint             icon_height;
+  gint             icon_width;
+  gint             icon_size;
+  gint             height;
+  gint             width;
+
+  if (event->window == path_entry->icon_area)
+    {
+      gtk_widget_style_get (GTK_WIDGET (widget),
+                            "icon-size", &icon_size,
+                            NULL);
+
+      gdk_drawable_get_size (GDK_DRAWABLE (path_entry->icon_area), &width, &height);
+
+      gtk_paint_flat_box (widget->style, path_entry->icon_area,
+                          GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE,
+                          NULL, widget, "entry_bg",
+                          0, 0, width, height);
+
+      if (path_entry->current_file == NULL)
+        icon = gtk_widget_render_icon (widget, GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_SMALL_TOOLBAR, "path_entry");
+      else
+        icon = thunar_icon_factory_load_file_icon (path_entry->icon_factory, path_entry->current_file, THUNAR_FILE_ICON_STATE_DEFAULT, icon_size);
+
+      if (G_LIKELY (icon != NULL))
+        {
+          icon_width = gdk_pixbuf_get_width (icon);
+          icon_height = gdk_pixbuf_get_height (icon);
+
+          gdk_draw_pixbuf (path_entry->icon_area,
+                           widget->style->black_gc,
+                           icon, 0, 0,
+                           (width - icon_width) / 2,
+                           (height - icon_height) / 2,
+                           icon_width, icon_height,
+                           GDK_RGB_DITHER_NORMAL, 0, 0);
+
+          g_object_unref (G_OBJECT (icon));
+        }
+    }
+  else
+    {
+      return GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->expose_event (widget, event);
+    }
+
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_path_entry_button_press_event (GtkWidget      *widget,
+                                      GdkEventButton *event)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+
+  if (event->window == path_entry->icon_area && event->button == 1)
+    {
+      /* consume the event */
+      path_entry->drag_button = event->button;
+      path_entry->drag_x = event->x;
+      path_entry->drag_x = event->y;
+      return TRUE;
+    }
+
+  return (*GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->button_press_event) (widget, event);
+}
+
+
+
+static gboolean
+thunar_path_entry_button_release_event (GtkWidget      *widget,
+                                        GdkEventButton *event)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+
+  if (event->window == path_entry->icon_area && event->button == path_entry->drag_button)
+    {
+      /* reset the drag button state */
+      path_entry->drag_button = -1;
+      return TRUE;
+    }
+
+  return (*GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->button_release_event) (widget, event);
+}
+
+
+
+static gboolean
+thunar_path_entry_motion_notify_event (GtkWidget      *widget,
+                                       GdkEventMotion *event)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  GdkDragContext  *context;
+  GtkTargetList   *target_list;
+  GdkPixbuf       *icon;
+  gint             size;
+
+  if (event->window == path_entry->icon_area && path_entry->drag_button >= 0 && path_entry->current_file != NULL
+      && gtk_drag_check_threshold (widget, path_entry->drag_x, path_entry->drag_y, event->x, event->y))
+    {
+      /* create the drag context */
+      target_list = gtk_target_list_new (drag_targets, G_N_ELEMENTS (drag_targets));
+      context = gtk_drag_begin (widget, target_list, GDK_ACTION_COPY | GDK_ACTION_LINK, path_entry->drag_button, (GdkEvent *) event);
+      gtk_target_list_unref (target_list);
+
+      /* setup the drag icon (atleast 24px) */
+      gtk_widget_style_get (widget, "icon-size", &size, NULL);
+      icon = thunar_icon_factory_load_file_icon (path_entry->icon_factory, path_entry->current_file, THUNAR_FILE_ICON_STATE_DEFAULT, MAX (size, 24));
+      if (G_LIKELY (icon != NULL))
+        {
+          gtk_drag_set_icon_pixbuf (context, icon, 0, 0);
+          g_object_unref (G_OBJECT (icon));
+        }
+
+      /* reset the drag button state */
+      path_entry->drag_button = -1;
+
+      return TRUE;
+    }
+
+  return (*GTK_WIDGET_CLASS (thunar_path_entry_parent_class)->motion_notify_event) (widget, event);
+}
+
+
+
+static void
+thunar_path_entry_drag_data_get (GtkWidget        *widget,
+                                 GdkDragContext   *context,
+                                 GtkSelectionData *selection_data,
+                                 guint             info,
+                                 guint             time)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (widget);
+  GList            path_list;
+  gchar           *uri_string;
+
+  /* verify that we actually display a path */
+  if (G_LIKELY (path_entry->current_file != NULL))
+    {
+      /* transform the path for the current file into an uri string list */
+      path_list.data = thunar_file_get_path (path_entry->current_file); path_list.next = path_list.prev = NULL;
+      uri_string = thunar_vfs_path_list_to_string (&path_list);
+
+      /* setup the uri list for the drag selection */
+      gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) uri_string, strlen (uri_string));
+
+      /* clean up */
+      g_free (uri_string);
+    }
+}
+
+
+
+static void
+thunar_path_entry_activate (GtkEntry *entry)
+{
+  GTK_ENTRY_CLASS (thunar_path_entry_parent_class)->activate (entry);
+}
+
+
+
+static void
+thunar_path_entry_changed (GtkEditable *editable)
+{
+  ThunarPathEntry *path_entry = THUNAR_PATH_ENTRY (editable);
+  ThunarVfsPath   *path;
+  const gchar     *text;
+  ThunarFile      *file;
+
+  /* determine the file for the current text */
+  text = gtk_entry_get_text (GTK_ENTRY (editable));
+  path = thunar_vfs_path_new (text, NULL);
+  file = (path != NULL) ? thunar_file_get_for_path (path, NULL) : NULL;
+
+  if (file != path_entry->current_file)
+    {
+      if (G_UNLIKELY (path_entry->current_file != NULL))
+        g_object_unref (G_OBJECT (path_entry->current_file));
+
+      path_entry->current_file = file;
+
+      if (G_UNLIKELY (file != NULL))
+        g_object_ref (G_OBJECT (file));
+
+      g_object_notify (G_OBJECT (path_entry), "current-file");
+    }
+
+  /* cleanup */
+  if (G_UNLIKELY (file != NULL))
+    g_object_unref (G_OBJECT (file));
+  if (G_UNLIKELY (path != NULL))
+    thunar_vfs_path_unref (path);
+}
+
+
+
+static void
+thunar_path_entry_get_borders (ThunarPathEntry *path_entry,
+                               gint            *xborder,
+                               gint            *yborder)
+{
+	gboolean interior_focus;
+	gint     focus_width;
+
+	gtk_widget_style_get (GTK_WIDGET (path_entry),
+                        "focus-line-width", &focus_width,
+                        "interior-focus", &interior_focus,
+                        NULL);
+
+	if (gtk_entry_get_has_frame (GTK_ENTRY (path_entry)))
+    {
+		  *xborder = GTK_WIDGET (path_entry)->style->xthickness;
+  		*yborder = GTK_WIDGET (path_entry)->style->ythickness;
+	  }
+	else
+	  {
+  		*xborder = 0;
+	  	*yborder = 0;
+  	}
+
+	if (!interior_focus)
+	  {
+  		*xborder += focus_width;
+	  	*yborder += focus_width;
+  	}
+}
+
+
+
+static void
+thunar_path_entry_get_text_area_size (ThunarPathEntry *path_entry,
+                                      gint            *x,
+                                      gint            *y,
+                                      gint            *width,
+                                      gint            *height)
+{
+	GtkRequisition requisition;
+	GtkWidget     *widget = GTK_WIDGET (path_entry);
+	gint           xborder;
+  gint           yborder;
+
+	gtk_widget_get_child_requisition (widget, &requisition);
+
+  thunar_path_entry_get_borders (path_entry, &xborder, &yborder);
+
+	if (x != NULL) *x = xborder;
+	if (y != NULL) *y = yborder;
+	if (width  != NULL) *width  = widget->allocation.width - xborder * 2;
+	if (height != NULL) *height = requisition.height - yborder * 2;
+}
+
+
+
+/**
+ * thunar_path_entry_new:
+ * 
+ * Allocates a new #ThunarPathEntry instance.
+ *
+ * Return value: the newly allocated #ThunarPathEntry.
+ **/
+GtkWidget*
+thunar_path_entry_new (void)
+{
+  return g_object_new (THUNAR_TYPE_PATH_ENTRY, NULL);
+}
+
+
+
+/**
+ * thunar_path_entry_get_current_file:
+ * @path_entry : a #ThunarPathEntry.
+ *
+ * Returns the #ThunarFile currently being displayed by
+ * @path_entry or %NULL if @path_entry doesn't contain
+ * a valid #ThunarFile.
+ *
+ * Return value: the #ThunarFile for @path_entry or %NULL.
+ **/
+ThunarFile*
+thunar_path_entry_get_current_file (ThunarPathEntry *path_entry)
+{
+  g_return_val_if_fail (THUNAR_IS_PATH_ENTRY (path_entry), NULL);
+  return path_entry->current_file;
+}
+
+
+
+/**
+ * thunar_path_entry_set_current_file:
+ * @path_entry   : a #ThunarPathEntry.
+ * @current_file : a #ThunarFile or %NULL.
+ *
+ * Sets the #ThunarFile that should be displayed by
+ * @path_entry to @current_file.
+ **/
+void
+thunar_path_entry_set_current_file (ThunarPathEntry *path_entry,
+                                    ThunarFile      *current_file)
+{
+  ThunarVfsPath *path;
+  gchar         *uri_string;
+  gchar          text[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  g_return_if_fail (THUNAR_IS_PATH_ENTRY (path_entry));
+  g_return_if_fail (current_file == NULL || THUNAR_IS_FILE (current_file));
+
+  path = (current_file != NULL) ? thunar_file_get_path (current_file) : NULL;
+  if (G_UNLIKELY (path == NULL || thunar_vfs_path_to_string (path, text, sizeof (text), NULL) < 0))
+    {
+      gtk_entry_set_text (GTK_ENTRY (path_entry), "");
+    }
+  else
+    {
+      /* check whether the path text is valid UTF8 */
+      if (g_utf8_validate (text, -1, NULL))
+        {
+          /* we'll display the path if we have valid UTF-8 */
+          gtk_entry_set_text (GTK_ENTRY (path_entry), text);
+        }
+      else
+        {
+          /* display the full URI */
+          uri_string = thunar_vfs_path_dup_uri (path);
+          gtk_entry_set_text (GTK_ENTRY (path_entry), uri_string);
+          g_free (uri_string);
+        }
+    }
+
+  gtk_editable_set_position (GTK_EDITABLE (path_entry), -1);
+
+  gtk_widget_queue_draw (GTK_WIDGET (path_entry));
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-path-entry.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-path-entry.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_PATH_ENTRY_H__
+#define __THUNAR_PATH_ENTRY_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarPathEntryClass ThunarPathEntryClass;
+typedef struct _ThunarPathEntry      ThunarPathEntry;
+
+#define THUNAR_TYPE_PATH_ENTRY            (thunar_path_entry_get_type ())
+#define THUNAR_PATH_ENTRY(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_PATH_ENTRY, ThunarPathEntry))
+#define THUNAR_PATH_ENTRY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_PATH_ENTRY, ThunarPathEntryClass))
+#define THUNAR_IS_PATH_ENTRY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_PATH_ENTRY))
+#define THUNAR_IS_PATH_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_PATH_ENTRY))
+#define THUNAR_PATH_ENTRY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_PATH_ENTRY, ThunarPathEntryClass))
+
+GType       thunar_path_entry_get_type         (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_path_entry_new              (void);
+
+ThunarFile *thunar_path_entry_get_current_file (ThunarPathEntry *path_entry);
+void        thunar_path_entry_set_current_file (ThunarPathEntry *path_entry,
+                                                ThunarFile      *current_file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_PATH_ENTRY_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,359 @@
+/* $Id: thunar-preferences.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <tdb/tdb.h>
+
+#include <thunar/thunar-gobject-extensions.h>
+#include <thunar/thunar-preferences.h>
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_DEFAULT_SHOW_HIDDEN,
+  PROP_LAST_LOCATION_BAR,
+  PROP_LAST_SIDE_PANE,
+  PROP_LAST_VIEW,
+  N_PROPERTIES,
+};
+
+
+
+static void thunar_preferences_class_init   (ThunarPreferencesClass *klass);
+static void thunar_preferences_init         (ThunarPreferences      *preferences);
+static void thunar_preferences_finalize     (GObject                *object);
+static void thunar_preferences_get_property (GObject                *object,
+                                             guint                   prop_id,
+                                             GValue                 *value,
+                                             GParamSpec             *pspec);
+static void thunar_preferences_set_property (GObject                *object,
+                                             guint                   prop_id,
+                                             const GValue           *value,
+                                             GParamSpec             *pspec);
+
+
+
+struct _ThunarPreferencesClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarPreferences
+{
+  GObject __parent__;
+
+  /* the database context */
+  TDB_CONTEXT *context;
+};
+
+
+
+G_DEFINE_TYPE (ThunarPreferences, thunar_preferences, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_preferences_class_init (ThunarPreferencesClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_preferences_finalize;
+  gobject_class->get_property = thunar_preferences_get_property;
+  gobject_class->set_property = thunar_preferences_set_property;
+
+  /* register additional transformation functions */
+  thunar_g_initialize_transformations ();
+
+  /**
+   * ThunarPreferences::default-show-hidden:
+   *
+   * Whether to show hidden files by default in new windows.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_DEFAULT_SHOW_HIDDEN,
+                                   g_param_spec_boolean ("default-show-hidden",
+                                                         "default-show-hidden",
+                                                         "default-show-hidden",
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarPreferences::last-location-bar:
+   *
+   * The name of the widget class, which should be used for the
+   * location bar in #ThunarWindow<!---->s or "void" to hide the
+   * location bar.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LAST_LOCATION_BAR,
+                                   g_param_spec_string ("last-location-bar",
+                                                        "last-location-bar",
+                                                        "last-location-bar",
+                                                        "ThunarLocationButtons",
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarPreferences::last-side-pane:
+   *
+   * The name of the widget class, which should be used for the
+   * side pane in #ThunarWindow<!---->s or "void" to hide the
+   * side pane completely.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LAST_SIDE_PANE,
+                                   g_param_spec_string ("last-side-pane",
+                                                        "last-side-pane",
+                                                        "last-side-pane",
+                                                        "ThunarFavouritesPane",
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarPreferences::last-view:
+   *
+   * The name of the widget class, which should be used for the
+   * main view component in #ThunarWindow<!---->s.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LAST_VIEW,
+                                   g_param_spec_string ("last-view",
+                                                        "last-view",
+                                                        "last-view",
+                                                        "ThunarIconView",
+                                                        EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_preferences_init (ThunarPreferences *preferences)
+{
+  gchar *path;
+
+  /* determine the path to the preferences database */
+  path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, "Thunar/preferences.tdb", TRUE);
+  if (G_UNLIKELY (path == NULL))
+    {
+      path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, "Thunar/", FALSE);
+      g_warning (_("Failed to create the Thunar configuration directory in %s"), path);
+      g_free (path);
+      return;
+    }
+
+  /* try to open the preferences database file */
+  preferences->context = tdb_open (path, 0, TDB_DEFAULT, O_CREAT | O_RDWR, 0600);
+  if (G_UNLIKELY (preferences->context == NULL))
+    g_warning (_("Failed to open preferences database in %s: %s"), path, g_strerror (errno));
+
+  /* release the path */
+  g_free (path);
+}
+
+
+
+static void
+thunar_preferences_finalize (GObject *object)
+{
+  ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
+
+  /* close the database (if open) */
+  if (G_LIKELY (preferences->context != NULL))
+    tdb_close (preferences->context);
+
+  (*G_OBJECT_CLASS (thunar_preferences_parent_class)->finalize) (object);
+}
+
+
+
+static inline void
+value_take_string (GValue  *value,
+                   gpointer data)
+{
+  if (G_LIKELY (g_mem_is_system_malloc ()))
+    {
+      g_value_take_string (value, data);
+    }
+  else
+    {
+      g_value_set_string (value, data);
+      free (data);
+    }
+}
+
+
+
+static void
+thunar_preferences_get_property (GObject    *object,
+                                 guint       prop_id,
+                                 GValue     *value,
+                                 GParamSpec *pspec)
+{
+  ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
+  TDB_DATA           data;
+  GValue             tmp = { 0, };
+
+  g_return_if_fail (prop_id > PROP_0 && prop_id < N_PROPERTIES);
+
+  /* check if we have a database handle */
+  if (G_LIKELY (preferences->context != NULL))
+    {
+      /* use the param spec's name as key */
+      data.dptr = pspec->name;
+      data.dsize = strlen (data.dptr);
+
+      /* lookup the data for the key */
+      data = tdb_fetch (preferences->context, data);
+      if (data.dptr != NULL && data.dsize > 0 && data.dptr[data.dsize - 1] == '\0')
+        {
+          /* check if we have a string or can transform */
+          if (G_VALUE_TYPE (value) == G_TYPE_STRING)
+            {
+              value_take_string (value, data.dptr);
+              return;
+            }
+          else if (g_value_type_transformable (G_TYPE_STRING, G_VALUE_TYPE (value)))
+            {
+              /* try to transform the string */
+              g_value_init (&tmp, G_TYPE_STRING);
+              value_take_string (&tmp, data.dptr);
+              if (g_value_transform (&tmp, value))
+                {
+                  g_value_unset (&tmp);
+                  return;
+                }
+              g_value_unset (&tmp);
+
+              /* data.dptr was freed by the g_value_unset() call */
+              data.dptr = NULL;
+            }
+        }
+
+      /* release the data (if any) */
+      if (data.dptr != NULL)
+        free (data.dptr);
+    }
+
+  /* set the default value */
+  g_param_value_set_default (pspec, value);
+}
+
+
+
+static void
+thunar_preferences_set_property (GObject      *object,
+                                 guint         prop_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
+{
+  ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
+  TDB_DATA           data;
+  TDB_DATA           key;
+  GValue             dst = { 0, };
+
+  g_return_if_fail (prop_id > PROP_0 && prop_id < N_PROPERTIES);
+
+  /* save the new value if we have a database handle */
+  if (G_LIKELY (preferences->context != NULL))
+    {
+      /* generate the key for the operation */
+      key.dptr = pspec->name;
+      key.dsize = strlen (key.dptr);
+
+      /* check if we have the default value here */
+      if (g_param_value_defaults (pspec, (GValue *) value))
+        {
+          /* just delete as we don't store defaults */
+          tdb_delete (preferences->context, key);
+        }
+      else
+        {
+          /* transform the value to a string */
+          g_value_init (&dst, G_TYPE_STRING);
+          if (!g_value_transform (value, &dst))
+            g_warning ("Unable to transform %s to %s", g_type_name (G_VALUE_TYPE (value)), g_type_name (G_VALUE_TYPE (&dst)));
+
+          /* setup the data value (we also store the '\0' byte) */
+          data.dptr = (gchar *) g_value_get_string (&dst);
+          data.dsize = strlen (data.dptr) + 1;
+
+          /* perform the store operation */
+          tdb_store (preferences->context, key, data, TDB_REPLACE);
+
+          /* release the string */
+          g_value_unset (&dst);
+        }
+    }
+}
+
+
+
+/**
+ * thunar_preferences_get:
+ *
+ * Queries the global #ThunarPreferences instance, which is shared
+ * by all modules. The function automatically takes a reference
+ * for the caller, so you'll need to call g_object_unref() when
+ * you're done with it.
+ *
+ * Return value: the global #ThunarPreferences instance.
+ **/
+ThunarPreferences*
+thunar_preferences_get (void)
+{
+  static ThunarPreferences *preferences = NULL;
+
+  if (G_UNLIKELY (preferences == NULL))
+    {
+      preferences = g_object_new (THUNAR_TYPE_PREFERENCES, NULL);
+      g_object_add_weak_pointer (G_OBJECT (preferences),
+                                 (gpointer) &preferences);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (preferences));
+    }
+
+  return preferences;
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-preferences.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-preferences.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_PREFERENCES_H__
+#define __THUNAR_PREFERENCES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarPreferencesClass ThunarPreferencesClass;
+typedef struct _ThunarPreferences      ThunarPreferences;
+
+#define THUNAR_TYPE_PREFERENCES             (thunar_preferences_get_type ())
+#define THUNAR_PREFERENCES(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_PREFERENCES, ThunarPreferences))
+#define THUNAR_PREFERENCES_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_PREFERENCES, ThunarPreferencesClass))
+#define THUNAR_IS_PREFERENCES(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_PREFERENCES))
+#define THUNAR_IS_PREFERENCES_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_PREFERENCES))
+#define THUNAR_PREFERENCES_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_PREFERENCES, ThunarPreferencesClass))
+
+GType              thunar_preferences_get_type (void) G_GNUC_CONST;
+
+ThunarPreferences *thunar_preferences_get      (void);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_PREFERENCES_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,583 @@
+/* $Id: thunar-progress-dialog.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
+#include <thunar/thunar-progress-dialog.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_JOB,
+};
+
+
+
+static void                             thunar_progress_dialog_class_init   (ThunarProgressDialogClass      *klass);
+static void                             thunar_progress_dialog_init         (ThunarProgressDialog           *dialog);
+static void                             thunar_progress_dialog_dispose      (GObject                        *object);
+static void                             thunar_progress_dialog_get_property (GObject                        *object,
+                                                                             guint                           prop_id,
+                                                                             GValue                         *value,
+                                                                             GParamSpec                     *pspec);
+static void                             thunar_progress_dialog_set_property (GObject                        *object,
+                                                                             guint                           prop_id,
+                                                                             const GValue                   *value,
+                                                                             GParamSpec                     *pspec);
+static void                             thunar_progress_dialog_response     (GtkDialog                      *dialog,
+                                                                             gint                            response);
+static ThunarVfsInteractiveJobResponse  thunar_progress_dialog_ask          (ThunarProgressDialog           *dialog,
+                                                                             const gchar                    *message,
+                                                                             ThunarVfsInteractiveJobResponse choices,
+                                                                             ThunarVfsJob                   *job);
+static void                             thunar_progress_dialog_error        (ThunarProgressDialog           *dialog,
+                                                                             GError                         *error,
+                                                                             ThunarVfsJob                   *job);
+static void                             thunar_progress_dialog_finished     (ThunarProgressDialog           *dialog,
+                                                                             ThunarVfsJob                   *job);
+static void                             thunar_progress_dialog_info_message (ThunarProgressDialog           *dialog,
+                                                                             const gchar                    *message,
+                                                                             ThunarVfsJob                   *job);
+static void                             thunar_progress_dialog_percent      (ThunarProgressDialog           *dialog,
+                                                                             gdouble                         percent,
+                                                                             ThunarVfsJob                   *job);
+
+
+
+struct _ThunarProgressDialogClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarProgressDialog
+{
+  GtkDialog __parent__;
+
+  ThunarVfsJob *job;
+
+  GTimeVal      start_time;
+  GTimeVal      last_update_time;
+
+  GtkWidget    *progress_bar;
+  GtkWidget    *progress_label;
+};
+
+
+
+G_DEFINE_TYPE (ThunarProgressDialog, thunar_progress_dialog, GTK_TYPE_DIALOG);
+
+
+
+static gboolean
+transform_to_markup (const GValue *src_value,
+                     GValue       *dst_value,
+                     gpointer      user_data)
+{
+  g_value_take_string (dst_value, g_strdup_printf ("<big>%s</big>", g_value_get_string (src_value)));
+  return TRUE;
+}
+
+
+
+static void
+thunar_progress_dialog_class_init (ThunarProgressDialogClass *klass)
+{
+  GtkDialogClass *gtkdialog_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_progress_dialog_dispose;
+  gobject_class->get_property = thunar_progress_dialog_get_property;
+  gobject_class->set_property = thunar_progress_dialog_set_property;
+
+  gtkdialog_class = GTK_DIALOG_CLASS (klass);
+  gtkdialog_class->response = thunar_progress_dialog_response;
+
+  /**
+   * ThunarProgressDialog:job:
+   *
+   * The #ThunarVfsInteractiveJob, whose progress is displayed by
+   * this dialog, or %NULL if no job is set.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_JOB,
+                                   g_param_spec_object ("job",
+                                                        _("Job"),
+                                                        _("The job whose progress to display"),
+                                                        THUNAR_VFS_TYPE_INTERACTIVE_JOB,
+                                                        EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_progress_dialog_init (ThunarProgressDialog *dialog)
+{
+  GtkWidget *table;
+  GtkWidget *image;
+  GtkWidget *label;
+
+  /* remember the current time as start time */
+  g_get_current_time (&dialog->start_time);
+
+  gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+  gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+
+  gtk_window_set_default_size (GTK_WINDOW (dialog), 350, -1);
+
+  table = g_object_new (GTK_TYPE_TABLE,
+                        "border-width", 6,
+                        "n-columns", 3,
+                        "n-rows", 3,
+                        "row-spacing", 6,
+                        "column-spacing", 5,
+                        NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), table, TRUE, TRUE, 0);
+  gtk_widget_show (table);
+
+  image = g_object_new (GTK_TYPE_IMAGE, "icon-size", GTK_ICON_SIZE_BUTTON, NULL);
+  gtk_table_attach (GTK_TABLE (table), image, 0, 1, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6);
+  gtk_widget_show (image);
+
+  label = g_object_new (GTK_TYPE_LABEL, "use-markup", TRUE, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6);
+  gtk_widget_show (label);
+
+  dialog->progress_label = g_object_new (EXO_TYPE_ELLIPSIZED_LABEL, "ellipsize", EXO_PANGO_ELLIPSIZE_START, "xalign", 0.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), dialog->progress_label, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->progress_label);
+
+  dialog->progress_bar = g_object_new (GTK_TYPE_PROGRESS_BAR, "text", " ", NULL);
+  gtk_table_attach (GTK_TABLE (table), dialog->progress_bar, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->progress_bar);
+
+  /* connect the window icon name to the action image */
+  exo_binding_new (G_OBJECT (dialog), "icon-name",
+                   G_OBJECT (image), "icon-name");
+
+  /* connect the window title to the action label */
+  exo_binding_new_full (G_OBJECT (dialog), "title",
+                        G_OBJECT (label), "label",
+                        transform_to_markup, NULL, NULL);
+}
+
+
+
+static void
+thunar_progress_dialog_dispose (GObject *object)
+{
+  ThunarProgressDialog *dialog = THUNAR_PROGRESS_DIALOG (object);
+
+  /* disconnect from the job (if any) */
+  thunar_progress_dialog_set_job (dialog, NULL);
+
+  (*G_OBJECT_CLASS (thunar_progress_dialog_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_progress_dialog_get_property (GObject    *object,
+                                     guint       prop_id,
+                                     GValue     *value,
+                                     GParamSpec *pspec)
+{
+  ThunarProgressDialog *dialog = THUNAR_PROGRESS_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_JOB:
+      g_value_set_object (value, thunar_progress_dialog_get_job (dialog));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_progress_dialog_set_property (GObject      *object,
+                                     guint         prop_id,
+                                     const GValue *value,
+                                     GParamSpec   *pspec)
+{
+  ThunarProgressDialog *dialog = THUNAR_PROGRESS_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_JOB:
+      thunar_progress_dialog_set_job (dialog, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarVfsInteractiveJobResponse
+thunar_progress_dialog_ask (ThunarProgressDialog           *dialog,
+                            const gchar                    *message,
+                            ThunarVfsInteractiveJobResponse choices,
+                            ThunarVfsJob                   *job)
+{
+  const gchar *mnemonic;
+  GtkWidget   *question;
+  GtkWidget   *hbox;
+  GtkWidget   *image;
+  GtkWidget   *label;
+  GtkWidget   *button;
+  gint         response;
+  gint         n;
+
+  g_return_val_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog), THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+  g_return_val_if_fail (g_utf8_validate (message, -1, NULL), THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+  g_return_val_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (job), THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+  g_return_val_if_fail (dialog->job == job, THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+
+  /* be sure to display the progress dialog prior to opening the question dialog */
+  gtk_widget_show_now (GTK_WIDGET (dialog));
+
+  question = g_object_new (GTK_TYPE_DIALOG,
+                           "has-separator", FALSE,
+                           "resizable", FALSE,
+                           "title", _("Question"),
+                           NULL);
+  gtk_window_set_transient_for (GTK_WINDOW (question), GTK_WINDOW (dialog));
+
+  hbox = g_object_new (GTK_TYPE_HBOX, "border-width", 12, "spacing", 12, NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (question)->vbox), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+  gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+  gtk_widget_show (image);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", message, "xalign", 0, "yalign", 0, NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+  gtk_widget_show (label);
+
+  /* add the buttons based on the possible choices */
+  for (n = 3; n >= 0; --n)
+    {
+      response = choices & (1 << n);
+      if (response == 0)
+        continue;
+
+      switch (response)
+        {
+        case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES:
+          mnemonic = _("_Yes");
+          break;
+
+        case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL:
+          mnemonic = _("Yes to _all");
+          break;
+
+        case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO:
+          mnemonic = _("_No");
+          break;
+
+        case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL:
+          mnemonic = _("_Cancel");
+          break;
+
+        default:
+          g_assert_not_reached ();
+          break;
+        }
+
+      button = gtk_button_new_with_mnemonic (mnemonic);
+      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+      gtk_dialog_add_action_widget (GTK_DIALOG (question), button, response);
+      gtk_widget_show (button);
+
+      gtk_dialog_set_default_response (GTK_DIALOG (question), response);
+    }
+
+  /* run the question */
+  response = gtk_dialog_run (GTK_DIALOG (question));
+  gtk_widget_destroy (question);
+
+  /* transform the result as required */
+  if (G_UNLIKELY (response <= 0))
+    response = THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL;
+
+  return response;
+}
+
+
+
+static void
+thunar_progress_dialog_error (ThunarProgressDialog *dialog,
+                              GError               *error,
+                              ThunarVfsJob         *job)
+{
+  GtkWidget *message;
+
+  g_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog));
+  g_return_if_fail (error != NULL && error->message != NULL);
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (job));
+  g_return_if_fail (dialog->job == job);
+
+  /* be sure to display the progress dialog prior to opening the error dialog */
+  gtk_widget_show_now (GTK_WIDGET (dialog));
+
+  message = gtk_message_dialog_new (GTK_WINDOW (dialog),
+                                    GTK_DIALOG_MODAL |
+                                    GTK_DIALOG_DESTROY_WITH_PARENT,
+                                    GTK_MESSAGE_ERROR,
+                                    GTK_BUTTONS_OK,
+                                    "%s", error->message);
+  gtk_dialog_run (GTK_DIALOG (message));
+  gtk_widget_destroy (message);
+}
+
+
+
+static void
+thunar_progress_dialog_finished (ThunarProgressDialog *dialog,
+                                 ThunarVfsJob         *job)
+{
+  g_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog));
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (job));
+  g_return_if_fail (dialog->job == job);
+
+  gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+}
+
+
+
+static void
+thunar_progress_dialog_info_message (ThunarProgressDialog *dialog,
+                                     const gchar          *message,
+                                     ThunarVfsJob         *job)
+{
+  g_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog));
+  g_return_if_fail (g_utf8_validate (message, -1, NULL));
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (job));
+  g_return_if_fail (dialog->job == job);
+
+  gtk_label_set_text (GTK_LABEL (dialog->progress_label), message);
+}
+
+
+
+static inline guint64
+time_diff (const GTimeVal *now,
+           const GTimeVal *last)
+{
+  return ((guint64) now->tv_sec - last->tv_sec) * G_USEC_PER_SEC
+       + ((guint64) last->tv_usec - last->tv_usec);
+}
+
+
+
+static void
+thunar_progress_dialog_percent (ThunarProgressDialog *dialog,
+                                gdouble               percent,
+                                ThunarVfsJob         *job)
+{
+  GTimeVal current_time;
+  gulong   remaining_time;
+  gulong   elapsed_time;
+  gchar    text[32];
+
+  g_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog));
+  g_return_if_fail (percent >= 0.0 && percent <= 100.0);
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (job));
+  g_return_if_fail (dialog->job == job);
+
+  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (dialog->progress_bar), percent / 100.0);
+
+  /* check if we should update the time display (every 400ms) */
+  g_get_current_time (&current_time);
+  if (time_diff (&current_time, &dialog->last_update_time) > 400 * 1000)
+    {
+      /* calculate the remaining time (in seconds) */
+      elapsed_time = time_diff (&current_time, &dialog->start_time) / 1000;
+      remaining_time = ((100 * elapsed_time) / percent - elapsed_time) / 1000;
+
+      /* setup the time label */
+      if (G_LIKELY (remaining_time > 0))
+        {
+          /* format the time text */
+          if (remaining_time > 60 * 60)
+            {
+              remaining_time = (gulong) (remaining_time / (60 * 60));
+              g_snprintf (text, sizeof (text), ngettext ("(%lu hour remaining)", "(%lu hours remaining)", remaining_time), remaining_time);
+            }
+          else if (remaining_time > 60)
+            {
+              remaining_time = (gulong) (remaining_time / 60);
+              g_snprintf (text, sizeof (text), ngettext ("(%lu minute remaining)", "(%lu minutes remaining)", remaining_time), remaining_time);
+            }
+          else
+            {
+              remaining_time = remaining_time;
+              g_snprintf (text, sizeof (text), ngettext ("(%lu second remaining)", "(%lu seconds remaining)", remaining_time), remaining_time);
+            }
+
+          /* apply the time text */
+          gtk_progress_bar_set_text (GTK_PROGRESS_BAR (dialog->progress_bar), text);
+        }
+      else
+        {
+          /* display an empty label */
+          gtk_progress_bar_set_text (GTK_PROGRESS_BAR (dialog->progress_bar), " ");
+        }
+
+      /* remember the current time as last update time */
+      dialog->last_update_time = current_time;
+    }
+}
+
+
+
+static void
+thunar_progress_dialog_response (GtkDialog *dialog,
+                                 gint       response)
+{
+  /* cancel the job appropriately */
+  switch (response)
+    {
+    case GTK_RESPONSE_NONE:
+    case GTK_RESPONSE_REJECT:
+    case GTK_RESPONSE_DELETE_EVENT:
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_CLOSE:
+    case GTK_RESPONSE_NO:
+      if (G_LIKELY (THUNAR_PROGRESS_DIALOG (dialog)->job != NULL))
+        thunar_vfs_job_cancel (THUNAR_PROGRESS_DIALOG (dialog)->job);
+      break;
+    }
+
+  if (GTK_DIALOG_CLASS (thunar_progress_dialog_parent_class)->response != NULL)
+    (*GTK_DIALOG_CLASS (thunar_progress_dialog_parent_class)->response) (dialog, response);
+}
+
+
+
+/**
+ * thunar_progress_dialog_new:
+ *
+ * Allocates a new #ThunarProgressDialog.
+ *
+ * Return value: the newly allocated #ThunarProgressDialog.
+ **/
+GtkWidget*
+thunar_progress_dialog_new (void)
+{
+  return thunar_progress_dialog_new_with_job (NULL);
+}
+
+
+
+/**
+ * thunar_progress_dialog_new_with_job:
+ * @job : a #ThunarVfsInteractiveJob or %NULL.
+ *
+ * Allocates a new #ThunarProgressDialog and associates it with
+ * the @job.
+ *
+ * Return value: the newly allocated #ThunarProgressDialog.
+ **/
+GtkWidget*
+thunar_progress_dialog_new_with_job (ThunarVfsJob *job)
+{
+  g_return_val_if_fail (job == NULL || THUNAR_VFS_IS_INTERACTIVE_JOB (job), NULL);
+  return g_object_new (THUNAR_TYPE_PROGRESS_DIALOG, "job", job, NULL);
+}
+
+
+
+/**
+ * thunar_progress_dialog_get_job:
+ * @dialog : a #ThunarProgressDialog.
+ *
+ * Returns the #ThunarVfsInteractiveJob associated with @dialog
+ * or %NULL if no job is currently associated with @dialog.
+ *
+ * Return value: the job associated with @dialog or %NULL.
+ **/
+ThunarVfsJob*
+thunar_progress_dialog_get_job (ThunarProgressDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog), NULL);
+  return dialog->job;
+}
+
+
+
+/**
+ * thunar_progress_dialog_set_job:
+ * @dialog : a #ThunarProgressDialog.
+ * @job    : a #ThunarVfsInteractiveJob or %NULL.
+ *
+ * Associates @job with @dialog.
+ **/
+void
+thunar_progress_dialog_set_job (ThunarProgressDialog *dialog,
+                                ThunarVfsJob         *job)
+{
+  g_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog));
+  g_return_if_fail (job == NULL || THUNAR_VFS_IS_INTERACTIVE_JOB (job));
+
+  /* check if we're already on that job */
+  if (G_UNLIKELY (dialog->job == job))
+    return;
+
+  /* disconnect from the previous job */
+  if (G_LIKELY (dialog->job != NULL))
+    {
+      g_signal_handlers_disconnect_matched (dialog->job, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, dialog);
+      g_object_unref (G_OBJECT (dialog->job));
+    }
+
+  /* activate the new job */
+  dialog->job = job;
+
+  /* connect to the new job */
+  if (G_LIKELY (job != NULL))
+    {
+      g_object_ref (G_OBJECT (job));
+
+      g_signal_connect_swapped (job, "ask", G_CALLBACK (thunar_progress_dialog_ask), dialog);
+      g_signal_connect_swapped (job, "error", G_CALLBACK (thunar_progress_dialog_error), dialog);
+      g_signal_connect_swapped (job, "finished", G_CALLBACK (thunar_progress_dialog_finished), dialog);
+      g_signal_connect_swapped (job, "info-message", G_CALLBACK (thunar_progress_dialog_info_message), dialog);
+      g_signal_connect_swapped (job, "percent", G_CALLBACK (thunar_progress_dialog_percent), dialog);
+    }
+
+  g_object_notify (G_OBJECT (dialog), "job");
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-progress-dialog.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+/* $Id: thunar-progress-dialog.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_PROGRESS_DIALOG_H__
+#define __THUNAR_PROGRESS_DIALOG_H__
+
+#include <thunar-vfs/thunar-vfs.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarProgressDialogClass ThunarProgressDialogClass;
+typedef struct _ThunarProgressDialog      ThunarProgressDialog;
+
+#define THUNAR_TYPE_PROGRESS_DIALOG             (thunar_progress_dialog_get_type ())
+#define THUNAR_PROGRESS_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_PROGRESS_DIALOG, ThunarProgressDialog))
+#define THUNAR_PROGRESS_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_PROGRESS_DIALOG, ThunarProgressDialogClass))
+#define THUNAR_IS_PROGRESS_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_PROGRESS_DIALOG))
+#define THUNAR_IS_PROGRESS_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_PROGRESS_DIALOG))
+#define THUNAR_PROGRESS_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_PROGRESS_DIALOG, ThunarProgressDialogClass))
+
+GType         thunar_progress_dialog_get_type      (void) G_GNUC_CONST;
+
+GtkWidget    *thunar_progress_dialog_new           (void) G_GNUC_MALLOC;
+GtkWidget    *thunar_progress_dialog_new_with_job  (ThunarVfsJob         *job) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_progress_dialog_get_job       (ThunarProgressDialog *dialog);
+void          thunar_progress_dialog_set_job       (ThunarProgressDialog *dialog,
+                                                    ThunarVfsJob         *job);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_PROGRESS_DIALOG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,802 @@
+/* $Id: thunar-properties-dialog.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-emblem-chooser.h>
+#include <thunar/thunar-extension-manager.h>
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-properties-dialog.h>
+
+#include <thunarx/thunarx.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_FILE,
+};
+
+
+
+static void     thunar_properties_dialog_class_init           (ThunarPropertiesDialogClass *klass);
+static void     thunar_properties_dialog_init                 (ThunarPropertiesDialog      *dialog);
+static void     thunar_properties_dialog_dispose              (GObject                     *object);
+static void     thunar_properties_dialog_finalize             (GObject                     *object);
+static void     thunar_properties_dialog_get_property         (GObject                     *object,
+                                                               guint                        prop_id,
+                                                               GValue                      *value,
+                                                               GParamSpec                  *pspec);
+static void     thunar_properties_dialog_set_property         (GObject                     *object,
+                                                               guint                        prop_id,
+                                                               const GValue                *value,
+                                                               GParamSpec                  *pspec);
+static gboolean thunar_properties_dialog_key_press_event      (GtkWidget                   *widget,
+                                                               GdkEventKey                 *event);
+static void     thunar_properties_dialog_response             (GtkDialog                   *dialog,
+                                                               gint                         response);
+static void     thunar_properties_dialog_activate             (GtkWidget                   *entry,
+                                                               ThunarPropertiesDialog      *dialog);
+static gboolean thunar_properties_dialog_focus_out_event      (GtkWidget                   *entry,
+                                                               GdkEventFocus               *event,
+                                                               ThunarPropertiesDialog      *dialog);
+static void     thunar_properties_dialog_update               (ThunarPropertiesDialog      *dialog);
+static void     thunar_properties_dialog_update_extensions    (ThunarPropertiesDialog      *dialog);
+static gboolean thunar_properties_dialog_rename_idle          (gpointer                     user_data);
+static void     thunar_properties_dialog_rename_idle_destroy  (gpointer                     user_data);
+
+
+
+struct _ThunarPropertiesDialogClass
+{
+  GtkDialogClass __parent__;
+};
+
+struct _ThunarPropertiesDialog
+{
+  GtkDialog __parent__;
+
+  ThunarExtensionManager *extension_manager;
+  GList                  *extension_pages;
+
+  ThunarVfsVolumeManager *volume_manager;
+  ThunarFile             *file;
+
+  GtkWidget   *notebook;
+  GtkWidget   *icon_image;
+  GtkWidget   *name_entry;
+  GtkWidget   *kind_label;
+  GtkWidget   *modified_label;
+  GtkWidget   *accessed_label;
+  GtkWidget   *volume_image;
+  GtkWidget   *volume_label;
+  GtkWidget   *size_label;
+
+  gint         rename_idle_id;
+};
+
+
+
+G_DEFINE_TYPE (ThunarPropertiesDialog, thunar_properties_dialog, GTK_TYPE_DIALOG);
+
+
+
+static void
+thunar_properties_dialog_class_init (ThunarPropertiesDialogClass *klass)
+{
+  GtkDialogClass *gtkdialog_class;
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_properties_dialog_dispose;
+  gobject_class->finalize = thunar_properties_dialog_finalize;
+  gobject_class->get_property = thunar_properties_dialog_get_property;
+  gobject_class->set_property = thunar_properties_dialog_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->key_press_event = thunar_properties_dialog_key_press_event;
+
+  gtkdialog_class = GTK_DIALOG_CLASS (klass);
+  gtkdialog_class->response = thunar_properties_dialog_response;
+
+  /**
+   * ThunarPropertiesDialog:file:
+   *
+   * The #ThunarFile whose properties are currently displayed by
+   * this #ThunarPropertiesDialog. This property may also be %NULL
+   * in which case nothing is displayed.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("The file displayed by the dialog"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_properties_dialog_init (ThunarPropertiesDialog *dialog)
+{
+  GtkWidget *chooser;
+  GtkWidget *table;
+  GtkWidget *label;
+  GtkWidget *box;
+  GtkWidget *spacer;
+  gchar     *text;
+  gint       row = 0;
+
+  dialog->extension_manager = thunar_extension_manager_get_default ();
+  dialog->volume_manager = thunar_vfs_volume_manager_get_default ();
+  dialog->rename_idle_id = -1;
+
+  gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+                          GTK_STOCK_HELP, GTK_RESPONSE_HELP,
+                          GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+                          NULL);
+  gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+
+  dialog->notebook = gtk_notebook_new ();
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), dialog->notebook, TRUE, TRUE, 0);
+  gtk_widget_show (dialog->notebook);
+
+  table = g_object_new (GTK_TYPE_TABLE,
+                        "border-width", 6,
+                        "column-spacing", 12,
+                        "row-spacing", 6,
+                        NULL);
+  label = gtk_label_new (_("General"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (dialog->notebook), table, label);
+  gtk_widget_show (label);
+  gtk_widget_show (table);
+
+
+  /*
+     First box (icon, name)
+   */
+  box = gtk_hbox_new (FALSE, 6);
+  gtk_table_attach (GTK_TABLE (table), box, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (box);
+
+  dialog->icon_image = gtk_image_new ();
+  gtk_box_pack_start (GTK_BOX (box), dialog->icon_image, FALSE, TRUE, 0);
+  gtk_widget_show (dialog->icon_image);
+
+  text = g_strdup_printf ("<b>%s</b>", _("Name:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  dialog->name_entry = g_object_new (GTK_TYPE_ENTRY, "editable", FALSE, NULL);
+  g_signal_connect (G_OBJECT (dialog->name_entry), "activate", G_CALLBACK (thunar_properties_dialog_activate), dialog);
+  g_signal_connect (G_OBJECT (dialog->name_entry), "focus-out-event", G_CALLBACK (thunar_properties_dialog_focus_out_event), dialog);
+  gtk_table_attach (GTK_TABLE (table), dialog->name_entry, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->name_entry);
+
+  ++row;
+
+
+  spacer = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), spacer, 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (spacer);
+
+  ++row;
+
+
+  /*
+     Second box (kind)
+   */
+  text = g_strdup_printf ("<b>%s</b>", _("Kind:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  exo_binding_new (G_OBJECT (label), "visible", G_OBJECT (spacer), "visible");
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  dialog->kind_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, NULL);
+  exo_binding_new (G_OBJECT (dialog->kind_label), "visible", G_OBJECT (label), "visible");
+  gtk_table_attach (GTK_TABLE (table), dialog->kind_label, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->kind_label);
+
+  ++row;
+
+
+  spacer = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), spacer, 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (spacer);
+
+  ++row;
+
+
+  /*
+     Third box (modified, accessed)
+   */
+  text = g_strdup_printf ("<b>%s</b>", _("Modified:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  dialog->modified_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, NULL);
+  exo_binding_new (G_OBJECT (dialog->modified_label), "visible", G_OBJECT (label), "visible");
+  gtk_table_attach (GTK_TABLE (table), dialog->modified_label, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->modified_label);
+
+  ++row;
+
+  text = g_strdup_printf ("<b>%s</b>", _("Accessed:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  dialog->accessed_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, NULL);
+  exo_binding_new (G_OBJECT (dialog->accessed_label), "visible", G_OBJECT (label), "visible");
+  gtk_table_attach (GTK_TABLE (table), dialog->accessed_label, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->accessed_label);
+
+  ++row;
+
+
+  spacer = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), spacer, 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (spacer);
+
+  ++row;
+
+
+  /*
+     Fourth box (volume, size)
+   */
+  text = g_strdup_printf ("<b>%s</b>", _("Volume:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  box = gtk_hbox_new (FALSE, 6);
+  exo_binding_new (G_OBJECT (box), "visible", G_OBJECT (label), "visible");
+  gtk_table_attach (GTK_TABLE (table), box, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (box);
+
+  dialog->volume_image = gtk_image_new ();
+  exo_binding_new (G_OBJECT (dialog->volume_image), "visible", G_OBJECT (box), "visible");
+  gtk_box_pack_start (GTK_BOX (box), dialog->volume_image, FALSE, TRUE, 0);
+  gtk_widget_show (dialog->volume_image);
+
+  dialog->volume_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, NULL);
+  exo_binding_new (G_OBJECT (dialog->volume_label), "visible", G_OBJECT (dialog->volume_image), "visible");
+  gtk_box_pack_start (GTK_BOX (box), dialog->volume_label, TRUE, TRUE, 0);
+  gtk_widget_show (dialog->volume_label);
+
+  ++row;
+
+  text = g_strdup_printf ("<b>%s</b>", _("Size:"));
+  label = g_object_new (GTK_TYPE_LABEL, "label", text, "use-markup", TRUE, "xalign", 1.0f, NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (label);
+  g_free (text);
+
+  dialog->size_label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, NULL);
+  exo_binding_new (G_OBJECT (dialog->size_label), "visible", G_OBJECT (label), "visible");
+  gtk_table_attach (GTK_TABLE (table), dialog->size_label, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (dialog->size_label);
+
+  ++row;
+
+
+  spacer = g_object_new (GTK_TYPE_ALIGNMENT, "height-request", 12, NULL);
+  gtk_table_attach (GTK_TABLE (table), spacer, 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (spacer);
+
+  ++row;
+
+
+  /*
+     Emblem chooser
+   */
+  label = gtk_label_new (_("Emblems"));
+  chooser = thunar_emblem_chooser_new ();
+  exo_binding_new (G_OBJECT (dialog), "file", G_OBJECT (chooser), "file");
+  gtk_notebook_append_page (GTK_NOTEBOOK (dialog->notebook), chooser, label);
+  gtk_widget_show (chooser);
+  gtk_widget_show (label);
+}
+
+
+
+static void
+thunar_properties_dialog_dispose (GObject *object)
+{
+  ThunarPropertiesDialog *dialog = THUNAR_PROPERTIES_DIALOG (object);
+
+  /* reset the file displayed by the dialog */
+  thunar_properties_dialog_set_file (dialog, NULL);
+
+  (*G_OBJECT_CLASS (thunar_properties_dialog_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_properties_dialog_finalize (GObject *object)
+{
+  ThunarPropertiesDialog *dialog = THUNAR_PROPERTIES_DIALOG (object);
+
+  /* release the extension property pages */
+  g_list_foreach (dialog->extension_pages, (GFunc) g_object_unref, NULL);
+  g_list_free (dialog->extension_pages);
+
+  /* drop the reference on the extension manager */
+  g_object_unref (G_OBJECT (dialog->extension_manager));
+
+  /* drop the reference on the volume manager */
+  g_object_unref (G_OBJECT (dialog->volume_manager));
+
+  /* be sure to cancel any pending rename idle source */
+  if (G_UNLIKELY (dialog->rename_idle_id >= 0))
+    g_source_remove (dialog->rename_idle_id);
+
+  (*G_OBJECT_CLASS (thunar_properties_dialog_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_properties_dialog_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec)
+{
+  ThunarPropertiesDialog *dialog = THUNAR_PROPERTIES_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      g_value_set_object (value, thunar_properties_dialog_get_file (dialog));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_properties_dialog_set_property (GObject      *object,
+                                       guint         prop_id,
+                                       const GValue *value,
+                                       GParamSpec   *pspec)
+{
+  ThunarPropertiesDialog *dialog = THUNAR_PROPERTIES_DIALOG (object);
+
+  switch (prop_id)
+    {
+    case PROP_FILE:
+      thunar_properties_dialog_set_file (dialog, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static gboolean
+thunar_properties_dialog_key_press_event (GtkWidget   *widget,
+                                          GdkEventKey *event)
+{
+  if (event->keyval == GDK_Escape)
+    {
+      gtk_widget_destroy (widget);
+      return TRUE;
+    }
+
+  return GTK_WIDGET_CLASS (thunar_properties_dialog_parent_class)->key_press_event (widget, event);
+}
+
+
+
+static void
+thunar_properties_dialog_response (GtkDialog *dialog,
+                                   gint       response)
+{
+  if (response == GTK_RESPONSE_CLOSE)
+    {
+      gtk_widget_destroy (GTK_WIDGET (dialog));
+    }
+  else if (GTK_DIALOG_CLASS (thunar_properties_dialog_parent_class)->response != NULL)
+    {
+      (*GTK_DIALOG_CLASS (thunar_properties_dialog_parent_class)->response) (dialog, response);
+    }
+}
+
+
+
+static void
+thunar_properties_dialog_activate (GtkWidget              *entry,
+                                   ThunarPropertiesDialog *dialog)
+{
+  if (G_LIKELY (dialog->rename_idle_id < 0))
+    {
+      dialog->rename_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT, thunar_properties_dialog_rename_idle,
+                                                dialog, thunar_properties_dialog_rename_idle_destroy);
+    }
+}
+
+
+
+static gboolean
+thunar_properties_dialog_focus_out_event (GtkWidget              *entry,
+                                          GdkEventFocus          *event,
+                                          ThunarPropertiesDialog *dialog)
+{
+  if (G_LIKELY (dialog->rename_idle_id < 0))
+    {
+      dialog->rename_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT, thunar_properties_dialog_rename_idle,
+                                                dialog, thunar_properties_dialog_rename_idle_destroy);
+    }
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_properties_dialog_update_extensions (ThunarPropertiesDialog *dialog)
+{
+  GtkWidget *label_widget;
+  GList     *providers;
+  GList     *pages = NULL;
+  GList      files;
+  GList     *tmp;
+  GList     *lp;
+
+  /* load the property page providers from the extension manager */
+  providers = thunar_extension_manager_list_providers (dialog->extension_manager, THUNARX_TYPE_PROPERTY_PAGE_PROVIDER);
+  if (G_LIKELY (providers != NULL))
+    {
+      /* determine the (one-element) file list */
+      files.data = dialog->file; files.next = files.prev = NULL;
+
+      /* load the pages offered by the menu providers */
+      for (lp = providers; lp != NULL; lp = lp->next)
+        {
+          tmp = thunarx_property_page_provider_get_pages (lp->data, &files);
+          pages = g_list_concat (pages, tmp);
+          g_object_unref (G_OBJECT (lp->data));
+        }
+      g_list_free (providers);
+    }
+
+  /* destroy any previous set pages */
+  for (lp = dialog->extension_pages; lp != NULL; lp = lp->next)
+    {
+      gtk_widget_destroy (GTK_WIDGET (lp->data));
+      g_object_unref (G_OBJECT (lp->data));
+    }
+  g_list_free (dialog->extension_pages);
+
+  /* apply the new set of pages */
+  dialog->extension_pages = pages;
+  for (lp = pages; lp != NULL; lp = lp->next)
+    {
+      label_widget = thunarx_property_page_get_label_widget (THUNARX_PROPERTY_PAGE (lp->data));
+      gtk_notebook_append_page (GTK_NOTEBOOK (dialog->notebook), GTK_WIDGET (lp->data), label_widget);
+      g_object_ref (G_OBJECT (lp->data));
+    }
+}
+
+
+
+static void
+thunar_properties_dialog_update (ThunarPropertiesDialog *dialog)
+{
+  ThunarIconFactory *icon_factory;
+  ThunarVfsFileSize  size;
+  ThunarVfsMimeInfo *info;
+  ThunarVfsVolume   *volume;
+  GtkIconTheme      *icon_theme;
+  const gchar       *icon_name;
+  const gchar       *name;
+  GdkPixbuf         *icon;
+  glong              offset;
+  gchar             *size_string;
+  gchar             *str;
+
+  g_return_if_fail (THUNAR_IS_PROPERTIES_DIALOG (dialog));
+  g_return_if_fail (THUNAR_IS_FILE (dialog->file));
+
+  icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (dialog)));
+  icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+
+  /* update the icon */
+  icon = thunar_icon_factory_load_file_icon (icon_factory, dialog->file, THUNAR_FILE_ICON_STATE_DEFAULT, 48);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->icon_image), icon);
+  gtk_window_set_icon (GTK_WINDOW (dialog), icon);
+  if (G_LIKELY (icon != NULL))
+    g_object_unref (G_OBJECT (icon));
+
+  /* update the name (if it differs) */
+  gtk_entry_set_editable (GTK_ENTRY (dialog->name_entry), thunar_file_is_renameable (dialog->file));
+  name = thunar_file_get_display_name (dialog->file);
+  if (G_LIKELY (strcmp (name, gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))) != 0))
+    {
+      gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), name);
+      str = g_strdup_printf (_("%s Info"), name);
+      gtk_window_set_title (GTK_WINDOW (dialog), str);
+      g_free (str);
+
+      /* grab the input focus to the name entry */
+      gtk_widget_grab_focus (dialog->name_entry);
+
+      /* select the pre-dot part of the name */
+      str = strrchr (name, '.');
+      if (G_LIKELY (str != NULL))
+        {
+          /* calculate the offset */
+          offset = g_utf8_pointer_to_offset (name, str);
+
+          /* select the region */
+          if (G_LIKELY (offset > 0))
+            gtk_entry_select_region (GTK_ENTRY (dialog->name_entry), 0, offset);
+        }
+    }
+
+  /* update the mime type */
+  info = thunar_file_get_mime_info (dialog->file);
+  if (G_UNLIKELY (strcmp (thunar_vfs_mime_info_get_name (info), "inode/symlink") == 0))
+    str = g_strdup (_("broken link"));
+  else if (G_UNLIKELY (thunar_file_is_symlink (dialog->file)))
+    str = g_strdup_printf (_("link to %s"), thunar_vfs_mime_info_get_comment (info));
+  else
+    str = g_strdup (thunar_vfs_mime_info_get_comment (info));
+  gtk_label_set_text (GTK_LABEL (dialog->kind_label), str);
+  g_free (str);
+
+  /* update the modified time */
+  str = thunar_file_get_date_string (dialog->file, THUNAR_FILE_DATE_MODIFIED);
+  if (G_LIKELY (str != NULL))
+    {
+      gtk_label_set_text (GTK_LABEL (dialog->modified_label), str);
+      gtk_widget_show (dialog->modified_label);
+      g_free (str);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->modified_label);
+    }
+
+  /* update the accessed time */
+  str = thunar_file_get_date_string (dialog->file, THUNAR_FILE_DATE_ACCESSED);
+  if (G_LIKELY (str != NULL))
+    {
+      gtk_label_set_text (GTK_LABEL (dialog->accessed_label), str);
+      gtk_widget_show (dialog->accessed_label);
+      g_free (str);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->accessed_label);
+    }
+
+  /* update the volume */
+  volume = thunar_file_get_volume (dialog->file, dialog->volume_manager);
+  if (G_LIKELY (volume != NULL))
+    {
+      icon_name = thunar_vfs_volume_lookup_icon_name (volume, icon_theme);
+      icon = thunar_icon_factory_load_icon (icon_factory, icon_name, 16, NULL, FALSE);
+      gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->volume_image), icon);
+      if (G_LIKELY (icon != NULL))
+        g_object_unref (G_OBJECT (icon));
+
+      name = thunar_vfs_volume_get_name (volume);
+      gtk_label_set_text (GTK_LABEL (dialog->volume_label), name);
+      gtk_widget_show (dialog->volume_label);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->volume_label);
+    }
+
+  /* update the size */
+  size_string = thunar_file_get_size_string (dialog->file);
+  if (G_LIKELY (size_string != NULL))
+    {
+      size = thunar_file_get_size (dialog->file);
+      str = g_strdup_printf (_("%s (%u Bytes)"), size_string, (guint) size);
+      gtk_label_set_text (GTK_LABEL (dialog->size_label), str);
+      gtk_widget_show (dialog->size_label);
+      g_free (size_string);
+      g_free (str);
+    }
+  else
+    {
+      gtk_widget_hide (dialog->size_label);
+    }
+
+  /* update the extension property pages */
+  thunar_properties_dialog_update_extensions (dialog);
+
+  /* cleanup */
+  g_object_unref (G_OBJECT (icon_factory));
+}
+
+
+
+static gboolean
+thunar_properties_dialog_rename_idle (gpointer user_data)
+{
+  ThunarPropertiesDialog *dialog = THUNAR_PROPERTIES_DIALOG (user_data);
+  const gchar            *old_name;
+  GError                 *error = NULL;
+  gchar                  *new_name;
+
+  /* check if we still have a valid file and if the user is allowed to rename */
+  if (G_UNLIKELY (dialog->file == NULL || !GTK_WIDGET_SENSITIVE (dialog->name_entry)))
+    return FALSE;
+
+  GDK_THREADS_ENTER ();
+
+  /* determine new and old name */
+  new_name = gtk_editable_get_chars (GTK_EDITABLE (dialog->name_entry), 0, -1);
+  old_name = thunar_file_get_display_name (dialog->file);
+  if (g_utf8_collate (new_name, old_name) != 0)
+    {
+      /* try to rename the file to the new name */
+      if (!thunar_file_rename (dialog->file, new_name, &error))
+        {
+          /* reset the entry widget to the old name */
+          gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), old_name);
+
+          /* display an error message */
+          thunar_dialogs_show_error (GTK_WIDGET (dialog), error, _("Failed to rename `%s'"), old_name);
+
+          /* release the error */
+          g_error_free (error);
+        }
+    }
+  g_free (new_name);
+
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_properties_dialog_rename_idle_destroy (gpointer user_data)
+{
+  THUNAR_PROPERTIES_DIALOG (user_data)->rename_idle_id = -1;
+}
+
+
+
+/**
+ * thunar_properties_dialog_new:
+ *
+ * Allocates a new #ThunarPropertiesDialog instance,
+ * that is not associated with any #ThunarFile.
+ *
+ * Return value: the newly allocated #ThunarPropertiesDialog
+ *               instance.
+ **/
+GtkWidget*
+thunar_properties_dialog_new (void)
+{
+  return g_object_new (THUNAR_TYPE_PROPERTIES_DIALOG, NULL);
+}
+
+
+
+/**
+ * thunar_properties_dialog_get_file:
+ * @dialog : a #ThunarPropertiesDialog.
+ *
+ * Returns the #ThunarFile currently being displayed
+ * by @dialog or %NULL if @dialog doesn't display
+ * any file right now.
+ *
+ * Return value: the #ThunarFile displayed by @dialog
+ *               or %NULL.
+ **/
+ThunarFile*
+thunar_properties_dialog_get_file (ThunarPropertiesDialog *dialog)
+{
+  g_return_val_if_fail (THUNAR_IS_PROPERTIES_DIALOG (dialog), NULL);
+  return dialog->file;
+}
+
+
+
+/**
+ * thunar_properties_dialog_set_file:
+ * @dialog : a #ThunarPropertiesDialog.
+ * @file   : a #ThunarFile or %NULL.
+ *
+ * Sets the #ThunarFile that is displayed by @dialog
+ * to @file.
+ **/
+void
+thunar_properties_dialog_set_file (ThunarPropertiesDialog *dialog,
+                                   ThunarFile             *file)
+{
+  g_return_if_fail (THUNAR_IS_PROPERTIES_DIALOG (dialog));
+  g_return_if_fail (file == NULL || THUNAR_IS_FILE (file));
+
+  /* disconnect from any previously set file */
+  if (dialog->file != NULL)
+    {
+      /* unregister our file watch */
+      thunar_file_unwatch (dialog->file);
+
+      /* unregister handlers */
+      g_signal_handlers_disconnect_by_func (G_OBJECT (dialog->file), thunar_properties_dialog_update, dialog);
+      g_signal_handlers_disconnect_by_func (G_OBJECT (dialog->file), gtk_widget_destroy, dialog);
+
+      g_object_unref (G_OBJECT (dialog->file));
+    }
+
+  /* activate the new file */
+  dialog->file = file;
+
+  /* connect to the new file */
+  if (file != NULL)
+    {
+      g_object_ref (G_OBJECT (file));
+
+      /* watch the file for changes */
+      thunar_file_watch (file);
+
+      /* install signal handlers */
+      g_signal_connect_swapped (G_OBJECT (file), "changed", G_CALLBACK (thunar_properties_dialog_update), dialog);
+      g_signal_connect_swapped (G_OBJECT (file), "destroy", G_CALLBACK (gtk_widget_destroy), dialog);
+
+      /* update the UI for the new file */
+      thunar_properties_dialog_update (dialog);
+    }
+
+  /* tell everybody that we have a new file here */
+  g_object_notify (G_OBJECT (dialog), "file");
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-properties-dialog.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-properties-dialog.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_PROPERTIES_DIALOG_H__
+#define __THUNAR_PROPERTIES_DIALOG_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarPropertiesDialogClass ThunarPropertiesDialogClass;
+typedef struct _ThunarPropertiesDialog      ThunarPropertiesDialog;
+
+#define THUNAR_TYPE_PROPERTIES_DIALOG             (thunar_properties_dialog_get_type ())
+#define THUNAR_PROPERTIES_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_PROPERTIES_DIALOG, ThunarPropertiesDialog))
+#define THUNAR_PROPERTIES_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_PROPERTIES_DIALOG, ThunarPropertiesDialogClass))
+#define THUNAR_IS_PROPERTIES_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_PROPERTIES_DIALOG))
+#define THUNAR_IS_PROPERTIES_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_PROPERTIES_DIALOG))
+#define THUNAR_PROPERTIES_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_PROPERTIES_DIALOG, ThunarPropertiesDialog))
+
+GType       thunar_properties_dialog_get_type (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_properties_dialog_new      (void);
+
+ThunarFile *thunar_properties_dialog_get_file (ThunarPropertiesDialog *dialog);
+void        thunar_properties_dialog_set_file (ThunarPropertiesDialog *dialog,  
+                                               ThunarFile             *file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_PROPERTIES_DIALOG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,58 @@
+/* $Id: thunar-side-pane.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-side-pane.h>
+
+
+
+GType
+thunar_side_pane_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarSidePaneIface),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarSidePane",
+                                     &info, 0);
+
+      g_type_interface_add_prerequisite (type, GTK_TYPE_WIDGET);
+      g_type_interface_add_prerequisite (type, THUNAR_TYPE_NAVIGATOR);
+    }
+
+  return type;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-side-pane.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,44 @@
+/* $Id: thunar-side-pane.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_SIDE_PANE_H__
+#define __THUNAR_SIDE_PANE_H__
+
+#include <thunar/thunar-navigator.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarSidePaneIface ThunarSidePaneIface;
+typedef struct _ThunarSidePane      ThunarSidePane;
+
+#define THUNAR_TYPE_SIDE_PANE           (thunar_side_pane_get_type ())
+#define THUNAR_SIDE_PANE(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_SIDE_PANE, ThunarSidePane))
+#define THUNAR_IS_SIDE_PANE(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_SIDE_PANE))
+#define THUNAR_SIDE_PANE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_TYPE_SIDE_PANE, ThunarSidePaneIface))
+
+struct _ThunarSidePaneIface
+{
+  GTypeInterface __parent__;
+};
+
+GType thunar_side_pane_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_SIDE_PANE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,58 @@
+/* automatically generated from ./thunar-standard-view-ui.xml */
+static const unsigned thunar_standard_view_ui_length = 2850u;
+#ifdef __SUNPRO_C
+#pragma align 4 (thunar_standard_view_ui)
+#endif
+#ifdef __GNUC__
+static const char thunar_standard_view_ui[] __attribute__ ((__aligned__ (4))) =
+#else
+static const char thunar_standard_view_ui[] =
+#endif
+{
+  "<ui>\n\n  <!--\n    $Id: thunar-standard-view-ui.xml 18843 2005-11-14 1"
+  "4:25:58Z benny $\n\n    Copyright (c) 2005 Benedikt Meurer <benny at xfce."
+  "org>\n\n    Thunar standard view user interface description file. Do NO"
+  "T\n    simply edit this file if you don\'t know how the whole system\n "
+  "   works, because it\'s too easy to break something.\n  -->\n\n  <menub"
+  "ar name=\"main-menu\">\n    <menu action=\"file-menu\" name=\"file-menu"
+  "\">\n      <placeholder name=\"placeholder-create-actions\">\n        <"
+  "menuitem action=\"create-folder\" name=\"create-folder\" />\n      </pl"
+  "aceholder>\n      <placeholder name=\"placeholder-launcher-actions\">\n"
+  "        <menuitem action=\"open\" name=\"open\" />\n        <menuitem a"
+  "ction=\"open-in-new-window\" name=\"open-in-new-window\" />\n        <m"
+  "enuitem action=\"open-with\" name=\"open-with\" />\n      </placeholder"
+  ">\n      <placeholder name=\"placeholder-file-properties\">\n        <m"
+  "enuitem action=\"properties\" name=\"properties\" />\n      </placehold"
+  "er>\n    </menu>\n\n    <menu action=\"edit-menu\" name=\"edit-menu\">\n"
+  "      <placeholder name=\"placeholder-edit-clipboard-actions\">\n      "
+  "  <menuitem action=\"copy\" name=\"copy\" />\n        <menuitem action="
+  "\"cut\" name=\"cut\" />\n        <menuitem action=\"paste\" name=\"past"
+  "e\" />\n        <menuitem action=\"delete\" name=\"delete\" />\n      <"
+  "/placeholder>\n      <placeholder name=\"placeholder-edit-select-action"
+  "s\">\n        <menuitem action=\"select-all-files\" name=\"select-all-f"
+  "iles\" />\n        <menuitem action=\"select-by-pattern\" name=\"select"
+  "-by-pattern\" />\n      </placeholder>\n      <placeholder name=\"place"
+  "holder-edit-alter-actions\">\n        <menuitem action=\"duplicate\" na"
+  "me=\"duplicate\" />\n        <menuitem action=\"make-link\" name=\"make"
+  "-link\" />\n        <menuitem action=\"rename\" name=\"rename\" />\n   "
+  "   </placeholder>\n    </menu>\n  </menubar>\n\n  <popup action=\"file-"
+  "context-menu\" name=\"file-context-menu\">\n    <menuitem action=\"open"
+  "\" name=\"open\" />\n    <menuitem action=\"open-in-new-window\" name=\""
+  "open-in-new-window\" />\n    <menuitem action=\"open-with\" name=\"open"
+  "-with\" />\n    <separator />\n    <menuitem action=\"copy\" name=\"cop"
+  "y\" />\n    <menuitem action=\"cut\" name=\"cut\" />\n    <menuitem act"
+  "ion=\"delete\" name=\"delete\" />\n    <menuitem action=\"paste-into-fo"
+  "lder\" name=\"paste-into-folder\" />\n    <separator />\n    <menuitem "
+  "action=\"rename\" name=\"rename\" />\n    <separator />\n    <placehold"
+  "er name=\"placeholder-custom-actions\" />\n    <separator />\n    <menu"
+  "item action=\"properties\" name=\"properties\" />\n  </popup>\n\n  <pop"
+  "up action=\"folder-context-menu\" name=\"folder-context-menu\">\n    <m"
+  "enuitem action=\"create-folder\" name=\"create-folder\" />\n    <separa"
+  "tor />\n    <placeholder name=\"placeholder-view-items-actions\" />\n  "
+  "  <separator />\n    <menuitem action=\"paste\" name=\"paste\" />\n    "
+  "<separator />\n    <placeholder name=\"placeholder-custom-actions\" />\n"
+  "  </popup>\n\n</ui>\n\n<!-- vi: set ts=2 sw=2 et ai nocindent syntax=xm"
+  "l: -->\n"
+};
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view-ui.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,76 @@
+<ui>
+
+  <!--
+    $Id: thunar-standard-view-ui.xml 18843 2005-11-14 14:25:58Z benny $
+
+    Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+
+    Thunar standard view user interface description file. Do NOT
+    simply edit this file if you don't know how the whole system
+    works, because it's too easy to break something.
+  -->
+
+  <menubar name="main-menu">
+    <menu action="file-menu" name="file-menu">
+      <placeholder name="placeholder-create-actions">
+        <menuitem action="create-folder" name="create-folder" />
+      </placeholder>
+      <placeholder name="placeholder-launcher-actions">
+        <menuitem action="open" name="open" />
+        <menuitem action="open-in-new-window" name="open-in-new-window" />
+        <menuitem action="open-with" name="open-with" />
+      </placeholder>
+      <placeholder name="placeholder-file-properties">
+        <menuitem action="properties" name="properties" />
+      </placeholder>
+    </menu>
+
+    <menu action="edit-menu" name="edit-menu">
+      <placeholder name="placeholder-edit-clipboard-actions">
+        <menuitem action="copy" name="copy" />
+        <menuitem action="cut" name="cut" />
+        <menuitem action="paste" name="paste" />
+        <menuitem action="delete" name="delete" />
+      </placeholder>
+      <placeholder name="placeholder-edit-select-actions">
+        <menuitem action="select-all-files" name="select-all-files" />
+        <menuitem action="select-by-pattern" name="select-by-pattern" />
+      </placeholder>
+      <placeholder name="placeholder-edit-alter-actions">
+        <menuitem action="duplicate" name="duplicate" />
+        <menuitem action="make-link" name="make-link" />
+        <menuitem action="rename" name="rename" />
+      </placeholder>
+    </menu>
+  </menubar>
+
+  <popup action="file-context-menu" name="file-context-menu">
+    <menuitem action="open" name="open" />
+    <menuitem action="open-in-new-window" name="open-in-new-window" />
+    <menuitem action="open-with" name="open-with" />
+    <separator />
+    <menuitem action="copy" name="copy" />
+    <menuitem action="cut" name="cut" />
+    <menuitem action="delete" name="delete" />
+    <menuitem action="paste-into-folder" name="paste-into-folder" />
+    <separator />
+    <menuitem action="rename" name="rename" />
+    <separator />
+    <placeholder name="placeholder-custom-actions" />
+    <separator />
+    <menuitem action="properties" name="properties" />
+  </popup>
+
+  <popup action="folder-context-menu" name="folder-context-menu">
+    <menuitem action="create-folder" name="create-folder" />
+    <separator />
+    <placeholder name="placeholder-view-items-actions" />
+    <separator />
+    <menuitem action="paste" name="paste" />
+    <separator />
+    <placeholder name="placeholder-custom-actions" />
+  </popup>
+
+</ui>
+
+<!-- vi: set ts=2 sw=2 et ai nocindent syntax=xml: -->

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,2489 @@
+/* $Id: thunar-standard-view.c 18848 2005-11-14 20:47:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <gdk/gdkkeysyms.h>
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-create-dialog.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-dnd.h>
+#include <thunar/thunar-extension-manager.h>
+#include <thunar/thunar-icon-renderer.h>
+#include <thunar/thunar-launcher.h>
+#include <thunar/thunar-marshal.h>
+#include <thunar/thunar-properties-dialog.h>
+#include <thunar/thunar-standard-view.h>
+#include <thunar/thunar-standard-view-ui.h>
+#include <thunar/thunar-text-renderer.h>
+
+#include <thunarx/thunarx.h>
+
+
+
+#define THUNAR_STANDARD_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), THUNAR_TYPE_STANDARD_VIEW, ThunarStandardViewPrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_CURRENT_DIRECTORY,
+  PROP_LOADING,
+  PROP_STATUSBAR_TEXT,
+  PROP_SHOW_HIDDEN,
+  PROP_UI_MANAGER,
+};
+
+/* Signal identifiers */
+enum
+{
+  DELETE_SELECTED_FILES,
+  LAST_SIGNAL,
+};
+
+/* Identifiers for DnD target types */
+enum
+{
+  TEXT_URI_LIST,
+};
+
+
+
+static void          thunar_standard_view_class_init                (ThunarStandardViewClass  *klass);
+static void          thunar_standard_view_navigator_init            (ThunarNavigatorIface     *iface);
+static void          thunar_standard_view_view_init                 (ThunarViewIface          *iface);
+static void          thunar_standard_view_init                      (ThunarStandardView       *standard_view);
+static GObject      *thunar_standard_view_constructor               (GType                     type,
+                                                                     guint                     n_construct_properties,
+                                                                     GObjectConstructParam    *construct_properties);
+static void          thunar_standard_view_dispose                   (GObject                  *object);
+static void          thunar_standard_view_finalize                  (GObject                  *object);
+static void          thunar_standard_view_get_property              (GObject                  *object,
+                                                                     guint                     prop_id,
+                                                                     GValue                   *value,
+                                                                     GParamSpec               *pspec);
+static void          thunar_standard_view_set_property              (GObject                  *object,
+                                                                     guint                     prop_id,
+                                                                     const GValue             *value,
+                                                                     GParamSpec               *pspec);
+static void          thunar_standard_view_realize                   (GtkWidget                *widget);
+static void          thunar_standard_view_unrealize                 (GtkWidget                *widget);
+static void          thunar_standard_view_grab_focus                (GtkWidget                *widget);
+static gboolean      thunar_standard_view_expose_event              (GtkWidget                *widget,
+                                                                     GdkEventExpose           *event);
+static ThunarFile   *thunar_standard_view_get_current_directory     (ThunarNavigator          *navigator);
+static void          thunar_standard_view_set_current_directory     (ThunarNavigator          *navigator,
+                                                                     ThunarFile               *current_directory);
+static gboolean      thunar_standard_view_get_loading               (ThunarView               *view);
+static const gchar  *thunar_standard_view_get_statusbar_text        (ThunarView               *view);
+static gboolean      thunar_standard_view_get_show_hidden           (ThunarView               *view);
+static void          thunar_standard_view_set_show_hidden           (ThunarView               *view,
+                                                                     gboolean                  show_hidden);
+static GtkUIManager *thunar_standard_view_get_ui_manager            (ThunarView               *view);
+static void          thunar_standard_view_set_ui_manager            (ThunarView               *view,
+                                                                     GtkUIManager             *ui_manager);
+static gboolean      thunar_standard_view_delete_selected_files     (ThunarStandardView       *standard_view);
+static GdkDragAction thunar_standard_view_get_dest_actions          (ThunarStandardView       *standard_view,
+                                                                     GdkDragContext           *context,
+                                                                     gint                      x,
+                                                                     gint                      y,
+                                                                     guint                     time,
+                                                                     ThunarFile              **file_return);
+static GList        *thunar_standard_view_get_selected_files        (ThunarStandardView       *standard_view);
+static GList        *thunar_standard_view_get_selected_paths        (ThunarStandardView       *standard_view);
+static void          thunar_standard_view_merge_custom_actions      (ThunarStandardView       *standard_view,
+                                                                     GList                    *selected_items);
+static void          thunar_standard_view_update_statusbar_text     (ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_create_folder      (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_properties         (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_copy               (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_cut                (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_paste              (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_delete             (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_paste_into_folder  (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_select_all_files   (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_select_by_pattern  (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_duplicate          (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_make_link          (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_action_rename             (GtkAction                *action,
+                                                                     ThunarStandardView       *standard_view);
+static GClosure     *thunar_standard_view_new_files_closure         (ThunarStandardView       *standard_view);
+static void          thunar_standard_view_new_files                 (ThunarVfsJob             *job,
+                                                                     GList                    *path_list,
+                                                                     ThunarStandardView       *standard_view);
+static gboolean      thunar_standard_view_button_release_event      (GtkWidget                *view,
+                                                                     GdkEventButton           *event,
+                                                                     ThunarStandardView       *standard_view);
+static gboolean      thunar_standard_view_motion_notify_event       (GtkWidget                *view,
+                                                                     GdkEventMotion           *event,
+                                                                     ThunarStandardView       *standard_view);
+static gboolean      thunar_standard_view_drag_drop                 (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     gint                      x,
+                                                                     gint                      y,
+                                                                     guint                     time,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_data_received        (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     gint                      x,
+                                                                     gint                      y,
+                                                                     GtkSelectionData         *selection_data,
+                                                                     guint                     info,
+                                                                     guint                     time,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_leave                (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     guint                     time,
+                                                                     ThunarStandardView       *standard_view);
+static gboolean      thunar_standard_view_drag_motion               (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     gint                      x,
+                                                                     gint                      y,
+                                                                     guint                     time,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_begin                (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_data_get             (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     GtkSelectionData         *selection_data,
+                                                                     guint                     info,
+                                                                     guint                     time,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_data_delete          (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_drag_end                  (GtkWidget                *view,
+                                                                     GdkDragContext           *context,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_error                     (ThunarListModel          *model,
+                                                                     const GError             *error,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_renamed                   (ThunarTextRenderer       *text_renderer,
+                                                                     const gchar              *path_string,
+                                                                     const gchar              *text,
+                                                                     ThunarStandardView       *standard_view);
+static void          thunar_standard_view_loading_unbound           (gpointer                  user_data);
+static gboolean      thunar_standard_view_drag_timer                (gpointer                  user_data);
+static void          thunar_standard_view_drag_timer_destroy        (gpointer                  user_data);
+
+
+
+struct _ThunarStandardViewPrivate
+{
+  ThunarLauncher         *launcher;
+  GtkAction              *action_create_folder;
+  GtkAction              *action_properties;
+  GtkAction              *action_copy;
+  GtkAction              *action_cut;
+  GtkAction              *action_paste;
+  GtkAction              *action_delete;
+  GtkAction              *action_paste_into_folder;
+  GtkAction              *action_select_all_files;
+  GtkAction              *action_select_by_pattern;
+  GtkAction              *action_duplicate;
+  GtkAction              *action_make_link;
+  GtkAction              *action_rename;
+
+  /* support for file manager extensions */
+  ThunarExtensionManager *extension_manager;
+
+  /* custom menu actions support */
+  GtkActionGroup         *custom_actions;
+  gint                    custom_merge_id;
+
+  /* right-click drag/popup support */
+  GList                  *drag_path_list;
+  gint                    drag_timer_id;
+  gint                    drag_x;
+  gint                    drag_y;
+
+  /* drop site support */
+  guint                   drop_data_ready : 1; /* whether the drop data was received already */
+  guint                   drop_highlight : 1;
+  guint                   drop_occurred : 1;   /* whether the data was dropped */
+  GList                  *drop_path_list;      /* the list of URIs that are contained in the drop data */
+
+  /* the "new-files" closure, which is used to select files whenever 
+   * new files are created by a ThunarVfsJob associated with this view
+   */
+  GClosure               *new_files_closure;
+};
+
+
+
+static const GtkActionEntry action_entries[] =
+{
+  { "file-context-menu", NULL, N_ ("File Context Menu"), NULL, NULL, NULL, },
+  { "folder-context-menu", NULL, N_ ("Folder Context Menu"), NULL, NULL, NULL, },
+  { "create-folder", NULL, N_ ("Create _Folder..."), "<control><shift>N", N_ ("Create an empty folder within the current folder"), G_CALLBACK (thunar_standard_view_action_create_folder), },
+  { "properties", GTK_STOCK_PROPERTIES, N_ ("_Properties"), "<alt>Return", N_ ("View the properties of the selected file"), G_CALLBACK (thunar_standard_view_action_properties), },
+  { "copy", GTK_STOCK_COPY, N_ ("_Copy Files"), NULL, N_ ("Copy the selected files"), G_CALLBACK (thunar_standard_view_action_copy), },
+  { "cut", GTK_STOCK_CUT, N_ ("Cu_t Files"), NULL, N_ ("Cut the selected files"), G_CALLBACK (thunar_standard_view_action_cut), },
+  { "paste", GTK_STOCK_PASTE, N_ ("_Paste Files"), NULL, NULL, G_CALLBACK (thunar_standard_view_action_paste), },
+  { "delete", GTK_STOCK_DELETE, N_ ("_Delete Files"), NULL, N_ ("Delete the selected files"), G_CALLBACK (thunar_standard_view_action_delete), },
+  { "paste-into-folder", GTK_STOCK_PASTE, N_ ("Paste Files into Folder"), NULL, N_ ("Paste files into the selected folder"), G_CALLBACK (thunar_standard_view_action_paste_into_folder), },
+  { "select-all-files", NULL, N_ ("Select _all Files"), "<control>A", N_ ("Select all files in this window"), G_CALLBACK (thunar_standard_view_action_select_all_files), },
+  { "select-by-pattern", NULL, N_ ("Select by _Pattern"), "<control>S", N_ ("Select all files that match a certain pattern"), G_CALLBACK (thunar_standard_view_action_select_by_pattern), },
+  { "duplicate", NULL, N_ ("Du_plicate File"), NULL, N_ ("Duplicate each selected file"), G_CALLBACK (thunar_standard_view_action_duplicate), },
+  { "make-link", NULL, N_ ("Ma_ke Link"), NULL, N_ ("Create a symbolic link for each selected file"), G_CALLBACK (thunar_standard_view_action_make_link), },
+  { "rename", NULL, N_ ("_Rename"), "F2", N_ ("Rename the selected file"), G_CALLBACK (thunar_standard_view_action_rename), },
+};
+
+/* Target types for dragging from the view */
+static const GtkTargetEntry drag_targets[] =
+{
+  { "text/uri-list", 0, TEXT_URI_LIST, },
+};
+
+/* Target types for dropping to the view */
+static const GtkTargetEntry drop_targets[] =
+{
+  { "text/uri-list", 0, TEXT_URI_LIST, },
+};
+
+
+
+static guint         standard_view_signals[LAST_SIGNAL];
+static GObjectClass *thunar_standard_view_parent_class;
+
+
+
+GType
+thunar_standard_view_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarStandardViewClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_standard_view_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarStandardView),
+        0,
+        (GInstanceInitFunc) thunar_standard_view_init,
+        NULL,
+      };
+
+      static const GInterfaceInfo navigator_info =
+      {
+        (GInterfaceInitFunc) thunar_standard_view_navigator_init,
+        NULL,
+        NULL,
+      };
+
+      static const GInterfaceInfo view_info =
+      {
+        (GInterfaceInitFunc) thunar_standard_view_view_init,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW,
+                                     "ThunarStandardView",
+                                     &info, G_TYPE_FLAG_ABSTRACT);
+
+      g_type_add_interface_static (type, THUNAR_TYPE_NAVIGATOR, &navigator_info);
+      g_type_add_interface_static (type, THUNAR_TYPE_VIEW, &view_info);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_standard_view_class_init (ThunarStandardViewClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GtkBindingSet  *binding_set;
+  GObjectClass   *gobject_class;
+
+  g_type_class_add_private (klass, sizeof (ThunarStandardViewPrivate));
+
+  thunar_standard_view_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->constructor = thunar_standard_view_constructor;
+  gobject_class->dispose = thunar_standard_view_dispose;
+  gobject_class->finalize = thunar_standard_view_finalize;
+  gobject_class->get_property = thunar_standard_view_get_property;
+  gobject_class->set_property = thunar_standard_view_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->realize = thunar_standard_view_realize;
+  gtkwidget_class->unrealize = thunar_standard_view_unrealize;
+  gtkwidget_class->grab_focus = thunar_standard_view_grab_focus;
+  gtkwidget_class->expose_event = thunar_standard_view_expose_event;
+
+  klass->delete_selected_files = thunar_standard_view_delete_selected_files;
+  klass->connect_ui_manager = (gpointer) exo_noop;
+  klass->disconnect_ui_manager = (gpointer) exo_noop;
+
+  g_object_class_install_property (gobject_class,
+                                   PROP_LOADING,
+                                   g_param_spec_override ("loading",
+                                                          g_param_spec_boolean ("loading",
+                                                                                _("Loading"),
+                                                                                _("Whether the view is currently being loaded"),
+                                                                                FALSE,
+                                                                                EXO_PARAM_READWRITE)));
+
+  /* override ThunarNavigator's properties */
+  g_object_class_override_property (gobject_class, PROP_CURRENT_DIRECTORY, "current-directory");
+
+  /* override ThunarView's properties */
+  g_object_class_override_property (gobject_class, PROP_STATUSBAR_TEXT, "statusbar-text");
+  g_object_class_override_property (gobject_class, PROP_SHOW_HIDDEN, "show-hidden");
+  g_object_class_override_property (gobject_class, PROP_UI_MANAGER, "ui-manager");
+
+  /**
+   * ThunarStandardView::delete-selected-files:
+   * @standard_view : a #ThunarStandardView.
+   *
+   * Emitted whenever the user presses the Delete key. This
+   * is an internal signal used to bind the action to keys.
+   **/
+  standard_view_signals[DELETE_SELECTED_FILES] =
+    g_signal_new ("delete-selected-files",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                  G_STRUCT_OFFSET (ThunarStandardViewClass, delete_selected_files),
+                  g_signal_accumulator_true_handled, NULL,
+                  _thunar_marshal_BOOLEAN__VOID,
+                  G_TYPE_BOOLEAN, 0);
+
+  /* setup the key bindings for the standard views */
+  binding_set = gtk_binding_set_by_class (klass);
+  gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, GDK_CONTROL_MASK, "delete-selected-files", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_Delete, 0, "delete-selected-files", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_KP_Delete, 0, "delete-selected-files", 0);
+}
+
+
+
+static void
+thunar_standard_view_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_standard_view_get_current_directory;
+  iface->set_current_directory = thunar_standard_view_set_current_directory;
+}
+
+
+
+static void
+thunar_standard_view_view_init (ThunarViewIface *iface)
+{
+  iface->get_loading = thunar_standard_view_get_loading;
+  iface->get_statusbar_text = thunar_standard_view_get_statusbar_text;
+  iface->get_show_hidden = thunar_standard_view_get_show_hidden;
+  iface->set_show_hidden = thunar_standard_view_set_show_hidden;
+  iface->get_ui_manager = thunar_standard_view_get_ui_manager;
+  iface->set_ui_manager = thunar_standard_view_set_ui_manager;
+}
+
+
+
+static void
+thunar_standard_view_init (ThunarStandardView *standard_view)
+{
+  standard_view->priv = THUNAR_STANDARD_VIEW_GET_PRIVATE (standard_view);
+  standard_view->priv->drag_timer_id = -1;
+
+  /* grab a reference on the extension manager */
+  standard_view->priv->extension_manager = thunar_extension_manager_get_default ();
+
+  /* initialize the scrolled window */
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (standard_view),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (standard_view), NULL);
+  gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (standard_view), NULL);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (standard_view), GTK_SHADOW_IN);
+
+  /* setup the action group for this view */
+  standard_view->action_group = gtk_action_group_new ("thunar-standard-view");
+  gtk_action_group_set_translation_domain (standard_view->action_group, GETTEXT_PACKAGE);
+  gtk_action_group_add_actions (standard_view->action_group, action_entries,
+                                G_N_ELEMENTS (action_entries),
+                                GTK_WIDGET (standard_view));
+
+  /* lookup all actions to speed up access later */
+  standard_view->priv->action_create_folder = gtk_action_group_get_action (standard_view->action_group, "create-folder");
+  standard_view->priv->action_properties = gtk_action_group_get_action (standard_view->action_group, "properties");
+  standard_view->priv->action_copy = gtk_action_group_get_action (standard_view->action_group, "copy");
+  standard_view->priv->action_cut = gtk_action_group_get_action (standard_view->action_group, "cut");
+  standard_view->priv->action_paste = gtk_action_group_get_action (standard_view->action_group, "paste");
+  standard_view->priv->action_delete = gtk_action_group_get_action (standard_view->action_group, "delete");
+  standard_view->priv->action_paste_into_folder = gtk_action_group_get_action (standard_view->action_group, "paste-into-folder");
+  standard_view->priv->action_select_all_files = gtk_action_group_get_action (standard_view->action_group, "select-all-files");
+  standard_view->priv->action_select_by_pattern = gtk_action_group_get_action (standard_view->action_group, "select-by-pattern");
+  standard_view->priv->action_duplicate = gtk_action_group_get_action (standard_view->action_group, "duplicate");
+  standard_view->priv->action_make_link = gtk_action_group_get_action (standard_view->action_group, "make-link");
+  standard_view->priv->action_rename = gtk_action_group_get_action (standard_view->action_group, "rename");
+
+  /* setup the list model */
+  standard_view->model = thunar_list_model_new ();
+  g_signal_connect (G_OBJECT (standard_view->model), "error", G_CALLBACK (thunar_standard_view_error), standard_view);
+
+  /* setup the icon renderer */
+  standard_view->icon_renderer = thunar_icon_renderer_new ();
+  g_object_ref (G_OBJECT (standard_view->icon_renderer));
+  gtk_object_sink (GTK_OBJECT (standard_view->icon_renderer));
+
+  /* setup the name renderer */
+  standard_view->name_renderer = thunar_text_renderer_new ();
+  g_signal_connect (G_OBJECT (standard_view->name_renderer), "edited", G_CALLBACK (thunar_standard_view_renamed), standard_view);
+  g_object_ref (G_OBJECT (standard_view->name_renderer));
+  gtk_object_sink (GTK_OBJECT (standard_view->name_renderer));
+
+  /* be sure to update the selection whenever the folder changes */
+  g_signal_connect_swapped (G_OBJECT (standard_view->model), "notify::folder", G_CALLBACK (thunar_standard_view_selection_changed), standard_view);
+
+  /* be sure to update the statusbar text whenever the number of
+   * files in our model changes.
+   */
+  g_signal_connect_swapped (G_OBJECT (standard_view->model), "notify::num-files", G_CALLBACK (thunar_standard_view_update_statusbar_text), standard_view);
+
+  /* allocate the launcher support */
+  standard_view->priv->launcher = thunar_launcher_new ();
+  thunar_launcher_set_action_group (standard_view->priv->launcher, standard_view->action_group);
+  thunar_launcher_set_widget (standard_view->priv->launcher, GTK_WIDGET (standard_view));
+  g_signal_connect_swapped (G_OBJECT (standard_view->priv->launcher), "open-directory", G_CALLBACK (thunar_navigator_change_directory), standard_view);
+}
+
+
+
+static GObject*
+thunar_standard_view_constructor (GType                  type,
+                                  guint                  n_construct_properties,
+                                  GObjectConstructParam *construct_properties)
+{
+  GtkWidget *view;
+  GObject   *object;
+
+  /* let the GObject constructor create the instance */
+  object = G_OBJECT_CLASS (thunar_standard_view_parent_class)->constructor (type,
+                                                                            n_construct_properties,
+                                                                            construct_properties);
+
+  /* determine the real view widget (treeview or iconview) */
+  view = GTK_BIN (object)->child;
+
+  /* apply our list model to the real view (the child of the scrolled window),
+   * we therefore assume that all real views have the "model" property.
+   */
+  g_object_set (G_OBJECT (view), "model", THUNAR_STANDARD_VIEW (object)->model, NULL);
+
+  /* setup the real view as drop site */
+  gtk_drag_dest_set (view, 0, drop_targets, G_N_ELEMENTS (drop_targets), GDK_ACTION_ASK | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
+  g_signal_connect (G_OBJECT (view), "drag-drop", G_CALLBACK (thunar_standard_view_drag_drop), object);
+  g_signal_connect (G_OBJECT (view), "drag-data-received", G_CALLBACK (thunar_standard_view_drag_data_received), object);
+  g_signal_connect (G_OBJECT (view), "drag-leave", G_CALLBACK (thunar_standard_view_drag_leave), object);
+  g_signal_connect (G_OBJECT (view), "drag-motion", G_CALLBACK (thunar_standard_view_drag_motion), object);
+
+  /* setup the real view as drag source */
+  gtk_drag_source_set (view, GDK_BUTTON1_MASK, drag_targets, G_N_ELEMENTS (drag_targets), GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+  g_signal_connect (G_OBJECT (view), "drag-begin", G_CALLBACK (thunar_standard_view_drag_begin), object);
+  g_signal_connect (G_OBJECT (view), "drag-data-get", G_CALLBACK (thunar_standard_view_drag_data_get), object);
+  g_signal_connect (G_OBJECT (view), "drag-data-delete", G_CALLBACK (thunar_standard_view_drag_data_delete), object);
+  g_signal_connect (G_OBJECT (view), "drag-end", G_CALLBACK (thunar_standard_view_drag_end), object);
+
+  /* done, we have a working object */
+  return object;
+}
+
+
+
+static void
+thunar_standard_view_dispose (GObject *object)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (object);
+
+  /* unregister the "loading" binding */
+  if (G_UNLIKELY (standard_view->loading_binding != NULL))
+    exo_binding_unbind (standard_view->loading_binding);
+
+  /* be sure to cancel any pending drag timer */
+  if (G_UNLIKELY (standard_view->priv->drag_timer_id >= 0))
+    g_source_remove (standard_view->priv->drag_timer_id);
+
+  /* reset the UI manager property */
+  thunar_view_set_ui_manager (THUNAR_VIEW (standard_view), NULL);
+
+  /* disconnect the widget from the launcher support */
+  thunar_launcher_set_widget (standard_view->priv->launcher, NULL);
+
+  (*G_OBJECT_CLASS (thunar_standard_view_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_standard_view_finalize (GObject *object)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (object);
+
+  /* some safety checks */
+  g_assert (standard_view->loading_binding == NULL);
+  g_assert (standard_view->icon_factory == NULL);
+  g_assert (standard_view->ui_manager == NULL);
+  g_assert (standard_view->clipboard == NULL);
+
+  /* release our reference on the extension manager */
+  g_object_unref (G_OBJECT (standard_view->priv->extension_manager));
+
+  /* release the drag path list (just in case the drag-end wasn't fired before) */
+  thunar_vfs_path_list_free (standard_view->priv->drag_path_list);
+
+  /* release the drop path list (just in case the drag-leave wasn't fired before) */
+  thunar_vfs_path_list_free (standard_view->priv->drop_path_list);
+
+  /* release the reference on the name renderer */
+  g_object_unref (G_OBJECT (standard_view->name_renderer));
+
+  /* release the reference on the icon renderer */
+  g_object_unref (G_OBJECT (standard_view->icon_renderer));
+
+  /* release the reference on the action group */
+  g_object_unref (G_OBJECT (standard_view->action_group));
+
+  /* release the reference on the launcher */
+  g_object_unref (G_OBJECT (standard_view->priv->launcher));
+
+  /* drop any existing "new-files" closure */
+  if (G_UNLIKELY (standard_view->priv->new_files_closure != NULL))
+    {
+      g_closure_invalidate (standard_view->priv->new_files_closure);
+      g_closure_unref (standard_view->priv->new_files_closure);
+      standard_view->priv->new_files_closure = NULL;
+    }
+
+  /* disconnect from the list model */
+  g_signal_handlers_disconnect_matched (G_OBJECT (standard_view->model), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, standard_view);
+  g_object_unref (G_OBJECT (standard_view->model));
+  
+  /* free the statusbar text (if any) */
+  g_free (standard_view->statusbar_text);
+
+  (*G_OBJECT_CLASS (thunar_standard_view_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_standard_view_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (object)));
+      break;
+
+    case PROP_LOADING:
+      g_value_set_boolean (value, thunar_view_get_loading (THUNAR_VIEW (object)));
+      break;
+
+    case PROP_STATUSBAR_TEXT:
+      g_value_set_static_string (value, thunar_view_get_statusbar_text (THUNAR_VIEW (object)));
+      break;
+
+    case PROP_SHOW_HIDDEN:
+      g_value_set_boolean (value, thunar_view_get_show_hidden (THUNAR_VIEW (object)));
+      break;
+
+    case PROP_UI_MANAGER:
+      g_value_set_object (value, thunar_view_get_ui_manager (THUNAR_VIEW (object)));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_standard_view_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (object);
+  gboolean            loading;
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (THUNAR_NAVIGATOR (object), g_value_get_object (value));
+      break;
+
+    case PROP_LOADING:
+      loading = g_value_get_boolean (value);
+      if (G_LIKELY (loading != standard_view->loading))
+        {
+          standard_view->loading = loading;
+          g_object_notify (object, "loading");
+          g_object_notify (object, "statusbar-text");
+        }
+      break;
+
+    case PROP_SHOW_HIDDEN:
+      thunar_view_set_show_hidden (THUNAR_VIEW (object), g_value_get_boolean (value));
+      break;
+
+    case PROP_UI_MANAGER:
+      thunar_view_set_ui_manager (THUNAR_VIEW (object), g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_standard_view_realize (GtkWidget *widget)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (widget);
+  GtkIconTheme       *icon_theme;
+  GdkDisplay         *display;
+
+  /* let the GtkWidget do its work */
+  GTK_WIDGET_CLASS (thunar_standard_view_parent_class)->realize (widget);
+
+  /* query the clipboard manager for the display */
+  display = gtk_widget_get_display (widget);
+  standard_view->clipboard = thunar_clipboard_manager_get_for_display (display);
+
+  /* we need update the selection state based on the clipboard content */
+  g_signal_connect_swapped (G_OBJECT (standard_view->clipboard), "changed",
+                            G_CALLBACK (thunar_standard_view_selection_changed), standard_view);
+  thunar_standard_view_selection_changed (standard_view);
+
+  /* determine the icon factory for the screen on which we are realized */
+  icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+  standard_view->icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+}
+
+
+
+static void
+thunar_standard_view_unrealize (GtkWidget *widget)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (widget);
+
+  /* disconnect the clipboard changed handler */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (standard_view->clipboard), thunar_standard_view_selection_changed, standard_view);
+
+  /* drop the reference on the icon factory */
+  g_object_unref (G_OBJECT (standard_view->icon_factory));
+  standard_view->icon_factory = NULL;
+
+  /* drop the reference on the clipboard manager */
+  g_object_unref (G_OBJECT (standard_view->clipboard));
+  standard_view->clipboard = NULL;
+
+  /* let the GtkWidget do its work */
+  GTK_WIDGET_CLASS (thunar_standard_view_parent_class)->unrealize (widget);
+}
+
+
+
+static void
+thunar_standard_view_grab_focus (GtkWidget *widget)
+{
+  /* forward the focus grab to the real view */
+  gtk_widget_grab_focus (GTK_BIN (widget)->child);
+}
+
+
+
+static gboolean
+thunar_standard_view_expose_event (GtkWidget      *widget,
+                                   GdkEventExpose *event)
+{
+  gboolean result = FALSE;
+#if GTK_CHECK_VERSION(2,7,2)
+  cairo_t *cr;
+#endif
+  gint     x, y, width, height;
+
+  /* let the scrolled window do it's work */
+  result = (*GTK_WIDGET_CLASS (thunar_standard_view_parent_class)->expose_event) (widget, event);
+
+  /* render the folder drop shadow */
+  if (G_UNLIKELY (THUNAR_STANDARD_VIEW (widget)->priv->drop_highlight))
+    {
+      x = widget->allocation.x;
+      y = widget->allocation.y;
+      width = widget->allocation.width;
+      height = widget->allocation.height;
+
+      gtk_paint_shadow (widget->style, widget->window,
+                        GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+                        NULL, widget, "dnd",
+                        x, y, width, height);
+
+#if GTK_CHECK_VERSION(2,7,2)
+      /* the cairo version looks better here, so we use it if possible */
+      cr = gdk_cairo_create (widget->window);
+      cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+      cairo_set_line_width (cr, 1.0);
+      cairo_rectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1);
+      cairo_stroke (cr);
+      cairo_destroy (cr);
+#else
+      gdk_draw_rectangle (widget->window, widget->style->black_gc,
+                          FALSE, x, y, width - 1, height - 1);
+#endif
+    }
+
+  return result;
+}
+
+
+
+static ThunarFile*
+thunar_standard_view_get_current_directory (ThunarNavigator *navigator)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (navigator);
+  ThunarFolder       *folder;
+
+  g_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), NULL);
+
+  /* try to determine the current folder from the model */
+  folder = thunar_list_model_get_folder (standard_view->model);
+  if (G_LIKELY (folder != NULL))
+    return thunar_folder_get_corresponding_file (folder);
+
+  return NULL;
+}
+
+
+
+static void
+thunar_standard_view_set_current_directory (ThunarNavigator *navigator,
+                                            ThunarFile      *current_directory)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (navigator);
+  ThunarFolder       *folder;
+
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (current_directory == NULL || THUNAR_IS_FILE (current_directory));
+
+  /* disconnect any previous "loading" binding */
+  if (G_LIKELY (standard_view->loading_binding != NULL))
+    exo_binding_unbind (standard_view->loading_binding);
+
+  /* check if we want to reset the directory */
+  if (G_UNLIKELY (current_directory == NULL))
+    {
+      thunar_list_model_set_folder (standard_view->model, NULL);
+      return;
+    }
+
+  /* We drop the model from the view as a simple optimization to speed up
+   * the process of disconnecting the model data from the view.
+   */
+  g_object_set (G_OBJECT (GTK_BIN (standard_view)->child), "model", NULL, NULL);
+
+  /* open the new directory as folder */
+  folder = thunar_folder_get_for_file (current_directory);
+
+  /* connect the "loading" binding */
+  standard_view->loading_binding = exo_binding_new_full (G_OBJECT (folder), "loading",
+                                                         G_OBJECT (standard_view), "loading",
+                                                         NULL, thunar_standard_view_loading_unbound,
+                                                         standard_view);
+
+  /* apply the new folder */
+  thunar_list_model_set_folder (standard_view->model, folder);
+  g_object_unref (G_OBJECT (folder));
+
+  /* reconnect our model to the view */
+  g_object_set (G_OBJECT (GTK_BIN (standard_view)->child), "model", standard_view->model, NULL);
+
+  /* notify all listeners about the new/old current directory */
+  g_object_notify (G_OBJECT (standard_view), "current-directory");
+}
+
+
+
+static gboolean
+thunar_standard_view_get_loading (ThunarView *view)
+{
+  return THUNAR_STANDARD_VIEW (view)->loading;
+}
+
+
+
+static const gchar*
+thunar_standard_view_get_statusbar_text (ThunarView *view)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (view);
+  GList              *items;
+
+  g_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), NULL);
+
+  /* generate the statusbar text on-demand */
+  if (standard_view->statusbar_text == NULL)
+    {
+      /* query the selected items (actually a list of GtkTreePath's) */
+      items = THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items (standard_view);
+
+      /* we display a loading text if no items are
+       * selected and the view is loading
+       */
+      if (items == NULL && standard_view->loading)
+        return _("Loading folder contents...");
+
+      standard_view->statusbar_text = thunar_list_model_get_statusbar_text (standard_view->model, items);
+      g_list_foreach (items, (GFunc) gtk_tree_path_free, NULL);
+      g_list_free (items);
+    }
+
+  return standard_view->statusbar_text;
+}
+
+
+
+static gboolean
+thunar_standard_view_get_show_hidden (ThunarView *view)
+{
+  return thunar_list_model_get_show_hidden (THUNAR_STANDARD_VIEW (view)->model);
+}
+
+
+
+static void
+thunar_standard_view_set_show_hidden (ThunarView *view,
+                                      gboolean    show_hidden)
+{
+  thunar_list_model_set_show_hidden (THUNAR_STANDARD_VIEW (view)->model, show_hidden);
+}
+
+
+
+static GtkUIManager*
+thunar_standard_view_get_ui_manager (ThunarView *view)
+{
+  return THUNAR_STANDARD_VIEW (view)->ui_manager;
+}
+
+
+
+static void
+thunar_standard_view_set_ui_manager (ThunarView   *view,
+                                     GtkUIManager *ui_manager)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (view);
+  GError             *error = NULL;
+
+  /* disconnect from the previous UI manager */
+  if (G_LIKELY (standard_view->ui_manager != NULL))
+    {
+      /* remove any registered custom menu actions */
+      if (G_LIKELY (standard_view->priv->custom_merge_id != 0))
+        {
+          gtk_ui_manager_remove_ui (standard_view->ui_manager, standard_view->priv->custom_merge_id);
+          standard_view->priv->custom_merge_id = 0;
+        }
+
+      /* drop the previous custom action group */
+      if (G_LIKELY (standard_view->priv->custom_actions != NULL))
+        {
+          gtk_ui_manager_remove_action_group (standard_view->ui_manager, standard_view->priv->custom_actions);
+          g_object_unref (G_OBJECT (standard_view->priv->custom_actions));
+          standard_view->priv->custom_actions = NULL;
+        }
+
+      /* drop our action group from the previous UI manager */
+      gtk_ui_manager_remove_action_group (standard_view->ui_manager, standard_view->action_group);
+
+      /* unmerge the ui controls from derived classes */
+      (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->disconnect_ui_manager) (standard_view, standard_view->ui_manager);
+
+      /* unmerge our ui controls from the previous UI manager */
+      gtk_ui_manager_remove_ui (standard_view->ui_manager, standard_view->ui_merge_id);
+
+      /* drop the reference on the previous UI manager */
+      g_object_unref (G_OBJECT (standard_view->ui_manager));
+    }
+
+  /* apply the new setting */
+  standard_view->ui_manager = ui_manager;
+
+  /* connect to the new manager (if any) */
+  if (G_LIKELY (ui_manager != NULL))
+    {
+      /* we keep a reference on the new manager */
+      g_object_ref (G_OBJECT (ui_manager));
+
+      /* add our action group to the new manager */
+      gtk_ui_manager_insert_action_group (ui_manager, standard_view->action_group, -1);
+
+      /* merge our UI control items with the new manager */
+      standard_view->ui_merge_id = gtk_ui_manager_add_ui_from_string (ui_manager, thunar_standard_view_ui,
+                                                                      thunar_standard_view_ui_length, &error);
+      if (G_UNLIKELY (standard_view->ui_merge_id == 0))
+        {
+          g_error ("Failed to merge ThunarStandardView menus: %s", error->message);
+          g_error_free (error);
+        }
+
+      /* merge the ui controls from derived classes */
+      (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->connect_ui_manager) (standard_view, ui_manager);
+    }
+
+  /* let others know that we have a new manager */
+  g_object_notify (G_OBJECT (view), "ui-manager");
+}
+
+
+
+static gboolean
+thunar_standard_view_delete_selected_files (ThunarStandardView *standard_view)
+{
+  g_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), FALSE);
+
+  /* just emit the "activate" signal on the "delete" action */
+  gtk_action_activate (standard_view->priv->action_delete);
+
+  /* ...and we're done */
+  return TRUE;
+}
+
+
+
+static GdkDragAction
+thunar_standard_view_get_dest_actions (ThunarStandardView *standard_view,
+                                       GdkDragContext     *context,
+                                       gint                x,
+                                       gint                y,
+                                       guint               time,
+                                       ThunarFile        **file_return)
+{
+  GdkDragAction actions = 0;
+  GdkDragAction action = 0;
+  GtkTreePath  *path;
+  GtkTreeIter   iter;
+  ThunarFile   *file;
+
+  /* determine the path for the given coordinates */
+  path = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_path_at_pos) (standard_view, x, y);
+  if (G_LIKELY (path != NULL))
+    {
+      /* determine the file for the path */
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, path);
+      file = thunar_list_model_get_file (standard_view->model, &iter);
+    }
+  else
+    {
+      /* determine the current directory */
+      file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+      if (G_LIKELY (file != NULL))
+        g_object_ref (G_OBJECT (file));
+    }
+
+  /* check if we can drop there */
+  if (G_LIKELY (file != NULL))
+    {
+      actions = thunar_file_accepts_drop (file, standard_view->priv->drop_path_list, context->actions);
+      if (G_LIKELY (actions != 0))
+        {
+          /* determine a working action */
+          if (G_LIKELY ((context->suggested_action & actions) != 0))
+            action = context->suggested_action;
+          else if ((actions & GDK_ACTION_ASK) != 0)
+            action = GDK_ACTION_ASK;
+          else if ((actions & GDK_ACTION_COPY) != 0)
+            action = GDK_ACTION_COPY;
+          else if ((actions & GDK_ACTION_LINK) != 0)
+            action = GDK_ACTION_LINK;
+          else if ((actions & GDK_ACTION_MOVE) != 0)
+            action = GDK_ACTION_MOVE;
+          else
+            action = GDK_ACTION_PRIVATE;
+
+          /* tell the caller about the file (if it's interested) */
+          if (G_UNLIKELY (file_return != NULL))
+            *file_return = g_object_ref (G_OBJECT (file));
+        }
+
+      /* release the file reference */
+      g_object_unref (G_OBJECT (file));
+    }
+
+  /* reset path if we cannot drop */
+  if (G_UNLIKELY (action == 0 && path != NULL))
+    {
+      gtk_tree_path_free (path);
+      path = NULL;
+    }
+
+  /* setup the drop-file for the icon renderer, so the user
+   * gets good visual feedback for the drop target.
+   */
+  g_object_set (G_OBJECT (standard_view->icon_renderer), "drop-file", (action != 0) ? file : NULL, NULL);
+
+  /* do the view highlighting */
+  if (standard_view->priv->drop_highlight != (path == NULL && action != 0))
+    {
+      standard_view->priv->drop_highlight = (path == NULL && action != 0);
+      gtk_widget_queue_draw (GTK_WIDGET (standard_view));
+    }
+
+  /* do the item highlighting */
+  (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->highlight_path) (standard_view, path);
+
+  /* tell Gdk whether we can drop here */
+  gdk_drag_status (context, action, time);
+
+  /* clean up */
+  if (G_LIKELY (path != NULL))
+    gtk_tree_path_free (path);
+
+  return actions;
+}
+
+
+
+static GList*
+thunar_standard_view_get_selected_files (ThunarStandardView *standard_view)
+{
+  GtkTreeIter iter;
+  ThunarFile *file;
+  GList      *selected_items;
+  GList      *selected_files = NULL;
+  GList      *lp;
+
+  selected_items = THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items (standard_view);
+  for (lp = selected_items; lp != NULL; lp = lp->next)
+    {
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, lp->data);
+      file = thunar_list_model_get_file (standard_view->model, &iter);
+      selected_files = g_list_append (selected_files, file);
+      gtk_tree_path_free (lp->data);
+    }
+  g_list_free (selected_items);
+
+  return selected_files;
+}
+
+
+
+static GList*
+thunar_standard_view_get_selected_paths (ThunarStandardView *standard_view)
+{
+  GtkTreeIter iter;
+  ThunarFile *file;
+  GList      *selected_items;
+  GList      *selected_paths = NULL;
+  GList      *lp;
+
+  selected_items = THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items (standard_view);
+  for (lp = selected_items; lp != NULL; lp = lp->next)
+    {
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, lp->data);
+      file = thunar_list_model_get_file (standard_view->model, &iter);
+      selected_paths = thunar_vfs_path_list_append (selected_paths, thunar_file_get_path (file));
+      g_object_unref (G_OBJECT (file));
+      gtk_tree_path_free (lp->data);
+    }
+  g_list_free (selected_items);
+
+  return selected_paths;
+}
+
+
+
+static gint
+compare_actions (gconstpointer a,
+                 gconstpointer b)
+{
+  return strcmp (gtk_action_get_name (GTK_ACTION (a)), gtk_action_get_name (GTK_ACTION (b)));
+}
+
+
+
+static void
+thunar_standard_view_merge_custom_actions (ThunarStandardView *standard_view,
+                                           GList              *selected_items)
+{
+  GtkTreeIter iter;
+  ThunarFile *file = NULL;
+  GtkWidget  *window;
+  GList      *providers;
+  GList      *actions = NULL;
+  GList      *files = NULL;
+  GList      *tmp;
+  GList      *lp;
+
+  /* we cannot add anything if we aren't connected to any UI manager */
+  if (G_UNLIKELY (standard_view->ui_manager == NULL))
+    return;
+
+  /* determine the toplevel window we belong to */
+  window = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
+
+  /* load the menu providers from the extension manager */
+  providers = thunar_extension_manager_list_providers (standard_view->priv->extension_manager, THUNARX_TYPE_MENU_PROVIDER);
+  if (G_LIKELY (providers != NULL))
+    {
+      /* determine the list of selected files or the current folder */
+      if (G_LIKELY (selected_items != NULL))
+        {
+          for (lp = selected_items; lp != NULL; lp = lp->next)
+            {
+              gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, lp->data);
+              file = thunar_list_model_get_file (standard_view->model, &iter);
+              files = g_list_append (files, file);
+            }
+        }
+      else
+        {
+          /* grab a reference to the current directory of the view */
+          file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+        }
+
+      /* load the actions offered by the menu providers */
+      for (lp = providers; lp != NULL; lp = lp->next)
+        {
+          if (G_LIKELY (files != NULL))
+            tmp = thunarx_menu_provider_get_file_actions (lp->data, window, files);
+          else if (G_LIKELY (file != NULL))
+            tmp = thunarx_menu_provider_get_folder_actions (lp->data, window, THUNARX_FILE_INFO (file));
+          else
+            tmp = NULL;
+          actions = g_list_concat (actions, tmp);
+          g_object_unref (G_OBJECT (lp->data));
+        }
+      g_list_free (providers);
+
+      /* cleanup the selected files list (if any) */
+      if (G_LIKELY (files != NULL))
+        thunar_file_list_free (files);
+    }
+
+  /* determine the currently selected file/folder for which to load custom actions */
+  if (G_LIKELY (selected_items != NULL && selected_items->next == NULL))
+    {
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, selected_items->data);
+      file = thunar_list_model_get_file (standard_view->model, &iter);
+    }
+  else if (selected_items == NULL)
+    {
+      file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+      if (G_LIKELY (file != NULL))
+        g_object_ref (G_OBJECT (file));
+    }
+  else
+    {
+      file = NULL;
+    }
+
+  /* load the custom actions for the currently selected file/folder */
+  if (G_LIKELY (file != NULL))
+    {
+      tmp = thunar_file_get_actions (file, window);
+      actions = g_list_concat (actions, tmp);
+      g_object_unref (G_OBJECT (file));
+    }
+
+  /* remove the previously determined menu actions from the UI manager */
+  if (G_LIKELY (standard_view->priv->custom_actions != 0))
+    {
+      gtk_ui_manager_remove_ui (standard_view->ui_manager, standard_view->priv->custom_merge_id);
+      standard_view->priv->custom_merge_id = 0;
+    }
+
+  /* drop any previous custom action group */
+  if (G_LIKELY (standard_view->priv->custom_actions != NULL))
+    {
+      gtk_ui_manager_remove_action_group (standard_view->ui_manager, standard_view->priv->custom_actions);
+      g_object_unref (G_OBJECT (standard_view->priv->custom_actions));
+      standard_view->priv->custom_actions = NULL;
+    }
+
+  /* add the actions specified by the menu providers */
+  if (G_LIKELY (actions != NULL))
+    {
+      /* allocate the action group and the merge id for the custom actions */
+      standard_view->priv->custom_actions = gtk_action_group_new ("thunar-standard-view-custom-actions");
+      standard_view->priv->custom_merge_id = gtk_ui_manager_new_merge_id (standard_view->ui_manager);
+      gtk_ui_manager_insert_action_group (standard_view->ui_manager, standard_view->priv->custom_actions, -1);
+
+      /* sort the actions by their names */
+      actions = g_list_sort (actions, compare_actions);
+
+      /* add the actions to the UI manager */
+      for (lp = actions; lp != NULL; lp = lp->next)
+        {
+          /* add the action to the action group */
+          gtk_action_group_add_action (standard_view->priv->custom_actions, GTK_ACTION (lp->data));
+
+          /* add the action to the UI manager */
+          if (G_LIKELY (selected_items != NULL))
+            {
+              /* add to the file context menu */
+              gtk_ui_manager_add_ui (standard_view->ui_manager,
+                                     standard_view->priv->custom_merge_id,
+                                     "/file-context-menu/placeholder-custom-actions",
+                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     GTK_UI_MANAGER_MENUITEM, FALSE);
+            }
+          else
+            {
+              /* add to the folder context menu */
+              gtk_ui_manager_add_ui (standard_view->ui_manager,
+                                     standard_view->priv->custom_merge_id,
+                                     "/folder-context-menu/placeholder-custom-actions",
+                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     gtk_action_get_name (GTK_ACTION (lp->data)),
+                                     GTK_UI_MANAGER_MENUITEM, FALSE);
+            }
+
+          /* release the reference on the action */
+          g_object_unref (G_OBJECT (lp->data));
+        }
+
+      /* be sure to update the UI manager to avoid flickering */
+      gtk_ui_manager_ensure_update (standard_view->ui_manager);
+
+      /* cleanup */
+      g_list_free (actions);
+    }
+}
+
+
+
+static void
+thunar_standard_view_update_statusbar_text (ThunarStandardView *standard_view)
+{
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* clear the current status text (will be recalculated on-demand) */
+  g_free (standard_view->statusbar_text);
+  standard_view->statusbar_text = NULL;
+
+  /* tell everybody that the statusbar text may have changed */
+  g_object_notify (G_OBJECT (standard_view), "statusbar-text");
+}
+
+
+
+static void
+thunar_standard_view_action_create_folder (GtkAction          *action,
+                                           ThunarStandardView *standard_view)
+{
+  ThunarVfsMimeDatabase *mime_database;
+  ThunarVfsMimeInfo     *mime_info;
+  ThunarApplication     *application;
+  const gchar           *filename;
+  ThunarFile            *current_directory;
+  GtkWidget             *dialog;
+  GtkWidget             *window;
+  GError                *error = NULL;
+  GList                  path_list;
+  gchar                 *name;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* lookup "inode/directory" mime info */
+  mime_database = thunar_vfs_mime_database_get_default ();
+  mime_info = thunar_vfs_mime_database_get_info (mime_database, "inode/directory");
+
+  /* determine the toplevel window */
+  window = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
+
+  /* display the create dialog */
+  dialog = g_object_new (THUNAR_TYPE_CREATE_DIALOG,
+                         "destroy-with-parent", TRUE,
+                         "filename", _("New Folder"),
+                         "mime-info", mime_info,
+                         "modal", TRUE,
+                         "title", _("New Folder..."),
+                         NULL);
+  if (G_LIKELY (window != NULL))
+    gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
+  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+    {
+      /* determine the chosen filename */
+      filename = thunar_create_dialog_get_filename (THUNAR_CREATE_DIALOG (dialog));
+
+      /* convert the UTF-8 filename to the local file system encoding */
+      name = g_filename_from_utf8 (filename, -1, NULL, NULL, &error);
+      if (G_UNLIKELY (name == NULL))
+        {
+          /* display an error message */
+          thunar_dialogs_show_error (dialog, error, _("Cannot convert filename `%s' to the local encoding"), filename);
+
+          /* release the error */
+          g_error_free (error);
+        }
+      else
+        {
+          /* determine the ThunarFile for the current directory */
+          current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+          if (G_LIKELY (current_directory != NULL))
+            {
+              /* fake the path list */
+              path_list.data = thunar_vfs_path_relative (thunar_file_get_path (current_directory), name);
+              path_list.next = path_list.prev = NULL;
+
+              /* launch the operation */
+              application = thunar_application_get ();
+              thunar_application_mkdir (application, GTK_WIDGET (standard_view), &path_list,
+                                        thunar_standard_view_new_files_closure (standard_view));
+              g_object_unref (G_OBJECT (application));
+
+              /* release the path */
+              thunar_vfs_path_unref (path_list.data);
+            }
+
+          /* release the file name in the local encoding */
+          g_free (name);
+        }
+    }
+  gtk_widget_destroy (dialog);
+
+  /* cleanup */
+  g_object_unref (G_OBJECT (mime_database));
+  thunar_vfs_mime_info_unref (mime_info);
+}
+
+
+
+static void
+thunar_standard_view_action_properties (GtkAction          *action,
+                                        ThunarStandardView *standard_view)
+{
+  GtkWidget *toplevel;
+  GtkWidget *dialog;
+  GList     *files;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  files = thunar_standard_view_get_selected_files (standard_view);
+  if (G_LIKELY (g_list_length (files) == 1))
+    {
+      toplevel = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
+      if (G_LIKELY (toplevel != NULL))
+        {
+          dialog = g_object_new (THUNAR_TYPE_PROPERTIES_DIALOG,
+                                 "destroy-with-parent", TRUE,
+                                 "file", files->data,
+                                 NULL);
+          gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
+          gtk_widget_show (dialog);
+        }
+    }
+  thunar_file_list_free (files);
+}
+
+
+
+static void
+thunar_standard_view_action_copy (GtkAction          *action,
+                                  ThunarStandardView *standard_view)
+{
+  GList *files;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (standard_view->clipboard));
+
+  files = thunar_standard_view_get_selected_files (standard_view);
+  thunar_clipboard_manager_copy_files (standard_view->clipboard, files);
+  thunar_file_list_free (files);
+}
+
+
+
+static void
+thunar_standard_view_action_cut (GtkAction          *action,
+                                 ThunarStandardView *standard_view)
+{
+  GList *files;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (standard_view->clipboard));
+
+  files = thunar_standard_view_get_selected_files (standard_view);
+  thunar_clipboard_manager_cut_files (standard_view->clipboard, files);
+  thunar_file_list_free (files);
+}
+
+
+
+static void
+thunar_standard_view_action_paste (GtkAction          *action,
+                                   ThunarStandardView *standard_view)
+{
+  ThunarFile *current_directory;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+  if (G_LIKELY (current_directory != NULL))
+    {
+      thunar_clipboard_manager_paste_files (standard_view->clipboard, thunar_file_get_path (current_directory),
+                                            GTK_WIDGET (standard_view), thunar_standard_view_new_files_closure (standard_view));
+    }
+}
+
+
+
+static void
+thunar_standard_view_action_delete (GtkAction          *action,
+                                    ThunarStandardView *standard_view)
+{
+  ThunarApplication *application;
+  GtkWidget         *dialog;
+  GtkWidget         *window;
+  GList             *lp;
+  GList             *path_list;
+  GList             *selected_files;
+  guint              n_selected_files;
+  gchar             *message;
+  gint               response;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* determine the selected files */
+  selected_files = thunar_standard_view_get_selected_files (standard_view);
+  if (G_UNLIKELY (selected_files == NULL))
+    return;
+
+  /* generate the question to confirm the delete operation */
+  if (G_LIKELY (selected_files->next == NULL))
+    {
+      message = g_strdup_printf (_("Are you sure that you want to\npermanently delete \"%s\"?"),
+                                 thunar_file_get_display_name (THUNAR_FILE (selected_files->data)));
+    }
+  else
+    {
+      n_selected_files = g_list_length (selected_files);
+      message = g_strdup_printf (ngettext ("Are you sure that you want to permanently\ndelete the selected file?",
+                                           "Are you sure that you want to permanently\ndelete the %u selected files?",
+                                           n_selected_files),
+                                 n_selected_files);
+    }
+
+  /* ask the user to confirm the delete operation */
+  window = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                   GTK_DIALOG_MODAL
+                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_QUESTION,
+                                   GTK_BUTTONS_YES_NO,
+                                   message);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+  gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("If you delete a file, it is permanently lost."));
+  response = gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
+  g_free (message);
+
+  /* perform the delete operation */
+  if (G_LIKELY (response == GTK_RESPONSE_YES))
+    {
+      /* generate the path list from the list of selected files */
+      for (lp = selected_files, path_list = NULL; lp != NULL; lp = lp->next)
+        path_list = g_list_append (path_list, thunar_file_get_path (THUNAR_FILE (lp->data)));
+      application = thunar_application_get ();
+      thunar_application_unlink (application, window, path_list);
+      g_object_unref (G_OBJECT (application));
+      g_list_free (path_list);
+    }
+
+  /* release the list of selected files */
+  thunar_file_list_free (selected_files);
+}
+
+
+
+static void
+thunar_standard_view_action_paste_into_folder (GtkAction          *action,
+                                               ThunarStandardView *standard_view)
+{
+  ThunarFile *file;
+  GList      *files;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* determine the first selected directory and paste into it */
+  files = thunar_standard_view_get_selected_files (standard_view);
+  file = (files != NULL) ? THUNAR_FILE (files->data) : NULL;
+  if (G_LIKELY (file != NULL && thunar_file_is_directory (file)))
+    thunar_clipboard_manager_paste_files (standard_view->clipboard, thunar_file_get_path (file), GTK_WIDGET (standard_view), NULL);
+  thunar_file_list_free (files);
+}
+
+
+
+static void
+thunar_standard_view_action_select_all_files (GtkAction          *action,
+                                              ThunarStandardView *standard_view)
+{
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->select_all (standard_view);
+}
+
+
+
+static void
+thunar_standard_view_action_select_by_pattern (GtkAction          *action,
+                                               ThunarStandardView *standard_view)
+{
+  GtkWidget *window;
+  GtkWidget *dialog;
+  GtkWidget *hbox;
+  GtkWidget *label;
+  GtkWidget *entry;
+  GList     *paths;
+  GList     *lp;
+  gint       response;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  window = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
+  dialog = gtk_dialog_new_with_buttons (_("Select by Pattern"),
+                                        GTK_WINDOW (window),
+                                        GTK_DIALOG_MODAL
+                                        | GTK_DIALOG_NO_SEPARATOR
+                                        | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
+                                        NULL);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
+
+  hbox = g_object_new (GTK_TYPE_HBOX, "border-width", 6, "spacing", 10, NULL);
+  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 0);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Pattern:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
+  gtk_widget_show (entry);
+
+  response = gtk_dialog_run (GTK_DIALOG (dialog));
+  if (response == GTK_RESPONSE_OK)
+    {
+      /* select all files that match the entered pattern */
+      paths = thunar_list_model_get_paths_for_pattern (standard_view->model, gtk_entry_get_text (GTK_ENTRY (entry)));
+      THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->unselect_all (standard_view);
+      for (lp = paths; lp != NULL; lp = lp->next)
+        {
+          THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->select_path (standard_view, lp->data);
+          gtk_tree_path_free (lp->data);
+        }
+      g_list_free (paths);
+    }
+
+  gtk_widget_destroy (dialog);
+}
+
+
+
+static void
+thunar_standard_view_action_duplicate (GtkAction          *action,
+                                       ThunarStandardView *standard_view)
+{
+  ThunarApplication *application;
+  ThunarFile        *current_directory;
+  GClosure          *new_files_closure;
+  GList             *selected_paths;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* determine the file for the current directory */
+  current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+  if (G_LIKELY (current_directory != NULL))
+    {
+      /* determine the selected paths for the view */
+      selected_paths = thunar_standard_view_get_selected_paths (standard_view);
+
+      /* copy the selected files into the current directory, which effectively
+       * creates duplicates of the files.
+       */
+      application = thunar_application_get ();
+      new_files_closure = thunar_standard_view_new_files_closure (standard_view);
+      thunar_application_copy_into (application, GTK_WIDGET (standard_view), selected_paths,
+                                    thunar_file_get_path (current_directory), new_files_closure);
+      g_object_unref (G_OBJECT (application));
+
+      /* clean up */
+      thunar_vfs_path_list_free (selected_paths);
+    }
+}
+
+
+
+static void
+thunar_standard_view_action_make_link (GtkAction          *action,
+                                       ThunarStandardView *standard_view)
+{
+  ThunarApplication *application;
+  ThunarFile        *current_directory;
+  GClosure          *new_files_closure;
+  GList             *selected_path_list = NULL;
+  GList             *selected_files;
+  GList             *lp;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* determine the file for the current directory */
+  current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+  if (G_LIKELY (current_directory != NULL))
+    {
+      /* determine the selected files for the view */
+      selected_files = thunar_standard_view_get_selected_files (standard_view);
+
+      /* determine the ThunarVfsPaths for the selected files */
+      for (lp = g_list_last (selected_files); lp != NULL; lp = lp->prev)
+        selected_path_list = g_list_prepend (selected_path_list, thunar_file_get_path (lp->data));
+
+      /* link the selected files into the current directory, which effectively
+       * creates new unique links for the files.
+       */
+      application = thunar_application_get ();
+      new_files_closure = thunar_standard_view_new_files_closure (standard_view);
+      thunar_application_link_into (application, GTK_WIDGET (standard_view), selected_path_list,
+                                    thunar_file_get_path (current_directory), new_files_closure);
+      g_object_unref (G_OBJECT (application));
+
+      /* clean up */
+      thunar_file_list_free (selected_files);
+      g_list_free (selected_path_list);
+    }
+}
+
+
+
+static void
+thunar_standard_view_action_rename (GtkAction          *action,
+                                    ThunarStandardView *standard_view)
+{
+  GList *selected_items;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* start renaming if we have exactly one selected file */
+  selected_items = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items) (standard_view);
+  if (G_LIKELY (selected_items != NULL && selected_items->next == NULL))
+    (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->set_cursor) (standard_view, selected_items->data, TRUE);
+  g_list_foreach (selected_items, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (selected_items);
+}
+
+
+
+static GClosure*
+thunar_standard_view_new_files_closure (ThunarStandardView *standard_view)
+{
+  /* drop any previous "new-files" closure */
+  if (G_UNLIKELY (standard_view->priv->new_files_closure != NULL))
+    {
+      g_closure_invalidate (standard_view->priv->new_files_closure);
+      g_closure_unref (standard_view->priv->new_files_closure);
+    }
+
+  /* allocate a new "new-files" closure */
+  standard_view->priv->new_files_closure = g_cclosure_new (G_CALLBACK (thunar_standard_view_new_files), standard_view, NULL);
+  g_closure_ref (standard_view->priv->new_files_closure);
+  g_closure_sink (standard_view->priv->new_files_closure);
+
+  /* and return our new closure */
+  return standard_view->priv->new_files_closure;
+}
+
+
+
+static void
+thunar_standard_view_new_files (ThunarVfsJob       *job,
+                                GList              *path_list,
+                                ThunarStandardView *standard_view)
+{
+  GtkTreePath *first_path = NULL;
+  ThunarFile  *file;
+  GList       *file_list = NULL;
+  GList       *paths;
+  GList       *lp;
+
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* verify that we have a model and a non-empty path_list */
+  if (G_UNLIKELY (standard_view->model == NULL || path_list == NULL))
+    return;
+
+  /* determine the files for the paths */
+  for (lp = path_list; lp != NULL; lp = lp->next)
+    {
+      file = thunar_file_cache_lookup (lp->data);
+      if (G_LIKELY (file != NULL))
+        file_list = g_list_prepend (file_list, file);
+    }
+
+  /* determine the tree paths for the given files */
+  paths = thunar_list_model_get_paths_for_files (standard_view->model, file_list);
+  if (G_LIKELY (paths != NULL))
+    {
+      /* unselect all previously selected paths */
+      (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->unselect_all) (standard_view);
+
+      /* select the given tree paths */
+      for (first_path = paths->data, lp = paths; lp != NULL; lp = lp->next)
+        {
+          /* check if this path is located before the current first_path */
+          if (gtk_tree_path_compare (lp->data, first_path) < 0)
+            first_path = lp->data;
+
+          /* select the path */
+          (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->select_path) (standard_view, lp->data);
+        }
+
+      /* scroll to the first path (previously determined) */
+      (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->scroll_to_path) (standard_view, first_path);
+
+      /* release the tree paths */
+      g_list_foreach (paths, (GFunc) gtk_tree_path_free, NULL);
+      g_list_free (paths);
+
+      /* grab the focus to the view widget */
+      gtk_widget_grab_focus (GTK_BIN (standard_view)->child);
+    }
+
+  /* release the file list */
+  g_list_free (file_list);
+}
+
+
+
+static gboolean
+thunar_standard_view_button_release_event (GtkWidget          *view,
+                                           GdkEventButton     *event,
+                                           ThunarStandardView *standard_view)
+{
+  g_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), FALSE);
+  g_return_val_if_fail (standard_view->priv->drag_timer_id >= 0, FALSE);
+
+  /* cancel the pending drag timer */
+  g_source_remove (standard_view->priv->drag_timer_id);
+
+  /* fire up the context menu */
+  thunar_standard_view_context_menu (standard_view, 0, event->time);
+
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_standard_view_motion_notify_event (GtkWidget          *view,
+                                          GdkEventMotion     *event,
+                                          ThunarStandardView *standard_view)
+{
+  GdkDragContext *context;
+  GtkTargetList  *target_list;
+
+  g_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), FALSE);
+  g_return_val_if_fail (standard_view->priv->drag_timer_id >= 0, FALSE);
+
+  /* check if we passed the DnD threshold */
+  if (gtk_drag_check_threshold (view, standard_view->priv->drag_x, standard_view->priv->drag_y, event->x, event->y))
+    {
+      /* cancel the drag timer, as we won't popup the menu anymore */
+      g_source_remove (standard_view->priv->drag_timer_id);
+
+      /* allocate the drag context (preferred action is to ask the user) */
+      target_list = gtk_target_list_new (drag_targets, G_N_ELEMENTS (drag_targets));
+      context = gtk_drag_begin (view, target_list, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK, 3, (GdkEvent *) event);
+      context->suggested_action = GDK_ACTION_ASK;
+      gtk_target_list_unref (target_list);
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_standard_view_drag_drop (GtkWidget          *view,
+                                GdkDragContext     *context,
+                                gint                x,
+                                gint                y,
+                                guint               time,
+                                ThunarStandardView *standard_view)
+{
+  GdkAtom target;
+
+  target = gtk_drag_dest_find_target (view, context, NULL);
+  if (G_LIKELY (target != GDK_NONE))
+    {
+      /* set state so the drag-data-received knows that
+       * this is really a drop this time.
+       */
+      standard_view->priv->drop_occurred = TRUE;
+
+      /* request the drag data from the source */
+      gtk_drag_get_data (view, context, target, time);
+  
+      /* we'll call gtk_drag_finish() later */
+      return TRUE;
+    }
+  else
+    {
+      /* we cannot handle the drag data */
+      return FALSE;
+    }
+}
+
+
+
+static void
+thunar_standard_view_drag_data_received (GtkWidget          *view,
+                                         GdkDragContext     *context,
+                                         gint                x,
+                                         gint                y,
+                                         GtkSelectionData   *selection_data,
+                                         guint               info,
+                                         guint               time,
+                                         ThunarStandardView *standard_view)
+{
+  GdkDragAction actions;
+  GdkDragAction action;
+  ThunarFile   *file = NULL;
+  gboolean      succeed = FALSE;
+
+  /* check if we don't already know the drop data */
+  if (G_LIKELY (!standard_view->priv->drop_data_ready))
+    {
+      /* extract the URI list from the selection data (if valid) */
+      if (info == TEXT_URI_LIST && selection_data->format == 8 && selection_data->length > 0)
+        standard_view->priv->drop_path_list = thunar_vfs_path_list_from_string ((gchar *) selection_data->data, NULL);
+
+      /* reset the state */
+      standard_view->priv->drop_data_ready = TRUE;
+    }
+
+  /* check if the data was dropped */
+  if (G_UNLIKELY (standard_view->priv->drop_occurred))
+    {
+      /* reset the state */
+      standard_view->priv->drop_occurred = FALSE;
+
+      /* determine the drop position */
+      actions = thunar_standard_view_get_dest_actions (standard_view, context, x, y, time, &file);
+      if (G_LIKELY ((actions & (GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK)) != 0))
+        {
+          /* ask the user what to do with the drop data */
+          action = (context->action == GDK_ACTION_ASK) ? thunar_dnd_ask (GTK_WIDGET (standard_view), time, actions) : context->action;
+
+          /* perform the requested action */
+          if (G_LIKELY (action != 0))
+            {
+              succeed = thunar_dnd_perform (GTK_WIDGET (standard_view), file, standard_view->priv->drop_path_list,
+                                            action, thunar_standard_view_new_files_closure (standard_view));
+            }
+        }
+
+      /* release the file reference */
+      if (G_LIKELY (file != NULL))
+        g_object_unref (G_OBJECT (file));
+
+      /* disable the highlighting and release the drag data */
+      thunar_standard_view_drag_leave (view, context, time, standard_view);
+
+      /* tell the peer that we handled the drop */
+      gtk_drag_finish (context, succeed, FALSE, time);
+    }
+}
+
+
+
+static void
+thunar_standard_view_drag_leave (GtkWidget          *widget,
+                                 GdkDragContext     *context,
+                                 guint               time,
+                                 ThunarStandardView *standard_view)
+{
+  /* reset the drop-file for the icon renderer */
+  g_object_set (G_OBJECT (standard_view->icon_renderer), "drop-file", NULL, NULL);
+
+  /* disable the drop highlighting around the view */
+  if (G_LIKELY (standard_view->priv->drop_highlight))
+    {
+      standard_view->priv->drop_highlight = FALSE;
+      gtk_widget_queue_draw (GTK_WIDGET (standard_view));
+    }
+
+  /* reset the "drop data ready" status and free the URI list */
+  if (G_LIKELY (standard_view->priv->drop_data_ready))
+    {
+      thunar_vfs_path_list_free (standard_view->priv->drop_path_list);
+      standard_view->priv->drop_path_list = NULL;
+      standard_view->priv->drop_data_ready = FALSE;
+    }
+
+  /* disable the highlighting of the items in the view */
+  (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->highlight_path) (standard_view, NULL);
+}
+
+
+
+static gboolean
+thunar_standard_view_drag_motion (GtkWidget          *view,
+                                  GdkDragContext     *context,
+                                  gint                x,
+                                  gint                y,
+                                  guint               time,
+                                  ThunarStandardView *standard_view)
+{
+  GdkAtom target;
+
+  /* request the drop data on-demand (if we don't have it already) */
+  if (G_UNLIKELY (!standard_view->priv->drop_data_ready))
+    {
+      /* check if we can handle that drag data (yet?) */
+      target = gtk_drag_dest_find_target (view, context, NULL);
+      if (G_UNLIKELY (target == GDK_NONE))
+        {
+          /* we cannot handle the drag data */
+          gdk_drag_status (context, 0, time);
+        }
+      else
+        {
+          /* request the drag data from the source */
+          gtk_drag_get_data (view, context, target, time);
+
+          /* and deny the drop so far */
+          gdk_drag_status (context, 0, time);
+        }
+    }
+  else
+    {
+      /* check whether we can drop at (x,y) */
+      thunar_standard_view_get_dest_actions (standard_view, context, x, y, time, NULL);
+    }
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_standard_view_drag_begin (GtkWidget          *view,
+                                 GdkDragContext     *context,
+                                 ThunarStandardView *standard_view)
+{
+  ThunarFile *file;
+  GdkPixbuf  *icon;
+  gint        size;
+
+  g_return_if_fail (standard_view->priv->drag_path_list == NULL);
+
+  /* query the list of selected URIs */
+  standard_view->priv->drag_path_list = thunar_standard_view_get_selected_paths (standard_view);
+  if (G_LIKELY (standard_view->priv->drag_path_list != NULL))
+    {
+      /* determine the first selected file */
+      file = thunar_file_get_for_path (standard_view->priv->drag_path_list->data, NULL);
+      if (G_LIKELY (file != NULL))
+        {
+          /* generate an icon based on that file */
+          g_object_get (G_OBJECT (standard_view->icon_renderer), "size", &size, NULL);
+          icon = thunar_icon_factory_load_file_icon (standard_view->icon_factory, file, THUNAR_FILE_ICON_STATE_DEFAULT, size);
+          gtk_drag_set_icon_pixbuf (context, icon, 0, 0);
+          g_object_unref (G_OBJECT (icon));
+
+          /* release the file */
+          g_object_unref (G_OBJECT (file));
+        }
+    }
+}
+
+
+
+static void
+thunar_standard_view_drag_data_get (GtkWidget          *view,
+                                    GdkDragContext     *context,
+                                    GtkSelectionData   *selection_data,
+                                    guint               info,
+                                    guint               time,
+                                    ThunarStandardView *standard_view)
+{
+  gchar *uri_string;
+
+  /* set the URI list for the drag selection */
+  uri_string = thunar_vfs_path_list_to_string (standard_view->priv->drag_path_list);
+  gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar *) uri_string, strlen (uri_string));
+  g_free (uri_string);
+}
+
+
+
+static void
+thunar_standard_view_drag_data_delete (GtkWidget          *view,
+                                       GdkDragContext     *context,
+                                       ThunarStandardView *standard_view)
+{
+  /* make sure the default handler of ExoIconView/GtkTreeView is never run */
+  g_signal_stop_emission_by_name (G_OBJECT (view), "drag-data-delete");
+}
+
+
+
+static void
+thunar_standard_view_drag_end (GtkWidget          *view,
+                               GdkDragContext     *context,
+                               ThunarStandardView *standard_view)
+{
+  /* release the list of dragged URIs */
+  thunar_vfs_path_list_free (standard_view->priv->drag_path_list);
+  standard_view->priv->drag_path_list = NULL;
+}
+
+
+
+static void
+thunar_standard_view_error (ThunarListModel    *model,
+                            const GError       *error,
+                            ThunarStandardView *standard_view)
+{
+  ThunarFile *file;
+
+  g_return_if_fail (THUNAR_IS_LIST_MODEL (model));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (standard_view->model == model);
+
+  /* determine the ThunarFile for the current directory */
+  file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+  if (G_UNLIKELY (file == NULL))
+    return;
+
+  /* inform the user about the problem */
+  thunar_dialogs_show_error (GTK_WIDGET (standard_view), error,
+                             _("Failed to open directory `%s'"),
+                             thunar_file_get_display_name (file));
+}
+
+
+
+static void
+thunar_standard_view_renamed (ThunarTextRenderer *text_renderer,
+                              const gchar        *path_string,
+                              const gchar        *text,
+                              ThunarStandardView *standard_view)
+{
+  GtkTreeRowReference *row;
+  const gchar         *old_name;
+  GtkTreePath         *path;
+  GtkTreeIter          iter;
+  ThunarFile          *file;
+  GError              *error = NULL;
+
+  g_return_if_fail (THUNAR_IS_TEXT_RENDERER (text_renderer));
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (path_string != NULL);
+
+  /* verify that the user supplied a valid file name */
+  if (G_UNLIKELY (text == NULL || *text == '\0'))
+    return;
+
+  /* determine path and iterator for the edited item */
+  path = gtk_tree_path_new_from_string (path_string);
+  gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, path);
+
+  /* determine the file from the iter */
+  file = thunar_list_model_get_file (THUNAR_LIST_MODEL (standard_view->model), &iter);
+
+  /* check if the name changed */
+  old_name = thunar_file_get_display_name (file);
+  if (G_LIKELY (!exo_str_is_equal (old_name, text)))
+    {
+      /* remember a row reference to the file as the
+       * rename operation is likely cause a reordering
+       * of the list model.
+       */
+      row = gtk_tree_row_reference_new (GTK_TREE_MODEL (standard_view->model), path);
+
+      /* try to rename the file */
+      if (!thunar_file_rename (file, text, &error))
+        {
+          /* display an error message */
+          thunar_dialogs_show_error (GTK_WIDGET (standard_view), error, _("Failed to rename `%s'"), old_name);
+
+          /* release the error */
+          g_error_free (error);
+        }
+      else if (G_LIKELY (gtk_tree_row_reference_valid (row)))
+        {
+          /* place the cursor on the item again and scroll to the position */
+          (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->scroll_to_path) (standard_view, gtk_tree_row_reference_get_path (row));
+
+          /* update the selection, so we get updated actions, statusbar,
+           * etc. with the new file name and probably new mime type.
+           */
+          thunar_standard_view_selection_changed (standard_view);
+        }
+
+      /* release the row reference */
+      gtk_tree_row_reference_free (row);
+    }
+
+  /* cleanup */
+  g_object_unref (G_OBJECT (file));
+  gtk_tree_path_free (path);
+}
+
+
+
+static void
+thunar_standard_view_loading_unbound (gpointer user_data)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (user_data);
+
+  /* we don't have any binding now */
+  standard_view->loading_binding = NULL;
+
+  /* reset the "loading" property */
+  if (G_UNLIKELY (standard_view->loading))
+    {
+      standard_view->loading = FALSE;
+      g_object_notify (G_OBJECT (standard_view), "loading");
+      g_object_notify (G_OBJECT (standard_view), "statusbar-text");
+    }
+}
+
+
+
+static gboolean
+thunar_standard_view_drag_timer (gpointer user_data)
+{
+  ThunarStandardView *standard_view = THUNAR_STANDARD_VIEW (user_data);
+
+  /* fire up the context menu */
+  GDK_THREADS_ENTER ();
+  thunar_standard_view_context_menu (standard_view, 3, gtk_get_current_event_time ());
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_standard_view_drag_timer_destroy (gpointer user_data)
+{
+  /* unregister the motion notify and button release event handlers (thread-safe) */
+  g_signal_handlers_disconnect_by_func (GTK_BIN (user_data)->child, thunar_standard_view_button_release_event, user_data);
+  g_signal_handlers_disconnect_by_func (GTK_BIN (user_data)->child, thunar_standard_view_motion_notify_event, user_data);
+
+  /* reset the drag timer source id */
+  THUNAR_STANDARD_VIEW (user_data)->priv->drag_timer_id = -1;
+}
+
+
+
+/**
+ * thunar_standard_view_context_menu:
+ * @standard_view : a #ThunarStandardView instance.
+ * @button        : the mouse button which triggered the context menu or %0 if
+ *                  the event wasn't triggered by a pointer device.
+ * @time          : the event time.
+ *
+ * Invoked by derived classes (and only by derived classes!) whenever the user
+ * requests to open a context menu, e.g. by right-clicking on a file/folder or by
+ * using one of the context menu shortcuts.
+ **/
+void
+thunar_standard_view_context_menu (ThunarStandardView *standard_view,
+                                   guint               button,
+                                   guint32             time)
+{
+  GMainLoop  *loop;
+  GtkWidget  *menu;
+  GList      *selected_items;
+  guint       id;
+
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* determine the selected items */
+  selected_items = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items) (standard_view);
+
+  /* merge the custom menu actions for the selected items */
+  thunar_standard_view_merge_custom_actions (standard_view, selected_items);
+
+  /* check if we need to popup the file or the folder context menu */
+  menu = gtk_ui_manager_get_widget (standard_view->ui_manager, (selected_items != NULL) ? "/file-context-menu" : "/folder-context-menu");
+
+  /* release the selected items */
+  g_list_foreach (selected_items, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (selected_items);
+
+  /* take a reference on the context menu */
+  g_object_ref (G_OBJECT (menu));
+  gtk_object_sink (GTK_OBJECT (menu));
+
+  /* grab an additional reference on the view */
+  g_object_ref (G_OBJECT (standard_view));
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* connect the deactivate handler */
+  id = g_signal_connect_swapped (G_OBJECT (menu), "deactivate", G_CALLBACK (g_main_loop_quit), loop);
+
+  /* make sure the menu is on the proper screen */
+  gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (GTK_WIDGET (standard_view)));
+
+  /* run our custom main loop */
+  gtk_grab_add (menu);
+  gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+  gtk_grab_remove (menu);
+
+  /* unlink the deactivate callback */
+  g_signal_handler_disconnect (G_OBJECT (menu), id);
+
+  /* release the additional reference on the view */
+  g_object_unref (G_OBJECT (standard_view));
+
+  /* decrease the reference count on the menu */
+  g_object_unref (G_OBJECT (menu));
+}
+
+
+
+/**
+ * thunar_standard_view_queue_popup:
+ * @standard_view : a #ThunarStandardView.
+ * @event         : the right click event.
+ *
+ * Schedules a context menu popup in response to
+ * a right-click button event. Right-click events
+ * need to be handled in a special way, as the
+ * user may also start a drag using the right
+ * mouse button and therefore this function
+ * schedules a timer, which - once expired -
+ * opens the context menu. If the user moves
+ * the mouse prior to expiration, a right-click
+ * drag (with #GDK_ACTION_ASK) will be started
+ * instead.
+ **/
+void
+thunar_standard_view_queue_popup (ThunarStandardView *standard_view,
+                                  GdkEventButton     *event)
+{
+  GtkSettings *settings;
+  GtkWidget   *view;
+  gint         delay;
+
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+  g_return_if_fail (event != NULL);
+
+  /* check if we have already scheduled a drag timer */
+  if (G_LIKELY (standard_view->priv->drag_timer_id < 0))
+    {
+      /* remember the new coordinates */
+      standard_view->priv->drag_x = event->x;
+      standard_view->priv->drag_y = event->y;
+
+      /* figure out the real view */
+      view = GTK_BIN (standard_view)->child;
+
+      /* we use the menu popup delay here, which should give us good values */
+      settings = gtk_settings_get_for_screen (gtk_widget_get_screen (view));
+      g_object_get (G_OBJECT (settings), "gtk-menu-popup-delay", &delay, NULL);
+
+      /* schedule the timer */
+      standard_view->priv->drag_timer_id = g_timeout_add_full (G_PRIORITY_LOW, delay, thunar_standard_view_drag_timer,
+                                                               standard_view, thunar_standard_view_drag_timer_destroy);
+
+      /* register the motion notify and the button release events on the real view */
+      g_signal_connect (G_OBJECT (view), "button-release-event", G_CALLBACK (thunar_standard_view_button_release_event), standard_view);
+      g_signal_connect (G_OBJECT (view), "motion-notify-event", G_CALLBACK (thunar_standard_view_motion_notify_event), standard_view);
+    }
+}
+
+
+
+/**
+ * thunar_standard_view_selection_changed:
+ * @standard_view : a #ThunarStandardView instance.
+ *
+ * Called by derived classes (and only by derived classes!) whenever the file
+ * selection changes.
+ *
+ * Note, that this is also called internally whenever the number of
+ * files in the @standard_view<!---->s model changes.
+ **/
+void
+thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
+{
+  ThunarFile *current_directory;
+  gboolean    can_paste_into_folder;
+  gboolean    pastable;
+  gboolean    writable;
+  GList      *selected_files;
+  gint        n_selected_files;
+
+  g_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* drop any existing "new-files" closure */
+  if (G_UNLIKELY (standard_view->priv->new_files_closure != NULL))
+    {
+      g_closure_invalidate (standard_view->priv->new_files_closure);
+      g_closure_unref (standard_view->priv->new_files_closure);
+      standard_view->priv->new_files_closure = NULL;
+    }
+
+  /* check whether the folder displayed by the view is writable */
+  current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
+  writable = (current_directory != NULL && thunar_file_is_writable (current_directory));
+
+  /* check whether the clipboard contains data that can be pasted here */
+  pastable = (standard_view->clipboard != NULL && thunar_clipboard_manager_get_can_paste (standard_view->clipboard));
+
+  /* determine the number of selected files */
+  selected_files = thunar_standard_view_get_selected_files (standard_view);
+  n_selected_files = g_list_length (selected_files);
+
+  /* check whether the only selected file is
+   * folder to which we can paste to */
+  can_paste_into_folder = (n_selected_files == 1)
+                       && thunar_file_is_directory (selected_files->data)
+                       && thunar_file_is_writable (selected_files->data);
+
+  /* update the "Create Folder" action */
+  gtk_action_set_sensitive (standard_view->priv->action_create_folder, writable);
+
+  /* update the "Properties" action */
+  gtk_action_set_sensitive (standard_view->priv->action_properties, (n_selected_files == 1));
+
+  /* update the "Copy File(s)" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_copy),
+                "label", ngettext ("_Copy File", "_Copy Files", n_selected_files),
+                "sensitive", (n_selected_files > 0),
+                NULL);
+
+  /* update the "Cut File(s)" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_cut),
+                "label", ngettext ("Cu_t File", "Cu_t Files", n_selected_files),
+                "sensitive", (n_selected_files > 0) && writable,
+                NULL);
+
+  /* update the "Paste File(s)" action */
+  gtk_action_set_sensitive (standard_view->priv->action_paste, writable && pastable);
+
+  /* update the "Delete File(s)" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_delete),
+                "label", ngettext ("_Delete File", "_Delete Files", n_selected_files),
+                "sensitive", (n_selected_files > 0) && writable,
+                NULL);
+
+  /* update the "Paste File(s) Into Folder" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_paste_into_folder),
+                "sensitive", pastable,
+                "visible", can_paste_into_folder,
+                NULL);
+
+  /* update the "Duplicate File(s)" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_duplicate),
+                "label", ngettext ("Du_plicate File", "Du_plicate Files", n_selected_files),
+                "sensitive", (n_selected_files > 0) && writable,
+                NULL);
+
+  /* update the "Make Link(s)" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_make_link),
+                "label", ngettext ("Ma_ke Link", "Ma_ke Links", n_selected_files),
+                "sensitive", (n_selected_files > 0) && writable,
+                NULL);
+
+  /* update the "Rename" action */
+  gtk_action_set_sensitive (standard_view->priv->action_rename, (n_selected_files == 1
+                            && thunar_file_is_renameable (selected_files->data)));
+
+  /* update the statusbar text */
+  thunar_standard_view_update_statusbar_text (standard_view);
+
+  /* setup the new file selection for the launcher support */
+  thunar_launcher_set_selected_files (standard_view->priv->launcher, selected_files);
+
+  /* cleanup */
+  thunar_file_list_free (selected_files);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-standard-view.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,134 @@
+/* $Id: thunar-standard-view.h 18848 2005-11-14 20:47:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_STANDARD_VIEW_H__
+#define __THUNAR_STANDARD_VIEW_H__
+
+#include <thunar/thunar-clipboard-manager.h>
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-list-model.h>
+#include <thunar/thunar-view.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarStandardViewPrivate ThunarStandardViewPrivate;
+typedef struct _ThunarStandardViewClass   ThunarStandardViewClass;
+typedef struct _ThunarStandardView        ThunarStandardView;
+
+#define THUNAR_TYPE_STANDARD_VIEW             (thunar_standard_view_get_type ())
+#define THUNAR_STANDARD_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_STANDARD_VIEW, ThunarStandardView))
+#define THUNAR_STANDARD_VIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_STANDARD_VIEW, ThunarStandardViewClass))
+#define THUNAR_IS_STANDARD_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_STANDARD_VIEW))
+#define THUNAR_IS_STANDARD_VIEW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_STANDARD_VIEW))
+#define THUNAR_STANDARD_VIEW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_STANDARD_VIEW, ThunarStandardViewClass))
+
+struct _ThunarStandardViewClass
+{
+  GtkScrolledWindowClass __parent__;
+
+  /* Called by the ThunarStandardView class to let derived classes
+   * connect to and disconnect from the UI manager.
+   */
+  void       (*connect_ui_manager)      (ThunarStandardView *standard_view,
+                                         GtkUIManager       *ui_manager);
+  void       (*disconnect_ui_manager)   (ThunarStandardView *standard_view,
+                                         GtkUIManager       *ui_manager);
+
+  /* Returns the list of currently selected GtkTreePath's, where
+   * both the list and the items are owned by the caller. */
+  GList       *(*get_selected_items)    (ThunarStandardView *standard_view);
+
+  /* Selects all items in the view */
+  void         (*select_all)            (ThunarStandardView *standard_view);
+
+  /* Unselects all items in the view */
+  void         (*unselect_all)          (ThunarStandardView *standard_view);
+
+  /* Selects the given item */
+  void         (*select_path)           (ThunarStandardView *standard_view,
+                                         GtkTreePath        *path);
+
+  /* Called by the ThunarStandardView class to let derived class
+   * place the cursor on the item/row referred to by path. If
+   * start_editing is TRUE, the derived class should also start
+   * editing that item/row.
+   */
+  void         (*set_cursor)            (ThunarStandardView *standard_view,
+                                         GtkTreePath        *path,
+                                         gboolean            start_editing);
+
+  /* Called by the ThunarStandardView class to let derived class
+   * scroll the view to the given path.
+   */
+  void         (*scroll_to_path)        (ThunarStandardView *standard_view,
+                                         GtkTreePath        *path);
+
+  /* Returns the path at the given position or NULL if no item/row
+   * is located at that coordinates. The path is freed by the caller.
+   */
+  GtkTreePath *(*get_path_at_pos)       (ThunarStandardView *standard_view,
+                                         gint                x,
+                                         gint                y);
+
+  /* Sets the item/row that is highlighted for feedback. NULL is
+   * passed for path to disable the highlighting.
+   */
+  void         (*highlight_path)        (ThunarStandardView  *standard_view,
+                                         GtkTreePath         *path);
+
+  /* Internal action signals */
+  gboolean     (*delete_selected_files) (ThunarStandardView *standard_view);
+};
+
+struct _ThunarStandardView
+{
+  GtkScrolledWindow __parent__;
+
+  ThunarStandardViewPrivate *priv;
+
+  ThunarClipboardManager    *clipboard;
+  ThunarListModel           *model;
+  gchar                     *statusbar_text;
+
+  GtkActionGroup            *action_group;
+  GtkUIManager              *ui_manager;
+  guint                      ui_merge_id;
+
+  ThunarIconFactory         *icon_factory;
+  GtkCellRenderer           *icon_renderer;
+  GtkCellRenderer           *name_renderer;
+
+  ExoBinding                *loading_binding;
+  gboolean                   loading;
+};
+
+GType thunar_standard_view_get_type           (void) G_GNUC_CONST;
+
+void  thunar_standard_view_context_menu       (ThunarStandardView *standard_view,
+                                               guint               button,
+                                               guint32             time);
+
+void  thunar_standard_view_queue_popup        (ThunarStandardView *standard_view,
+                                               GdkEventButton     *event);
+
+void  thunar_standard_view_selection_changed  (ThunarStandardView *standard_view);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_STANDARD_VIEW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,932 @@
+/* $Id: thunar-statusbar.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar/thunar-icon-factory.h>
+#include <thunar/thunar-statusbar.h>
+
+#if !GTK_CHECK_VERSION(2,7,1) && defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO)
+#include <cairo/cairo-xlib.h>
+#include <gdk/gdkx.h>
+#endif
+
+
+
+enum
+{
+  ICON_PROP_0,
+  ICON_PROP_FILE,
+  ICON_PROP_LOADING,
+};
+
+
+
+typedef struct _ThunarStatusbarIconClass ThunarStatusbarIconClass;
+typedef struct _ThunarStatusbarIcon      ThunarStatusbarIcon;
+
+
+
+#define THUNAR_TYPE_STATUSBAR_ICON             (thunar_statusbar_icon_get_type ())
+#define THUNAR_STATUSBAR_ICON(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_STATUSBAR_ICON, ThunarStatusbarIcon))
+#define THUNAR_STATUSBAR_ICON_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_STATUSBAR_ICON, ThunarStatusbarIconClass))
+#define THUNAR_IS_STATUSBAR_ICON(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_STATUSBAR_ICON))
+#define THUNAR_IS_STATUSBAR_ICON_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_STATUSBAR_ICON))
+#define THUNAR_STATUSBAR_ICON_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_STATUSBAR_ICON, ThunarStatusbarIconClass))
+
+
+
+static GType       thunar_statusbar_icon_get_type      (void) G_GNUC_CONST;
+static void        thunar_statusbar_icon_class_init    (ThunarStatusbarIconClass *klass);
+static void        thunar_statusbar_icon_init          (ThunarStatusbarIcon      *statusbar_icon);
+static void        thunar_statusbar_icon_finalize      (GObject                  *object);
+static void        thunar_statusbar_icon_get_property  (GObject                  *object,
+                                                        guint                     prop_id,
+                                                        GValue                   *value,
+                                                        GParamSpec               *pspec);
+static void        thunar_statusbar_icon_set_property  (GObject                  *object,
+                                                        guint                     prop_id,
+                                                        const GValue             *value,
+                                                        GParamSpec               *pspec);
+static void        thunar_statusbar_icon_size_request  (GtkWidget                *widget,
+                                                        GtkRequisition           *requisition);
+static void        thunar_statusbar_icon_realize       (GtkWidget                *widget);
+static void        thunar_statusbar_icon_unrealize     (GtkWidget                *widget);
+static gboolean    thunar_statusbar_icon_expose_event  (GtkWidget                *widget,
+                                                        GdkEventExpose           *event);
+static void        thunar_statusbar_icon_drag_begin    (GtkWidget                *widget,
+                                                        GdkDragContext           *context);
+static void        thunar_statusbar_icon_drag_data_get (GtkWidget                *widget,
+                                                        GdkDragContext           *context,
+                                                        GtkSelectionData         *selection_data,
+                                                        guint                     info,
+                                                        guint                     time);
+static gboolean    thunar_statusbar_icon_timer         (gpointer                  user_data);
+static void        thunar_statusbar_icon_timer_destroy (gpointer                  user_data);
+static ThunarFile *thunar_statusbar_icon_get_file      (ThunarStatusbarIcon      *statusbar_icon);
+static void        thunar_statusbar_icon_set_file      (ThunarStatusbarIcon      *statusbar_icon,
+                                                        ThunarFile               *file);
+static gboolean    thunar_statusbar_icon_get_loading   (ThunarStatusbarIcon      *statusbar_icon);
+static void        thunar_statusbar_icon_set_loading   (ThunarStatusbarIcon      *statusbar_icon,
+                                                        gboolean                  loading);
+
+
+
+struct _ThunarStatusbarIconClass
+{
+  GtkWidgetClass __parent__;
+};
+
+struct _ThunarStatusbarIcon
+{
+  GtkWidget __parent__;
+
+  ThunarIconFactory *icon_factory;
+  ThunarFile        *file;
+  GdkPixbuf         *lucent;
+  gint               angle;
+  gint               timer_id;
+};
+
+
+
+static GObjectClass *thunar_statusbar_icon_parent_class;
+
+static const GtkTargetEntry drag_targets[] =
+{
+  { "text/uri-list", 0, 0 },
+};
+
+
+
+static GType
+thunar_statusbar_icon_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarStatusbarIconClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_statusbar_icon_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarStatusbarIcon),
+        0,
+        (GInstanceInitFunc) thunar_statusbar_icon_init,
+        NULL,
+      };
+
+      type = g_type_register_static (GTK_TYPE_WIDGET, "ThunarStatusbarIcon", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+
+static void
+thunar_statusbar_icon_class_init (ThunarStatusbarIconClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  thunar_statusbar_icon_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_statusbar_icon_finalize;
+  gobject_class->get_property = thunar_statusbar_icon_get_property;
+  gobject_class->set_property = thunar_statusbar_icon_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->size_request = thunar_statusbar_icon_size_request;
+  gtkwidget_class->realize = thunar_statusbar_icon_realize;
+  gtkwidget_class->unrealize = thunar_statusbar_icon_unrealize;
+  gtkwidget_class->expose_event = thunar_statusbar_icon_expose_event;
+  gtkwidget_class->drag_begin = thunar_statusbar_icon_drag_begin;
+  gtkwidget_class->drag_data_get = thunar_statusbar_icon_drag_data_get;
+
+  /**
+   * ThunarStatusbarIcon:file:
+   *
+   * The #ThunarFile whose icon should be displayed by this
+   * #ThunarStatusbarIcon widget.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   ICON_PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("File"),
+                                                        _("The file whose icon to display"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarStatusbarIcon:loading:
+   *
+   * Whether this #ThunarStatusbarIcon should display a
+   * loading animation.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   ICON_PROP_LOADING,
+                                   g_param_spec_boolean ("loading",
+                                                         _("Loading"),
+                                                         _("Whether to display a loading animation"),
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_statusbar_icon_init (ThunarStatusbarIcon *statusbar_icon)
+{
+  statusbar_icon->timer_id = -1;
+
+  /* setup drag support for the icon */
+  gtk_drag_source_set (GTK_WIDGET (statusbar_icon), GDK_BUTTON1_MASK,
+                       drag_targets, G_N_ELEMENTS (drag_targets),
+                       GDK_ACTION_LINK);
+}
+
+
+
+static void
+thunar_statusbar_icon_finalize (GObject *object)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (object);
+
+  /* drop the file reference */
+  thunar_statusbar_icon_set_file (statusbar_icon, NULL);
+
+  /* cancel the redraw timer */
+  thunar_statusbar_icon_set_loading (statusbar_icon, FALSE);
+
+  G_OBJECT_CLASS (thunar_statusbar_icon_parent_class)->finalize (object);
+}
+
+
+
+static void
+thunar_statusbar_icon_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (object);
+
+  switch (prop_id)
+    {
+    case ICON_PROP_FILE:
+      g_value_set_object (value, thunar_statusbar_icon_get_file (statusbar_icon));
+      break;
+
+    case ICON_PROP_LOADING:
+      g_value_set_boolean (value, thunar_statusbar_icon_get_loading (statusbar_icon));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_statusbar_icon_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (object);
+
+  switch (prop_id)
+    {
+    case ICON_PROP_FILE:
+      thunar_statusbar_icon_set_file (statusbar_icon, g_value_get_object (value));
+      break;
+
+    case ICON_PROP_LOADING:
+      thunar_statusbar_icon_set_loading (statusbar_icon, g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_statusbar_icon_size_request (GtkWidget      *widget,
+                                    GtkRequisition *requisition)
+{
+  requisition->width = 16 + 2 * widget->style->xthickness;
+  requisition->height = 16 + 2 * widget->style->ythickness;
+}
+
+
+
+static void
+thunar_statusbar_icon_realize (GtkWidget *widget)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (widget);
+  GdkWindowAttr        attr;
+  GtkIconTheme        *icon_theme;
+  gint                 attr_mask;
+
+  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+
+  attr.x = widget->allocation.x;
+  attr.y = widget->allocation.y;
+  attr.width = widget->allocation.width;
+  attr.height = widget->allocation.height;
+  attr.wclass = GDK_INPUT_OUTPUT;
+  attr.window_type = GDK_WINDOW_CHILD;
+  attr.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
+  attr.visual = gtk_widget_get_visual (widget);
+  attr.colormap = gtk_widget_get_colormap (widget);
+  attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+  widget->window = gdk_window_new (widget->parent->window, &attr, attr_mask);
+  widget->style = gtk_style_attach (widget->style, widget->window);
+  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+  gdk_window_set_user_data (widget->window, widget);
+
+  /* connect to the icon factory */
+  icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+  statusbar_icon->icon_factory = thunar_icon_factory_get_for_icon_theme (icon_theme);
+}
+
+
+
+static void
+thunar_statusbar_icon_unrealize (GtkWidget *widget)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (widget);
+
+  /* disconnect from the icon factory */
+  g_object_unref (G_OBJECT (statusbar_icon->icon_factory));
+  statusbar_icon->icon_factory = NULL;
+
+  GTK_WIDGET_CLASS (thunar_statusbar_icon_parent_class)->unrealize (widget);
+}
+
+
+
+static GdkPixbuf*
+create_lucent_pixbuf (GdkPixbuf *src)
+{
+  GdkPixbuf *dest;
+  guchar *target_pixels;
+  guchar *original_pixels;
+  guchar *pixsrc;
+  guchar *pixdest;
+  gint width, height, has_alpha, src_row_stride, dst_row_stride;
+  gint i, j;
+
+  if (G_UNLIKELY (!gdk_pixbuf_get_has_alpha (src)))
+    {
+      g_object_ref (G_OBJECT (src));
+      return src;
+    }
+
+  dest = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src),
+                         gdk_pixbuf_get_has_alpha (src),
+                         gdk_pixbuf_get_bits_per_sample (src),
+                         gdk_pixbuf_get_width (src),
+                         gdk_pixbuf_get_height (src));
+  
+  has_alpha = gdk_pixbuf_get_has_alpha (src);
+  width = gdk_pixbuf_get_width (src);
+  height = gdk_pixbuf_get_height (src);
+  src_row_stride = gdk_pixbuf_get_rowstride (src);
+  dst_row_stride = gdk_pixbuf_get_rowstride (dest);
+  target_pixels = gdk_pixbuf_get_pixels (dest);
+  original_pixels = gdk_pixbuf_get_pixels (src);
+
+  for (i = 0; i < height; i++)
+    {
+      pixdest = target_pixels + i * dst_row_stride;
+      pixsrc = original_pixels + i * src_row_stride;
+      for (j = 0; j < width; j++)
+        {
+          pixdest[0] = pixsrc[0];
+          pixdest[1] = pixsrc[1];
+          pixdest[2] = pixsrc[2];
+          pixdest[3] = pixsrc[3] / 3;
+          pixdest += 4;
+          pixsrc += 4;
+        }
+    }
+
+  return dest;
+}
+
+
+
+#if GTK_CHECK_VERSION(2,7,1)
+static cairo_t*
+get_cairo_context (GdkWindow *window)
+{
+  cairo_t *cr;
+  gint     w;
+  gint     h;
+
+  gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
+
+  cr = gdk_cairo_create (window);
+  cairo_scale (cr, h, w);
+  cairo_translate (cr, 0.5, 0.5);
+
+  return cr;
+}
+#elif defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO)
+static cairo_t*
+get_cairo_context (GdkWindow *window)
+{
+  cairo_surface_t *surface;
+  GdkDrawable     *drawable;
+  cairo_t         *cr;
+  gint             w;
+  gint             h;
+  gint             x;
+  gint             y;
+
+  gdk_window_get_internal_paint_info (window, &drawable, &x, &y);
+  gdk_drawable_get_size (drawable, &w, &h);
+
+  surface = cairo_xlib_surface_create (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+                                       gdk_x11_visual_get_xvisual (gdk_drawable_get_visual (drawable)), w, h);
+  cr = cairo_create (surface);
+  cairo_surface_destroy (surface);
+
+  cairo_translate (cr, -x, -y);
+  cairo_scale (cr, h, w);
+  cairo_translate (cr, 0.5, 0.5);
+
+  return cr;
+}
+#endif
+
+
+
+static gboolean
+thunar_statusbar_icon_expose_event (GtkWidget      *widget,
+                                    GdkEventExpose *event)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (widget);
+  GdkRectangle         icon_area;
+  GdkPixbuf           *icon;
+
+  /* draw the icon if we have a file */
+  if (G_LIKELY (statusbar_icon->file != NULL))
+    {
+      icon = thunar_icon_factory_load_file_icon (statusbar_icon->icon_factory, statusbar_icon->file, THUNAR_FILE_ICON_STATE_DEFAULT, 16);
+
+      /* use the lucent variant if we're currently loading */
+      if (thunar_statusbar_icon_get_loading (statusbar_icon))
+        {
+          if (G_UNLIKELY (statusbar_icon->lucent == NULL))
+            statusbar_icon->lucent = create_lucent_pixbuf (icon);
+
+          g_object_unref (G_OBJECT (icon));
+          icon = statusbar_icon->lucent;
+          g_object_ref (G_OBJECT (icon));
+        }
+
+      icon_area.width = gdk_pixbuf_get_width (icon);
+      icon_area.height = gdk_pixbuf_get_height (icon);
+      icon_area.x = (widget->allocation.width - icon_area.width) / 2;
+      icon_area.y = (widget->allocation.height - icon_area.height) / 2;
+
+      gdk_draw_pixbuf (widget->window, widget->style->black_gc, icon,
+                       0, 0, icon_area.x, icon_area.y,
+                       icon_area.width, icon_area.height,
+                       GDK_RGB_DITHER_NORMAL, 0, 0);
+
+      g_object_unref (G_OBJECT (icon));
+    }
+
+#if GTK_CHECK_VERSION(2,7,1) || (defined(GDK_WINDOWING_X11) && defined(HAVE_CAIRO))
+  /* render the animation */
+  if (thunar_statusbar_icon_get_loading (statusbar_icon))
+    {
+      GdkColor color;
+      cairo_t *cr;
+      gdouble  n;
+
+      color = widget->style->fg[GTK_STATE_NORMAL];
+
+      cr = get_cairo_context (widget->window);
+
+      cairo_rotate (cr, (statusbar_icon->angle * 2.0 * M_PI) / 360.0);
+
+      for (n = 0.0; n < 2.0; n += 0.25)
+        {
+          cairo_set_source_rgba (cr, color.red / 65535., color.green / 65535., color.blue / 65535., (n - 0.1) / 1.9);
+          cairo_arc (cr, cos (n * M_PI) / 3.0, sin (n * M_PI) / 3.0, 0.12, 0.0, 2 * M_PI);
+          cairo_fill (cr);
+        }
+
+      cairo_destroy (cr);
+    }
+#endif
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_statusbar_icon_drag_begin (GtkWidget      *widget,
+                                  GdkDragContext *context)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (widget);
+  GdkPixbuf           *icon;
+
+  /* setup the drag source icon */
+  if (G_LIKELY (statusbar_icon->file != NULL))
+    {
+      icon = thunar_icon_factory_load_file_icon (statusbar_icon->icon_factory, statusbar_icon->file, THUNAR_FILE_ICON_STATE_DEFAULT, 24);
+      gtk_drag_source_set_icon_pixbuf (widget, icon);
+      g_object_unref (G_OBJECT (icon));
+    }
+
+  if (GTK_WIDGET_CLASS (thunar_statusbar_icon_parent_class)->drag_begin != NULL)
+    (*GTK_WIDGET_CLASS (thunar_statusbar_icon_parent_class)->drag_begin) (widget, context);
+}
+
+
+
+static void
+thunar_statusbar_icon_drag_data_get (GtkWidget        *widget,
+                                     GdkDragContext   *context,
+                                     GtkSelectionData *selection_data,
+                                     guint             info,
+                                     guint             time)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (widget);
+  GList                path_list;
+  gchar               *uri_string;
+
+  if (G_LIKELY (statusbar_icon->file != NULL))
+    {
+      /* transform the path into an uri list string */
+      path_list.data = thunar_file_get_path (statusbar_icon->file); path_list.next = path_list.prev = NULL;
+      uri_string = thunar_vfs_path_list_to_string (&path_list);
+
+      /* set the uri for the drag selection */
+      gtk_selection_data_set (selection_data, selection_data->target,
+                              8, (guchar *) uri_string, strlen (uri_string));
+
+      /* cleanup */
+      g_free (uri_string);
+    }
+  else
+    {
+      /* abort the drag */
+      gdk_drag_abort (context, time);
+    }
+
+  if (GTK_WIDGET_CLASS (thunar_statusbar_icon_parent_class)->drag_data_get != NULL)
+    (*GTK_WIDGET_CLASS (thunar_statusbar_icon_parent_class)->drag_data_get) (widget, context, selection_data, info, time);
+}
+
+
+
+static gboolean
+thunar_statusbar_icon_timer (gpointer user_data)
+{
+  ThunarStatusbarIcon *statusbar_icon = THUNAR_STATUSBAR_ICON (user_data);
+
+  GDK_THREADS_ENTER ();
+  statusbar_icon->angle = (statusbar_icon->angle + 30) % 360;
+  gtk_widget_queue_draw (GTK_WIDGET (statusbar_icon));
+  GDK_THREADS_LEAVE ();
+
+  return TRUE;
+}
+
+
+static void
+thunar_statusbar_icon_timer_destroy (gpointer user_data)
+{
+  THUNAR_STATUSBAR_ICON (user_data)->timer_id = -1;
+}
+
+
+
+static ThunarFile*
+thunar_statusbar_icon_get_file (ThunarStatusbarIcon *statusbar_icon)
+{
+  g_return_val_if_fail (THUNAR_IS_STATUSBAR_ICON (statusbar_icon), NULL);
+  return statusbar_icon->file;
+}
+
+
+
+static void
+thunar_statusbar_icon_set_file (ThunarStatusbarIcon *statusbar_icon,
+                                ThunarFile          *file)
+{
+  g_return_if_fail (THUNAR_IS_STATUSBAR_ICON (statusbar_icon));
+  g_return_if_fail (file == NULL || THUNAR_IS_FILE (file));
+
+  /* drop any cached icon */
+  if (G_LIKELY (statusbar_icon->lucent != NULL))
+    {
+      g_object_unref (G_OBJECT (statusbar_icon->lucent));
+      statusbar_icon->lucent = NULL;
+    }
+
+  /* disconnect from the previous file */
+  if (G_LIKELY (statusbar_icon->file != NULL))
+    {
+      g_object_unref (G_OBJECT (statusbar_icon->file));
+    }
+
+  /* activate the new file */
+  statusbar_icon->file = file;
+
+  /* connect to the new file */
+  if (G_LIKELY (file != NULL))
+    {
+      /* take a reference on the file */
+      g_object_ref (G_OBJECT (file));
+    }
+
+  /* schedule a redraw with the new file */
+  gtk_widget_queue_draw (GTK_WIDGET (statusbar_icon));
+}
+
+
+
+static gboolean
+thunar_statusbar_icon_get_loading (ThunarStatusbarIcon *statusbar_icon)
+{
+  g_return_val_if_fail (THUNAR_IS_STATUSBAR_ICON (statusbar_icon), FALSE);
+  return (statusbar_icon->timer_id >= 0);
+}
+
+
+
+static void
+thunar_statusbar_icon_set_loading (ThunarStatusbarIcon *statusbar_icon,
+                                   gboolean             loading)
+{
+  g_return_if_fail (THUNAR_IS_STATUSBAR_ICON (statusbar_icon));
+
+  if (loading && statusbar_icon->timer_id < 0)
+    {
+      statusbar_icon->timer_id = g_timeout_add_full (G_PRIORITY_LOW, 65, thunar_statusbar_icon_timer,
+                                                     statusbar_icon, thunar_statusbar_icon_timer_destroy);
+    }
+  else if (!loading && statusbar_icon->timer_id >= 0)
+    {
+      g_source_remove (statusbar_icon->timer_id);
+    }
+
+  /* schedule a redraw with the new loading state */
+  gtk_widget_queue_draw (GTK_WIDGET (statusbar_icon));
+}
+
+
+
+
+enum
+{
+  BAR_PROP_0,
+  BAR_PROP_CURRENT_DIRECTORY,
+  BAR_PROP_LOADING,
+  BAR_PROP_TEXT,
+};
+
+
+
+static void        thunar_statusbar_class_init            (ThunarStatusbarClass *klass);
+static void        thunar_statusbar_navigator_init        (ThunarNavigatorIface *iface);
+static void        thunar_statusbar_init                  (ThunarStatusbar      *statusbar);
+static void        thunar_statusbar_get_property          (GObject              *object,
+                                                           guint                 prop_id,
+                                                           GValue               *value,
+                                                           GParamSpec           *pspec);
+static void        thunar_statusbar_set_property          (GObject              *object,
+                                                           guint                 prop_id,
+                                                           const GValue         *value,
+                                                           GParamSpec           *pspec);
+static ThunarFile *thunar_statusbar_get_current_directory (ThunarNavigator      *navigator);
+static void        thunar_statusbar_set_current_directory (ThunarNavigator      *navigator,
+                                                           ThunarFile           *current_directory);
+
+
+
+struct _ThunarStatusbarClass
+{
+  GtkStatusbarClass __parent__;
+};
+
+struct _ThunarStatusbar
+{
+  GtkStatusbar __parent__;
+  GtkWidget   *icon;
+  guint        context_id;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarStatusbar,
+                         thunar_statusbar,
+                         GTK_TYPE_STATUSBAR,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_NAVIGATOR,
+                                                thunar_statusbar_navigator_init));
+
+
+
+static void
+thunar_statusbar_class_init (ThunarStatusbarClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = thunar_statusbar_get_property;
+  gobject_class->set_property = thunar_statusbar_set_property;
+
+  /**
+   * ThunarStatusbar:current-directory:
+   *
+   * Inherited from #ThunarNavigator.
+   **/
+  g_object_class_override_property (gobject_class,
+                                    BAR_PROP_CURRENT_DIRECTORY,
+                                    "current-directory");
+
+  /**
+   * ThunarStatusbar:loading:
+   *
+   * Write-only property, which tells the statusbar whether to display
+   * a "loading" indicator or not.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   BAR_PROP_LOADING,
+                                   g_param_spec_boolean ("loading",
+                                                         _("Loading"),
+                                                         _("Whether to display a loading animation"),
+                                                         FALSE,
+                                                         EXO_PARAM_WRITABLE));
+
+  /**
+   * ThunarStatusbar:text:
+   *
+   * The main text to be displayed in the statusbar. This property
+   * can only be written.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   BAR_PROP_TEXT,
+                                   g_param_spec_string ("text",
+                                                        _("Statusbar text"),
+                                                        _("The main text to be displayed in the statusbar"),
+                                                        NULL,
+                                                        EXO_PARAM_WRITABLE));
+}
+
+
+
+static void
+thunar_statusbar_navigator_init (ThunarNavigatorIface *iface)
+{
+  iface->get_current_directory = thunar_statusbar_get_current_directory;
+  iface->set_current_directory = thunar_statusbar_set_current_directory;
+}
+
+
+
+static void
+thunar_statusbar_init (ThunarStatusbar *statusbar)
+{
+  GtkWidget *label;
+  GtkWidget *box;
+
+  /* remove the label from the statusbars frame */
+  label = GTK_STATUSBAR (statusbar)->label;
+  g_object_ref (G_OBJECT (label));
+  gtk_container_remove (GTK_CONTAINER (GTK_STATUSBAR (statusbar)->frame), label);
+
+  /* add a HBox instead */
+  box = gtk_hbox_new (FALSE, 6);
+  gtk_container_add (GTK_CONTAINER (GTK_STATUSBAR (statusbar)->frame), box);
+  gtk_widget_show (box);
+
+  /* add the icon to the HBox */
+  statusbar->icon = g_object_new (THUNAR_TYPE_STATUSBAR_ICON, NULL);
+  gtk_box_pack_start (GTK_BOX (box), statusbar->icon, FALSE, FALSE, 0);
+  gtk_widget_show (statusbar->icon);
+
+  /* readd the label to the HBox */
+  gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
+  g_object_unref (G_OBJECT (label));
+  gtk_widget_show (label);
+  
+  statusbar->context_id =
+    gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "Main text");
+  gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), TRUE);
+}
+
+
+
+static void
+thunar_statusbar_get_property (GObject    *object,
+                               guint       prop_id,
+                               GValue     *value,
+                               GParamSpec *pspec)
+{
+  switch (prop_id)
+    {
+    case BAR_PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (object)));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_statusbar_set_property (GObject      *object,
+                               guint         prop_id,
+                               const GValue *value,
+                               GParamSpec   *pspec)
+{
+  ThunarStatusbar *statusbar = THUNAR_STATUSBAR (object);
+
+  switch (prop_id)
+    {
+    case BAR_PROP_CURRENT_DIRECTORY:
+      thunar_navigator_set_current_directory (THUNAR_NAVIGATOR (object), g_value_get_object (value));
+      break;
+
+    case BAR_PROP_LOADING:
+      thunar_statusbar_set_loading (statusbar, g_value_get_boolean (value));
+      break;
+
+    case BAR_PROP_TEXT:
+      thunar_statusbar_set_text (statusbar, g_value_get_string (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static ThunarFile*
+thunar_statusbar_get_current_directory (ThunarNavigator *navigator)
+{
+  return thunar_statusbar_icon_get_file (THUNAR_STATUSBAR_ICON (THUNAR_STATUSBAR (navigator)->icon));
+}
+
+
+
+static void
+thunar_statusbar_set_current_directory (ThunarNavigator *navigator,
+                                        ThunarFile      *current_directory)
+{
+  /* setup the new directory for the icon */
+  thunar_statusbar_icon_set_file (THUNAR_STATUSBAR_ICON (THUNAR_STATUSBAR (navigator)->icon), current_directory);
+
+  /* notify others */
+  g_object_notify (G_OBJECT (navigator), "current-directory");
+}
+
+
+
+/**
+ * thunar_statusbar_new:
+ *
+ * Allocates a new #ThunarStatusbar instance with no
+ * text set.
+ *
+ * Return value: the newly allocated #ThunarStatusbar instance.
+ **/
+GtkWidget*
+thunar_statusbar_new (void)
+{
+  return g_object_new (THUNAR_TYPE_STATUSBAR, NULL);
+}
+
+
+
+/**
+ * thunar_statusbar_set_loading:
+ * @statusbar : a #ThunarStatusbar instance.
+ * @loading   : %TRUE if the @statusbar should display a load indicator.
+ **/
+void
+thunar_statusbar_set_loading (ThunarStatusbar *statusbar,
+                              gboolean         loading)
+{
+  g_return_if_fail (THUNAR_IS_STATUSBAR (statusbar));
+
+  thunar_statusbar_icon_set_loading (THUNAR_STATUSBAR_ICON (statusbar->icon), loading);
+}
+
+
+
+/**
+ * thunar_statusbar_set_text:
+ * @statusbar : a #ThunarStatusbar instance.
+ * @text      : the main text to be displayed in @statusbar.
+ *
+ * Sets up a new main text for @statusbar.
+ **/
+void
+thunar_statusbar_set_text (ThunarStatusbar *statusbar,
+                           const gchar     *text)
+{
+  g_return_if_fail (THUNAR_IS_STATUSBAR (statusbar));
+  g_return_if_fail (text != NULL);
+
+  gtk_statusbar_pop (GTK_STATUSBAR (statusbar), statusbar->context_id);
+  gtk_statusbar_push (GTK_STATUSBAR (statusbar), statusbar->context_id, text);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-statusbar.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+/* $Id: thunar-statusbar.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_STATUSBAR_H__
+#define __THUNAR_STATUSBAR_H__
+
+#include <thunar/thunar-navigator.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarStatusbarClass ThunarStatusbarClass;
+typedef struct _ThunarStatusbar      ThunarStatusbar;
+
+#define THUNAR_TYPE_STATUSBAR             (thunar_statusbar_get_type ())
+#define THUNAR_STATUSBAR(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_STATUSBAR, ThunarStatusbar))
+#define THUNAR_STATUSBAR_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_STATUSBAR, ThunarStatusbarClass))
+#define THUNAR_IS_STATUSBAR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_STATUSBAR))
+#define THUNAR_IS_STATUSBAR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_STATUSBAR))
+#define THUNAR_STATUSBAR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_STATUSBAR, ThunarStatusbarClass))
+
+GType      thunar_statusbar_get_type    (void) G_GNUC_CONST;
+
+GtkWidget *thunar_statusbar_new         (void);
+
+void       thunar_statusbar_set_loading (ThunarStatusbar *statusbar,
+                                         gboolean         loading);
+void       thunar_statusbar_set_text    (ThunarStatusbar *statusbar,
+                                         const gchar     *text);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_STATUSBAR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,781 @@
+/* $Id: thunar-text-renderer.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar/thunar-marshal.h>
+#include <thunar/thunar-text-renderer.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_FOLLOW_STATE,
+  PROP_TEXT,
+  PROP_WRAP_MODE,
+  PROP_WRAP_WIDTH,
+};
+
+enum
+{
+  EDITED,
+  LAST_SIGNAL,
+};
+
+
+
+static void             thunar_text_renderer_class_init                       (ThunarTextRendererClass *klass);
+static void             thunar_text_renderer_init                             (ThunarTextRenderer      *text_renderer);
+static void             thunar_text_renderer_finalize                         (GObject                 *object);
+static void             thunar_text_renderer_get_property                     (GObject                 *object,
+                                                                               guint                    prop_id,
+                                                                               GValue                  *value,
+                                                                               GParamSpec              *pspec);
+static void             thunar_text_renderer_set_property                     (GObject                 *object,
+                                                                               guint                    prop_id,
+                                                                               const GValue            *value,
+                                                                               GParamSpec              *pspec);
+static void             thunar_text_renderer_get_size                         (GtkCellRenderer         *renderer,
+                                                                               GtkWidget               *widget,
+                                                                               GdkRectangle            *cell_area,
+                                                                               gint                    *x_offset,
+                                                                               gint                    *y_offset,
+                                                                               gint                    *width,
+                                                                               gint                    *height);
+static void             thunar_text_renderer_render                           (GtkCellRenderer         *renderer,
+                                                                               GdkWindow               *window,
+                                                                               GtkWidget               *widget,
+                                                                               GdkRectangle            *background_area,
+                                                                               GdkRectangle            *cell_area,
+                                                                               GdkRectangle            *expose_area,
+                                                                               GtkCellRendererState     flags);
+static GtkCellEditable *thunar_text_renderer_start_editing                    (GtkCellRenderer         *renderer,
+                                                                               GdkEvent                *event,
+                                                                               GtkWidget               *widget,
+                                                                               const gchar             *path,
+                                                                               GdkRectangle            *background_area,
+                                                                               GdkRectangle            *cell_area,
+                                                                               GtkCellRendererState     flags);
+static void             thunar_text_renderer_invalidate                       (ThunarTextRenderer      *text_renderer);
+static void             thunar_text_renderer_set_widget                       (ThunarTextRenderer      *text_renderer,
+                                                                               GtkWidget               *widget);
+static void             thunar_text_renderer_editing_done                     (GtkCellEditable         *editable,
+                                                                               ThunarTextRenderer      *text_renderer);
+static void             thunar_text_renderer_grab_focus                       (GtkWidget               *entry,
+                                                                               ThunarTextRenderer      *text_renderer);
+static gboolean         thunar_text_renderer_focus_out_event                  (GtkWidget               *entry,
+                                                                               GdkEventFocus           *event,
+                                                                               ThunarTextRenderer      *text_renderer);
+static void             thunar_text_renderer_populate_popup                   (GtkEntry                *entry,
+                                                                               GtkMenu                 *menu,
+                                                                               ThunarTextRenderer      *text_renderer);
+static void             thunar_text_renderer_popup_unmap                      (GtkMenu                 *menu,
+                                                                               ThunarTextRenderer      *text_renderer);
+static gboolean         thunar_text_renderer_entry_menu_popdown_timer         (gpointer                 user_data);
+static void             thunar_text_renderer_entry_menu_popdown_timer_destroy (gpointer                 user_data);
+
+
+
+struct _ThunarTextRendererClass
+{
+  GtkCellRendererClass __parent__;
+
+  void (*edited) (ThunarTextRenderer *text_renderer,
+                  const gchar        *path,
+                  const gchar        *text);
+};
+
+struct _ThunarTextRenderer
+{
+  GtkCellRenderer __parent__;
+
+  PangoLayout  *layout;
+  GtkWidget    *widget;
+  gchar         text[256];
+  gint          char_width;
+  gint          char_height;
+  PangoWrapMode wrap_mode;
+  gint          wrap_width;
+  gboolean      follow_state;
+
+  /* cell editing support */
+  GtkWidget    *entry;
+  gboolean      entry_menu_active;
+  gint          entry_menu_popdown_timer_id;
+};
+
+
+
+static guint text_renderer_signals[LAST_SIGNAL];
+
+
+
+G_DEFINE_TYPE (ThunarTextRenderer, thunar_text_renderer, GTK_TYPE_CELL_RENDERER);
+
+
+
+static void
+thunar_text_renderer_class_init (ThunarTextRendererClass *klass)
+{
+  GtkCellRendererClass *gtkcell_renderer_class;
+  GObjectClass         *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_text_renderer_finalize;
+  gobject_class->get_property = thunar_text_renderer_get_property;
+  gobject_class->set_property = thunar_text_renderer_set_property;
+
+  gtkcell_renderer_class = GTK_CELL_RENDERER_CLASS (klass);
+  gtkcell_renderer_class->get_size = thunar_text_renderer_get_size;
+  gtkcell_renderer_class->render = thunar_text_renderer_render;
+  gtkcell_renderer_class->start_editing = thunar_text_renderer_start_editing;
+
+  /**
+   * ThunarTextRenderer:follow-state:
+   *
+   * Specifies whether the text renderer should render text
+   * based on the selection state of the items. This is necessary
+   * for #ExoIconView, which doesn't draw any item state indicators
+   * itself.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_FOLLOW_STATE,
+                                   g_param_spec_boolean ("follow-state",
+                                                         _("Follow state"),
+                                                         _("Follow state"),
+                                                         FALSE,
+                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarTextRenderer:text:
+   *
+   * The text to render.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_TEXT,
+                                   g_param_spec_string ("text",
+                                                        _("Text"),
+                                                        _("The text to render"),
+                                                        NULL,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarTextRenderer:wrap-mode:
+   *
+   * Specifies how to break the string into multiple lines, if the cell renderer
+   * does not have enough room to display the entire string. This property has
+   * no effect unless the wrap-width property is set.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_WRAP_MODE,
+                                   g_param_spec_enum ("wrap-mode",
+                                                      _("Wrap mode"),
+                                                      _("The wrap mode"),
+                                                      PANGO_TYPE_WRAP_MODE,
+                                                      PANGO_WRAP_CHAR,
+                                                      EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarTextRenderer:wrap-width:
+   *
+   * Specifies the width at which the text is wrapped. The wrap-mode property can
+   * be used to influence at what character positions the line breaks can be placed.
+   * Setting wrap-width to -1 turns wrapping off.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_WRAP_WIDTH,
+                                   g_param_spec_int ("wrap-width",
+                                                     _("Wrap width"),
+                                                     _("The wrap width"),
+                                                     -1, G_MAXINT, -1,
+                                                     EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarTextRenderer::edited:
+   * @text_renderer : a #ThunarTextRenderer.
+   * @path          : the string representation of the tree path, which was edited.
+   * @text          : the new text for the cell.
+   * @user_data     : user data set when the signal handler was connected.
+   *
+   * Emitted whenever the user successfully edits a cell.
+   **/
+  text_renderer_signals[EDITED] =
+    g_signal_new ("edited",
+                  G_OBJECT_CLASS_TYPE (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarTextRendererClass, edited),
+                  NULL, NULL,
+                  _thunar_marshal_VOID__STRING_STRING,
+                  G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+}
+
+
+
+static void
+thunar_text_renderer_init (ThunarTextRenderer *text_renderer)
+{
+  text_renderer->wrap_width = -1;
+  text_renderer->entry_menu_popdown_timer_id = -1;
+}
+
+
+
+static void
+thunar_text_renderer_finalize (GObject *object)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (object);
+
+  /* drop the cached widget */
+  thunar_text_renderer_set_widget (text_renderer, NULL);
+
+  G_OBJECT_CLASS (thunar_text_renderer_parent_class)->finalize (object);
+}
+
+
+
+static void
+thunar_text_renderer_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (object);
+
+  switch (prop_id)
+    {
+    case PROP_FOLLOW_STATE:
+      g_value_set_boolean (value, text_renderer->follow_state);
+      break;
+
+    case PROP_TEXT:
+      g_value_set_string (value, text_renderer->text);
+      break;
+
+    case PROP_WRAP_MODE:
+      g_value_set_enum (value, text_renderer->wrap_mode);
+      break;
+
+    case PROP_WRAP_WIDTH:
+      g_value_set_int (value, text_renderer->wrap_width);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_text_renderer_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (object);
+  const gchar        *sval;
+
+  switch (prop_id)
+    {
+    case PROP_FOLLOW_STATE:
+      text_renderer->follow_state = g_value_get_boolean (value);
+      break;
+
+    case PROP_TEXT:
+      sval = g_value_get_string (value);
+      g_strlcpy (text_renderer->text, G_UNLIKELY (sval == NULL) ? "" : sval, sizeof (text_renderer->text));
+      break;
+
+    case PROP_WRAP_MODE:
+      text_renderer->wrap_mode = g_value_get_enum (value);
+      break;
+
+    case PROP_WRAP_WIDTH:
+      text_renderer->wrap_width = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_text_renderer_get_size (GtkCellRenderer *renderer,
+                               GtkWidget       *widget,
+                               GdkRectangle    *cell_area,
+                               gint            *x_offset,
+                               gint            *y_offset,
+                               gint            *width,
+                               gint            *height)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (renderer);
+  gint                text_length;
+  gint                text_width;
+  gint                text_height;
+  gint                focus_padding;
+  gint                focus_width;
+
+  /* setup the new widget */
+  thunar_text_renderer_set_widget (text_renderer, widget);
+
+  /* we can guess the dimensions if we don't wrap */
+  if (text_renderer->wrap_width < 0)
+    {
+      /* determine the text_length in characters */
+      text_length = g_utf8_strlen (text_renderer->text, -1);
+
+      /* calculate the appromixate text width/height */
+      text_width = text_renderer->char_width * text_length;
+      text_height = text_renderer->char_height;
+    }
+  else
+    {
+      /* calculate the real text dimension */
+      pango_layout_set_width (text_renderer->layout, text_renderer->wrap_width * PANGO_SCALE);
+      pango_layout_set_wrap (text_renderer->layout, text_renderer->wrap_mode);
+      pango_layout_set_text (text_renderer->layout, text_renderer->text, -1);
+      pango_layout_get_pixel_size (text_renderer->layout, &text_width, &text_height);
+    }
+
+  /* if we have to follow the state manually, we'll need
+   * to reserve some space to render the indicator to.
+   */
+  if (text_renderer->follow_state)
+    {
+      gtk_widget_style_get (widget, "focus-padding", &focus_padding, "focus-line-width", &focus_width, NULL);
+      text_width += 2 * (focus_padding + focus_width);
+      text_height += 2 * (focus_padding + focus_width);
+    }
+
+  /* update width/height */
+  if (G_LIKELY (width != NULL))
+    *width = text_width + 2 * renderer->xpad;
+  if (G_LIKELY (height != NULL))
+    *height = text_height + 2 * renderer->ypad;
+
+  /* update the x/y offsets */
+  if (G_LIKELY (cell_area != NULL))
+    {
+      if (G_LIKELY (x_offset != NULL))
+        {
+          *x_offset = ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ? (1.0 - renderer->xalign) : renderer->xalign)
+                    * (cell_area->width - text_width - (2 * renderer->xpad));
+          *x_offset = MAX (*x_offset, 0);
+        }
+
+      if (G_LIKELY (y_offset != NULL))
+        {
+          *y_offset = renderer->yalign * (cell_area->height - text_height - (2 * renderer->ypad));
+          *y_offset = MAX (*y_offset, 0);
+        }
+    }
+}
+
+
+
+static void
+thunar_text_renderer_render (GtkCellRenderer     *renderer,
+                             GdkWindow           *window,
+                             GtkWidget           *widget,
+                             GdkRectangle        *background_area,
+                             GdkRectangle        *cell_area,
+                             GdkRectangle        *expose_area,
+                             GtkCellRendererState flags)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (renderer);
+  GtkStateType        state;
+#if !GTK_CHECK_VERSION(2,8,0)
+  GdkPoint            points[8];
+#else
+  cairo_t            *cr;
+#endif
+  gint                x0, x1, y0, y1;
+  gint                focus_padding;
+  gint                focus_width;
+  gint                text_width;
+  gint                text_height;
+  gint                x_offset;
+  gint                y_offset;
+
+  /* setup the new widget */
+  thunar_text_renderer_set_widget (text_renderer, widget);
+
+  if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
+    {
+      if (GTK_WIDGET_HAS_FOCUS (widget))
+        state = GTK_STATE_SELECTED;
+      else
+        state = GTK_STATE_ACTIVE;
+    }
+  else if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT
+        && GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT)
+    {
+      state = GTK_STATE_PRELIGHT;
+    }
+  else
+    {
+      if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE)
+        state = GTK_STATE_INSENSITIVE;
+      else
+        state = GTK_STATE_NORMAL;
+    }
+
+  /* setup the wrapping */
+  if (text_renderer->wrap_width < 0)
+    {
+      pango_layout_set_width (text_renderer->layout, -1);
+      pango_layout_set_wrap (text_renderer->layout, PANGO_WRAP_CHAR);
+    }
+  else
+    {
+      pango_layout_set_width (text_renderer->layout, text_renderer->wrap_width * PANGO_SCALE);
+      pango_layout_set_wrap (text_renderer->layout, text_renderer->wrap_mode);
+    }
+
+  pango_layout_set_text (text_renderer->layout, text_renderer->text, -1);
+
+  /* calculate the real text dimension */
+  pango_layout_get_pixel_size (text_renderer->layout, &text_width, &text_height);
+
+  /* take into account the state indicator (required for calculation) */
+  if (text_renderer->follow_state)
+    {
+      gtk_widget_style_get (widget, "focus-padding", &focus_padding, "focus-line-width", &focus_width, NULL);
+      text_width += 2 * (focus_padding + focus_width);
+      text_height += 2 * (focus_padding + focus_width);
+    }
+
+  /* calculate the real x-offset */
+  x_offset = ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ? (1.0 - renderer->xalign) : renderer->xalign)
+           * (cell_area->width - text_width - (2 * renderer->xpad));
+  x_offset = MAX (x_offset, 0);
+
+  /* calculate the real y-offset */
+  y_offset = renderer->yalign * (cell_area->height - text_height - (2 * renderer->ypad));
+  y_offset = MAX (y_offset, 0);
+
+  /* render the state indicator */
+  if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED && text_renderer->follow_state)
+    {
+      /* calculate the text bounding box (including the focus padding/width) */
+      x0 = cell_area->x + x_offset;
+      y0 = cell_area->y + y_offset;
+      x1 = x0 + text_width;
+      y1 = y0 + text_height;
+
+#if GTK_CHECK_VERSION(2,8,0)
+      /* Cairo produces nicer results than using a polygon
+       * and so we use it directly if possible.
+       */
+      cr = gdk_cairo_create (window);
+      cairo_move_to (cr, x0 + 5, y0);
+      cairo_line_to (cr, x1 - 5, y0);
+      cairo_curve_to (cr, x1 - 5, y0, x1, y0, x1, y0 + 5);
+      cairo_line_to (cr, x1, y1 - 5);
+      cairo_curve_to (cr, x1, y1 - 5, x1, y1, x1 - 5, y1);
+      cairo_line_to (cr, x0 + 5, y1);
+      cairo_curve_to (cr, x0 + 5, y1, x0, y1, x0, y1 - 5);
+      cairo_line_to (cr, x0, y0 + 5);
+      cairo_curve_to (cr, x0, y0 + 5, x0, y0, x0 + 5, y0);
+      gdk_cairo_set_source_color (cr, &widget->style->base[state]);
+      cairo_fill (cr);
+      cairo_destroy (cr);
+#else
+      /* calculate a (more or less rounded) polygon */
+      points[0].x = x0 + 2; points[0].y = y0;
+      points[1].x = x1 - 2; points[1].y = y0;
+      points[2].x = x1;     points[2].y = y0 + 2;
+      points[3].x = x1;     points[3].y = y1 - 2;
+      points[4].x = x1 - 2; points[4].y = y1;
+      points[5].x = x0 + 2; points[5].y = y1;
+      points[6].x = x0;     points[6].y = y1 - 2;
+      points[7].x = x0;     points[7].y = y0 + 2;
+
+      /* render the indicator */
+      gdk_draw_polygon (window, widget->style->base_gc[state], TRUE, points, G_N_ELEMENTS (points));
+#endif
+    }
+
+  /* get proper sizing for the layout drawing */
+  if (text_renderer->follow_state)
+    {
+      text_width -= 2 * (focus_padding + focus_width);
+      text_height -= 2 * (focus_padding + focus_width);
+      x_offset += focus_padding + focus_width;
+      y_offset += focus_padding + focus_width;
+    }
+
+  /* draw the text */
+  gtk_paint_layout (widget->style, window, state, TRUE,
+                    expose_area, widget, "cellrenderertext",
+                    cell_area->x + x_offset + renderer->xpad,
+                    cell_area->y + y_offset + renderer->ypad,
+                    text_renderer->layout);
+}
+
+
+
+static GtkCellEditable*
+thunar_text_renderer_start_editing (GtkCellRenderer     *renderer,
+                                    GdkEvent            *event,
+                                    GtkWidget           *widget,
+                                    const gchar         *path,
+                                    GdkRectangle        *background_area,
+                                    GdkRectangle        *cell_area,
+                                    GtkCellRendererState flags)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (renderer);
+
+  /* verify that we are editable */
+  if (renderer->mode != GTK_CELL_RENDERER_MODE_EDITABLE)
+    return NULL;
+
+  /* allocate a new text entry widget to be used for editing */
+  text_renderer->entry = g_object_new (GTK_TYPE_ENTRY,
+                                       "has-frame", FALSE,
+                                       "text", text_renderer->text,
+                                       "visible", TRUE,
+                                       "xalign", renderer->xalign,
+                                       NULL);
+
+  /* select the whole text */
+  gtk_editable_select_region (GTK_EDITABLE (text_renderer->entry), 0, -1);
+
+  /* remember the tree path that we're editing */
+  g_object_set_data_full (G_OBJECT (text_renderer->entry), "thunar-text-renderer-path", g_strdup (path), g_free);
+
+  /* connect required signals */
+  g_signal_connect (G_OBJECT (text_renderer->entry), "editing-done", G_CALLBACK (thunar_text_renderer_editing_done), text_renderer);
+  g_signal_connect_after (G_OBJECT (text_renderer->entry), "grab-focus", G_CALLBACK (thunar_text_renderer_grab_focus), text_renderer);
+  g_signal_connect (G_OBJECT (text_renderer->entry), "focus-out-event", G_CALLBACK (thunar_text_renderer_focus_out_event), text_renderer);
+  g_signal_connect (G_OBJECT (text_renderer->entry), "populate-popup", G_CALLBACK (thunar_text_renderer_populate_popup), text_renderer);
+
+  return GTK_CELL_EDITABLE (text_renderer->entry);
+}
+
+
+
+static void
+thunar_text_renderer_invalidate (ThunarTextRenderer *text_renderer)
+{
+  thunar_text_renderer_set_widget (text_renderer, NULL);
+}
+
+
+
+static void
+thunar_text_renderer_set_widget (ThunarTextRenderer *text_renderer,
+                                 GtkWidget                     *widget)
+{
+  // FIXME: The sample text should be translatable with a hint to translators!
+  static const gchar SAMPLE_TEXT[] = "The Quick Brown Fox Jumps Over the Lazy Dog";
+  PangoRectangle     extents;
+
+  if (G_LIKELY (widget == text_renderer->widget))
+    return;
+
+  /* disconnect from the previously set widget */
+  if (G_UNLIKELY (text_renderer->widget != NULL))
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (text_renderer->widget), thunar_text_renderer_invalidate, text_renderer);
+      g_object_unref (G_OBJECT (text_renderer->layout));
+      g_object_unref (G_OBJECT (text_renderer->widget));
+    }
+
+  /* activate the new widget */
+  text_renderer->widget = widget;
+
+  /* connect to the new widget */
+  if (G_LIKELY (widget != NULL))
+    {
+      /* take a reference on the widget */
+      g_object_ref (G_OBJECT (widget));
+
+      /* we need to recalculate the metrics when a new style (and thereby a new font) is set */
+      g_signal_connect_swapped (G_OBJECT (text_renderer->widget), "destroy", G_CALLBACK (thunar_text_renderer_invalidate), text_renderer);
+      g_signal_connect_swapped (G_OBJECT (text_renderer->widget), "style-set", G_CALLBACK (thunar_text_renderer_invalidate), text_renderer);
+
+      /* calculate the average character dimensions */
+      text_renderer->layout = gtk_widget_create_pango_layout (widget, SAMPLE_TEXT);
+      pango_layout_get_pixel_extents (text_renderer->layout, NULL, &extents);
+      pango_layout_set_width (text_renderer->layout, -1);
+      text_renderer->char_width = extents.width / g_utf8_strlen (SAMPLE_TEXT, sizeof (SAMPLE_TEXT) - 1);
+      text_renderer->char_height = extents.height;
+    }
+  else
+    {
+      text_renderer->layout = NULL;
+      text_renderer->char_width = 0;
+      text_renderer->char_height = 0;
+    }
+}
+
+
+
+static void
+thunar_text_renderer_editing_done (GtkCellEditable    *editable,
+                                   ThunarTextRenderer *text_renderer)
+{
+  const gchar *path;
+  const gchar *text;
+
+  /* disconnect our signals from the cell editable */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (editable), thunar_text_renderer_editing_done, text_renderer);
+  g_signal_handlers_disconnect_by_func (G_OBJECT (editable), thunar_text_renderer_focus_out_event, text_renderer);
+  g_signal_handlers_disconnect_by_func (G_OBJECT (editable), thunar_text_renderer_populate_popup, text_renderer);
+
+  /* let the GtkCellRenderer class do it's part of the job */
+  gtk_cell_renderer_stop_editing (GTK_CELL_RENDERER (text_renderer), GTK_ENTRY (editable)->editing_canceled);
+
+  /* inform whoever is interested that we have new text (if not cancelled) */
+  if (G_LIKELY (!GTK_ENTRY (editable)->editing_canceled))
+    {
+      text = gtk_entry_get_text (GTK_ENTRY (editable));
+      path = g_object_get_data (G_OBJECT (editable), "thunar-text-renderer-path");
+      g_signal_emit (G_OBJECT (text_renderer), text_renderer_signals[EDITED], 0, path, text);
+    }
+}
+
+
+
+static void
+thunar_text_renderer_grab_focus (GtkWidget          *entry,
+                                 ThunarTextRenderer *text_renderer)
+{
+  const gchar *text;
+  const gchar *dot;
+  glong        offset;
+
+  /* determine the text from the entry widget */
+  text = gtk_entry_get_text (GTK_ENTRY (entry));
+
+  /* lookup the last dot in the text */
+  dot = strrchr (text, '.');
+  if (G_LIKELY (dot != NULL))
+    {
+      /* determine the UTF-8 char offset */
+      offset = g_utf8_pointer_to_offset (text, dot);
+
+      /* select the text prior to the dot */
+      if (G_LIKELY (offset > 0))
+        gtk_entry_select_region (GTK_ENTRY (entry), 0, offset);
+    }
+
+  /* disconnect the grab-focus handler, so we change the selection only once */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (entry), thunar_text_renderer_grab_focus, text_renderer);
+}
+
+
+
+static gboolean
+thunar_text_renderer_focus_out_event (GtkWidget          *entry,
+                                      GdkEventFocus      *event,
+                                      ThunarTextRenderer *text_renderer)
+{
+  /* cancel editing if we haven't popped up the menu */
+  if (G_LIKELY (!text_renderer->entry_menu_active))
+    thunar_text_renderer_editing_done (GTK_CELL_EDITABLE (entry), text_renderer);
+
+  /* we need to pass the event to the entry */
+  return FALSE;
+}
+
+
+
+static void
+thunar_text_renderer_populate_popup (GtkEntry           *entry,
+                                     GtkMenu            *menu,
+                                     ThunarTextRenderer *text_renderer)
+{
+  if (G_UNLIKELY (text_renderer->entry_menu_popdown_timer_id >= 0))
+    g_source_remove (text_renderer->entry_menu_popdown_timer_id);
+
+  text_renderer->entry_menu_active = TRUE;
+
+  g_signal_connect (G_OBJECT (menu), "unmap", G_CALLBACK (thunar_text_renderer_popup_unmap), text_renderer);
+}
+
+
+
+static void
+thunar_text_renderer_popup_unmap (GtkMenu            *menu,
+                                  ThunarTextRenderer *text_renderer)
+{
+  text_renderer->entry_menu_active = FALSE;
+
+  if (G_LIKELY (text_renderer->entry_menu_popdown_timer_id < 0))
+    {
+      text_renderer->entry_menu_popdown_timer_id = g_timeout_add_full (G_PRIORITY_LOW, 500u, thunar_text_renderer_entry_menu_popdown_timer,
+                                                                       text_renderer, thunar_text_renderer_entry_menu_popdown_timer_destroy);
+    }
+}
+
+
+
+static gboolean
+thunar_text_renderer_entry_menu_popdown_timer (gpointer user_data)
+{
+  ThunarTextRenderer *text_renderer = THUNAR_TEXT_RENDERER (user_data);
+
+  GDK_THREADS_ENTER ();
+
+  /* check if we still have the keyboard focus */
+  if (G_UNLIKELY (!GTK_WIDGET_HAS_FOCUS (text_renderer->entry)))
+    thunar_text_renderer_editing_done (GTK_CELL_EDITABLE (text_renderer->entry), text_renderer);
+
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static void
+thunar_text_renderer_entry_menu_popdown_timer_destroy (gpointer user_data)
+{
+  THUNAR_TEXT_RENDERER (user_data)->entry_menu_popdown_timer_id = -1;
+}
+
+
+
+/**
+ * thunar_text_renderer_new:
+ **/
+GtkCellRenderer*
+thunar_text_renderer_new (void)
+{
+  return g_object_new (THUNAR_TYPE_TEXT_RENDERER, NULL);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-text-renderer.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,43 @@
+/* $Id: thunar-text-renderer.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_TEXT_RENDERER_H__
+#define __THUNAR_TEXT_RENDERER_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarTextRendererClass ThunarTextRendererClass;
+typedef struct _ThunarTextRenderer      ThunarTextRenderer;
+
+#define THUNAR_TYPE_TEXT_RENDERER            (thunar_text_renderer_get_type ())
+#define THUNAR_TEXT_RENDERER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_TEXT_RENDERER, ThunarTextRenderer))
+#define THUNAR_TEXT_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_TEXT_RENDERER, ThunarTextRendererClass))
+#define THUNAR_IS_TEXT_RENDERER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_TEXT_RENDERER))
+#define THUNAR_IS_TEXT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_TEXT_RENDERER))
+#define THUNAR_TEXT_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_TEXT_RENDERER, ThunarTextRendererClass))
+
+GType            thunar_text_renderer_get_type (void) G_GNUC_CONST;
+
+GtkCellRenderer *thunar_text_renderer_new      (void) G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_TEXT_RENDERER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,795 @@
+#include <thunar/thunar-thumbnail-frame.h>
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (thunar_thumbnail_frame)
+#endif
+#ifdef __GNUC__
+const guint8 thunar_thumbnail_frame[] __attribute__ ((__aligned__ (4))) = 
+#else
+const guint8 thunar_thumbnail_frame[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (16384) */
+  "\0\0@\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (256) */
+  "\0\0\1\0"
+  /* width (64) */
+  "\0\0\0@"
+  /* height (64) */
+  "\0\0\0@"
+  /* pixel_data: */
+  "\0\0\0\2\0\0\0\3\0\0\0\10\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14"
+  "\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0"
+  "\14\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\14\0"
+  "\0\0\15\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\14"
+  "\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0"
+  "\14\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\14\0"
+  "\0\0\15\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15"
+  "\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\10\0\0\0"
+  "\3\0\0\0\1\377\377\377\0\0\0\0\4\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0#\0\0\0\17\0\0\0\4\377\377\377\0\0\0\0\10\0\0\0\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\0\0\0\377\0\0\0P\0\0\0#\0\0\0\10\377\377\377\0\0\0\0"
+  "\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0n\0\0\0"
+  "0\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0x\0\0\0""3\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2"
+  "\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""4\0\0\0\14\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0"
+  "\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0x\0\0\0""3\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\15"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0"
+  "4\0\0\0\15\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0y\0\0\0""3\0\0\0\15\0\0\0\1\0\0\0\14\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0\0\0\2"
+  "\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""3\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0"
+  "\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\1\0\0\0\14"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0"
+  "4\0\0\0\15\0\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\15\0\0\0\2"
+  "\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""4\0\0\0\15\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\15\0\0\0\1\0\0\0\15\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0"
+  "\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0x\0\0\0""3\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""3\0\0\0\15\0\0\0\2\0\0\0\14"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0"
+  "4\0\0\0\15\0\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\14\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0\0\0\2"
+  "\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""4\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\1\0\0\0\15\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0"
+  "\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0y\0\0\0""3\0\0\0\15\0\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\14"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0"
+  "3\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0x\0\0\0""3\0\0\0\15\0\0\0\2\0\0\0\15\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""3\0\0\0\15\0\0\0\1"
+  "\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""3\0\0\0\15\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\15\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0"
+  "\0\0\2\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0x\0\0\0""3\0\0\0\15\0\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\15\0\0\0\1\0\0\0\15"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0"
+  "3\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0y\0\0\0""3\0\0\0\14\0\0\0\2\0\0\0\14\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\1"
+  "\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""4\0\0\0\14\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\15\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0"
+  "\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0y\0\0\0""3\0\0\0\14\0\0\0\1\0\0\0\14\0\0\0\377\273\273\273\377"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\15\0\0\0\2\0\0\0\15"
+  "\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0"
+  "3\0\0\0\15\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377"
+  "\0\0\0\377\0\0\0y\0\0\0""4\0\0\0\14\0\0\0\1\0\0\0\15\0\0\0\377\273\273"
+  "\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2"
+  "\0\0\0\15\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0"
+  "\0\0""3\0\0\0\15\0\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273"
+  "\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0\0\0\2\0\0\0\15\0\0\0\377\273"
+  "\273\273\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\273\273\273\377\0\0\0\377\0\0\0x\0\0\0""4\0\0\0\14\0"
+  "\0\0\2\0\0\0\14\0\0\0\377\273\273\273\377\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\273\273\273\377\0\0\0\377"
+  "\0\0\0y\0\0\0""3\0\0\0\14\0\0\0\1\0\0\0\15\0\0\0\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273"
+  "\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273"
+  "\377\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377"
+  "\273\273\273\377\273\273\273\377\273\273\273\377\273\273\273\377\273"
+  "\273\273\377\0\0\0\377\0\0\0w\0\0\0""3\0\0\0\14\0\0\0\1\0\0\0\14\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0m\0\0\0""0\0\0\0\14\0\0\0\2\0\0\0"
+  "\11\0\0\0#\0\0\0P\0\0\0n\0\0\0w\0\0\0y\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0"
+  "\0\0x\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0x"
+  "\0\0\0y\0\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0\0\0"
+  "x\0\0\0x\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0\0\0x\0\0"
+  "\0x\0\0\0x\0\0\0y\0\0\0y\0\0\0x\0\0\0y\0\0\0y\0\0\0x\0\0\0y\0\0\0y\0"
+  "\0\0x\0\0\0x\0\0\0x\0\0\0x\0\0\0y\0\0\0x\0\0\0x\0\0\0x\0\0\0y\0\0\0x"
+  "\0\0\0n\0\0\0P\0\0\0#\0\0\0\11\0\0\0\1\0\0\0\4\0\0\0\20\0\0\0#\0\0\0"
+  "0\0\0\0""3\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""3\0\0\0""3\0\0"
+  "\0""4\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""4"
+  "\0\0\0""4\0\0\0""4\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""4\0\0\0"
+  "4\0\0\0""4\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0"
+  "\0""4\0\0\0""4\0\0\0""3\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4"
+  "\0\0\0""3\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0"
+  "4\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""4\0\0\0""3\0\0\0""4\0\0\0""3\0\0"
+  "\0""4\0\0\0""3\0\0\0/\0\0\0#\0\0\0\20\0\0\0\4\377\377\377\0\0\0\0\1\0"
+  "\0\0\4\0\0\0\10\0\0\0\14\0\0\0\14\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\15"
+  "\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0"
+  "\14\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\14\0"
+  "\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15"
+  "\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\15\0\0\0"
+  "\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\14\0"
+  "\0\0\14\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\14\0\0\0\15\0\0\0\15"
+  "\0\0\0\14\0\0\0\15\0\0\0\15\0\0\0\14\0\0\0\14\0\0\0\10\0\0\0\4\0\0\0"
+  "\2\377\377\377\0\377\377\377\0\0\0\0\1\377\377\377\0\0\0\0\2\0\0\0\1"
+  "\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\2\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0"
+  "\0\1\0\0\0\2\0\0\0\1\0\0\0\2\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2"
+  "\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\1\0\0"
+  "\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2"
+  "\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0"
+  "\0\1\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2"
+  "\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\377\377\377\0\377\377"
+  "\377\0"};
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,31 @@
+/* $Id: thunar-thumbnail-frame.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_THUMBNAIL_FRAME_H__
+#define __THUNAR_THUMBNAIL_FRAME_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS;
+
+extern const guint8 thunar_thumbnail_frame[];
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_THUMBNAIL_FRAME_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.png
===================================================================
(Binary files differ)


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-frame.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,327 @@
+/* $Id: thunar-thumbnail-generator.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-thumbnail-generator.h>
+
+
+
+typedef struct _ThunarThumbnailInfo ThunarThumbnailInfo;
+
+
+
+static void     thunar_thumbnail_generator_class_init (ThunarThumbnailGeneratorClass *klass);
+static void     thunar_thumbnail_generator_init       (ThunarThumbnailGenerator      *generator);
+static void     thunar_thumbnail_generator_finalize   (GObject                       *object);
+static gboolean thunar_thumbnail_generator_idle       (gpointer                       user_data);
+static gpointer thunar_thumbnail_generator_thread     (gpointer                       user_data);
+static void     thunar_thumbnail_info_free            (ThunarThumbnailInfo           *info);
+
+
+
+struct _ThunarThumbnailGeneratorClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarThumbnailGenerator
+{
+  GObject __parent__;
+
+  ThunarVfsThumbFactory *factory;
+  volatile GThread      *thread;
+  GMutex                *lock;
+  GCond                 *cond;
+  gint                   idle_id;
+
+  GList                 *requests;
+  GList                 *replies;
+};
+
+struct _ThunarThumbnailInfo
+{
+  ThunarFile    *file;
+  ThunarVfsInfo *info;
+};
+
+
+
+G_DEFINE_TYPE (ThunarThumbnailGenerator, thunar_thumbnail_generator, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_thumbnail_generator_class_init (ThunarThumbnailGeneratorClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_thumbnail_generator_finalize;
+}
+
+
+
+static void
+thunar_thumbnail_generator_init (ThunarThumbnailGenerator *generator)
+{
+  generator->lock = g_mutex_new ();
+  generator->cond = g_cond_new ();
+  generator->idle_id = -1;
+}
+
+
+
+static void
+thunar_thumbnail_generator_finalize (GObject *object)
+{
+  ThunarThumbnailGenerator *generator = THUNAR_THUMBNAIL_GENERATOR (object);
+
+  /* acquire the generator lock */
+  g_mutex_lock (generator->lock);
+
+  /* release all requests */
+  g_list_foreach (generator->requests, (GFunc) thunar_thumbnail_info_free, NULL);
+  g_list_free (generator->requests);
+  generator->requests = NULL;
+
+  /* wait for the generator thread to terminate */
+  while (G_UNLIKELY (generator->thread != NULL))
+    g_cond_wait (generator->cond, generator->lock);
+
+  /* release all replies */
+  g_list_foreach (generator->replies, (GFunc) thunar_thumbnail_info_free, NULL);
+  g_list_free (generator->replies);
+  generator->replies = NULL;
+
+  /* drop the idle source (if any) */
+  if (G_UNLIKELY (generator->idle_id >= 0))
+    g_source_remove (generator->idle_id);
+
+  /* release the thumbnail factory */
+  g_object_unref (G_OBJECT (generator->factory));
+
+  /* release the generator lock */
+  g_mutex_unlock (generator->lock);
+
+  /* release the cond and mutex */
+  g_mutex_free (generator->lock);
+  g_cond_free (generator->cond);
+
+  (*G_OBJECT_CLASS (thunar_thumbnail_generator_parent_class)->finalize) (object);
+}
+
+
+
+static gboolean
+thunar_thumbnail_generator_idle (gpointer user_data)
+{
+  ThunarThumbnailGenerator *generator = THUNAR_THUMBNAIL_GENERATOR (user_data);
+  ThunarThumbnailInfo      *info;
+  GList                    *infos;
+  GList                    *lp;
+
+  /* acquire the lock on the generator */
+  g_mutex_lock (generator->lock);
+
+  /* grab the infos returned from the thumbnailer thread */
+  infos = generator->replies;
+  generator->replies = NULL;
+
+  /* reset the process idle id */
+  generator->idle_id = -1;
+
+  /* release the lock on the generator */
+  g_mutex_unlock (generator->lock);
+
+  /* acquire the GDK thread lock */
+  GDK_THREADS_ENTER ();
+
+  /* invoke "changed" signals on all files */
+  for (lp = infos; lp != NULL; lp = lp->next)
+    {
+      /* invoke "changed" and release the info */
+      info = (ThunarThumbnailInfo *) lp->data;
+      thunar_file_changed (THUNAR_FILE (info->file));
+      thunar_thumbnail_info_free (info);
+    }
+  g_list_free (infos);
+
+  /* release the GDK thread lock */
+  GDK_THREADS_LEAVE ();
+
+  return FALSE;
+}
+
+
+
+static gpointer
+thunar_thumbnail_generator_thread (gpointer user_data)
+{
+  ThunarThumbnailGenerator *generator = THUNAR_THUMBNAIL_GENERATOR (user_data);
+  ThunarThumbnailInfo      *info;
+  GdkPixbuf                *icon;
+
+  for (;;)
+    {
+      /* lock the factory */
+      g_mutex_lock (generator->lock);
+
+      /* grab the first thumbnail from the request list */
+      if (G_LIKELY (generator->requests != NULL))
+        {
+          info = generator->requests->data;
+          generator->requests = g_list_remove (generator->requests, info);
+        }
+      else
+        {
+          info = NULL;
+        }
+
+      /* check if we have something to generate */
+      if (G_UNLIKELY (info == NULL))
+        {
+          /* reset the thread pointer */
+          generator->thread = NULL;
+          g_cond_signal (generator->cond);
+          g_mutex_unlock (generator->lock);
+          break;
+        }
+
+      /* release the lock */
+      g_mutex_unlock (generator->lock);
+
+      /* try to generate the thumbnail */
+      icon = thunar_vfs_thumb_factory_generate_thumbnail (generator->factory, info->info);
+
+      /* store the thumbnail (or the failed notice) */
+      thunar_vfs_thumb_factory_store_thumbnail (generator->factory, icon, info->info, NULL);
+
+      /* place the thumbnail on the reply list and schedule the idle source */
+      g_mutex_lock (generator->lock);
+      generator->replies = g_list_prepend (generator->replies, info);
+      if (G_UNLIKELY (generator->idle_id < 0))
+        generator->idle_id = g_idle_add_full (G_PRIORITY_LOW, thunar_thumbnail_generator_idle, generator, NULL);
+      g_mutex_unlock (generator->lock);
+
+      /* release the icon (if any) */
+      if (G_LIKELY (icon != NULL))
+        g_object_unref (G_OBJECT (icon));
+    }
+
+  return NULL;
+}
+
+
+
+static void
+thunar_thumbnail_info_free (ThunarThumbnailInfo *info)
+{
+  g_object_unref (G_OBJECT (info->file));
+  thunar_vfs_info_unref (info->info);
+  g_free (info);
+}
+
+
+
+/**
+ * thunar_thumbnail_generator_new:
+ * @factory : a #ThunarVfsThumbFactory.
+ *
+ * Allocates a new #ThunarThumbnailGenerator object,
+ * which can be used to generate and store thumbnails
+ * for files.
+ *
+ * The caller is responsible to free the returned
+ * object using g_object_unref() when no longer needed.
+ *
+ * Return value: a newly allocated #ThunarThumbnailGenerator.
+ **/
+ThunarThumbnailGenerator*
+thunar_thumbnail_generator_new (ThunarVfsThumbFactory *factory)
+{
+  ThunarThumbnailGenerator *generator;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), NULL);
+
+  /* allocate the generator object */
+  generator = g_object_new (THUNAR_TYPE_THUMBNAIL_GENERATOR, NULL);
+  generator->factory = g_object_ref (G_OBJECT (factory));
+
+  return generator;
+}
+
+
+
+/**
+ * thunar_thumbnail_generator_enqueue:
+ * @generator
+ * @file
+ **/
+void
+thunar_thumbnail_generator_enqueue (ThunarThumbnailGenerator *generator,
+                                    ThunarFile               *file)
+{
+  ThunarThumbnailInfo *info;
+  GError              *error = NULL;
+  GList               *lp;
+
+  g_return_if_fail (THUNAR_IS_THUMBNAIL_GENERATOR (generator));
+  g_return_if_fail (THUNAR_IS_FILE (file));
+
+  /* acquire the generator lock */
+  g_mutex_lock (generator->lock);
+
+  /* check if the file is already on the request list */
+  for (lp = generator->requests; lp != NULL; lp = lp->next)
+    if (((ThunarThumbnailInfo *) lp->data)->file == file)
+      break;
+
+  /* schedule a request for the file if it's not already done */
+  if (G_LIKELY (lp == NULL))
+    {
+      /* allocate a thumbnail info for the file */
+      info = g_new (ThunarThumbnailInfo, 1);
+      info->file = g_object_ref (G_OBJECT (file));
+      info->info = thunar_vfs_info_copy (thunar_file_get_info (file));
+
+      /* schedule the request */
+      generator->requests = g_list_append (generator->requests, info);
+
+      /* start the generator thread on-demand */
+      if (G_UNLIKELY (generator->thread == NULL))
+        {
+          generator->thread = g_thread_create_full (thunar_thumbnail_generator_thread, generator, 0,
+                                                    FALSE, FALSE, G_THREAD_PRIORITY_LOW, &error);
+          if (G_UNLIKELY (generator->thread == NULL))
+            {
+              g_warning ("Failed to launch thumbnail generator thread: %s", error->message);
+              g_error_free (error);
+            }
+        }
+    }
+
+  /* release the generator lock */
+  g_mutex_unlock (generator->lock);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-thumbnail-generator.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,46 @@
+/* $Id: thunar-thumbnail-generator.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_THUMBNAIL_GENERATOR_H__
+#define __THUNAR_THUMBNAIL_GENERATOR_H__
+
+#include <thunar/thunar-file.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarThumbnailGeneratorClass ThunarThumbnailGeneratorClass;
+typedef struct _ThunarThumbnailGenerator      ThunarThumbnailGenerator;
+
+#define THUNAR_TYPE_THUMBNAIL_GENERATOR             (thunar_thumbnail_generator_get_type ())
+#define THUNAR_THUMBNAIL_GENERATOR(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_THUMBNAIL_GENERATOR, ThunarThumbnailGenerator))
+#define THUNAR_THUMBNAIL_GENERATOR_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_THUMBNAIL_GENERATOR, ThunarThumbnailGeneratorClass))
+#define THUNAR_IS_THUMBNAIL_GENERATOR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_THUMBNAIL_GENERATOR))
+#define THUNAR_IS_THUMBNAIL_GENERATOR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_THUMBNAIL_GENERATOR))
+#define THUNAR_THUMBNAIL_GENERATOR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_THUMBNAIL_GENERATOR, ThunarThumbnailGeneratorClass))
+
+GType                     thunar_thumbnail_generator_get_type (void) G_GNUC_CONST;
+
+ThunarThumbnailGenerator *thunar_thumbnail_generator_new      (ThunarVfsThumbFactory    *factory) G_GNUC_MALLOC;
+
+void                      thunar_thumbnail_generator_enqueue  (ThunarThumbnailGenerator *generator,
+                                                               ThunarFile               *file);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_THUMBNAIL_GENERATOR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,249 @@
+/* $Id: thunar-view.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-view.h>
+
+
+
+static void thunar_view_class_init  (gpointer klass);
+
+
+
+GType
+thunar_view_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarViewIface),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_view_class_init,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarView",
+                                     &info, 0);
+
+      g_type_interface_add_prerequisite (type, GTK_TYPE_WIDGET);
+      g_type_interface_add_prerequisite (type, THUNAR_TYPE_NAVIGATOR);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_view_class_init (gpointer klass)
+{
+  /**
+   * ThunarView:loading:
+   *
+   * Indicates whether the given #ThunarView is currently loading or
+   * layouting its contents. Implementations should invoke
+   * #g_object_notify() on this property whenever they start to load
+   * the contents and then once they have finished loading.
+   *
+   * Other modules can use this property to display some kind of
+   * user visible notification about the loading state, e.g. a
+   * progress bar or an animated image.
+   **/
+  g_object_interface_install_property (klass,
+                                       g_param_spec_boolean ("loading",
+                                                             _("Loading"),
+                                                             _("Whether the view is currently being loaded"),
+                                                             FALSE,
+                                                             EXO_PARAM_READABLE));
+
+  /**
+   * ThunarView:statusbar-text:
+   *
+   * The text to be displayed in the status bar, which is associated
+   * with this #ThunarView instance. Implementations should invoke
+   * #g_object_notify() on this property, whenever they have a new
+   * text to be display in the status bar (e.g. the selection changed
+   * or similar).
+   **/
+  g_object_interface_install_property (klass,
+                                       g_param_spec_string ("statusbar-text",
+                                                            _("Statusbar text"),
+                                                            _("Text to be displayed in the statusbar associated with this view"),
+                                                            NULL,
+                                                            EXO_PARAM_READABLE));
+
+  /**
+   * ThunarView:show-hidden:
+   *
+   * Tells whether to display hidden and backup files in the
+   * #ThunarView or whether to hide them.
+   **/
+  g_object_interface_install_property (klass,
+                                       g_param_spec_boolean ("show-hidden",
+                                                             _("Show hidden"),
+                                                             _("Whether to display hidden files"),
+                                                             FALSE,
+                                                             EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarView:ui-manager:
+   *
+   * The UI manager used by the surrounding #ThunarWindow. The
+   * #ThunarView implementations may connect additional actions
+   * to the UI manager.
+   **/
+  g_object_interface_install_property (klass,
+                                       g_param_spec_object ("ui-manager",
+                                                            _("UI manager"),
+                                                            _("UI manager of the surrounding window"),
+                                                            GTK_TYPE_UI_MANAGER,
+                                                            EXO_PARAM_READWRITE));
+}
+
+
+
+/**
+ * thunar_view_get_loading:
+ * @view : a #ThunarView instance.
+ *
+ * Tells whether the given #ThunarView is currently loading or
+ * layouting its contents.
+ *
+ * Return value: %TRUE if @view is currently being loaded, else %FALSE.
+ **/
+gboolean
+thunar_view_get_loading (ThunarView *view)
+{
+  g_return_val_if_fail (THUNAR_IS_VIEW (view), FALSE);
+  return (*THUNAR_VIEW_GET_IFACE (view)->get_loading) (view);
+}
+
+
+
+/**
+ * thunar_view_get_statusbar_text:
+ * @view : a #ThunarView instance.
+ *
+ * Queries the text that should be displayed in the status bar
+ * associated with @view.
+ *
+ * Return value: the text to be displayed in the status bar
+ *               asssociated with @view.
+ **/
+const gchar*
+thunar_view_get_statusbar_text (ThunarView *view)
+{
+  g_return_val_if_fail (THUNAR_IS_VIEW (view), NULL);
+  return (*THUNAR_VIEW_GET_IFACE (view)->get_statusbar_text) (view);
+}
+
+
+
+/**
+ * thunar_view_get_show_hidden:
+ * @view : a #ThunarView instance.
+ *
+ * Returns %TRUE if hidden and backup files are shown
+ * in @view. Else %FALSE is returned.
+ *
+ * Return value: whether @view displays hidden files.
+ **/
+gboolean
+thunar_view_get_show_hidden (ThunarView *view)
+{
+  g_return_val_if_fail (THUNAR_IS_VIEW (view), FALSE);
+  return (*THUNAR_VIEW_GET_IFACE (view)->get_show_hidden) (view);
+}
+
+
+
+/**
+ * thunar_view_set_show_hidden:
+ * @view        : a #ThunarView instance.
+ * @show_hidden : &TRUE to display hidden files, else %FALSE.
+ *
+ * If @show_hidden is %TRUE then @view will display hidden and
+ * backup files, else those files will be hidden from the user
+ * interface.
+ **/
+void
+thunar_view_set_show_hidden (ThunarView *view,
+                             gboolean    show_hidden)
+{
+  g_return_if_fail (THUNAR_IS_VIEW (view));
+  (*THUNAR_VIEW_GET_IFACE (view)->set_show_hidden) (view, show_hidden);
+}
+
+
+
+/**
+ * thunar_view_get_ui_manager:
+ * @view : a #ThunarView instance.
+ *
+ * Returns the #GtkUIManager associated with @view or
+ * %NULL if @view has no #GtkUIManager associated with
+ * it.
+ *
+ * Return value: the #GtkUIManager associated with @view
+ *               or %NULL.
+ **/
+GtkUIManager*
+thunar_view_get_ui_manager (ThunarView *view)
+{
+  g_return_val_if_fail (THUNAR_IS_VIEW (view), NULL);
+  return (*THUNAR_VIEW_GET_IFACE (view)->get_ui_manager) (view);
+}
+
+
+
+/**
+ * thunar_view_set_ui_manager:
+ * @view       : a #ThunarView instance.
+ * @ui_manager : a #GtkUIManager or %NULL.
+ *
+ * Installs a new #GtkUIManager for @view or resets the ::ui-manager
+ * property.
+ *
+ * Implementations of the #ThunarView interface must first disconnect
+ * from any previously set #GtkUIManager and then connect to the
+ * @ui_manager if not %NULL.
+ **/
+void
+thunar_view_set_ui_manager (ThunarView   *view,
+                            GtkUIManager *ui_manager)
+{
+  g_return_if_fail (THUNAR_IS_VIEW (view));
+  g_return_if_fail (ui_manager == NULL || GTK_IS_UI_MANAGER (ui_manager));
+  (*THUNAR_VIEW_GET_IFACE (view)->set_ui_manager) (view, ui_manager);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-view.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,67 @@
+/* $Id: thunar-view.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_VIEW_H__
+#define __THUNAR_VIEW_H__
+
+#include <thunar/thunar-navigator.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarViewIface ThunarViewIface;
+typedef struct _ThunarView      ThunarView;
+
+#define THUNAR_TYPE_VIEW            (thunar_view_get_type ())
+#define THUNAR_VIEW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_VIEW, ThunarView))
+#define THUNAR_IS_VIEW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_VIEW))
+#define THUNAR_VIEW_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_TYPE_VIEW, ThunarViewIface))
+
+struct _ThunarViewIface
+{
+  GTypeInterface __parent__;
+
+  /* virtual methods */
+  gboolean      (*get_loading)        (ThunarView   *view);
+  const gchar  *(*get_statusbar_text) (ThunarView   *view);
+
+  gboolean      (*get_show_hidden)    (ThunarView   *view);
+  void          (*set_show_hidden)    (ThunarView   *view,
+                                       gboolean      show_hidden);
+
+  GtkUIManager *(*get_ui_manager)     (ThunarView   *view);
+  void          (*set_ui_manager)     (ThunarView   *view,
+                                       GtkUIManager *ui_manager);
+};
+
+GType         thunar_view_get_type           (void) G_GNUC_CONST;
+
+gboolean      thunar_view_get_loading        (ThunarView   *view);
+const gchar  *thunar_view_get_statusbar_text (ThunarView   *view);
+
+gboolean      thunar_view_get_show_hidden    (ThunarView   *view);
+void          thunar_view_set_show_hidden    (ThunarView   *view,
+                                              gboolean      show_hidden);
+
+GtkUIManager *thunar_view_get_ui_manager     (ThunarView   *view);
+void          thunar_view_set_ui_manager     (ThunarView   *view,
+                                              GtkUIManager *ui_manager);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VIEW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,54 @@
+/* automatically generated from ./thunar-window-ui.xml */
+static const unsigned thunar_window_ui_length = 2629u;
+#ifdef __SUNPRO_C
+#pragma align 4 (thunar_window_ui)
+#endif
+#ifdef __GNUC__
+static const char thunar_window_ui[] __attribute__ ((__aligned__ (4))) =
+#else
+static const char thunar_window_ui[] =
+#endif
+{
+  "<ui>\n\n  <!--\n    $Id: thunar-window-ui.xml 18843 2005-11-14 14:25:58"
+  "Z benny $\n\n    Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>\n\n"
+  "    Thunar main window user interface description file. Do NOT\n    sim"
+  "ply edit this file if you don\'t know how the whole system\n    works, "
+  "because it\'s too easy to break something.\n  -->\n\n  <menubar name=\""
+  "main-menu\">\n    <menu action=\"file-menu\" name=\"file-menu\">\n     "
+  " <menuitem action=\"open-new-window\" name=\"open-new-window\" />\n    "
+  "  <placeholder name=\"placeholder-create-actions\" />\n      <separator"
+  " />\n      <placeholder name=\"placeholder-launcher-actions\" />\n     "
+  " <separator />\n      <placeholder name=\"placeholder-file-properties\""
+  " />\n      <separator />\n      <menuitem action=\"close-all-windows\" "
+  "name=\"close-all-windows\" />\n      <menuitem action=\"close\" name=\""
+  "close\" />\n    </menu>\n\n    <menu action=\"edit-menu\" name=\"edit-m"
+  "enu\">\n      <placeholder name=\"placeholder-edit-clipboard-actions\" "
+  "/>\n      <separator />\n      <placeholder name=\"placeholder-edit-sel"
+  "ect-actions\" />\n      <separator />\n      <placeholder name=\"placeh"
+  "older-edit-alter-actions\" />\n    </menu>\n\n    <menu action=\"view-m"
+  "enu\" name=\"view-menu\">\n      <menu action=\"view-location-bar-menu\""
+  " name=\"view-location-bar-menu\">\n        <menuitem action=\"view-loca"
+  "tion-bar-buttons\" name=\"view-location-bar-buttons\" />\n        <menu"
+  "item action=\"view-location-bar-entry\" name=\"view-location-bar-entry\""
+  " />\n        <menuitem action=\"view-location-bar-hidden\" name=\"view-"
+  "location-bar-hidden\" />\n      </menu>\n      <menu action=\"view-side"
+  "-pane-menu\" name=\"view-side-pane-menu\">\n        <menuitem action=\""
+  "view-side-pane-favourites\" name=\"view-side-pane-favourites\" />\n    "
+  "    <menuitem action=\"view-side-pane-hidden\" name=\"view-side-pane-hi"
+  "dden\" />\n      </menu>\n      <separator />\n      <menuitem action=\""
+  "show-hidden\" name=\"show-hidden\" />\n      <separator />\n      <plac"
+  "eholder name=\"placeholder-view-items-actions\" />\n      <separator />"
+  "\n      <menuitem action=\"view-as-icons\" name=\"view-as-icons\" />\n "
+  "     <menuitem action=\"view-as-detailed-list\" name=\"view-as-detailed"
+  "-list\" />\n    </menu>\n\n    <menu action=\"go-menu\" name=\"go-menu\""
+  ">\n      <menuitem action=\"open-parent\" name=\"open-parent\" />\n    "
+  "  <menuitem action=\"back\" name=\"back\" />\n      <menuitem action=\""
+  "forward\" name=\"forward\" />\n      <separator />\n      <menuitem act"
+  "ion=\"open-home\" name=\"open-home\" />\n      <menuitem action=\"open-"
+  "location\" name=\"open-location\" />\n    </menu>\n\n    <menu action=\""
+  "help-menu\" name=\"help-menu\">\n      <menuitem action=\"about\" name="
+  "\"about\" />\n    </menu>\n  </menubar>\n\n</ui>\n\n<!-- vi: set ts=2 s"
+  "w=2 et ai nocindent syntax=xml: -->\n"
+};
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.xml
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.xml	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window-ui.xml	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,69 @@
+<ui>
+
+  <!--
+    $Id: thunar-window-ui.xml 18843 2005-11-14 14:25:58Z benny $
+
+    Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+
+    Thunar main window user interface description file. Do NOT
+    simply edit this file if you don't know how the whole system
+    works, because it's too easy to break something.
+  -->
+
+  <menubar name="main-menu">
+    <menu action="file-menu" name="file-menu">
+      <menuitem action="open-new-window" name="open-new-window" />
+      <placeholder name="placeholder-create-actions" />
+      <separator />
+      <placeholder name="placeholder-launcher-actions" />
+      <separator />
+      <placeholder name="placeholder-file-properties" />
+      <separator />
+      <menuitem action="close-all-windows" name="close-all-windows" />
+      <menuitem action="close" name="close" />
+    </menu>
+
+    <menu action="edit-menu" name="edit-menu">
+      <placeholder name="placeholder-edit-clipboard-actions" />
+      <separator />
+      <placeholder name="placeholder-edit-select-actions" />
+      <separator />
+      <placeholder name="placeholder-edit-alter-actions" />
+    </menu>
+
+    <menu action="view-menu" name="view-menu">
+      <menu action="view-location-bar-menu" name="view-location-bar-menu">
+        <menuitem action="view-location-bar-buttons" name="view-location-bar-buttons" />
+        <menuitem action="view-location-bar-entry" name="view-location-bar-entry" />
+        <menuitem action="view-location-bar-hidden" name="view-location-bar-hidden" />
+      </menu>
+      <menu action="view-side-pane-menu" name="view-side-pane-menu">
+        <menuitem action="view-side-pane-favourites" name="view-side-pane-favourites" />
+        <menuitem action="view-side-pane-hidden" name="view-side-pane-hidden" />
+      </menu>
+      <separator />
+      <menuitem action="show-hidden" name="show-hidden" />
+      <separator />
+      <placeholder name="placeholder-view-items-actions" />
+      <separator />
+      <menuitem action="view-as-icons" name="view-as-icons" />
+      <menuitem action="view-as-detailed-list" name="view-as-detailed-list" />
+    </menu>
+
+    <menu action="go-menu" name="go-menu">
+      <menuitem action="open-parent" name="open-parent" />
+      <menuitem action="back" name="back" />
+      <menuitem action="forward" name="forward" />
+      <separator />
+      <menuitem action="open-home" name="open-home" />
+      <menuitem action="open-location" name="open-location" />
+    </menu>
+
+    <menu action="help-menu" name="help-menu">
+      <menuitem action="about" name="about" />
+    </menu>
+  </menubar>
+
+</ui>
+
+<!-- vi: set ts=2 sw=2 et ai nocindent syntax=xml: -->

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1046 @@
+/* $Id: thunar-window.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <thunar/thunar-application.h>
+#include <thunar/thunar-clipboard-manager.h>
+#include <thunar/thunar-details-view.h>
+#include <thunar/thunar-dialogs.h>
+#include <thunar/thunar-favourites-pane.h>
+#include <thunar/thunar-gtk-extensions.h>
+#include <thunar/thunar-history.h>
+#include <thunar/thunar-icon-view.h>
+#include <thunar/thunar-location-buttons.h>
+#include <thunar/thunar-location-dialog.h>
+#include <thunar/thunar-location-entry.h>
+#include <thunar/thunar-preferences.h>
+#include <thunar/thunar-statusbar.h>
+#include <thunar/thunar-window.h>
+#include <thunar/thunar-window-ui.h>
+
+
+
+enum
+{
+  PROP_0,
+  PROP_CURRENT_DIRECTORY,
+  PROP_SHOW_HIDDEN,
+  PROP_UI_MANAGER,
+};
+
+
+
+static void     thunar_window_class_init                  (ThunarWindowClass  *klass);
+static void     thunar_window_init                        (ThunarWindow       *window);
+static void     thunar_window_dispose                     (GObject            *object);
+static void     thunar_window_finalize                    (GObject            *object);
+static void     thunar_window_get_property                (GObject            *object,
+                                                           guint               prop_id,
+                                                           GValue             *value,
+                                                           GParamSpec         *pspec);
+static void     thunar_window_set_property                (GObject            *object,
+                                                           guint               prop_id,
+                                                           const GValue       *value,
+                                                           GParamSpec         *pspec);
+static void     thunar_window_realize                     (GtkWidget          *widget);
+static void     thunar_window_unrealize                   (GtkWidget          *widget);
+static void     thunar_window_action_open_new_window      (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_close_all_windows    (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_close                (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_location_bar_changed (GtkRadioAction     *action,
+                                                           GtkRadioAction     *current,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_side_pane_changed    (GtkRadioAction     *action,
+                                                           GtkRadioAction     *current,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_view_changed         (GtkRadioAction     *action,
+                                                           GtkRadioAction     *current,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_go_up                (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_open_home            (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_open_location        (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_about                (GtkAction          *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_action_show_hidden          (GtkToggleAction    *action,
+                                                           ThunarWindow       *window);
+static void     thunar_window_current_directory_changed   (ThunarFile         *current_directory,
+                                                           ThunarWindow       *window);
+static void     thunar_window_connect_proxy               (GtkUIManager       *manager,
+                                                           GtkAction          *action,
+                                                           GtkWidget          *proxy,
+                                                           ThunarWindow       *window);
+static void     thunar_window_disconnect_proxy            (GtkUIManager       *manager,
+                                                           GtkAction          *action,
+                                                           GtkWidget          *proxy,
+                                                           ThunarWindow       *window);
+static void     thunar_window_menu_item_selected          (GtkWidget          *menu_item,
+                                                           ThunarWindow       *window);
+static void     thunar_window_menu_item_deselected        (GtkWidget          *menu_item,
+                                                           ThunarWindow       *window);
+static void     thunar_window_notify_loading              (ThunarView         *view,
+                                                           GParamSpec         *pspec,
+                                                           ThunarWindow       *window);
+
+
+
+struct _ThunarWindowClass
+{
+  GtkWindowClass __parent__;
+};
+
+struct _ThunarWindow
+{
+  GtkWindow __parent__;
+
+  ThunarClipboardManager *clipboard;
+
+  ThunarPreferences      *preferences;
+
+  ThunarIconFactory      *icon_factory;
+
+  GtkActionGroup         *action_group;
+  GtkUIManager           *ui_manager;
+
+  /* closures for the menu_item_selected()/menu_item_deselected() callbacks */
+  GClosure               *menu_item_selected_closure;
+  GClosure               *menu_item_deselected_closure;
+  guint                   menu_item_tooltip_id;
+
+  GtkWidget              *paned;
+  GtkWidget              *location_bar;
+  GtkWidget              *view_container;
+  GtkWidget              *view;
+  GtkWidget              *statusbar;
+
+  ThunarHistory          *history;
+
+  ThunarFile             *current_directory;
+};
+
+
+
+static const GtkActionEntry action_entries[] =
+{
+  { "file-menu", NULL, N_ ("_File"), NULL, },
+  { "open-new-window", NULL, N_ ("Open New _Window"), "<control>N", N_ ("Open a new Thunar window for the displayed location"), G_CALLBACK (thunar_window_action_open_new_window), },
+  { "close-all-windows", NULL, N_ ("Close _All Windows"), "<control><shift>W", N_ ("Close all Thunar windows"), G_CALLBACK (thunar_window_action_close_all_windows), },
+  { "close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W", N_ ("Close this window"), G_CALLBACK (thunar_window_action_close), },
+  { "edit-menu", NULL, N_ ("_Edit"), NULL, },
+  { "view-menu", NULL, N_ ("_View"), NULL, },
+  { "view-location-bar-menu", NULL, N_ ("_Location Bar"), NULL, },
+  { "view-side-pane-menu", NULL, N_ ("_Side Pane"), NULL, },
+  { "go-menu", NULL, N_ ("_Go"), NULL, },
+  { "open-parent", GTK_STOCK_GO_UP, N_ ("Open _Parent"), "<alt>Up", N_ ("Open the parent folder"), G_CALLBACK (thunar_window_action_go_up), },
+  { "open-home", GTK_STOCK_HOME, N_ ("_Home"), "<alt>Home", N_ ("Open the home folder"), G_CALLBACK (thunar_window_action_open_home), },
+  { "open-location", NULL, N_ ("Open _Location..."), "<control>L", N_ ("Specify a location to open"), G_CALLBACK (thunar_window_action_open_location), },
+  { "help-menu", NULL, N_ ("_Help"), NULL, },
+#if GTK_CHECK_VERSION(2,6,0)
+  { "about", GTK_STOCK_ABOUT, N_ ("_About"), NULL, N_ ("Display information about Thunar"), G_CALLBACK (thunar_window_action_about), },
+#else
+  { "about", GTK_STOCK_DIALOG_INFO, N_ ("_About"), NULL, N_ ("Display information about Thunar"), G_CALLBACK (thunar_window_action_about), },
+#endif
+};
+
+static const GtkToggleActionEntry toggle_action_entries[] =
+{
+  { "show-hidden", NULL, N_("Show _Hidden Files"), "<control>H", N_("Toggles the display of hidden files in the current window"), G_CALLBACK (thunar_window_action_show_hidden), FALSE, },
+};
+
+
+
+G_DEFINE_TYPE (ThunarWindow, thunar_window, GTK_TYPE_WINDOW);
+
+
+
+static void
+thunar_window_class_init (ThunarWindowClass *klass)
+{
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->dispose = thunar_window_dispose;
+  gobject_class->finalize = thunar_window_finalize;
+  gobject_class->get_property = thunar_window_get_property;
+  gobject_class->set_property = thunar_window_set_property;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->realize = thunar_window_realize;
+  gtkwidget_class->unrealize = thunar_window_unrealize;
+
+  /**
+   * ThunarWindow:current-directory:
+   *
+   * The directory currently displayed within this #ThunarWindow
+   * or %NULL.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_CURRENT_DIRECTORY,
+                                   g_param_spec_object ("current-directory",
+                                                        _("Current directory"),
+                                                        _("The directory currently displayed within this window"),
+                                                        THUNAR_TYPE_FILE,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarWindow:show-hidden:
+   *
+   * Whether to show hidden files in the current window.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_SHOW_HIDDEN,
+                                   g_param_spec_boolean ("show-hidden",
+                                                         _("Show hidden"),
+                                                         _("Whether to display hidden files"),
+                                                         FALSE,
+                                                         EXO_PARAM_READABLE));
+
+  /**
+   * ThunarWindow:ui-manager:
+   *
+   * The #GtkUIManager used for this #ThunarWindow. This property
+   * can only be read and is garantied to always contain a valid
+   * #GtkUIManager instance (thus it's never %NULL).
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_UI_MANAGER,
+                                   g_param_spec_object ("ui-manager",
+                                                        _("UI manager"),
+                                                        _("The UI manager used within this window"),
+                                                        GTK_TYPE_UI_MANAGER,
+                                                        EXO_PARAM_READABLE));
+}
+
+
+
+static void
+thunar_window_init (ThunarWindow *window)
+{
+  GtkRadioAction *radio_action;
+  GtkAccelGroup  *accel_group;
+  GtkAction      *action;
+  GtkWidget      *vbox;
+  GtkWidget      *menubar;
+  GtkWidget      *box;
+  gboolean        show_hidden;
+  GSList         *group;
+  gchar          *type_name;
+  GType           type;
+
+  /* grab a reference on the preferences */
+  window->preferences = thunar_preferences_get ();
+
+  /* allocate a closure for the menu_item_selected() callback */
+  window->menu_item_selected_closure = g_cclosure_new_object (G_CALLBACK (thunar_window_menu_item_selected), G_OBJECT (window));
+  g_closure_ref (window->menu_item_selected_closure);
+  g_closure_sink (window->menu_item_selected_closure);
+
+  /* allocate a closure for the menu_item_deselected() callback */
+  window->menu_item_deselected_closure = g_cclosure_new_object (G_CALLBACK (thunar_window_menu_item_deselected), G_OBJECT (window));
+  g_closure_ref (window->menu_item_deselected_closure);
+  g_closure_sink (window->menu_item_deselected_closure);
+
+  window->icon_factory = thunar_icon_factory_get_default ();
+
+  /* setup the action group for this window */
+  window->action_group = gtk_action_group_new ("thunar-window");
+  gtk_action_group_set_translation_domain (window->action_group, GETTEXT_PACKAGE);
+  gtk_action_group_add_actions (window->action_group, action_entries, G_N_ELEMENTS (action_entries), GTK_WIDGET (window));
+  gtk_action_group_add_toggle_actions (window->action_group, toggle_action_entries, G_N_ELEMENTS (toggle_action_entries), GTK_WIDGET (window));
+
+  /* initialize the "show-hidden" action using the default value from the preferences */
+  action = gtk_action_group_get_action (window->action_group, "show-hidden");
+  g_object_get (G_OBJECT (window->preferences), "default-show-hidden", &show_hidden, NULL);
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show_hidden);
+
+  /* setup the history support */
+  window->history = g_object_new (THUNAR_TYPE_HISTORY, "action-group", window->action_group, NULL);
+  g_signal_connect_swapped (G_OBJECT (window->history), "change-directory", G_CALLBACK (thunar_window_set_current_directory), window);
+  exo_binding_new (G_OBJECT (window), "current-directory", G_OBJECT (window->history), "current-directory");
+
+  /*
+   * add the side pane options
+   */
+  radio_action = gtk_radio_action_new ("view-side-pane-favourites", _("_Favourites"), NULL, NULL, THUNAR_TYPE_FAVOURITES_PANE);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, NULL);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  radio_action = gtk_radio_action_new ("view-side-pane-hidden", _("_Hidden"), NULL, NULL, G_TYPE_NONE);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, group);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  /*
+   * add the location bar options
+   */
+  radio_action = gtk_radio_action_new ("view-location-bar-buttons", _("_Button Style"), NULL, NULL, THUNAR_TYPE_LOCATION_BUTTONS);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, NULL);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  radio_action = gtk_radio_action_new ("view-location-bar-entry", _("_Traditional Style"), NULL, NULL, THUNAR_TYPE_LOCATION_ENTRY);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, group);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  radio_action = gtk_radio_action_new ("view-location-bar-hidden", _("_Hidden"), NULL, NULL, G_TYPE_NONE);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, group);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  /*
+   * add view options
+   */
+  radio_action = gtk_radio_action_new ("view-as-icons", _("View as _Icons"), NULL, NULL, THUNAR_TYPE_ICON_VIEW);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, NULL);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  radio_action = gtk_radio_action_new ("view-as-detailed-list", _("View as _Detailed List"), NULL, NULL, THUNAR_TYPE_DETAILS_VIEW);
+  gtk_action_group_add_action (window->action_group, GTK_ACTION (radio_action));
+  gtk_radio_action_set_group (radio_action, group);
+  group = gtk_radio_action_get_group (radio_action);
+  g_object_unref (G_OBJECT (radio_action));
+
+  window->ui_manager = gtk_ui_manager_new ();
+  g_signal_connect (G_OBJECT (window->ui_manager), "connect-proxy", G_CALLBACK (thunar_window_connect_proxy), window);
+  g_signal_connect (G_OBJECT (window->ui_manager), "disconnect-proxy", G_CALLBACK (thunar_window_disconnect_proxy), window);
+  gtk_ui_manager_insert_action_group (window->ui_manager, window->action_group, 0);
+  gtk_ui_manager_add_ui_from_string (window->ui_manager, thunar_window_ui, thunar_window_ui_length, NULL);
+
+  accel_group = gtk_ui_manager_get_accel_group (window->ui_manager);
+  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
+  gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
+  gtk_window_set_title (GTK_WINDOW (window), _("Thunar"));
+
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_widget_show (vbox);
+
+  menubar = gtk_ui_manager_get_widget (window->ui_manager, "/main-menu");
+  gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
+  gtk_widget_show (menubar);
+
+  window->paned = g_object_new (GTK_TYPE_HPANED, "border-width", 6, NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), window->paned, TRUE, TRUE, 0);
+  gtk_widget_show (window->paned);
+
+  box = gtk_vbox_new (FALSE, 6);
+  gtk_paned_pack2 (GTK_PANED (window->paned), box, TRUE, FALSE);
+  gtk_widget_show (box);
+
+  window->location_bar = gtk_alignment_new (0.0f, 0.5f, 1.0f, 1.0f);
+  gtk_box_pack_start (GTK_BOX (box), window->location_bar, FALSE, FALSE, 0);
+  gtk_widget_show (window->location_bar);
+
+  window->view_container = gtk_alignment_new (0.5f, 0.5f, 1.0f, 1.0f);
+  gtk_box_pack_start (GTK_BOX (box), window->view_container, TRUE, TRUE, 0);
+  gtk_widget_show (window->view_container);
+
+  window->statusbar = thunar_statusbar_new ();
+  g_signal_connect_swapped (G_OBJECT (window->statusbar), "change-directory",
+                            G_CALLBACK (thunar_window_set_current_directory), window);
+  exo_binding_new (G_OBJECT (window), "current-directory", G_OBJECT (window->statusbar), "current-directory");
+  gtk_box_pack_start (GTK_BOX (vbox), window->statusbar, FALSE, FALSE, 0);
+  gtk_widget_show (window->statusbar);
+
+  /* allocate a statusbar context for displaying tooltips of the selected menu item */
+  window->menu_item_tooltip_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (window->statusbar), "menu-item-tooltip");
+
+  /* determine the selected side pane */
+  g_object_get (G_OBJECT (window->preferences), "last-side-pane", &type_name, NULL);
+  type = g_type_from_name (type_name);
+  g_free (type_name);
+
+  /* activate the selected side pane */
+  action = gtk_action_group_get_action (window->action_group, "view-side-pane-favourites");
+  exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), g_type_is_a (type, THUNAR_TYPE_SIDE_PANE) ? type : G_TYPE_NONE);
+  g_signal_connect (G_OBJECT (action), "changed", G_CALLBACK (thunar_window_action_side_pane_changed), window);
+  thunar_window_action_side_pane_changed (GTK_RADIO_ACTION (action), GTK_RADIO_ACTION (action), window);
+
+  /* determine the selected location bar */
+  g_object_get (G_OBJECT (window->preferences), "last-location-bar", &type_name, NULL);
+  type = g_type_from_name (type_name);
+  g_free (type_name);
+
+  /* activate the selected location bar */
+  action = gtk_action_group_get_action (window->action_group, "view-location-bar-buttons");
+  exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), g_type_is_a (type, THUNAR_TYPE_LOCATION_BAR) ? type : G_TYPE_NONE);
+  g_signal_connect (G_OBJECT (action), "changed", G_CALLBACK (thunar_window_action_location_bar_changed), window);
+  thunar_window_action_location_bar_changed (GTK_RADIO_ACTION (action), GTK_RADIO_ACTION (action), window);
+
+  /* determine the selected view */
+  g_object_get (G_OBJECT (window->preferences), "last-view", &type_name, NULL);
+  type = g_type_from_name (type_name);
+  g_free (type_name);
+
+  /* activate the selected view */
+  action = gtk_action_group_get_action (window->action_group, "view-as-icons");
+  exo_gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), g_type_is_a (type, THUNAR_TYPE_VIEW) ? type : THUNAR_TYPE_ICON_VIEW);
+  g_signal_connect (G_OBJECT (action), "changed", G_CALLBACK (thunar_window_action_view_changed), window);
+  thunar_window_action_view_changed (GTK_RADIO_ACTION (action), GTK_RADIO_ACTION (action), window);
+}
+
+
+
+static void
+thunar_window_dispose (GObject *object)
+{
+  ThunarWindow *window = THUNAR_WINDOW (object);
+
+  /* disconnect from the current-directory */
+  thunar_window_set_current_directory (window, NULL);
+
+  (*G_OBJECT_CLASS (thunar_window_parent_class)->dispose) (object);
+}
+
+
+
+static void
+thunar_window_finalize (GObject *object)
+{
+  ThunarWindow *window = THUNAR_WINDOW (object);
+
+  /* drop our references on the menu_item_selected()/menu_item_deselected() closures */
+  g_closure_unref (window->menu_item_deselected_closure);
+  g_closure_unref (window->menu_item_selected_closure);
+
+  /* disconnect from the ui manager */
+  g_signal_handlers_disconnect_matched (G_OBJECT (window->ui_manager), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, window);
+  g_object_unref (G_OBJECT (window->ui_manager));
+
+  g_object_unref (G_OBJECT (window->action_group));
+  g_object_unref (G_OBJECT (window->icon_factory));
+  g_object_unref (G_OBJECT (window->history));
+
+  /* release the preferences reference */
+  g_object_unref (G_OBJECT (window->preferences));
+
+  (*G_OBJECT_CLASS (thunar_window_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_window_get_property (GObject    *object,
+                            guint       prop_id,
+                            GValue     *value,
+                            GParamSpec *pspec)
+{
+  ThunarWindow *window = THUNAR_WINDOW (object);
+  GtkAction    *action;
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      g_value_set_object (value, thunar_window_get_current_directory (window));
+      break;
+
+    case PROP_SHOW_HIDDEN:
+      action = gtk_action_group_get_action (window->action_group, "show-hidden");
+      g_value_set_boolean (value, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+      break;
+
+    case PROP_UI_MANAGER:
+      g_value_set_object (value, window->ui_manager);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_window_set_property (GObject            *object,
+                            guint               prop_id,
+                            const GValue       *value,
+                            GParamSpec         *pspec)
+{
+  ThunarWindow *window = THUNAR_WINDOW (object);
+
+  switch (prop_id)
+    {
+    case PROP_CURRENT_DIRECTORY:
+      thunar_window_set_current_directory (window, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_window_realize (GtkWidget *widget)
+{
+  ThunarWindow *window = THUNAR_WINDOW (widget);
+
+  /* let the GtkWidget class perform the realize operation */
+  (*GTK_WIDGET_CLASS (thunar_window_parent_class)->realize) (widget);
+
+  /* connect to the clipboard manager of the new display and be sure to redraw the window
+   * whenever the clipboard contents change to make sure we always display up2date state.
+   */
+  window->clipboard = thunar_clipboard_manager_get_for_display (gtk_widget_get_display (widget));
+  g_signal_connect_swapped (G_OBJECT (window->clipboard), "changed",
+                            G_CALLBACK (gtk_widget_queue_draw), widget);
+}
+
+
+
+static void
+thunar_window_unrealize (GtkWidget *widget)
+{
+  ThunarWindow *window = THUNAR_WINDOW (widget);
+
+  /* disconnect from the clipboard manager */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (window->clipboard), gtk_widget_queue_draw, widget);
+  g_object_unref (G_OBJECT (window->clipboard));
+
+  /* let the GtkWidget class unrealize the window */
+  (*GTK_WIDGET_CLASS (thunar_window_parent_class)->unrealize) (widget);
+}
+
+
+
+static void
+thunar_window_action_open_new_window (GtkAction    *action,
+                                      ThunarWindow *window)
+{
+  ThunarApplication *application;
+
+  application = thunar_application_get ();
+  thunar_application_open_window (application, window->current_directory,
+                                  gtk_widget_get_screen (GTK_WIDGET (window)));
+  g_object_unref (G_OBJECT (application));
+}
+
+
+
+static void
+thunar_window_action_close_all_windows (GtkAction    *action,
+                                        ThunarWindow *window)
+{
+  ThunarApplication *application;
+  GList             *windows;
+
+  /* query the list of currently open windows */
+  application = thunar_application_get ();
+  windows = thunar_application_get_windows (application);
+  g_object_unref (G_OBJECT (application));
+
+  /* destroy all open windows */
+  g_list_foreach (windows, (GFunc) gtk_widget_destroy, NULL);
+  g_list_free (windows);
+}
+
+
+
+static void
+thunar_window_action_close (GtkAction    *action,
+                            ThunarWindow *window)
+{
+  gtk_widget_destroy (GTK_WIDGET (window));
+}
+
+
+
+static void
+thunar_window_action_location_bar_changed (GtkRadioAction *action,
+                                           GtkRadioAction *current,
+                                           ThunarWindow   *window)
+{
+  GtkWidget *widget;
+  GType      type;
+
+  /* drop the previous location bar (if any) */
+  widget = gtk_bin_get_child (GTK_BIN (window->location_bar));
+  if (G_LIKELY (widget != NULL))
+    gtk_widget_destroy (widget);
+
+  /* determine the new type of location bar */
+  type = gtk_radio_action_get_current_value (action);
+
+  /* activate the new location bar */
+  if (G_LIKELY (type != G_TYPE_NONE))
+    {
+      /* initialize the new location bar widget */
+      widget = g_object_new (type, NULL);
+      g_signal_connect_swapped (G_OBJECT (widget), "change-directory",
+                                G_CALLBACK (thunar_window_set_current_directory), window);
+      exo_binding_new (G_OBJECT (window), "current-directory",
+                       G_OBJECT (widget), "current-directory");
+      gtk_container_add (GTK_CONTAINER (window->location_bar), widget);
+      gtk_widget_show (widget);
+
+      /* display the location bar container */
+      gtk_widget_show (window->location_bar);
+    }
+  else
+    {
+      /* hide the location bar container */
+      gtk_widget_hide (window->location_bar);
+    }
+
+  /* remember the setting */
+  g_object_set (G_OBJECT (window->preferences), "last-location-bar", g_type_name (type), NULL);
+}
+
+
+
+static void
+thunar_window_action_side_pane_changed (GtkRadioAction *action,
+                                        GtkRadioAction *current,
+                                        ThunarWindow   *window)
+{
+  GtkWidget *widget;
+  GType      type;
+
+  /* drop the previous side pane (if any) */
+  widget = gtk_paned_get_child1 (GTK_PANED (window->paned));
+  if (G_LIKELY (widget != NULL))
+    gtk_widget_destroy (widget);
+
+  /* determine the new type of side pane */
+  type = gtk_radio_action_get_current_value (action);
+  if (G_LIKELY (type != G_TYPE_NONE))
+    {
+      widget = g_object_new (type, NULL);
+      exo_binding_new (G_OBJECT (window), "current-directory", G_OBJECT (widget), "current-directory");
+      g_signal_connect_swapped (G_OBJECT (widget), "change-directory", G_CALLBACK (thunar_window_set_current_directory), window);
+      gtk_paned_pack1 (GTK_PANED (window->paned), widget, FALSE, FALSE);
+      gtk_widget_show (widget);
+    }
+
+  /* remember the setting */
+  g_object_set (G_OBJECT (window->preferences), "last-side-pane", g_type_name (type), NULL);
+}
+
+
+
+static void
+thunar_window_action_view_changed (GtkRadioAction *action,
+                                   GtkRadioAction *current,
+                                   ThunarWindow   *window)
+{
+  GType type;
+
+  /* drop the previous view (if any) */
+  if (G_LIKELY (window->view != NULL))
+    {
+      /* destroy and disconnect the previous view */
+      gtk_widget_destroy (window->view);
+
+      /* update the UI (else GtkUIManager will crash on merging) */
+      gtk_ui_manager_ensure_update (window->ui_manager);
+    }
+
+  /* determine the new type of view */
+  type = gtk_radio_action_get_current_value (action);
+
+  /* allocate a new view of the requested type */
+  if (G_LIKELY (type != G_TYPE_NONE))
+    {
+      window->view = g_object_new (type, "ui-manager", window->ui_manager, NULL);
+      g_signal_connect (G_OBJECT (window->view), "notify::loading", G_CALLBACK (thunar_window_notify_loading), window);
+      g_signal_connect_swapped (G_OBJECT (window->view), "change-directory", G_CALLBACK (thunar_window_set_current_directory), window);
+      exo_binding_new (G_OBJECT (window), "current-directory", G_OBJECT (window->view), "current-directory");
+      exo_binding_new (G_OBJECT (window), "show-hidden", G_OBJECT (window->view), "show-hidden");
+      exo_binding_new (G_OBJECT (window->view), "loading", G_OBJECT (window->statusbar), "loading");
+      exo_binding_new (G_OBJECT (window->view), "statusbar-text", G_OBJECT (window->statusbar), "text");
+      gtk_container_add (GTK_CONTAINER (window->view_container), window->view);
+      gtk_widget_grab_focus (window->view);
+      gtk_widget_show (window->view);
+    }
+  else
+    {
+      /* this should not happen under normal conditions */
+      window->view = NULL;
+    }
+
+  /* remember the setting */
+  g_object_set (G_OBJECT (window->preferences), "last-view", g_type_name (type), NULL);
+}
+
+
+
+static void
+thunar_window_action_go_up (GtkAction    *action,
+                            ThunarWindow *window)
+{
+  ThunarFile *parent;
+
+  // FIXME: error handling
+  parent = thunar_file_get_parent (window->current_directory, NULL);
+  thunar_window_set_current_directory (window, parent);
+  g_object_unref (G_OBJECT (parent));
+}
+
+
+
+static void
+thunar_window_action_open_home (GtkAction    *action,
+                                ThunarWindow *window)
+{
+  ThunarVfsPath *home_path;
+  ThunarFile    *home_file;
+  GError        *error = NULL;
+
+  g_return_if_fail (GTK_IS_ACTION (action));
+  g_return_if_fail (THUNAR_IS_WINDOW (window));
+
+  /* determine the path to the home directory */
+  home_path = thunar_vfs_path_get_for_home ();
+
+  /* determine the file for the home directory */
+  home_file = thunar_file_get_for_path (home_path, &error);
+  if (G_UNLIKELY (home_file == NULL))
+    {
+      /* display an error to the user */
+      thunar_dialogs_show_error (GTK_WIDGET (window), error, _("Failed to open home directory"));
+      g_error_free (error);
+    }
+  else
+    {
+      /* open the home folder */
+      thunar_window_set_current_directory (window, home_file);
+      g_object_unref (G_OBJECT (home_file));
+    }
+
+  /* release our reference on the home path */
+  thunar_vfs_path_unref (home_path);
+}
+
+
+
+static void
+thunar_window_action_open_location (GtkAction    *action,
+                                    ThunarWindow *window)
+{
+  GtkWidget *dialog;
+  GtkWidget *widget;
+
+  /* bring up the "Open Location"-dialog if the window has no location bar or the location bar
+   * in the window does not support text entry by the user.
+   */
+  widget = gtk_bin_get_child (GTK_BIN (window->location_bar));
+  if (widget == NULL || !thunar_location_bar_accept_focus (THUNAR_LOCATION_BAR (widget)))
+    {
+      dialog = thunar_location_dialog_new ();
+      gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+      gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+      gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
+      thunar_location_dialog_set_selected_file (THUNAR_LOCATION_DIALOG (dialog), thunar_window_get_current_directory (window));
+      if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+        thunar_window_set_current_directory (window, thunar_location_dialog_get_selected_file (THUNAR_LOCATION_DIALOG (dialog)));
+      gtk_widget_destroy (dialog);
+    }
+}
+
+
+
+static void
+thunar_window_action_about (GtkAction    *action,
+                            ThunarWindow *window)
+{
+  static const gchar *authors[] =
+  {
+    "Benedikt Meurer <benny at xfce.org>",
+    NULL,
+  };
+
+  static const gchar license[] =
+    "This program is free software; you can redistribute it and/or modify it\n"
+    "under the terms of the GNU General Public License as published by the Free\n"
+    "Software Foundation; either version 2 of the License, or (at your option)\n"
+    "any later version.\n"
+    "\n"
+    "This program is distributed in the hope that it will be useful, but WITHOUT\n"
+    "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
+    "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
+    "more details.\n"
+    "\n"
+    "You should have received a copy of the GNU General Public License along with\n"
+    "this program; if not, write to the Free Software Foundation, Inc., 59 Temple\n"
+    "Place, Suite 330, Boston, MA  02111-1307  USA.\n";
+
+  GdkPixbuf *logo;
+  
+  /* try to load the about logo */
+  logo = gdk_pixbuf_new_from_file (DATADIR "/pixmaps/Thunar/Thunar-about-logo.png", NULL);
+
+  /* open the about dialog */
+  gtk_about_dialog_set_email_hook ((gpointer) exo_noop, NULL, NULL);
+  gtk_about_dialog_set_url_hook ((gpointer) exo_noop, NULL, NULL);
+  gtk_show_about_dialog (GTK_WINDOW (window),
+                         "authors", authors,
+                         "comments", _("Thunar is a fast and easy to use file manager\nfor the Xfce Desktop Environment."),
+                         "copyright", "Copyright \302\251 2004-2005 Benedikt Meurer",
+                         "license", license,
+                         "logo", logo,
+                         "name", PACKAGE_NAME,
+                         "translator-credits", _("translator-credits"),
+                         "version", PACKAGE_VERSION,
+                         "website", "http://thunar.xfce.org/",
+                         NULL);
+
+  /* release the about logo (if any) */
+  if (G_LIKELY (logo != NULL))
+    g_object_unref (G_OBJECT (logo));
+}
+
+
+
+static void
+thunar_window_action_show_hidden (GtkToggleAction *action,
+                                  ThunarWindow    *window)
+{
+  g_return_if_fail (GTK_IS_TOGGLE_ACTION (action));
+  g_return_if_fail (THUNAR_IS_WINDOW (window));
+
+  /* just emit the "notify" signal for the "show-hidden"
+   * signal and the view will automatically sync its state.
+   */
+  g_object_notify (G_OBJECT (window), "show-hidden");
+}
+
+
+
+static void
+thunar_window_current_directory_changed (ThunarFile   *current_directory,
+                                         ThunarWindow *window)
+{
+  GdkPixbuf *icon;
+
+  g_return_if_fail (THUNAR_IS_WINDOW (window));
+  g_return_if_fail (THUNAR_IS_FILE (current_directory));
+  g_return_if_fail (window->current_directory == current_directory);
+
+  /* set window title and icon */
+  icon = thunar_icon_factory_load_file_icon (window->icon_factory, current_directory, THUNAR_FILE_ICON_STATE_DEFAULT, 48);
+  gtk_window_set_title (GTK_WINDOW (window), thunar_file_get_special_name (current_directory));
+  gtk_window_set_icon (GTK_WINDOW (window), icon);
+  g_object_unref (G_OBJECT (icon));
+}
+
+
+
+static void
+thunar_window_connect_proxy (GtkUIManager *manager,
+                             GtkAction    *action,
+                             GtkWidget    *proxy,
+                             ThunarWindow *window)
+{
+  /* we want to get informed when the user hovers a menu item */
+  if (GTK_IS_MENU_ITEM (proxy))
+    {
+      g_signal_connect_closure (G_OBJECT (proxy), "select", window->menu_item_selected_closure, FALSE);
+      g_signal_connect_closure (G_OBJECT (proxy), "deselect", window->menu_item_deselected_closure, FALSE);
+    }
+}
+
+
+
+static void
+thunar_window_disconnect_proxy (GtkUIManager *manager,
+                                GtkAction    *action,
+                                GtkWidget    *proxy,
+                                ThunarWindow *window)
+{
+  /* undo what we did in connect_proxy() */
+  if (GTK_IS_MENU_ITEM (proxy))
+    {
+      g_signal_handlers_disconnect_matched (G_OBJECT (proxy), G_SIGNAL_MATCH_CLOSURE, 0, 0, window->menu_item_selected_closure, NULL, NULL);
+      g_signal_handlers_disconnect_matched (G_OBJECT (proxy), G_SIGNAL_MATCH_CLOSURE, 0, 0, window->menu_item_deselected_closure, NULL, NULL);
+    }
+}
+
+
+
+static void
+thunar_window_menu_item_selected (GtkWidget    *menu_item,
+                                  ThunarWindow *window)
+{
+  GtkAction *action;
+  gchar     *tooltip;
+
+  /* determine the action for the menu item */
+  action = g_object_get_data (G_OBJECT (menu_item), "gtk-action");
+  if (G_UNLIKELY (action == NULL))
+    return;
+
+  /* determine the tooltip from the action */
+  g_object_get (G_OBJECT (action), "tooltip", &tooltip, NULL);
+  if (G_LIKELY (tooltip != NULL))
+    {
+      gtk_statusbar_push (GTK_STATUSBAR (window->statusbar), window->menu_item_tooltip_id, tooltip);
+      g_free (tooltip);
+    }
+}
+
+
+
+static void
+thunar_window_menu_item_deselected (GtkWidget    *menu_item,
+                                    ThunarWindow *window)
+{
+  /* drop the last tooltip from the statusbar */
+  gtk_statusbar_pop (GTK_STATUSBAR (window->statusbar), window->menu_item_tooltip_id);
+}
+
+
+
+static void
+thunar_window_notify_loading (ThunarView   *view,
+                              GParamSpec   *pspec,
+                              ThunarWindow *window)
+{
+  GdkCursor *cursor;
+
+  g_return_if_fail (THUNAR_IS_VIEW (view));
+  g_return_if_fail (THUNAR_IS_WINDOW (window));
+  g_return_if_fail (THUNAR_VIEW (window->view) == view);
+
+  if (GTK_WIDGET_REALIZED (window))
+    {
+      /* setup the proper cursor */
+      if (thunar_view_get_loading (view))
+        {
+          cursor = gdk_cursor_new (GDK_WATCH);
+          gdk_window_set_cursor (GTK_WIDGET (window)->window, cursor);
+          gdk_cursor_unref (cursor);
+        }
+      else
+        {
+          gdk_window_set_cursor (GTK_WIDGET (window)->window, NULL);
+        }
+    }
+}
+  
+
+
+/**
+ * thunar_window_new:
+ *
+ * Allocates a new #ThunarWindow instance, which isn't
+ * associated with any directory.
+ *
+ * Return value: the newly allocated #ThunarWindow instance.
+ **/
+GtkWidget*
+thunar_window_new (void)
+{
+  return g_object_new (THUNAR_TYPE_WINDOW, NULL);
+}
+
+
+
+/**
+ * thunar_window_get_current_directory:
+ * @window : a #ThunarWindow instance.
+ * 
+ * Queries the #ThunarFile instance, which represents the directory
+ * currently displayed within @window. %NULL is returned if @window
+ * is not currently associated with any directory.
+ *
+ * Return value: the directory currently displayed within @window or %NULL.
+ **/
+ThunarFile*
+thunar_window_get_current_directory (ThunarWindow *window)
+{
+  g_return_val_if_fail (THUNAR_IS_WINDOW (window), NULL);
+  return window->current_directory;
+}
+
+
+
+/**
+ * thunar_window_set_current_directory:
+ * @window            : a #ThunarWindow instance.
+ * @current_directory : the new directory or %NULL.
+ **/
+void
+thunar_window_set_current_directory (ThunarWindow *window,
+                                     ThunarFile   *current_directory)
+{
+  g_return_if_fail (THUNAR_IS_WINDOW (window));
+  g_return_if_fail (current_directory == NULL || THUNAR_IS_FILE (current_directory));
+
+  /* check if we already display the requested directory */
+  if (G_UNLIKELY (window->current_directory == current_directory))
+    return;
+
+  /* disconnect from the previously active directory */
+  if (G_LIKELY (window->current_directory != NULL))
+    {
+      g_signal_handlers_disconnect_by_func (G_OBJECT (window->current_directory), thunar_window_current_directory_changed, window);
+      g_object_unref (G_OBJECT (window->current_directory));
+    }
+
+  window->current_directory = current_directory;
+
+  /* connect to the new directory */
+  if (G_LIKELY (current_directory != NULL))
+    {
+      /* take a reference on the file and connect the "changed" signal */
+      g_signal_connect (G_OBJECT (current_directory), "changed", G_CALLBACK (thunar_window_current_directory_changed), window);
+      g_object_ref (G_OBJECT (current_directory));
+    
+      /* update window icon and title */
+      thunar_window_current_directory_changed (current_directory, window);
+    }
+
+  /* enable the 'Open new window' action if we have a valid directory */
+  thunar_gtk_action_group_set_action_sensitive (window->action_group, "open-new-window", (current_directory != NULL));
+
+  /* enable the 'Up' action if possible for the new directory */
+  thunar_gtk_action_group_set_action_sensitive (window->action_group, "open-parent", (current_directory != NULL
+                                                && thunar_file_has_parent (current_directory)));
+
+  /* tell everybody that we have a new "current-directory",
+   * we do this first so other widgets display the new
+   * state already while the folder view is loading.
+   */
+  g_object_notify (G_OBJECT (window), "current-directory");
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar/thunar-window.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,47 @@
+/* $Id: thunar-window.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * 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
+ */
+
+#ifndef __THUNAR_WINDOW_H__
+#define __THUNAR_WINDOW_H__
+
+#include <thunar/thunar-folder.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarWindowClass ThunarWindowClass;
+typedef struct _ThunarWindow      ThunarWindow;
+
+#define THUNAR_TYPE_WINDOW            (thunar_window_get_type ())
+#define THUNAR_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_WINDOW, ThunarWindow))
+#define THUNAR_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_WINDOW, ThunarWindowClass))
+#define THUNAR_IS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_TYPE_WINDOW))
+#define THUNAR_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_TYPE_WINDOW))
+#define THUNAR_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_TYPE_WINDOW, ThunarWindowClass))
+
+GType       thunar_window_get_type              (void) G_GNUC_CONST;
+
+GtkWidget  *thunar_window_new                   (void);
+
+ThunarFile *thunar_window_get_current_directory (ThunarWindow *window);
+void        thunar_window_set_current_directory (ThunarWindow *window,
+                                                 ThunarFile   *current_directory);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_WINDOW_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,216 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+INCLUDES =								\
+	-I$(top_srcdir)							\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"thunar-vfs\"					\
+	-DSN_API_NOT_YET_FROZEN						\
+	-DTHUNAR_VFS_COMPILATION					\
+	$(PLATFORM_CPPFLAGS)
+
+lib_LTLIBRARIES =							\
+	libthunar-vfs-1.la
+
+libthunar_vfs_headers =							\
+	thunar-vfs-config.h						\
+	thunar-vfs-info.h						\
+	thunar-vfs-interactive-job.h					\
+	thunar-vfs-job.h						\
+	thunar-vfs-mime-application.h					\
+	thunar-vfs-mime-database.h					\
+	thunar-vfs-mime-info.h						\
+	thunar-vfs-monitor.h						\
+	thunar-vfs-path.h						\
+	thunar-vfs-thumb.h						\
+	thunar-vfs-types.h						\
+	thunar-vfs-user.h						\
+	thunar-vfs-util.h						\
+	thunar-vfs-volume.h
+
+libthunar_vfs_public_built_sources =					\
+	thunar-vfs-enum-types.h
+
+libthunar_vfs_built_sources =						\
+	$(libthunar_vfs_public_built_sources)				\
+	thunar-vfs-alias.h						\
+	thunar-vfs-aliasdef.c						\
+	thunar-vfs-enum-types.c						\
+	thunar-vfs-marshal.c						\
+	thunar-vfs-marshal.h
+
+libthunar_vfs_includedir = 						\
+	$(includedir)/thunar-vfs-$(THUNAR_VERSION_API)/thunar-vfs
+libthunar_vfs_include_HEADERS =						\
+	$(libthunar_vfs_headers)					\
+	$(libthunar_vfs_public_built_sources)				\
+	thunar-vfs.h
+
+libthunar_vfs_1_la_SOURCES =						\
+	$(libthunar_vfs_built_sources)					\
+	$(libthunar_vfs_headers)					\
+	thunar-vfs-config.c						\
+	thunar-vfs-exec.c						\
+	thunar-vfs-exec.h						\
+	thunar-vfs-info.c						\
+	thunar-vfs-interactive-job.c					\
+	thunar-vfs-job.c						\
+	thunar-vfs-link-job.c						\
+	thunar-vfs-link-job.h						\
+	thunar-vfs-listdir-job.c					\
+	thunar-vfs-listdir-job.h					\
+	thunar-vfs-mime-application.c					\
+	thunar-vfs-mime-cache.c						\
+	thunar-vfs-mime-cache.h						\
+	thunar-vfs-mime-database.c					\
+	thunar-vfs-mime-info.c						\
+	thunar-vfs-mime-legacy.c					\
+	thunar-vfs-mime-legacy.h					\
+	thunar-vfs-mime-parser.h					\
+	thunar-vfs-mime-parser.c					\
+	thunar-vfs-mime-provider.c					\
+	thunar-vfs-mime-provider.h					\
+	thunar-vfs-mime-sniffer.c					\
+	thunar-vfs-mime-sniffer.h					\
+	thunar-vfs-mkdir-job.c						\
+	thunar-vfs-mkdir-job.h						\
+	thunar-vfs-monitor.c						\
+	thunar-vfs-path.c						\
+	thunar-vfs-scandir.c						\
+	thunar-vfs-scandir.h						\
+	thunar-vfs-thumb-jpeg.c						\
+	thunar-vfs-thumb-jpeg.h						\
+	thunar-vfs-thumb.c						\
+	thunar-vfs-transfer-job.c					\
+	thunar-vfs-transfer-job.h					\
+	thunar-vfs-unlink-job.c						\
+	thunar-vfs-unlink-job.h						\
+	thunar-vfs-user.c						\
+	thunar-vfs-util.c						\
+	thunar-vfs-volume.c						\
+	thunar-vfs-volume-impl.c					\
+	thunar-vfs-volume-impl.h					\
+	thunar-vfs-xfer.c						\
+	thunar-vfs-xfer.h						\
+	thunar-vfs.c
+
+libthunar_vfs_1_la_CFLAGS =						\
+	$(EXO_CFLAGS)							\
+	$(GCONF_CFLAGS)							\
+	$(GTHREAD_CFLAGS)						\
+	$(LIBFAM_CFLAGS)						\
+	$(LIBJPEG_CFLAGS)						\
+	$(LIBPNG_CFLAGS)						\
+	$(LIBSTARTUP_NOTIFICATION_CFLAGS)				\
+	$(PLATFORM_CFLAGS)
+
+libthunar_vfs_1_la_LDFLAGS =						\
+	-export-dynamic							\
+	-export-symbols-regex "^[^_].*"					\
+	-version-info $(THUNAR_VERINFO)					\
+	$(PLATFORM_LDFLAGS)
+
+libthunar_vfs_1_la_LIBADD =						\
+	$(EXO_LIBS)							\
+	$(GCONF_LIBS)							\
+	$(GTHREAD_LIBS)							\
+	$(LIBFAM_LIBS)							\
+	$(LIBJPEG_LIBS)							\
+	$(LIBPNG_LIBS)							\
+	$(LIBSTARTUP_NOTIFICATION_LIBS)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = thunar-vfs-1.pc
+
+EXTRA_DIST =								\
+	abicheck.sh							\
+	make-thunar-vfs-alias.pl					\
+	thunar-vfs.symbols						\
+	thunar-vfs-alias.h						\
+	thunar-vfs-aliasdef.c						\
+	thunar-vfs-marshal.list						\
+	thunar-vfs-volume-bsd.c						\
+	thunar-vfs-volume-bsd.h						\
+	thunar-vfs-volume-sysv.c					\
+	thunar-vfs-volume-sysv.h
+
+##
+## Rules to auto-generate built sources
+##
+## This is a bit tricky with automake, and non-trivial to implement. The
+## rules below seem to work fine and don't seem to break the build, but
+## they are only enabled in maintainer mode, so arbitrary users don't get
+## trapped in automake's oddities. Therefore we ship the autogenerated
+## files as part of the dist tarball.
+##
+if MAINTAINER_MODE
+CLEANFILES =								\
+	actual-abi							\
+	expected-abi							\
+	xgen-tvetc							\
+	xgen-tveth							\
+	xgen-tvmc							\
+	xgen-tvmh
+
+DISTCLEANFILES =							\
+	stamp-thunar-vfs-enum-types.h					\
+	stamp-thunar-vfs-marshal.h					\
+	$(libthunar_vfs_built_sources)
+
+BUILT_SOURCES =								\
+	$(libthunar_vfs_built_sources)
+
+if HAVE_GNUC_VISIBILITY
+TESTS =									\
+	abicheck.sh
+endif
+
+thunar-vfs-alias.h: make-thunar-vfs-alias.pl thunar-vfs.symbols
+	$(PERL) $(srcdir)/make-thunar-vfs-alias.pl < $(srcdir)/thunar-vfs.symbols > thunar-vfs-alias.h
+
+thunar-vfs-aliasdef.c: make-thunar-vfs-alias.pl thunar-vfs.symbols
+	$(PERL) $(srcdir)/make-thunar-vfs-alias.pl -def < $(srcdir)/thunar-vfs.symbols > thunar-vfs-aliasdef.c
+
+thunar-vfs-enum-types.h: stamp-thunar-vfs-enum-types.h
+	@true
+stamp-thunar-vfs-enum-types.h: $(libthunar_vfs_headers) Makefile
+	( cd $(srcdir) && glib-mkenums \
+		--fhead "#ifndef __THUNAR_VFS_ENUM_TYPES_H__\n#define __THUNAR_VFS_ENUM_TYPES_H__\n#include <exo/exo.h>\nG_BEGIN_DECLS\n" \
+		--fprod "/* enumerations from \"@filename@\" */\n" \
+		--vhead "GType @enum_name at _get_type (void) G_GNUC_CONST;\n#define THUNAR_VFS_TYPE_ at ENUMSHORT@ (@enum_name at _get_type())\n" \
+		--ftail "G_END_DECLS\n\n#endif /* !__THUNAR_VFS_ENUM_TYPES_H__ */" \
+		$(libthunar_vfs_headers) ) >> xgen-tveth \
+	&& ( cmp -s xgen-tveth thunar-vfs-enum-types.h || cp xgen-tveth thunar-vfs-enum-types.h ) \
+	&& rm -f xgen-tveth \
+	&& echo timestamp > $(@F)
+thunar-vfs-enum-types.c: $(libthunar_vfs_headers) Makefile
+	( cd $(srcdir) && glib-mkenums \
+		--fhead "#undef GTK_DISABLE_DEPRECATED\n#define GTK_ENABLE_BROKEN\n#include <thunar-vfs/thunar-vfs.h>\n#include <thunar-vfs/thunar-vfs-alias.h>" \
+		--fprod "\n/* enumerations from \"@filename@\" */" \
+		--vhead "GType\n at enum_name@_get_type (void)\n{\n\tstatic GType type = 0;\n\tif (type == 0) {\n\tstatic const G at Type@Value values[] = {"\
+		--vprod "\t{ @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+		--vtail "\t{ 0, NULL, NULL }\n\t};\n\ttype = g_ at type@_register_static (\"@EnumName@\", values);\n  }\n\treturn type;\n}\n" \
+		--ftail "\n#define __THUNAR_VFS_ENUM_TYPES_C__\n#include \"thunar-vfs-aliasdef.c\"\n" \
+		$(libthunar_vfs_headers) ) >> xgen-tvetc \
+	&& cp xgen-tvetc thunar-vfs-enum-types.c \
+	&& rm -f xgen-tvetc
+
+thunar-vfs-marshal.h: stamp-thunar-vfs-marshal.h
+	@true
+stamp-thunar-vfs-marshal.h: thunar-vfs-marshal.list Makefile
+	( cd $(srcdir) && glib-genmarshal \
+		--prefix=_thunar_vfs_marshal \
+		--header thunar-vfs-marshal.list ) >> xgen-tvmh \
+	&& ( cmp -s xgen-tvmh thunar-vfs-marshal.h || cp xgen-tvmh thunar-vfs-marshal.h ) \
+	&& rm -f xgen-tvmh \
+	&& echo timestamp > $(@F)
+
+thunar-vfs-marshal.c: thunar-vfs-marshal.list Makefile
+	( cd $(srcdir) && glib-genmarshal \
+		--prefix=_thunar_vfs_marshal \
+		--body thunar-vfs-marshal.list ) >> xgen-tvmc \
+	&& cp xgen-tvmc thunar-vfs-marshal.c \
+	&& rm -f xgen-tvmc
+endif
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1191 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+
+
+SOURCES = $(libthunar_vfs_1_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = thunar-vfs
+DIST_COMMON = $(libthunar_vfs_include_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/thunar-vfs-1.pc.in \
+	$(srcdir)/thunar-vfs-config.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 = thunar-vfs-1.pc thunar-vfs-config.h \
+	thunar-vfs-volume-impl.c thunar-vfs-volume-impl.h
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+	"$(DESTDIR)$(libthunar_vfs_includedir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libthunar_vfs_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__objects_1 =
+am__objects_2 = $(am__objects_1) \
+	libthunar_vfs_1_la-thunar-vfs-aliasdef.lo \
+	libthunar_vfs_1_la-thunar-vfs-enum-types.lo \
+	libthunar_vfs_1_la-thunar-vfs-marshal.lo
+am_libthunar_vfs_1_la_OBJECTS = $(am__objects_2) $(am__objects_1) \
+	libthunar_vfs_1_la-thunar-vfs-config.lo \
+	libthunar_vfs_1_la-thunar-vfs-exec.lo \
+	libthunar_vfs_1_la-thunar-vfs-info.lo \
+	libthunar_vfs_1_la-thunar-vfs-interactive-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-link-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-listdir-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-application.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-cache.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-database.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-info.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-parser.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-provider.lo \
+	libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo \
+	libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-monitor.lo \
+	libthunar_vfs_1_la-thunar-vfs-path.lo \
+	libthunar_vfs_1_la-thunar-vfs-scandir.lo \
+	libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo \
+	libthunar_vfs_1_la-thunar-vfs-thumb.lo \
+	libthunar_vfs_1_la-thunar-vfs-transfer-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-unlink-job.lo \
+	libthunar_vfs_1_la-thunar-vfs-user.lo \
+	libthunar_vfs_1_la-thunar-vfs-util.lo \
+	libthunar_vfs_1_la-thunar-vfs-volume.lo \
+	libthunar_vfs_1_la-thunar-vfs-volume-impl.lo \
+	libthunar_vfs_1_la-thunar-vfs-xfer.lo \
+	libthunar_vfs_1_la-thunar-vfs.lo
+libthunar_vfs_1_la_OBJECTS = $(am_libthunar_vfs_1_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libthunar_vfs_1_la_SOURCES)
+DIST_SOURCES = $(libthunar_vfs_1_la_SOURCES)
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
+libthunar_vfs_includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libthunar_vfs_include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = \
+	-I$(top_srcdir)							\
+	-DEXO_API_SUBJECT_TO_CHANGE					\
+	-DEXO_DISABLE_DEPRECATED					\
+	-DG_LOG_DOMAIN=\"thunar-vfs\"					\
+	-DSN_API_NOT_YET_FROZEN						\
+	-DTHUNAR_VFS_COMPILATION					\
+	$(PLATFORM_CPPFLAGS)
+
+lib_LTLIBRARIES = \
+	libthunar-vfs-1.la
+
+libthunar_vfs_headers = \
+	thunar-vfs-config.h						\
+	thunar-vfs-info.h						\
+	thunar-vfs-interactive-job.h					\
+	thunar-vfs-job.h						\
+	thunar-vfs-mime-application.h					\
+	thunar-vfs-mime-database.h					\
+	thunar-vfs-mime-info.h						\
+	thunar-vfs-monitor.h						\
+	thunar-vfs-path.h						\
+	thunar-vfs-thumb.h						\
+	thunar-vfs-types.h						\
+	thunar-vfs-user.h						\
+	thunar-vfs-util.h						\
+	thunar-vfs-volume.h
+
+libthunar_vfs_public_built_sources = \
+	thunar-vfs-enum-types.h
+
+libthunar_vfs_built_sources = \
+	$(libthunar_vfs_public_built_sources)				\
+	thunar-vfs-alias.h						\
+	thunar-vfs-aliasdef.c						\
+	thunar-vfs-enum-types.c						\
+	thunar-vfs-marshal.c						\
+	thunar-vfs-marshal.h
+
+libthunar_vfs_includedir = \
+	$(includedir)/thunar-vfs-$(THUNAR_VERSION_API)/thunar-vfs
+
+libthunar_vfs_include_HEADERS = \
+	$(libthunar_vfs_headers)					\
+	$(libthunar_vfs_public_built_sources)				\
+	thunar-vfs.h
+
+libthunar_vfs_1_la_SOURCES = \
+	$(libthunar_vfs_built_sources)					\
+	$(libthunar_vfs_headers)					\
+	thunar-vfs-config.c						\
+	thunar-vfs-exec.c						\
+	thunar-vfs-exec.h						\
+	thunar-vfs-info.c						\
+	thunar-vfs-interactive-job.c					\
+	thunar-vfs-job.c						\
+	thunar-vfs-link-job.c						\
+	thunar-vfs-link-job.h						\
+	thunar-vfs-listdir-job.c					\
+	thunar-vfs-listdir-job.h					\
+	thunar-vfs-mime-application.c					\
+	thunar-vfs-mime-cache.c						\
+	thunar-vfs-mime-cache.h						\
+	thunar-vfs-mime-database.c					\
+	thunar-vfs-mime-info.c						\
+	thunar-vfs-mime-legacy.c					\
+	thunar-vfs-mime-legacy.h					\
+	thunar-vfs-mime-parser.h					\
+	thunar-vfs-mime-parser.c					\
+	thunar-vfs-mime-provider.c					\
+	thunar-vfs-mime-provider.h					\
+	thunar-vfs-mime-sniffer.c					\
+	thunar-vfs-mime-sniffer.h					\
+	thunar-vfs-mkdir-job.c						\
+	thunar-vfs-mkdir-job.h						\
+	thunar-vfs-monitor.c						\
+	thunar-vfs-path.c						\
+	thunar-vfs-scandir.c						\
+	thunar-vfs-scandir.h						\
+	thunar-vfs-thumb-jpeg.c						\
+	thunar-vfs-thumb-jpeg.h						\
+	thunar-vfs-thumb.c						\
+	thunar-vfs-transfer-job.c					\
+	thunar-vfs-transfer-job.h					\
+	thunar-vfs-unlink-job.c						\
+	thunar-vfs-unlink-job.h						\
+	thunar-vfs-user.c						\
+	thunar-vfs-util.c						\
+	thunar-vfs-volume.c						\
+	thunar-vfs-volume-impl.c					\
+	thunar-vfs-volume-impl.h					\
+	thunar-vfs-xfer.c						\
+	thunar-vfs-xfer.h						\
+	thunar-vfs.c
+
+libthunar_vfs_1_la_CFLAGS = \
+	$(EXO_CFLAGS)							\
+	$(GCONF_CFLAGS)							\
+	$(GTHREAD_CFLAGS)						\
+	$(LIBFAM_CFLAGS)						\
+	$(LIBJPEG_CFLAGS)						\
+	$(LIBPNG_CFLAGS)						\
+	$(LIBSTARTUP_NOTIFICATION_CFLAGS)				\
+	$(PLATFORM_CFLAGS)
+
+libthunar_vfs_1_la_LDFLAGS = \
+	-export-dynamic							\
+	-export-symbols-regex "^[^_].*"					\
+	-version-info $(THUNAR_VERINFO)					\
+	$(PLATFORM_LDFLAGS)
+
+libthunar_vfs_1_la_LIBADD = \
+	$(EXO_LIBS)							\
+	$(GCONF_LIBS)							\
+	$(GTHREAD_LIBS)							\
+	$(LIBFAM_LIBS)							\
+	$(LIBJPEG_LIBS)							\
+	$(LIBPNG_LIBS)							\
+	$(LIBSTARTUP_NOTIFICATION_LIBS)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = thunar-vfs-1.pc
+EXTRA_DIST = \
+	abicheck.sh							\
+	make-thunar-vfs-alias.pl					\
+	thunar-vfs.symbols						\
+	thunar-vfs-alias.h						\
+	thunar-vfs-aliasdef.c						\
+	thunar-vfs-marshal.list						\
+	thunar-vfs-volume-bsd.c						\
+	thunar-vfs-volume-bsd.h						\
+	thunar-vfs-volume-sysv.c					\
+	thunar-vfs-volume-sysv.h
+
+ at MAINTAINER_MODE_TRUE@CLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	actual-abi							\
+ at MAINTAINER_MODE_TRUE@	expected-abi							\
+ at MAINTAINER_MODE_TRUE@	xgen-tvetc							\
+ at MAINTAINER_MODE_TRUE@	xgen-tveth							\
+ at MAINTAINER_MODE_TRUE@	xgen-tvmc							\
+ at MAINTAINER_MODE_TRUE@	xgen-tvmh
+
+ at MAINTAINER_MODE_TRUE@DISTCLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	stamp-thunar-vfs-enum-types.h					\
+ at MAINTAINER_MODE_TRUE@	stamp-thunar-vfs-marshal.h					\
+ at MAINTAINER_MODE_TRUE@	$(libthunar_vfs_built_sources)
+
+ at MAINTAINER_MODE_TRUE@BUILT_SOURCES = \
+ at MAINTAINER_MODE_TRUE@	$(libthunar_vfs_built_sources)
+
+ at HAVE_GNUC_VISIBILITY_TRUE@@MAINTAINER_MODE_TRUE at TESTS = \
+ at HAVE_GNUC_VISIBILITY_TRUE@@MAINTAINER_MODE_TRUE@	abicheck.sh
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  thunar-vfs/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  thunar-vfs/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
+thunar-vfs-1.pc: $(top_builddir)/config.status $(srcdir)/thunar-vfs-1.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+thunar-vfs-config.h: $(top_builddir)/config.status $(srcdir)/thunar-vfs-config.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libthunar-vfs-1.la: $(libthunar_vfs_1_la_OBJECTS) $(libthunar_vfs_1_la_DEPENDENCIES) 
+	$(LINK) -rpath $(libdir) $(libthunar_vfs_1_la_LDFLAGS) $(libthunar_vfs_1_la_OBJECTS) $(libthunar_vfs_1_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-aliasdef.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-config.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-enum-types.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-exec.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-info.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-interactive-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-link-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-listdir-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-marshal.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-application.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-cache.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-database.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-info.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-legacy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-parser.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-provider.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-sniffer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mkdir-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-monitor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-path.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-scandir.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-transfer-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-unlink-job.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-user.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume-impl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-xfer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libthunar_vfs_1_la-thunar-vfs-aliasdef.lo: thunar-vfs-aliasdef.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-aliasdef.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-aliasdef.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-aliasdef.lo `test -f 'thunar-vfs-aliasdef.c' || echo '$(srcdir)/'`thunar-vfs-aliasdef.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-aliasdef.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-aliasdef.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-aliasdef.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-aliasdef.c' object='libthunar_vfs_1_la-thunar-vfs-aliasdef.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-aliasdef.lo `test -f 'thunar-vfs-aliasdef.c' || echo '$(srcdir)/'`thunar-vfs-aliasdef.c
+
+libthunar_vfs_1_la-thunar-vfs-enum-types.lo: thunar-vfs-enum-types.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-enum-types.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-enum-types.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-enum-types.lo `test -f 'thunar-vfs-enum-types.c' || echo '$(srcdir)/'`thunar-vfs-enum-types.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-enum-types.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-enum-types.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-enum-types.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-enum-types.c' object='libthunar_vfs_1_la-thunar-vfs-enum-types.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-enum-types.lo `test -f 'thunar-vfs-enum-types.c' || echo '$(srcdir)/'`thunar-vfs-enum-types.c
+
+libthunar_vfs_1_la-thunar-vfs-marshal.lo: thunar-vfs-marshal.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-marshal.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-marshal.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-marshal.lo `test -f 'thunar-vfs-marshal.c' || echo '$(srcdir)/'`thunar-vfs-marshal.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-marshal.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-marshal.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-marshal.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-marshal.c' object='libthunar_vfs_1_la-thunar-vfs-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-marshal.lo `test -f 'thunar-vfs-marshal.c' || echo '$(srcdir)/'`thunar-vfs-marshal.c
+
+libthunar_vfs_1_la-thunar-vfs-config.lo: thunar-vfs-config.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-config.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-config.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-config.lo `test -f 'thunar-vfs-config.c' || echo '$(srcdir)/'`thunar-vfs-config.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-config.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-config.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-config.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-config.c' object='libthunar_vfs_1_la-thunar-vfs-config.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-config.lo `test -f 'thunar-vfs-config.c' || echo '$(srcdir)/'`thunar-vfs-config.c
+
+libthunar_vfs_1_la-thunar-vfs-exec.lo: thunar-vfs-exec.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-exec.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-exec.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-exec.lo `test -f 'thunar-vfs-exec.c' || echo '$(srcdir)/'`thunar-vfs-exec.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-exec.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-exec.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-exec.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-exec.c' object='libthunar_vfs_1_la-thunar-vfs-exec.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-exec.lo `test -f 'thunar-vfs-exec.c' || echo '$(srcdir)/'`thunar-vfs-exec.c
+
+libthunar_vfs_1_la-thunar-vfs-info.lo: thunar-vfs-info.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-info.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-info.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-info.lo `test -f 'thunar-vfs-info.c' || echo '$(srcdir)/'`thunar-vfs-info.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-info.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-info.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-info.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-info.c' object='libthunar_vfs_1_la-thunar-vfs-info.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-info.lo `test -f 'thunar-vfs-info.c' || echo '$(srcdir)/'`thunar-vfs-info.c
+
+libthunar_vfs_1_la-thunar-vfs-interactive-job.lo: thunar-vfs-interactive-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-interactive-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-interactive-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-interactive-job.lo `test -f 'thunar-vfs-interactive-job.c' || echo '$(srcdir)/'`thunar-vfs-interactive-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-interactive-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-interactive-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-interactive-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-interactive-job.c' object='libthunar_vfs_1_la-thunar-vfs-interactive-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-interactive-job.lo `test -f 'thunar-vfs-interactive-job.c' || echo '$(srcdir)/'`thunar-vfs-interactive-job.c
+
+libthunar_vfs_1_la-thunar-vfs-job.lo: thunar-vfs-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-job.lo `test -f 'thunar-vfs-job.c' || echo '$(srcdir)/'`thunar-vfs-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-job.c' object='libthunar_vfs_1_la-thunar-vfs-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-job.lo `test -f 'thunar-vfs-job.c' || echo '$(srcdir)/'`thunar-vfs-job.c
+
+libthunar_vfs_1_la-thunar-vfs-link-job.lo: thunar-vfs-link-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-link-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-link-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-link-job.lo `test -f 'thunar-vfs-link-job.c' || echo '$(srcdir)/'`thunar-vfs-link-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-link-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-link-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-link-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-link-job.c' object='libthunar_vfs_1_la-thunar-vfs-link-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-link-job.lo `test -f 'thunar-vfs-link-job.c' || echo '$(srcdir)/'`thunar-vfs-link-job.c
+
+libthunar_vfs_1_la-thunar-vfs-listdir-job.lo: thunar-vfs-listdir-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-listdir-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-listdir-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-listdir-job.lo `test -f 'thunar-vfs-listdir-job.c' || echo '$(srcdir)/'`thunar-vfs-listdir-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-listdir-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-listdir-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-listdir-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-listdir-job.c' object='libthunar_vfs_1_la-thunar-vfs-listdir-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-listdir-job.lo `test -f 'thunar-vfs-listdir-job.c' || echo '$(srcdir)/'`thunar-vfs-listdir-job.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-application.lo: thunar-vfs-mime-application.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-application.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-application.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-application.lo `test -f 'thunar-vfs-mime-application.c' || echo '$(srcdir)/'`thunar-vfs-mime-application.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-application.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-application.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-application.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-application.c' object='libthunar_vfs_1_la-thunar-vfs-mime-application.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-application.lo `test -f 'thunar-vfs-mime-application.c' || echo '$(srcdir)/'`thunar-vfs-mime-application.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-cache.lo: thunar-vfs-mime-cache.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-cache.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-cache.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-cache.lo `test -f 'thunar-vfs-mime-cache.c' || echo '$(srcdir)/'`thunar-vfs-mime-cache.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-cache.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-cache.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-cache.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-cache.c' object='libthunar_vfs_1_la-thunar-vfs-mime-cache.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-cache.lo `test -f 'thunar-vfs-mime-cache.c' || echo '$(srcdir)/'`thunar-vfs-mime-cache.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-database.lo: thunar-vfs-mime-database.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-database.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-database.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-database.lo `test -f 'thunar-vfs-mime-database.c' || echo '$(srcdir)/'`thunar-vfs-mime-database.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-database.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-database.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-database.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-database.c' object='libthunar_vfs_1_la-thunar-vfs-mime-database.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-database.lo `test -f 'thunar-vfs-mime-database.c' || echo '$(srcdir)/'`thunar-vfs-mime-database.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-info.lo: thunar-vfs-mime-info.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-info.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-info.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-info.lo `test -f 'thunar-vfs-mime-info.c' || echo '$(srcdir)/'`thunar-vfs-mime-info.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-info.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-info.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-info.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-info.c' object='libthunar_vfs_1_la-thunar-vfs-mime-info.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-info.lo `test -f 'thunar-vfs-mime-info.c' || echo '$(srcdir)/'`thunar-vfs-mime-info.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo: thunar-vfs-mime-legacy.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-legacy.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo `test -f 'thunar-vfs-mime-legacy.c' || echo '$(srcdir)/'`thunar-vfs-mime-legacy.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-legacy.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-legacy.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-legacy.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-legacy.c' object='libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-legacy.lo `test -f 'thunar-vfs-mime-legacy.c' || echo '$(srcdir)/'`thunar-vfs-mime-legacy.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-parser.lo: thunar-vfs-mime-parser.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-parser.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-parser.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-parser.lo `test -f 'thunar-vfs-mime-parser.c' || echo '$(srcdir)/'`thunar-vfs-mime-parser.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-parser.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-parser.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-parser.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-parser.c' object='libthunar_vfs_1_la-thunar-vfs-mime-parser.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-parser.lo `test -f 'thunar-vfs-mime-parser.c' || echo '$(srcdir)/'`thunar-vfs-mime-parser.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-provider.lo: thunar-vfs-mime-provider.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-provider.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-provider.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-provider.lo `test -f 'thunar-vfs-mime-provider.c' || echo '$(srcdir)/'`thunar-vfs-mime-provider.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-provider.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-provider.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-provider.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-provider.c' object='libthunar_vfs_1_la-thunar-vfs-mime-provider.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-provider.lo `test -f 'thunar-vfs-mime-provider.c' || echo '$(srcdir)/'`thunar-vfs-mime-provider.c
+
+libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo: thunar-vfs-mime-sniffer.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-sniffer.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo `test -f 'thunar-vfs-mime-sniffer.c' || echo '$(srcdir)/'`thunar-vfs-mime-sniffer.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-sniffer.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-sniffer.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mime-sniffer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mime-sniffer.c' object='libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mime-sniffer.lo `test -f 'thunar-vfs-mime-sniffer.c' || echo '$(srcdir)/'`thunar-vfs-mime-sniffer.c
+
+libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo: thunar-vfs-mkdir-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mkdir-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo `test -f 'thunar-vfs-mkdir-job.c' || echo '$(srcdir)/'`thunar-vfs-mkdir-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mkdir-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mkdir-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-mkdir-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-mkdir-job.c' object='libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-mkdir-job.lo `test -f 'thunar-vfs-mkdir-job.c' || echo '$(srcdir)/'`thunar-vfs-mkdir-job.c
+
+libthunar_vfs_1_la-thunar-vfs-monitor.lo: thunar-vfs-monitor.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-monitor.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-monitor.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-monitor.lo `test -f 'thunar-vfs-monitor.c' || echo '$(srcdir)/'`thunar-vfs-monitor.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-monitor.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-monitor.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-monitor.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-monitor.c' object='libthunar_vfs_1_la-thunar-vfs-monitor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-monitor.lo `test -f 'thunar-vfs-monitor.c' || echo '$(srcdir)/'`thunar-vfs-monitor.c
+
+libthunar_vfs_1_la-thunar-vfs-path.lo: thunar-vfs-path.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-path.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-path.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-path.lo `test -f 'thunar-vfs-path.c' || echo '$(srcdir)/'`thunar-vfs-path.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-path.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-path.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-path.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-path.c' object='libthunar_vfs_1_la-thunar-vfs-path.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-path.lo `test -f 'thunar-vfs-path.c' || echo '$(srcdir)/'`thunar-vfs-path.c
+
+libthunar_vfs_1_la-thunar-vfs-scandir.lo: thunar-vfs-scandir.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-scandir.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-scandir.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-scandir.lo `test -f 'thunar-vfs-scandir.c' || echo '$(srcdir)/'`thunar-vfs-scandir.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-scandir.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-scandir.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-scandir.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-scandir.c' object='libthunar_vfs_1_la-thunar-vfs-scandir.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-scandir.lo `test -f 'thunar-vfs-scandir.c' || echo '$(srcdir)/'`thunar-vfs-scandir.c
+
+libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo: thunar-vfs-thumb-jpeg.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo `test -f 'thunar-vfs-thumb-jpeg.c' || echo '$(srcdir)/'`thunar-vfs-thumb-jpeg.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-thumb-jpeg.c' object='libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-thumb-jpeg.lo `test -f 'thunar-vfs-thumb-jpeg.c' || echo '$(srcdir)/'`thunar-vfs-thumb-jpeg.c
+
+libthunar_vfs_1_la-thunar-vfs-thumb.lo: thunar-vfs-thumb.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-thumb.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-thumb.lo `test -f 'thunar-vfs-thumb.c' || echo '$(srcdir)/'`thunar-vfs-thumb.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-thumb.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-thumb.c' object='libthunar_vfs_1_la-thunar-vfs-thumb.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-thumb.lo `test -f 'thunar-vfs-thumb.c' || echo '$(srcdir)/'`thunar-vfs-thumb.c
+
+libthunar_vfs_1_la-thunar-vfs-transfer-job.lo: thunar-vfs-transfer-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-transfer-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-transfer-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-transfer-job.lo `test -f 'thunar-vfs-transfer-job.c' || echo '$(srcdir)/'`thunar-vfs-transfer-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-transfer-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-transfer-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-transfer-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-transfer-job.c' object='libthunar_vfs_1_la-thunar-vfs-transfer-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-transfer-job.lo `test -f 'thunar-vfs-transfer-job.c' || echo '$(srcdir)/'`thunar-vfs-transfer-job.c
+
+libthunar_vfs_1_la-thunar-vfs-unlink-job.lo: thunar-vfs-unlink-job.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-unlink-job.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-unlink-job.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-unlink-job.lo `test -f 'thunar-vfs-unlink-job.c' || echo '$(srcdir)/'`thunar-vfs-unlink-job.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-unlink-job.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-unlink-job.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-unlink-job.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-unlink-job.c' object='libthunar_vfs_1_la-thunar-vfs-unlink-job.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-unlink-job.lo `test -f 'thunar-vfs-unlink-job.c' || echo '$(srcdir)/'`thunar-vfs-unlink-job.c
+
+libthunar_vfs_1_la-thunar-vfs-user.lo: thunar-vfs-user.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-user.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-user.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-user.lo `test -f 'thunar-vfs-user.c' || echo '$(srcdir)/'`thunar-vfs-user.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-user.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-user.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-user.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-user.c' object='libthunar_vfs_1_la-thunar-vfs-user.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-user.lo `test -f 'thunar-vfs-user.c' || echo '$(srcdir)/'`thunar-vfs-user.c
+
+libthunar_vfs_1_la-thunar-vfs-util.lo: thunar-vfs-util.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-util.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-util.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-util.lo `test -f 'thunar-vfs-util.c' || echo '$(srcdir)/'`thunar-vfs-util.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-util.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-util.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-util.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-util.c' object='libthunar_vfs_1_la-thunar-vfs-util.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-util.lo `test -f 'thunar-vfs-util.c' || echo '$(srcdir)/'`thunar-vfs-util.c
+
+libthunar_vfs_1_la-thunar-vfs-volume.lo: thunar-vfs-volume.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-volume.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-volume.lo `test -f 'thunar-vfs-volume.c' || echo '$(srcdir)/'`thunar-vfs-volume.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-volume.c' object='libthunar_vfs_1_la-thunar-vfs-volume.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-volume.lo `test -f 'thunar-vfs-volume.c' || echo '$(srcdir)/'`thunar-vfs-volume.c
+
+libthunar_vfs_1_la-thunar-vfs-volume-impl.lo: thunar-vfs-volume-impl.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-volume-impl.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume-impl.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-volume-impl.lo `test -f 'thunar-vfs-volume-impl.c' || echo '$(srcdir)/'`thunar-vfs-volume-impl.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume-impl.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume-impl.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-volume-impl.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-volume-impl.c' object='libthunar_vfs_1_la-thunar-vfs-volume-impl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-volume-impl.lo `test -f 'thunar-vfs-volume-impl.c' || echo '$(srcdir)/'`thunar-vfs-volume-impl.c
+
+libthunar_vfs_1_la-thunar-vfs-xfer.lo: thunar-vfs-xfer.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs-xfer.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-xfer.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs-xfer.lo `test -f 'thunar-vfs-xfer.c' || echo '$(srcdir)/'`thunar-vfs-xfer.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-xfer.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-xfer.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs-xfer.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs-xfer.c' object='libthunar_vfs_1_la-thunar-vfs-xfer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs-xfer.lo `test -f 'thunar-vfs-xfer.c' || echo '$(srcdir)/'`thunar-vfs-xfer.c
+
+libthunar_vfs_1_la-thunar-vfs.lo: thunar-vfs.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -MT libthunar_vfs_1_la-thunar-vfs.lo -MD -MP -MF "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs.Tpo" -c -o libthunar_vfs_1_la-thunar-vfs.lo `test -f 'thunar-vfs.c' || echo '$(srcdir)/'`thunar-vfs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs.Tpo" "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs.Plo"; else rm -f "$(DEPDIR)/libthunar_vfs_1_la-thunar-vfs.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunar-vfs.c' object='libthunar_vfs_1_la-thunar-vfs.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunar_vfs_1_la_CFLAGS) $(CFLAGS) -c -o libthunar_vfs_1_la-thunar-vfs.lo `test -f 'thunar-vfs.c' || echo '$(srcdir)/'`thunar-vfs.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+	  $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+	done
+install-libthunar_vfs_includeHEADERS: $(libthunar_vfs_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libthunar_vfs_includedir)" || $(mkdir_p) "$(DESTDIR)$(libthunar_vfs_includedir)"
+	@list='$(libthunar_vfs_include_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(libthunar_vfs_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libthunar_vfs_includedir)/$$f'"; \
+	  $(libthunar_vfs_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libthunar_vfs_includedir)/$$f"; \
+	done
+
+uninstall-libthunar_vfs_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libthunar_vfs_include_HEADERS)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(libthunar_vfs_includedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libthunar_vfs_includedir)/$$f"; \
+	done
+
+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
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libthunar_vfs_includedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) 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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libthunar_vfs_includeHEADERS \
+	install-pkgconfigDATA
+
+install-exec-am: install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+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 \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
+	uninstall-libthunar_vfs_includeHEADERS uninstall-pkgconfigDATA
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-generic clean-libLTLIBRARIES clean-libtool ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-libLTLIBRARIES \
+	install-libthunar_vfs_includeHEADERS install-man \
+	install-pkgconfigDATA install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libLTLIBRARIES \
+	uninstall-libthunar_vfs_includeHEADERS uninstall-pkgconfigDATA
+
+
+ at MAINTAINER_MODE_TRUE@thunar-vfs-alias.h: make-thunar-vfs-alias.pl thunar-vfs.symbols
+ at MAINTAINER_MODE_TRUE@	$(PERL) $(srcdir)/make-thunar-vfs-alias.pl < $(srcdir)/thunar-vfs.symbols > thunar-vfs-alias.h
+
+ at MAINTAINER_MODE_TRUE@thunar-vfs-aliasdef.c: make-thunar-vfs-alias.pl thunar-vfs.symbols
+ at MAINTAINER_MODE_TRUE@	$(PERL) $(srcdir)/make-thunar-vfs-alias.pl -def < $(srcdir)/thunar-vfs.symbols > thunar-vfs-aliasdef.c
+
+ at MAINTAINER_MODE_TRUE@thunar-vfs-enum-types.h: stamp-thunar-vfs-enum-types.h
+ at MAINTAINER_MODE_TRUE@	@true
+ at MAINTAINER_MODE_TRUE@stamp-thunar-vfs-enum-types.h: $(libthunar_vfs_headers) Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-mkenums \
+ at MAINTAINER_MODE_TRUE@		--fhead "#ifndef __THUNAR_VFS_ENUM_TYPES_H__\n#define __THUNAR_VFS_ENUM_TYPES_H__\n#include <exo/exo.h>\nG_BEGIN_DECLS\n" \
+ at MAINTAINER_MODE_TRUE@		--fprod "/* enumerations from \"@filename@\" */\n" \
+ at MAINTAINER_MODE_TRUE@		--vhead "GType @enum_name at _get_type (void) G_GNUC_CONST;\n#define THUNAR_VFS_TYPE_ at ENUMSHORT@ (@enum_name at _get_type())\n" \
+ at MAINTAINER_MODE_TRUE@		--ftail "G_END_DECLS\n\n#endif /* !__THUNAR_VFS_ENUM_TYPES_H__ */" \
+ at MAINTAINER_MODE_TRUE@		$(libthunar_vfs_headers) ) >> xgen-tveth \
+ at MAINTAINER_MODE_TRUE@	&& ( cmp -s xgen-tveth thunar-vfs-enum-types.h || cp xgen-tveth thunar-vfs-enum-types.h ) \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tveth \
+ at MAINTAINER_MODE_TRUE@	&& echo timestamp > $(@F)
+ at MAINTAINER_MODE_TRUE@thunar-vfs-enum-types.c: $(libthunar_vfs_headers) Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-mkenums \
+ at MAINTAINER_MODE_TRUE@		--fhead "#undef GTK_DISABLE_DEPRECATED\n#define GTK_ENABLE_BROKEN\n#include <thunar-vfs/thunar-vfs.h>\n#include <thunar-vfs/thunar-vfs-alias.h>" \
+ at MAINTAINER_MODE_TRUE@		--fprod "\n/* enumerations from \"@filename@\" */" \
+ at MAINTAINER_MODE_TRUE@		--vhead "GType\n at enum_name@_get_type (void)\n{\n\tstatic GType type = 0;\n\tif (type == 0) {\n\tstatic const G at Type@Value values[] = {"\
+ at MAINTAINER_MODE_TRUE@		--vprod "\t{ @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ at MAINTAINER_MODE_TRUE@		--vtail "\t{ 0, NULL, NULL }\n\t};\n\ttype = g_ at type@_register_static (\"@EnumName@\", values);\n  }\n\treturn type;\n}\n" \
+ at MAINTAINER_MODE_TRUE@		--ftail "\n#define __THUNAR_VFS_ENUM_TYPES_C__\n#include \"thunar-vfs-aliasdef.c\"\n" \
+ at MAINTAINER_MODE_TRUE@		$(libthunar_vfs_headers) ) >> xgen-tvetc \
+ at MAINTAINER_MODE_TRUE@	&& cp xgen-tvetc thunar-vfs-enum-types.c \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tvetc
+
+ at MAINTAINER_MODE_TRUE@thunar-vfs-marshal.h: stamp-thunar-vfs-marshal.h
+ at MAINTAINER_MODE_TRUE@	@true
+ at MAINTAINER_MODE_TRUE@stamp-thunar-vfs-marshal.h: thunar-vfs-marshal.list Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-genmarshal \
+ at MAINTAINER_MODE_TRUE@		--prefix=_thunar_vfs_marshal \
+ at MAINTAINER_MODE_TRUE@		--header thunar-vfs-marshal.list ) >> xgen-tvmh \
+ at MAINTAINER_MODE_TRUE@	&& ( cmp -s xgen-tvmh thunar-vfs-marshal.h || cp xgen-tvmh thunar-vfs-marshal.h ) \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tvmh \
+ at MAINTAINER_MODE_TRUE@	&& echo timestamp > $(@F)
+
+ at MAINTAINER_MODE_TRUE@thunar-vfs-marshal.c: thunar-vfs-marshal.list Makefile
+ at MAINTAINER_MODE_TRUE@	( cd $(srcdir) && glib-genmarshal \
+ at MAINTAINER_MODE_TRUE@		--prefix=_thunar_vfs_marshal \
+ at MAINTAINER_MODE_TRUE@		--body thunar-vfs-marshal.list ) >> xgen-tvmc \
+ at MAINTAINER_MODE_TRUE@	&& cp xgen-tvmc thunar-vfs-marshal.c \
+ at MAINTAINER_MODE_TRUE@	&& rm -f xgen-tvmc
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/abicheck.sh
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/abicheck.sh	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/abicheck.sh	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Copyright (c) 2004 The GLib Development Team.
+# Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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 Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+cpp -P -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES ${srcdir:-.}/thunar-vfs.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE//' | sort > expected-abi
+nm -D .libs/libthunar-vfs-1.so | grep " R\|T " | cut -d ' ' -f 3 | grep -v '^_.*' | sort > actual-abi
+diff -u expected-abi actual-abi && rm expected-abi actual-abi


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/abicheck.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/make-thunar-vfs-alias.pl
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/make-thunar-vfs-alias.pl	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/make-thunar-vfs-alias.pl	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,155 @@
+#!/usr/bin/env perl -w
+#
+# Copyright (c) 2004 The GLib Development Team.
+# Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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 Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+my $option_def = 0;
+
+if (($#ARGV >= 0) && ($ARGV[0] eq "-def"))
+  {
+    shift;
+    $option_def = 1;
+  }
+
+print <<EOF;
+/* Generated by make-thunar-vfs-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+EOF
+
+if ($option_def)
+  {
+    print <<EOF
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#undef IN_SOURCE
+#define IN_SOURCE defined
+
+EOF
+  }
+else
+  {
+    print <<EOF
+#define IN_HEADER defined
+#define IN_SOURCE(x) 1
+
+EOF
+  }
+
+my $in_comment = 0;
+my $in_skipped_section = 0;
+
+while (<>)
+  {
+    # ignore empty lines
+    next if /^\s*$/;
+
+    # skip comments
+    if ($_ =~ /^\s*\/\*/)
+      {
+        $in_comment = 1;
+      }
+    
+    if ($in_comment)
+      {
+        if ($_ =~  /\*\/\s$/)
+          {
+            $in_comment = 0;
+          }
+        next;
+      }
+
+    # handle ifdefs
+    if ($_ =~ /^\#endif/)
+      {
+        if (!$in_skipped_section)
+          {
+            print $_;
+          }
+
+        $in_skipped_section = 0;
+        next;
+      }
+
+    if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
+      {
+        $in_skipped_section = 1;
+      }
+
+    if ($in_skipped_section)
+      {
+        next;
+      }
+
+    if ($_ =~ /^\#ifn?def\s+G/)
+      {
+        print $_;
+        next;
+      }
+   
+    if ($_ =~ /^\#if.*(IN_SOURCE|IN_HEADER)/)
+      {
+        print $_;
+        next;
+      }
+
+    chop;
+    my $line = $_;
+    my @words;
+    my $attributes = "";
+
+    @words = split (/ /, $line);
+    my $symbol = shift (@words);
+    chomp ($symbol);
+    my $alias = "IA__".$symbol;
+    
+    # Drop any Win32 specific .def file syntax,  but keep attributes
+    foreach $word (@words)
+      {
+        $attributes = "$attributes $word" unless $word eq "PRIVATE";
+      }
+    
+    if (!$option_def)
+      {
+        print <<EOF
+extern __typeof ($symbol) $alias __attribute((visibility("hidden")))$attributes;
+\#define $symbol $alias
+
+EOF
+      }
+    else
+      {
+        print <<EOF
+\#undef $symbol 
+extern __typeof ($symbol) $symbol __attribute((alias("$alias"), visibility("default")));
+
+EOF
+      }
+  }
+
+print <<EOF;
+
+#endif /* HAVE_GNUC_VISIBILITY */
+EOF
+
+


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/make-thunar-vfs-alias.pl
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-1.pc.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-1.pc.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-1.pc.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: thunar-vfs
+Description: ThunarVFS library
+Requires: exo-0.3
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lthunar-vfs- at THUNAR_VERSION_API@
+Cflags: -I${includedir}/thunar-vfs- at THUNAR_VERSION_API@

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-alias.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-alias.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-alias.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,477 @@
+/* Generated by make-thunar-vfs-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+#define IN_HEADER defined
+#define IN_SOURCE(x) 1
+
+#if IN_HEADER(__THUNAR_VFS_H__)
+#if IN_SOURCE(__THUNAR_VFS_C__)
+extern __typeof (thunar_vfs_init) IA__thunar_vfs_init __attribute((visibility("hidden")));
+#define thunar_vfs_init IA__thunar_vfs_init
+
+extern __typeof (thunar_vfs_shutdown) IA__thunar_vfs_shutdown __attribute((visibility("hidden")));
+#define thunar_vfs_shutdown IA__thunar_vfs_shutdown
+
+extern __typeof (thunar_vfs_listdir) IA__thunar_vfs_listdir __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_listdir IA__thunar_vfs_listdir
+
+extern __typeof (thunar_vfs_copy_file) IA__thunar_vfs_copy_file __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_copy_file IA__thunar_vfs_copy_file
+
+extern __typeof (thunar_vfs_copy_files) IA__thunar_vfs_copy_files __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_copy_files IA__thunar_vfs_copy_files
+
+extern __typeof (thunar_vfs_link_file) IA__thunar_vfs_link_file __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_link_file IA__thunar_vfs_link_file
+
+extern __typeof (thunar_vfs_link_files) IA__thunar_vfs_link_files __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_link_files IA__thunar_vfs_link_files
+
+extern __typeof (thunar_vfs_move_file) IA__thunar_vfs_move_file __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_move_file IA__thunar_vfs_move_file
+
+extern __typeof (thunar_vfs_move_files) IA__thunar_vfs_move_files __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_move_files IA__thunar_vfs_move_files
+
+extern __typeof (thunar_vfs_unlink_file) IA__thunar_vfs_unlink_file __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_unlink_file IA__thunar_vfs_unlink_file
+
+extern __typeof (thunar_vfs_unlink_files) IA__thunar_vfs_unlink_files __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_unlink_files IA__thunar_vfs_unlink_files
+
+extern __typeof (thunar_vfs_make_directory) IA__thunar_vfs_make_directory __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_make_directory IA__thunar_vfs_make_directory
+
+extern __typeof (thunar_vfs_make_directories) IA__thunar_vfs_make_directories __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_make_directories IA__thunar_vfs_make_directories
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_CONFIG_H__)
+#if IN_SOURCE(__THUNAR_VFS_CONFIG_C__)
+extern __typeof (thunar_vfs_major_version) IA__thunar_vfs_major_version __attribute((visibility("hidden")));
+#define thunar_vfs_major_version IA__thunar_vfs_major_version
+
+extern __typeof (thunar_vfs_minor_version) IA__thunar_vfs_minor_version __attribute((visibility("hidden")));
+#define thunar_vfs_minor_version IA__thunar_vfs_minor_version
+
+extern __typeof (thunar_vfs_micro_version) IA__thunar_vfs_micro_version __attribute((visibility("hidden")));
+#define thunar_vfs_micro_version IA__thunar_vfs_micro_version
+
+extern __typeof (thunar_vfs_check_version) IA__thunar_vfs_check_version __attribute((visibility("hidden")));
+#define thunar_vfs_check_version IA__thunar_vfs_check_version
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_INFO_C__)
+extern __typeof (thunar_vfs_info_get_type) IA__thunar_vfs_info_get_type __attribute((visibility("hidden")));
+#define thunar_vfs_info_get_type IA__thunar_vfs_info_get_type
+
+extern __typeof (thunar_vfs_info_new_for_path) IA__thunar_vfs_info_new_for_path __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_info_new_for_path IA__thunar_vfs_info_new_for_path
+
+extern __typeof (thunar_vfs_info_unref) IA__thunar_vfs_info_unref __attribute((visibility("hidden")));
+#define thunar_vfs_info_unref IA__thunar_vfs_info_unref
+
+extern __typeof (thunar_vfs_info_copy) IA__thunar_vfs_info_copy __attribute((visibility("hidden")));
+#define thunar_vfs_info_copy IA__thunar_vfs_info_copy
+
+extern __typeof (thunar_vfs_info_execute) IA__thunar_vfs_info_execute __attribute((visibility("hidden")));
+#define thunar_vfs_info_execute IA__thunar_vfs_info_execute
+
+extern __typeof (thunar_vfs_info_rename) IA__thunar_vfs_info_rename __attribute((visibility("hidden")));
+#define thunar_vfs_info_rename IA__thunar_vfs_info_rename
+
+extern __typeof (thunar_vfs_info_matches) IA__thunar_vfs_info_matches __attribute((visibility("hidden")));
+#define thunar_vfs_info_matches IA__thunar_vfs_info_matches
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_ENUM_TYPES_H__)
+#if IN_SOURCE(__THUNAR_VFS_ENUM_TYPES_C__)
+extern __typeof (thunar_vfs_file_flags_get_type) IA__thunar_vfs_file_flags_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_file_flags_get_type IA__thunar_vfs_file_flags_get_type
+
+extern __typeof (thunar_vfs_file_mode_get_type) IA__thunar_vfs_file_mode_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_file_mode_get_type IA__thunar_vfs_file_mode_get_type
+
+extern __typeof (thunar_vfs_file_type_get_type) IA__thunar_vfs_file_type_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_file_type_get_type IA__thunar_vfs_file_type_get_type
+
+extern __typeof (thunar_vfs_interactive_job_response_get_type) IA__thunar_vfs_interactive_job_response_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_interactive_job_response_get_type IA__thunar_vfs_interactive_job_response_get_type
+
+extern __typeof (thunar_vfs_mime_application_error_get_type) IA__thunar_vfs_mime_application_error_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_application_error_get_type IA__thunar_vfs_mime_application_error_get_type
+
+extern __typeof (thunar_vfs_mime_application_flags_get_type) IA__thunar_vfs_mime_application_flags_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_application_flags_get_type IA__thunar_vfs_mime_application_flags_get_type
+
+extern __typeof (thunar_vfs_monitor_event_get_type) IA__thunar_vfs_monitor_event_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_monitor_event_get_type IA__thunar_vfs_monitor_event_get_type
+
+extern __typeof (thunar_vfs_thumb_size_get_type) IA__thunar_vfs_thumb_size_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_thumb_size_get_type IA__thunar_vfs_thumb_size_get_type
+
+extern __typeof (thunar_vfs_volume_kind_get_type) IA__thunar_vfs_volume_kind_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_volume_kind_get_type IA__thunar_vfs_volume_kind_get_type
+
+extern __typeof (thunar_vfs_volume_status_get_type) IA__thunar_vfs_volume_status_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_volume_status_get_type IA__thunar_vfs_volume_status_get_type
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_INTERACTIVE_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_INTERACTIVE_JOB_C__)
+extern __typeof (thunar_vfs_interactive_job_get_type) IA__thunar_vfs_interactive_job_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_interactive_job_get_type IA__thunar_vfs_interactive_job_get_type
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_JOB_C__)
+extern __typeof (thunar_vfs_job_get_type) IA__thunar_vfs_job_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_job_get_type IA__thunar_vfs_job_get_type
+
+extern __typeof (thunar_vfs_job_launch) IA__thunar_vfs_job_launch __attribute((visibility("hidden")));
+#define thunar_vfs_job_launch IA__thunar_vfs_job_launch
+
+extern __typeof (thunar_vfs_job_cancel) IA__thunar_vfs_job_cancel __attribute((visibility("hidden")));
+#define thunar_vfs_job_cancel IA__thunar_vfs_job_cancel
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_APPLICATION_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_APPLICATION_C__)
+extern __typeof (thunar_vfs_mime_application_error_quark) IA__thunar_vfs_mime_application_error_quark __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_application_error_quark IA__thunar_vfs_mime_application_error_quark
+
+extern __typeof (thunar_vfs_mime_application_get_type) IA__thunar_vfs_mime_application_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_application_get_type IA__thunar_vfs_mime_application_get_type
+
+extern __typeof (thunar_vfs_mime_application_new_from_desktop_id) IA__thunar_vfs_mime_application_new_from_desktop_id __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_mime_application_new_from_desktop_id IA__thunar_vfs_mime_application_new_from_desktop_id
+
+extern __typeof (thunar_vfs_mime_application_new_from_file) IA__thunar_vfs_mime_application_new_from_file __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_mime_application_new_from_file IA__thunar_vfs_mime_application_new_from_file
+
+extern __typeof (thunar_vfs_mime_application_ref) IA__thunar_vfs_mime_application_ref __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_ref IA__thunar_vfs_mime_application_ref
+
+extern __typeof (thunar_vfs_mime_application_unref) IA__thunar_vfs_mime_application_unref __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_unref IA__thunar_vfs_mime_application_unref
+
+extern __typeof (thunar_vfs_mime_application_get_command) IA__thunar_vfs_mime_application_get_command __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_get_command IA__thunar_vfs_mime_application_get_command
+
+extern __typeof (thunar_vfs_mime_application_get_desktop_id) IA__thunar_vfs_mime_application_get_desktop_id __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_get_desktop_id IA__thunar_vfs_mime_application_get_desktop_id
+
+extern __typeof (thunar_vfs_mime_application_get_flags) IA__thunar_vfs_mime_application_get_flags __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_get_flags IA__thunar_vfs_mime_application_get_flags
+
+extern __typeof (thunar_vfs_mime_application_get_name) IA__thunar_vfs_mime_application_get_name __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_get_name IA__thunar_vfs_mime_application_get_name
+
+extern __typeof (thunar_vfs_mime_application_get_mime_types) IA__thunar_vfs_mime_application_get_mime_types __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_get_mime_types IA__thunar_vfs_mime_application_get_mime_types
+
+extern __typeof (thunar_vfs_mime_application_exec) IA__thunar_vfs_mime_application_exec __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_exec IA__thunar_vfs_mime_application_exec
+
+extern __typeof (thunar_vfs_mime_application_exec_with_env) IA__thunar_vfs_mime_application_exec_with_env __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_exec_with_env IA__thunar_vfs_mime_application_exec_with_env
+
+extern __typeof (thunar_vfs_mime_application_lookup_icon_name) IA__thunar_vfs_mime_application_lookup_icon_name __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_lookup_icon_name IA__thunar_vfs_mime_application_lookup_icon_name
+
+extern __typeof (thunar_vfs_mime_application_hash) IA__thunar_vfs_mime_application_hash __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_hash IA__thunar_vfs_mime_application_hash
+
+extern __typeof (thunar_vfs_mime_application_equal) IA__thunar_vfs_mime_application_equal __attribute((visibility("hidden")));
+#define thunar_vfs_mime_application_equal IA__thunar_vfs_mime_application_equal
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_DATABASE_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_DATABASE_C__)
+extern __typeof (thunar_vfs_mime_database_get_type) IA__thunar_vfs_mime_database_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_database_get_type IA__thunar_vfs_mime_database_get_type
+
+extern __typeof (thunar_vfs_mime_database_get_default) IA__thunar_vfs_mime_database_get_default __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_default IA__thunar_vfs_mime_database_get_default
+
+extern __typeof (thunar_vfs_mime_database_get_info) IA__thunar_vfs_mime_database_get_info __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_info IA__thunar_vfs_mime_database_get_info
+
+extern __typeof (thunar_vfs_mime_database_get_info_for_data) IA__thunar_vfs_mime_database_get_info_for_data __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_info_for_data IA__thunar_vfs_mime_database_get_info_for_data
+
+extern __typeof (thunar_vfs_mime_database_get_info_for_name) IA__thunar_vfs_mime_database_get_info_for_name __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_info_for_name IA__thunar_vfs_mime_database_get_info_for_name
+
+extern __typeof (thunar_vfs_mime_database_get_info_for_file) IA__thunar_vfs_mime_database_get_info_for_file __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_info_for_file IA__thunar_vfs_mime_database_get_info_for_file
+
+extern __typeof (thunar_vfs_mime_database_get_infos_for_info) IA__thunar_vfs_mime_database_get_infos_for_info __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_infos_for_info IA__thunar_vfs_mime_database_get_infos_for_info
+
+extern __typeof (thunar_vfs_mime_database_get_applications) IA__thunar_vfs_mime_database_get_applications __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_applications IA__thunar_vfs_mime_database_get_applications
+
+extern __typeof (thunar_vfs_mime_database_get_default_application) IA__thunar_vfs_mime_database_get_default_application __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_get_default_application IA__thunar_vfs_mime_database_get_default_application
+
+extern __typeof (thunar_vfs_mime_database_set_default_application) IA__thunar_vfs_mime_database_set_default_application __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_set_default_application IA__thunar_vfs_mime_database_set_default_application
+
+extern __typeof (thunar_vfs_mime_database_add_application) IA__thunar_vfs_mime_database_add_application __attribute((visibility("hidden")));
+#define thunar_vfs_mime_database_add_application IA__thunar_vfs_mime_database_add_application
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_INFO_C__)
+extern __typeof (thunar_vfs_mime_info_get_type) IA__thunar_vfs_mime_info_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_mime_info_get_type IA__thunar_vfs_mime_info_get_type
+
+extern __typeof (thunar_vfs_mime_info_new) IA__thunar_vfs_mime_info_new __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_mime_info_new IA__thunar_vfs_mime_info_new
+
+extern __typeof (thunar_vfs_mime_info_unref) IA__thunar_vfs_mime_info_unref __attribute((visibility("hidden")));
+#define thunar_vfs_mime_info_unref IA__thunar_vfs_mime_info_unref
+
+extern __typeof (thunar_vfs_mime_info_get_comment) IA__thunar_vfs_mime_info_get_comment __attribute((visibility("hidden")));
+#define thunar_vfs_mime_info_get_comment IA__thunar_vfs_mime_info_get_comment
+
+extern __typeof (thunar_vfs_mime_info_get_media) IA__thunar_vfs_mime_info_get_media __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_mime_info_get_media IA__thunar_vfs_mime_info_get_media
+
+extern __typeof (thunar_vfs_mime_info_get_subtype) IA__thunar_vfs_mime_info_get_subtype __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_mime_info_get_subtype IA__thunar_vfs_mime_info_get_subtype
+
+extern __typeof (thunar_vfs_mime_info_hash) IA__thunar_vfs_mime_info_hash __attribute((visibility("hidden")));
+#define thunar_vfs_mime_info_hash IA__thunar_vfs_mime_info_hash
+
+extern __typeof (thunar_vfs_mime_info_equal) IA__thunar_vfs_mime_info_equal __attribute((visibility("hidden")));
+#define thunar_vfs_mime_info_equal IA__thunar_vfs_mime_info_equal
+
+extern __typeof (thunar_vfs_mime_info_lookup_icon_name) IA__thunar_vfs_mime_info_lookup_icon_name __attribute((visibility("hidden")));
+#define thunar_vfs_mime_info_lookup_icon_name IA__thunar_vfs_mime_info_lookup_icon_name
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MONITOR_H__)
+#if IN_SOURCE(__THUNAR_VFS_MONITOR_C__)
+extern __typeof (thunar_vfs_monitor_get_type) IA__thunar_vfs_monitor_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_monitor_get_type IA__thunar_vfs_monitor_get_type
+
+extern __typeof (thunar_vfs_monitor_get_default) IA__thunar_vfs_monitor_get_default __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_get_default IA__thunar_vfs_monitor_get_default
+
+extern __typeof (thunar_vfs_monitor_add_directory) IA__thunar_vfs_monitor_add_directory __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_add_directory IA__thunar_vfs_monitor_add_directory
+
+extern __typeof (thunar_vfs_monitor_add_file) IA__thunar_vfs_monitor_add_file __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_add_file IA__thunar_vfs_monitor_add_file
+
+extern __typeof (thunar_vfs_monitor_remove) IA__thunar_vfs_monitor_remove __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_remove IA__thunar_vfs_monitor_remove
+
+extern __typeof (thunar_vfs_monitor_feed) IA__thunar_vfs_monitor_feed __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_feed IA__thunar_vfs_monitor_feed
+
+extern __typeof (thunar_vfs_monitor_wait) IA__thunar_vfs_monitor_wait __attribute((visibility("hidden")));
+#define thunar_vfs_monitor_wait IA__thunar_vfs_monitor_wait
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_PATH_H__)
+#if IN_SOURCE(__THUNAR_VFS_PATH_C__)
+extern __typeof (thunar_vfs_path_get_type) IA__thunar_vfs_path_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_path_get_type IA__thunar_vfs_path_get_type
+
+extern __typeof (thunar_vfs_path_new) IA__thunar_vfs_path_new __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_new IA__thunar_vfs_path_new
+
+extern __typeof (thunar_vfs_path_get_for_home) IA__thunar_vfs_path_get_for_home __attribute((visibility("hidden")));
+#define thunar_vfs_path_get_for_home IA__thunar_vfs_path_get_for_home
+
+extern __typeof (thunar_vfs_path_get_for_root) IA__thunar_vfs_path_get_for_root __attribute((visibility("hidden")));
+#define thunar_vfs_path_get_for_root IA__thunar_vfs_path_get_for_root
+
+extern __typeof (thunar_vfs_path_unref) IA__thunar_vfs_path_unref __attribute((visibility("hidden")));
+#define thunar_vfs_path_unref IA__thunar_vfs_path_unref
+
+extern __typeof (thunar_vfs_path_hash) IA__thunar_vfs_path_hash __attribute((visibility("hidden")));
+#define thunar_vfs_path_hash IA__thunar_vfs_path_hash
+
+extern __typeof (thunar_vfs_path_equal) IA__thunar_vfs_path_equal __attribute((visibility("hidden")));
+#define thunar_vfs_path_equal IA__thunar_vfs_path_equal
+
+extern __typeof (thunar_vfs_path_relative) IA__thunar_vfs_path_relative __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_relative IA__thunar_vfs_path_relative
+
+extern __typeof (thunar_vfs_path_is_home) IA__thunar_vfs_path_is_home __attribute((visibility("hidden")));
+#define thunar_vfs_path_is_home IA__thunar_vfs_path_is_home
+
+extern __typeof (thunar_vfs_path_dup_string) IA__thunar_vfs_path_dup_string __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_dup_string IA__thunar_vfs_path_dup_string
+
+extern __typeof (thunar_vfs_path_to_string) IA__thunar_vfs_path_to_string __attribute((visibility("hidden")));
+#define thunar_vfs_path_to_string IA__thunar_vfs_path_to_string
+
+extern __typeof (thunar_vfs_path_dup_uri) IA__thunar_vfs_path_dup_uri __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_dup_uri IA__thunar_vfs_path_dup_uri
+
+extern __typeof (thunar_vfs_path_to_uri) IA__thunar_vfs_path_to_uri __attribute((visibility("hidden")));
+#define thunar_vfs_path_to_uri IA__thunar_vfs_path_to_uri
+
+extern __typeof (thunar_vfs_path_list_from_string) IA__thunar_vfs_path_list_from_string __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_list_from_string IA__thunar_vfs_path_list_from_string
+
+extern __typeof (thunar_vfs_path_list_to_string) IA__thunar_vfs_path_list_to_string __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_path_list_to_string IA__thunar_vfs_path_list_to_string
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+extern __typeof (thunar_vfs_thumb_factory_get_type) IA__thunar_vfs_thumb_factory_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_thumb_factory_get_type IA__thunar_vfs_thumb_factory_get_type
+
+extern __typeof (thunar_vfs_thumb_factory_new) IA__thunar_vfs_thumb_factory_new __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_thumb_factory_new IA__thunar_vfs_thumb_factory_new
+
+extern __typeof (thunar_vfs_thumb_factory_lookup_thumbnail) IA__thunar_vfs_thumb_factory_lookup_thumbnail __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_thumb_factory_lookup_thumbnail IA__thunar_vfs_thumb_factory_lookup_thumbnail
+
+extern __typeof (thunar_vfs_thumb_factory_can_thumbnail) IA__thunar_vfs_thumb_factory_can_thumbnail __attribute((visibility("hidden")));
+#define thunar_vfs_thumb_factory_can_thumbnail IA__thunar_vfs_thumb_factory_can_thumbnail
+
+extern __typeof (thunar_vfs_thumb_factory_has_failed_thumbnail) IA__thunar_vfs_thumb_factory_has_failed_thumbnail __attribute((visibility("hidden")));
+#define thunar_vfs_thumb_factory_has_failed_thumbnail IA__thunar_vfs_thumb_factory_has_failed_thumbnail
+
+extern __typeof (thunar_vfs_thumb_factory_generate_thumbnail) IA__thunar_vfs_thumb_factory_generate_thumbnail __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_thumb_factory_generate_thumbnail IA__thunar_vfs_thumb_factory_generate_thumbnail
+
+extern __typeof (thunar_vfs_thumb_factory_store_thumbnail) IA__thunar_vfs_thumb_factory_store_thumbnail __attribute((visibility("hidden")));
+#define thunar_vfs_thumb_factory_store_thumbnail IA__thunar_vfs_thumb_factory_store_thumbnail
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+extern __typeof (thunar_vfs_thumbnail_for_path) IA__thunar_vfs_thumbnail_for_path __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunar_vfs_thumbnail_for_path IA__thunar_vfs_thumbnail_for_path
+
+extern __typeof (thunar_vfs_thumbnail_is_valid) IA__thunar_vfs_thumbnail_is_valid __attribute((visibility("hidden")));
+#define thunar_vfs_thumbnail_is_valid IA__thunar_vfs_thumbnail_is_valid
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_USER_H__)
+#if IN_SOURCE(__THUNAR_VFS_USER_C__)
+extern __typeof (thunar_vfs_group_get_type) IA__thunar_vfs_group_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_group_get_type IA__thunar_vfs_group_get_type
+
+extern __typeof (thunar_vfs_group_get_id) IA__thunar_vfs_group_get_id __attribute((visibility("hidden")));
+#define thunar_vfs_group_get_id IA__thunar_vfs_group_get_id
+
+extern __typeof (thunar_vfs_group_get_name) IA__thunar_vfs_group_get_name __attribute((visibility("hidden")));
+#define thunar_vfs_group_get_name IA__thunar_vfs_group_get_name
+
+extern __typeof (thunar_vfs_user_get_type) IA__thunar_vfs_user_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_user_get_type IA__thunar_vfs_user_get_type
+
+extern __typeof (thunar_vfs_user_get_groups) IA__thunar_vfs_user_get_groups __attribute((visibility("hidden")));
+#define thunar_vfs_user_get_groups IA__thunar_vfs_user_get_groups
+
+extern __typeof (thunar_vfs_user_get_primary_group) IA__thunar_vfs_user_get_primary_group __attribute((visibility("hidden")));
+#define thunar_vfs_user_get_primary_group IA__thunar_vfs_user_get_primary_group
+
+extern __typeof (thunar_vfs_user_get_id) IA__thunar_vfs_user_get_id __attribute((visibility("hidden")));
+#define thunar_vfs_user_get_id IA__thunar_vfs_user_get_id
+
+extern __typeof (thunar_vfs_user_get_name) IA__thunar_vfs_user_get_name __attribute((visibility("hidden")));
+#define thunar_vfs_user_get_name IA__thunar_vfs_user_get_name
+
+extern __typeof (thunar_vfs_user_get_real_name) IA__thunar_vfs_user_get_real_name __attribute((visibility("hidden")));
+#define thunar_vfs_user_get_real_name IA__thunar_vfs_user_get_real_name
+
+extern __typeof (thunar_vfs_user_is_me) IA__thunar_vfs_user_is_me __attribute((visibility("hidden")));
+#define thunar_vfs_user_is_me IA__thunar_vfs_user_is_me
+
+extern __typeof (thunar_vfs_user_manager_get_type) IA__thunar_vfs_user_manager_get_type __attribute((visibility("hidden")));
+#define thunar_vfs_user_manager_get_type IA__thunar_vfs_user_manager_get_type
+
+extern __typeof (thunar_vfs_user_manager_get_default) IA__thunar_vfs_user_manager_get_default __attribute((visibility("hidden")));
+#define thunar_vfs_user_manager_get_default IA__thunar_vfs_user_manager_get_default
+
+extern __typeof (thunar_vfs_user_manager_get_group_by_id) IA__thunar_vfs_user_manager_get_group_by_id __attribute((visibility("hidden")));
+#define thunar_vfs_user_manager_get_group_by_id IA__thunar_vfs_user_manager_get_group_by_id
+
+extern __typeof (thunar_vfs_user_manager_get_user_by_id) IA__thunar_vfs_user_manager_get_user_by_id __attribute((visibility("hidden")));
+#define thunar_vfs_user_manager_get_user_by_id IA__thunar_vfs_user_manager_get_user_by_id
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_UTIL_H__)
+#if IN_SOURCE(__THUNAR_VFS_UTIL_C__)
+extern __typeof (thunar_vfs_humanize_size) IA__thunar_vfs_humanize_size __attribute((visibility("hidden")));
+#define thunar_vfs_humanize_size IA__thunar_vfs_humanize_size
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_VOLUME_H__)
+#if IN_SOURCE(__THUNAR_VFS_VOLUME_C__)
+extern __typeof (thunar_vfs_volume_get_type) IA__thunar_vfs_volume_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_volume_get_type IA__thunar_vfs_volume_get_type
+
+extern __typeof (thunar_vfs_volume_get_kind) IA__thunar_vfs_volume_get_kind __attribute((visibility("hidden")));
+#define thunar_vfs_volume_get_kind IA__thunar_vfs_volume_get_kind
+
+extern __typeof (thunar_vfs_volume_get_name) IA__thunar_vfs_volume_get_name __attribute((visibility("hidden")));
+#define thunar_vfs_volume_get_name IA__thunar_vfs_volume_get_name
+
+extern __typeof (thunar_vfs_volume_get_status) IA__thunar_vfs_volume_get_status __attribute((visibility("hidden")));
+#define thunar_vfs_volume_get_status IA__thunar_vfs_volume_get_status
+
+extern __typeof (thunar_vfs_volume_get_mount_point) IA__thunar_vfs_volume_get_mount_point __attribute((visibility("hidden")));
+#define thunar_vfs_volume_get_mount_point IA__thunar_vfs_volume_get_mount_point
+
+extern __typeof (thunar_vfs_volume_is_mounted) IA__thunar_vfs_volume_is_mounted __attribute((visibility("hidden")));
+#define thunar_vfs_volume_is_mounted IA__thunar_vfs_volume_is_mounted
+
+extern __typeof (thunar_vfs_volume_is_present) IA__thunar_vfs_volume_is_present __attribute((visibility("hidden")));
+#define thunar_vfs_volume_is_present IA__thunar_vfs_volume_is_present
+
+extern __typeof (thunar_vfs_volume_is_removable) IA__thunar_vfs_volume_is_removable __attribute((visibility("hidden")));
+#define thunar_vfs_volume_is_removable IA__thunar_vfs_volume_is_removable
+
+extern __typeof (thunar_vfs_volume_get_free_space) IA__thunar_vfs_volume_get_free_space __attribute((visibility("hidden")));
+#define thunar_vfs_volume_get_free_space IA__thunar_vfs_volume_get_free_space
+
+extern __typeof (thunar_vfs_volume_lookup_icon_name) IA__thunar_vfs_volume_lookup_icon_name __attribute((visibility("hidden")));
+#define thunar_vfs_volume_lookup_icon_name IA__thunar_vfs_volume_lookup_icon_name
+
+extern __typeof (thunar_vfs_volume_manager_get_type) IA__thunar_vfs_volume_manager_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunar_vfs_volume_manager_get_type IA__thunar_vfs_volume_manager_get_type
+
+extern __typeof (thunar_vfs_volume_manager_get_default) IA__thunar_vfs_volume_manager_get_default __attribute((visibility("hidden")));
+#define thunar_vfs_volume_manager_get_default IA__thunar_vfs_volume_manager_get_default
+
+extern __typeof (thunar_vfs_volume_manager_get_volume_by_info) IA__thunar_vfs_volume_manager_get_volume_by_info __attribute((visibility("hidden")));
+#define thunar_vfs_volume_manager_get_volume_by_info IA__thunar_vfs_volume_manager_get_volume_by_info
+
+extern __typeof (thunar_vfs_volume_manager_get_volumes) IA__thunar_vfs_volume_manager_get_volumes __attribute((visibility("hidden")));
+#define thunar_vfs_volume_manager_get_volumes IA__thunar_vfs_volume_manager_get_volumes
+
+#endif
+#endif
+
+#endif /* HAVE_GNUC_VISIBILITY */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-aliasdef.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-aliasdef.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-aliasdef.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,480 @@
+/* Generated by make-thunar-vfs-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#undef IN_SOURCE
+#define IN_SOURCE defined
+
+#if IN_HEADER(__THUNAR_VFS_H__)
+#if IN_SOURCE(__THUNAR_VFS_C__)
+#undef thunar_vfs_init 
+extern __typeof (thunar_vfs_init) thunar_vfs_init __attribute((alias("IA__thunar_vfs_init"), visibility("default")));
+
+#undef thunar_vfs_shutdown 
+extern __typeof (thunar_vfs_shutdown) thunar_vfs_shutdown __attribute((alias("IA__thunar_vfs_shutdown"), visibility("default")));
+
+#undef thunar_vfs_listdir 
+extern __typeof (thunar_vfs_listdir) thunar_vfs_listdir __attribute((alias("IA__thunar_vfs_listdir"), visibility("default")));
+
+#undef thunar_vfs_copy_file 
+extern __typeof (thunar_vfs_copy_file) thunar_vfs_copy_file __attribute((alias("IA__thunar_vfs_copy_file"), visibility("default")));
+
+#undef thunar_vfs_copy_files 
+extern __typeof (thunar_vfs_copy_files) thunar_vfs_copy_files __attribute((alias("IA__thunar_vfs_copy_files"), visibility("default")));
+
+#undef thunar_vfs_link_file 
+extern __typeof (thunar_vfs_link_file) thunar_vfs_link_file __attribute((alias("IA__thunar_vfs_link_file"), visibility("default")));
+
+#undef thunar_vfs_link_files 
+extern __typeof (thunar_vfs_link_files) thunar_vfs_link_files __attribute((alias("IA__thunar_vfs_link_files"), visibility("default")));
+
+#undef thunar_vfs_move_file 
+extern __typeof (thunar_vfs_move_file) thunar_vfs_move_file __attribute((alias("IA__thunar_vfs_move_file"), visibility("default")));
+
+#undef thunar_vfs_move_files 
+extern __typeof (thunar_vfs_move_files) thunar_vfs_move_files __attribute((alias("IA__thunar_vfs_move_files"), visibility("default")));
+
+#undef thunar_vfs_unlink_file 
+extern __typeof (thunar_vfs_unlink_file) thunar_vfs_unlink_file __attribute((alias("IA__thunar_vfs_unlink_file"), visibility("default")));
+
+#undef thunar_vfs_unlink_files 
+extern __typeof (thunar_vfs_unlink_files) thunar_vfs_unlink_files __attribute((alias("IA__thunar_vfs_unlink_files"), visibility("default")));
+
+#undef thunar_vfs_make_directory 
+extern __typeof (thunar_vfs_make_directory) thunar_vfs_make_directory __attribute((alias("IA__thunar_vfs_make_directory"), visibility("default")));
+
+#undef thunar_vfs_make_directories 
+extern __typeof (thunar_vfs_make_directories) thunar_vfs_make_directories __attribute((alias("IA__thunar_vfs_make_directories"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_CONFIG_H__)
+#if IN_SOURCE(__THUNAR_VFS_CONFIG_C__)
+#undef thunar_vfs_major_version 
+extern __typeof (thunar_vfs_major_version) thunar_vfs_major_version __attribute((alias("IA__thunar_vfs_major_version"), visibility("default")));
+
+#undef thunar_vfs_minor_version 
+extern __typeof (thunar_vfs_minor_version) thunar_vfs_minor_version __attribute((alias("IA__thunar_vfs_minor_version"), visibility("default")));
+
+#undef thunar_vfs_micro_version 
+extern __typeof (thunar_vfs_micro_version) thunar_vfs_micro_version __attribute((alias("IA__thunar_vfs_micro_version"), visibility("default")));
+
+#undef thunar_vfs_check_version 
+extern __typeof (thunar_vfs_check_version) thunar_vfs_check_version __attribute((alias("IA__thunar_vfs_check_version"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_INFO_C__)
+#undef thunar_vfs_info_get_type 
+extern __typeof (thunar_vfs_info_get_type) thunar_vfs_info_get_type __attribute((alias("IA__thunar_vfs_info_get_type"), visibility("default")));
+
+#undef thunar_vfs_info_new_for_path 
+extern __typeof (thunar_vfs_info_new_for_path) thunar_vfs_info_new_for_path __attribute((alias("IA__thunar_vfs_info_new_for_path"), visibility("default")));
+
+#undef thunar_vfs_info_unref 
+extern __typeof (thunar_vfs_info_unref) thunar_vfs_info_unref __attribute((alias("IA__thunar_vfs_info_unref"), visibility("default")));
+
+#undef thunar_vfs_info_copy 
+extern __typeof (thunar_vfs_info_copy) thunar_vfs_info_copy __attribute((alias("IA__thunar_vfs_info_copy"), visibility("default")));
+
+#undef thunar_vfs_info_execute 
+extern __typeof (thunar_vfs_info_execute) thunar_vfs_info_execute __attribute((alias("IA__thunar_vfs_info_execute"), visibility("default")));
+
+#undef thunar_vfs_info_rename 
+extern __typeof (thunar_vfs_info_rename) thunar_vfs_info_rename __attribute((alias("IA__thunar_vfs_info_rename"), visibility("default")));
+
+#undef thunar_vfs_info_matches 
+extern __typeof (thunar_vfs_info_matches) thunar_vfs_info_matches __attribute((alias("IA__thunar_vfs_info_matches"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_ENUM_TYPES_H__)
+#if IN_SOURCE(__THUNAR_VFS_ENUM_TYPES_C__)
+#undef thunar_vfs_file_flags_get_type 
+extern __typeof (thunar_vfs_file_flags_get_type) thunar_vfs_file_flags_get_type __attribute((alias("IA__thunar_vfs_file_flags_get_type"), visibility("default")));
+
+#undef thunar_vfs_file_mode_get_type 
+extern __typeof (thunar_vfs_file_mode_get_type) thunar_vfs_file_mode_get_type __attribute((alias("IA__thunar_vfs_file_mode_get_type"), visibility("default")));
+
+#undef thunar_vfs_file_type_get_type 
+extern __typeof (thunar_vfs_file_type_get_type) thunar_vfs_file_type_get_type __attribute((alias("IA__thunar_vfs_file_type_get_type"), visibility("default")));
+
+#undef thunar_vfs_interactive_job_response_get_type 
+extern __typeof (thunar_vfs_interactive_job_response_get_type) thunar_vfs_interactive_job_response_get_type __attribute((alias("IA__thunar_vfs_interactive_job_response_get_type"), visibility("default")));
+
+#undef thunar_vfs_mime_application_error_get_type 
+extern __typeof (thunar_vfs_mime_application_error_get_type) thunar_vfs_mime_application_error_get_type __attribute((alias("IA__thunar_vfs_mime_application_error_get_type"), visibility("default")));
+
+#undef thunar_vfs_mime_application_flags_get_type 
+extern __typeof (thunar_vfs_mime_application_flags_get_type) thunar_vfs_mime_application_flags_get_type __attribute((alias("IA__thunar_vfs_mime_application_flags_get_type"), visibility("default")));
+
+#undef thunar_vfs_monitor_event_get_type 
+extern __typeof (thunar_vfs_monitor_event_get_type) thunar_vfs_monitor_event_get_type __attribute((alias("IA__thunar_vfs_monitor_event_get_type"), visibility("default")));
+
+#undef thunar_vfs_thumb_size_get_type 
+extern __typeof (thunar_vfs_thumb_size_get_type) thunar_vfs_thumb_size_get_type __attribute((alias("IA__thunar_vfs_thumb_size_get_type"), visibility("default")));
+
+#undef thunar_vfs_volume_kind_get_type 
+extern __typeof (thunar_vfs_volume_kind_get_type) thunar_vfs_volume_kind_get_type __attribute((alias("IA__thunar_vfs_volume_kind_get_type"), visibility("default")));
+
+#undef thunar_vfs_volume_status_get_type 
+extern __typeof (thunar_vfs_volume_status_get_type) thunar_vfs_volume_status_get_type __attribute((alias("IA__thunar_vfs_volume_status_get_type"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_INTERACTIVE_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_INTERACTIVE_JOB_C__)
+#undef thunar_vfs_interactive_job_get_type 
+extern __typeof (thunar_vfs_interactive_job_get_type) thunar_vfs_interactive_job_get_type __attribute((alias("IA__thunar_vfs_interactive_job_get_type"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_JOB_C__)
+#undef thunar_vfs_job_get_type 
+extern __typeof (thunar_vfs_job_get_type) thunar_vfs_job_get_type __attribute((alias("IA__thunar_vfs_job_get_type"), visibility("default")));
+
+#undef thunar_vfs_job_launch 
+extern __typeof (thunar_vfs_job_launch) thunar_vfs_job_launch __attribute((alias("IA__thunar_vfs_job_launch"), visibility("default")));
+
+#undef thunar_vfs_job_cancel 
+extern __typeof (thunar_vfs_job_cancel) thunar_vfs_job_cancel __attribute((alias("IA__thunar_vfs_job_cancel"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_APPLICATION_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_APPLICATION_C__)
+#undef thunar_vfs_mime_application_error_quark 
+extern __typeof (thunar_vfs_mime_application_error_quark) thunar_vfs_mime_application_error_quark __attribute((alias("IA__thunar_vfs_mime_application_error_quark"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_type 
+extern __typeof (thunar_vfs_mime_application_get_type) thunar_vfs_mime_application_get_type __attribute((alias("IA__thunar_vfs_mime_application_get_type"), visibility("default")));
+
+#undef thunar_vfs_mime_application_new_from_desktop_id 
+extern __typeof (thunar_vfs_mime_application_new_from_desktop_id) thunar_vfs_mime_application_new_from_desktop_id __attribute((alias("IA__thunar_vfs_mime_application_new_from_desktop_id"), visibility("default")));
+
+#undef thunar_vfs_mime_application_new_from_file 
+extern __typeof (thunar_vfs_mime_application_new_from_file) thunar_vfs_mime_application_new_from_file __attribute((alias("IA__thunar_vfs_mime_application_new_from_file"), visibility("default")));
+
+#undef thunar_vfs_mime_application_ref 
+extern __typeof (thunar_vfs_mime_application_ref) thunar_vfs_mime_application_ref __attribute((alias("IA__thunar_vfs_mime_application_ref"), visibility("default")));
+
+#undef thunar_vfs_mime_application_unref 
+extern __typeof (thunar_vfs_mime_application_unref) thunar_vfs_mime_application_unref __attribute((alias("IA__thunar_vfs_mime_application_unref"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_command 
+extern __typeof (thunar_vfs_mime_application_get_command) thunar_vfs_mime_application_get_command __attribute((alias("IA__thunar_vfs_mime_application_get_command"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_desktop_id 
+extern __typeof (thunar_vfs_mime_application_get_desktop_id) thunar_vfs_mime_application_get_desktop_id __attribute((alias("IA__thunar_vfs_mime_application_get_desktop_id"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_flags 
+extern __typeof (thunar_vfs_mime_application_get_flags) thunar_vfs_mime_application_get_flags __attribute((alias("IA__thunar_vfs_mime_application_get_flags"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_name 
+extern __typeof (thunar_vfs_mime_application_get_name) thunar_vfs_mime_application_get_name __attribute((alias("IA__thunar_vfs_mime_application_get_name"), visibility("default")));
+
+#undef thunar_vfs_mime_application_get_mime_types 
+extern __typeof (thunar_vfs_mime_application_get_mime_types) thunar_vfs_mime_application_get_mime_types __attribute((alias("IA__thunar_vfs_mime_application_get_mime_types"), visibility("default")));
+
+#undef thunar_vfs_mime_application_exec 
+extern __typeof (thunar_vfs_mime_application_exec) thunar_vfs_mime_application_exec __attribute((alias("IA__thunar_vfs_mime_application_exec"), visibility("default")));
+
+#undef thunar_vfs_mime_application_exec_with_env 
+extern __typeof (thunar_vfs_mime_application_exec_with_env) thunar_vfs_mime_application_exec_with_env __attribute((alias("IA__thunar_vfs_mime_application_exec_with_env"), visibility("default")));
+
+#undef thunar_vfs_mime_application_lookup_icon_name 
+extern __typeof (thunar_vfs_mime_application_lookup_icon_name) thunar_vfs_mime_application_lookup_icon_name __attribute((alias("IA__thunar_vfs_mime_application_lookup_icon_name"), visibility("default")));
+
+#undef thunar_vfs_mime_application_hash 
+extern __typeof (thunar_vfs_mime_application_hash) thunar_vfs_mime_application_hash __attribute((alias("IA__thunar_vfs_mime_application_hash"), visibility("default")));
+
+#undef thunar_vfs_mime_application_equal 
+extern __typeof (thunar_vfs_mime_application_equal) thunar_vfs_mime_application_equal __attribute((alias("IA__thunar_vfs_mime_application_equal"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_DATABASE_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_DATABASE_C__)
+#undef thunar_vfs_mime_database_get_type 
+extern __typeof (thunar_vfs_mime_database_get_type) thunar_vfs_mime_database_get_type __attribute((alias("IA__thunar_vfs_mime_database_get_type"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_default 
+extern __typeof (thunar_vfs_mime_database_get_default) thunar_vfs_mime_database_get_default __attribute((alias("IA__thunar_vfs_mime_database_get_default"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_info 
+extern __typeof (thunar_vfs_mime_database_get_info) thunar_vfs_mime_database_get_info __attribute((alias("IA__thunar_vfs_mime_database_get_info"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_info_for_data 
+extern __typeof (thunar_vfs_mime_database_get_info_for_data) thunar_vfs_mime_database_get_info_for_data __attribute((alias("IA__thunar_vfs_mime_database_get_info_for_data"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_info_for_name 
+extern __typeof (thunar_vfs_mime_database_get_info_for_name) thunar_vfs_mime_database_get_info_for_name __attribute((alias("IA__thunar_vfs_mime_database_get_info_for_name"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_info_for_file 
+extern __typeof (thunar_vfs_mime_database_get_info_for_file) thunar_vfs_mime_database_get_info_for_file __attribute((alias("IA__thunar_vfs_mime_database_get_info_for_file"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_infos_for_info 
+extern __typeof (thunar_vfs_mime_database_get_infos_for_info) thunar_vfs_mime_database_get_infos_for_info __attribute((alias("IA__thunar_vfs_mime_database_get_infos_for_info"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_applications 
+extern __typeof (thunar_vfs_mime_database_get_applications) thunar_vfs_mime_database_get_applications __attribute((alias("IA__thunar_vfs_mime_database_get_applications"), visibility("default")));
+
+#undef thunar_vfs_mime_database_get_default_application 
+extern __typeof (thunar_vfs_mime_database_get_default_application) thunar_vfs_mime_database_get_default_application __attribute((alias("IA__thunar_vfs_mime_database_get_default_application"), visibility("default")));
+
+#undef thunar_vfs_mime_database_set_default_application 
+extern __typeof (thunar_vfs_mime_database_set_default_application) thunar_vfs_mime_database_set_default_application __attribute((alias("IA__thunar_vfs_mime_database_set_default_application"), visibility("default")));
+
+#undef thunar_vfs_mime_database_add_application 
+extern __typeof (thunar_vfs_mime_database_add_application) thunar_vfs_mime_database_add_application __attribute((alias("IA__thunar_vfs_mime_database_add_application"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MIME_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_INFO_C__)
+#undef thunar_vfs_mime_info_get_type 
+extern __typeof (thunar_vfs_mime_info_get_type) thunar_vfs_mime_info_get_type __attribute((alias("IA__thunar_vfs_mime_info_get_type"), visibility("default")));
+
+#undef thunar_vfs_mime_info_new 
+extern __typeof (thunar_vfs_mime_info_new) thunar_vfs_mime_info_new __attribute((alias("IA__thunar_vfs_mime_info_new"), visibility("default")));
+
+#undef thunar_vfs_mime_info_unref 
+extern __typeof (thunar_vfs_mime_info_unref) thunar_vfs_mime_info_unref __attribute((alias("IA__thunar_vfs_mime_info_unref"), visibility("default")));
+
+#undef thunar_vfs_mime_info_get_comment 
+extern __typeof (thunar_vfs_mime_info_get_comment) thunar_vfs_mime_info_get_comment __attribute((alias("IA__thunar_vfs_mime_info_get_comment"), visibility("default")));
+
+#undef thunar_vfs_mime_info_get_media 
+extern __typeof (thunar_vfs_mime_info_get_media) thunar_vfs_mime_info_get_media __attribute((alias("IA__thunar_vfs_mime_info_get_media"), visibility("default")));
+
+#undef thunar_vfs_mime_info_get_subtype 
+extern __typeof (thunar_vfs_mime_info_get_subtype) thunar_vfs_mime_info_get_subtype __attribute((alias("IA__thunar_vfs_mime_info_get_subtype"), visibility("default")));
+
+#undef thunar_vfs_mime_info_hash 
+extern __typeof (thunar_vfs_mime_info_hash) thunar_vfs_mime_info_hash __attribute((alias("IA__thunar_vfs_mime_info_hash"), visibility("default")));
+
+#undef thunar_vfs_mime_info_equal 
+extern __typeof (thunar_vfs_mime_info_equal) thunar_vfs_mime_info_equal __attribute((alias("IA__thunar_vfs_mime_info_equal"), visibility("default")));
+
+#undef thunar_vfs_mime_info_lookup_icon_name 
+extern __typeof (thunar_vfs_mime_info_lookup_icon_name) thunar_vfs_mime_info_lookup_icon_name __attribute((alias("IA__thunar_vfs_mime_info_lookup_icon_name"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_MONITOR_H__)
+#if IN_SOURCE(__THUNAR_VFS_MONITOR_C__)
+#undef thunar_vfs_monitor_get_type 
+extern __typeof (thunar_vfs_monitor_get_type) thunar_vfs_monitor_get_type __attribute((alias("IA__thunar_vfs_monitor_get_type"), visibility("default")));
+
+#undef thunar_vfs_monitor_get_default 
+extern __typeof (thunar_vfs_monitor_get_default) thunar_vfs_monitor_get_default __attribute((alias("IA__thunar_vfs_monitor_get_default"), visibility("default")));
+
+#undef thunar_vfs_monitor_add_directory 
+extern __typeof (thunar_vfs_monitor_add_directory) thunar_vfs_monitor_add_directory __attribute((alias("IA__thunar_vfs_monitor_add_directory"), visibility("default")));
+
+#undef thunar_vfs_monitor_add_file 
+extern __typeof (thunar_vfs_monitor_add_file) thunar_vfs_monitor_add_file __attribute((alias("IA__thunar_vfs_monitor_add_file"), visibility("default")));
+
+#undef thunar_vfs_monitor_remove 
+extern __typeof (thunar_vfs_monitor_remove) thunar_vfs_monitor_remove __attribute((alias("IA__thunar_vfs_monitor_remove"), visibility("default")));
+
+#undef thunar_vfs_monitor_feed 
+extern __typeof (thunar_vfs_monitor_feed) thunar_vfs_monitor_feed __attribute((alias("IA__thunar_vfs_monitor_feed"), visibility("default")));
+
+#undef thunar_vfs_monitor_wait 
+extern __typeof (thunar_vfs_monitor_wait) thunar_vfs_monitor_wait __attribute((alias("IA__thunar_vfs_monitor_wait"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_PATH_H__)
+#if IN_SOURCE(__THUNAR_VFS_PATH_C__)
+#undef thunar_vfs_path_get_type 
+extern __typeof (thunar_vfs_path_get_type) thunar_vfs_path_get_type __attribute((alias("IA__thunar_vfs_path_get_type"), visibility("default")));
+
+#undef thunar_vfs_path_new 
+extern __typeof (thunar_vfs_path_new) thunar_vfs_path_new __attribute((alias("IA__thunar_vfs_path_new"), visibility("default")));
+
+#undef thunar_vfs_path_get_for_home 
+extern __typeof (thunar_vfs_path_get_for_home) thunar_vfs_path_get_for_home __attribute((alias("IA__thunar_vfs_path_get_for_home"), visibility("default")));
+
+#undef thunar_vfs_path_get_for_root 
+extern __typeof (thunar_vfs_path_get_for_root) thunar_vfs_path_get_for_root __attribute((alias("IA__thunar_vfs_path_get_for_root"), visibility("default")));
+
+#undef thunar_vfs_path_unref 
+extern __typeof (thunar_vfs_path_unref) thunar_vfs_path_unref __attribute((alias("IA__thunar_vfs_path_unref"), visibility("default")));
+
+#undef thunar_vfs_path_hash 
+extern __typeof (thunar_vfs_path_hash) thunar_vfs_path_hash __attribute((alias("IA__thunar_vfs_path_hash"), visibility("default")));
+
+#undef thunar_vfs_path_equal 
+extern __typeof (thunar_vfs_path_equal) thunar_vfs_path_equal __attribute((alias("IA__thunar_vfs_path_equal"), visibility("default")));
+
+#undef thunar_vfs_path_relative 
+extern __typeof (thunar_vfs_path_relative) thunar_vfs_path_relative __attribute((alias("IA__thunar_vfs_path_relative"), visibility("default")));
+
+#undef thunar_vfs_path_is_home 
+extern __typeof (thunar_vfs_path_is_home) thunar_vfs_path_is_home __attribute((alias("IA__thunar_vfs_path_is_home"), visibility("default")));
+
+#undef thunar_vfs_path_dup_string 
+extern __typeof (thunar_vfs_path_dup_string) thunar_vfs_path_dup_string __attribute((alias("IA__thunar_vfs_path_dup_string"), visibility("default")));
+
+#undef thunar_vfs_path_to_string 
+extern __typeof (thunar_vfs_path_to_string) thunar_vfs_path_to_string __attribute((alias("IA__thunar_vfs_path_to_string"), visibility("default")));
+
+#undef thunar_vfs_path_dup_uri 
+extern __typeof (thunar_vfs_path_dup_uri) thunar_vfs_path_dup_uri __attribute((alias("IA__thunar_vfs_path_dup_uri"), visibility("default")));
+
+#undef thunar_vfs_path_to_uri 
+extern __typeof (thunar_vfs_path_to_uri) thunar_vfs_path_to_uri __attribute((alias("IA__thunar_vfs_path_to_uri"), visibility("default")));
+
+#undef thunar_vfs_path_list_from_string 
+extern __typeof (thunar_vfs_path_list_from_string) thunar_vfs_path_list_from_string __attribute((alias("IA__thunar_vfs_path_list_from_string"), visibility("default")));
+
+#undef thunar_vfs_path_list_to_string 
+extern __typeof (thunar_vfs_path_list_to_string) thunar_vfs_path_list_to_string __attribute((alias("IA__thunar_vfs_path_list_to_string"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+#undef thunar_vfs_thumb_factory_get_type 
+extern __typeof (thunar_vfs_thumb_factory_get_type) thunar_vfs_thumb_factory_get_type __attribute((alias("IA__thunar_vfs_thumb_factory_get_type"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_new 
+extern __typeof (thunar_vfs_thumb_factory_new) thunar_vfs_thumb_factory_new __attribute((alias("IA__thunar_vfs_thumb_factory_new"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_lookup_thumbnail 
+extern __typeof (thunar_vfs_thumb_factory_lookup_thumbnail) thunar_vfs_thumb_factory_lookup_thumbnail __attribute((alias("IA__thunar_vfs_thumb_factory_lookup_thumbnail"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_can_thumbnail 
+extern __typeof (thunar_vfs_thumb_factory_can_thumbnail) thunar_vfs_thumb_factory_can_thumbnail __attribute((alias("IA__thunar_vfs_thumb_factory_can_thumbnail"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_has_failed_thumbnail 
+extern __typeof (thunar_vfs_thumb_factory_has_failed_thumbnail) thunar_vfs_thumb_factory_has_failed_thumbnail __attribute((alias("IA__thunar_vfs_thumb_factory_has_failed_thumbnail"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_generate_thumbnail 
+extern __typeof (thunar_vfs_thumb_factory_generate_thumbnail) thunar_vfs_thumb_factory_generate_thumbnail __attribute((alias("IA__thunar_vfs_thumb_factory_generate_thumbnail"), visibility("default")));
+
+#undef thunar_vfs_thumb_factory_store_thumbnail 
+extern __typeof (thunar_vfs_thumb_factory_store_thumbnail) thunar_vfs_thumb_factory_store_thumbnail __attribute((alias("IA__thunar_vfs_thumb_factory_store_thumbnail"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+#undef thunar_vfs_thumbnail_for_path 
+extern __typeof (thunar_vfs_thumbnail_for_path) thunar_vfs_thumbnail_for_path __attribute((alias("IA__thunar_vfs_thumbnail_for_path"), visibility("default")));
+
+#undef thunar_vfs_thumbnail_is_valid 
+extern __typeof (thunar_vfs_thumbnail_is_valid) thunar_vfs_thumbnail_is_valid __attribute((alias("IA__thunar_vfs_thumbnail_is_valid"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_USER_H__)
+#if IN_SOURCE(__THUNAR_VFS_USER_C__)
+#undef thunar_vfs_group_get_type 
+extern __typeof (thunar_vfs_group_get_type) thunar_vfs_group_get_type __attribute((alias("IA__thunar_vfs_group_get_type"), visibility("default")));
+
+#undef thunar_vfs_group_get_id 
+extern __typeof (thunar_vfs_group_get_id) thunar_vfs_group_get_id __attribute((alias("IA__thunar_vfs_group_get_id"), visibility("default")));
+
+#undef thunar_vfs_group_get_name 
+extern __typeof (thunar_vfs_group_get_name) thunar_vfs_group_get_name __attribute((alias("IA__thunar_vfs_group_get_name"), visibility("default")));
+
+#undef thunar_vfs_user_get_type 
+extern __typeof (thunar_vfs_user_get_type) thunar_vfs_user_get_type __attribute((alias("IA__thunar_vfs_user_get_type"), visibility("default")));
+
+#undef thunar_vfs_user_get_groups 
+extern __typeof (thunar_vfs_user_get_groups) thunar_vfs_user_get_groups __attribute((alias("IA__thunar_vfs_user_get_groups"), visibility("default")));
+
+#undef thunar_vfs_user_get_primary_group 
+extern __typeof (thunar_vfs_user_get_primary_group) thunar_vfs_user_get_primary_group __attribute((alias("IA__thunar_vfs_user_get_primary_group"), visibility("default")));
+
+#undef thunar_vfs_user_get_id 
+extern __typeof (thunar_vfs_user_get_id) thunar_vfs_user_get_id __attribute((alias("IA__thunar_vfs_user_get_id"), visibility("default")));
+
+#undef thunar_vfs_user_get_name 
+extern __typeof (thunar_vfs_user_get_name) thunar_vfs_user_get_name __attribute((alias("IA__thunar_vfs_user_get_name"), visibility("default")));
+
+#undef thunar_vfs_user_get_real_name 
+extern __typeof (thunar_vfs_user_get_real_name) thunar_vfs_user_get_real_name __attribute((alias("IA__thunar_vfs_user_get_real_name"), visibility("default")));
+
+#undef thunar_vfs_user_is_me 
+extern __typeof (thunar_vfs_user_is_me) thunar_vfs_user_is_me __attribute((alias("IA__thunar_vfs_user_is_me"), visibility("default")));
+
+#undef thunar_vfs_user_manager_get_type 
+extern __typeof (thunar_vfs_user_manager_get_type) thunar_vfs_user_manager_get_type __attribute((alias("IA__thunar_vfs_user_manager_get_type"), visibility("default")));
+
+#undef thunar_vfs_user_manager_get_default 
+extern __typeof (thunar_vfs_user_manager_get_default) thunar_vfs_user_manager_get_default __attribute((alias("IA__thunar_vfs_user_manager_get_default"), visibility("default")));
+
+#undef thunar_vfs_user_manager_get_group_by_id 
+extern __typeof (thunar_vfs_user_manager_get_group_by_id) thunar_vfs_user_manager_get_group_by_id __attribute((alias("IA__thunar_vfs_user_manager_get_group_by_id"), visibility("default")));
+
+#undef thunar_vfs_user_manager_get_user_by_id 
+extern __typeof (thunar_vfs_user_manager_get_user_by_id) thunar_vfs_user_manager_get_user_by_id __attribute((alias("IA__thunar_vfs_user_manager_get_user_by_id"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_UTIL_H__)
+#if IN_SOURCE(__THUNAR_VFS_UTIL_C__)
+#undef thunar_vfs_humanize_size 
+extern __typeof (thunar_vfs_humanize_size) thunar_vfs_humanize_size __attribute((alias("IA__thunar_vfs_humanize_size"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNAR_VFS_VOLUME_H__)
+#if IN_SOURCE(__THUNAR_VFS_VOLUME_C__)
+#undef thunar_vfs_volume_get_type 
+extern __typeof (thunar_vfs_volume_get_type) thunar_vfs_volume_get_type __attribute((alias("IA__thunar_vfs_volume_get_type"), visibility("default")));
+
+#undef thunar_vfs_volume_get_kind 
+extern __typeof (thunar_vfs_volume_get_kind) thunar_vfs_volume_get_kind __attribute((alias("IA__thunar_vfs_volume_get_kind"), visibility("default")));
+
+#undef thunar_vfs_volume_get_name 
+extern __typeof (thunar_vfs_volume_get_name) thunar_vfs_volume_get_name __attribute((alias("IA__thunar_vfs_volume_get_name"), visibility("default")));
+
+#undef thunar_vfs_volume_get_status 
+extern __typeof (thunar_vfs_volume_get_status) thunar_vfs_volume_get_status __attribute((alias("IA__thunar_vfs_volume_get_status"), visibility("default")));
+
+#undef thunar_vfs_volume_get_mount_point 
+extern __typeof (thunar_vfs_volume_get_mount_point) thunar_vfs_volume_get_mount_point __attribute((alias("IA__thunar_vfs_volume_get_mount_point"), visibility("default")));
+
+#undef thunar_vfs_volume_is_mounted 
+extern __typeof (thunar_vfs_volume_is_mounted) thunar_vfs_volume_is_mounted __attribute((alias("IA__thunar_vfs_volume_is_mounted"), visibility("default")));
+
+#undef thunar_vfs_volume_is_present 
+extern __typeof (thunar_vfs_volume_is_present) thunar_vfs_volume_is_present __attribute((alias("IA__thunar_vfs_volume_is_present"), visibility("default")));
+
+#undef thunar_vfs_volume_is_removable 
+extern __typeof (thunar_vfs_volume_is_removable) thunar_vfs_volume_is_removable __attribute((alias("IA__thunar_vfs_volume_is_removable"), visibility("default")));
+
+#undef thunar_vfs_volume_get_free_space 
+extern __typeof (thunar_vfs_volume_get_free_space) thunar_vfs_volume_get_free_space __attribute((alias("IA__thunar_vfs_volume_get_free_space"), visibility("default")));
+
+#undef thunar_vfs_volume_lookup_icon_name 
+extern __typeof (thunar_vfs_volume_lookup_icon_name) thunar_vfs_volume_lookup_icon_name __attribute((alias("IA__thunar_vfs_volume_lookup_icon_name"), visibility("default")));
+
+#undef thunar_vfs_volume_manager_get_type 
+extern __typeof (thunar_vfs_volume_manager_get_type) thunar_vfs_volume_manager_get_type __attribute((alias("IA__thunar_vfs_volume_manager_get_type"), visibility("default")));
+
+#undef thunar_vfs_volume_manager_get_default 
+extern __typeof (thunar_vfs_volume_manager_get_default) thunar_vfs_volume_manager_get_default __attribute((alias("IA__thunar_vfs_volume_manager_get_default"), visibility("default")));
+
+#undef thunar_vfs_volume_manager_get_volume_by_info 
+extern __typeof (thunar_vfs_volume_manager_get_volume_by_info) thunar_vfs_volume_manager_get_volume_by_info __attribute((alias("IA__thunar_vfs_volume_manager_get_volume_by_info"), visibility("default")));
+
+#undef thunar_vfs_volume_manager_get_volumes 
+extern __typeof (thunar_vfs_volume_manager_get_volumes) thunar_vfs_volume_manager_get_volumes __attribute((alias("IA__thunar_vfs_volume_manager_get_volumes"), visibility("default")));
+
+#endif
+#endif
+
+#endif /* HAVE_GNUC_VISIBILITY */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,126 @@
+/* $Id: thunar-vfs-config.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunar-vfs/thunar-vfs-config.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/**
+ * thunar_vfs_major_version:
+ *
+ * The major version number of the
+ * <systemitem class="library">thunar-vfs</systemitem> library (e.g. in
+ * version 0.5.1 this is 0).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunar-vfs</systemitem> library you have
+ * linked against. Contrast with the #THUNAR_VFS_MAJOR_VERSION macro, which
+ * represents the major version of the
+ * <systemitem class="library">thunar-vfs</systemitem> headers you have
+ * included.
+ **/
+const guint thunar_vfs_major_version = THUNAR_VFS_MAJOR_VERSION;
+
+
+
+/**
+ * thunar_vfs_minor_version:
+ *
+ * The minor version number of the
+ * <systemitem class="library">thunar-vfs</systemitem> library (e.g. in
+ * version 0.5.1 this is 5).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunar-vfs</systemitem> library you have
+ * linked against. Contrast with the #THUNAR_VFS_MINOR_VERSION macro, which
+ * represents the minor version of the
+ * <systemitem class="library">thunar-vfs</systemitem> headers you have
+ * included.
+ **/
+const guint thunar_vfs_minor_version = THUNAR_VFS_MINOR_VERSION;
+
+
+
+/**
+ * thunar_vfs_micro_version:
+ *
+ * The micro version number of the
+ * <systemitem class="library">thunar-vfs</systemitem> library (e.g. in
+ * version 0.5.1 this is 1).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunar-vfs</systemitem> library you have
+ * linked against. Contrast with the #THUNAR_VFS_MICRO_VERSION macro, which
+ * represents the micro version of the
+ * <systemitem class="library">thunar-vfs</systemitem> headers you have
+ * included.
+ **/
+const guint thunar_vfs_micro_version = THUNAR_VFS_MICRO_VERSION;
+
+
+
+/**
+ * thunar_vfs_check_version:
+ * @required_major : the required major version.
+ * @required_minor : the required minor version.
+ * @required_micro : the required micro version.
+ *
+ * Checks that the <systemitem class="library">thunar-vfs</systemitem> library
+ * in use is compatible with the given version. Generally you would pass in
+ * the constants #THUNAR_VFS_MAJOR_VERSION, #THUNAR_VFS_MINOR_VERSION and
+ * #THUNAR_VFS_VERSION_MICRO as the three arguments to this function; that produces
+ * a check that the library in use is compatible with the version of
+ * <systemitem class="library">thunar-vfs</systemitem> the extension was
+ * compiled against.
+ *
+ * <example>
+ * <title>Checking the runtime version of the Thunar VFS library</title>
+ * <programlisting>
+ * const gchar *mismatch;
+ * mismatch = thunar_vfs_check_version (THUNAR_VFS_VERSION_MAJOR,
+ *                                      THUNAR_VFS_VERSION_MINOR,
+ *                                      THUNAR_VFS_VERSION_MICRO);
+ * if (G_UNLIKELY (mismatch != NULL))
+ *   g_error ("Version mismatch: %<!---->s", mismatch);
+ * </programlisting>
+ * </example>
+ *
+ * Return value: %NULL if the library is compatible with the given version,
+ *               or a string describing the version mismatch. The returned
+ *               string is owned by the library and must not be freed or
+ *               modified by the caller.
+ **/
+const gchar*
+thunar_vfs_check_version (guint required_major,
+                          guint required_minor,
+                          guint required_micro)
+{
+  return NULL;
+}
+
+
+
+#define __THUNAR_VFS_CONFIG_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,54 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_CONFIG_H__
+#define __THUNAR_VFS_CONFIG_H__
+
+#include <exo/exo.h>
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+G_BEGIN_DECLS;
+
+#define THUNAR_VFS_MAJOR_VERSION 0
+#define THUNAR_VFS_MINOR_VERSION 1
+#define THUNAR_VFS_MICRO_VERSION 4
+
+#define THUNAR_VFS_CHECK_VERSION(major,minor,micro) \
+  (THUNAR_VFS_MAJOR_VERSION > (major) \
+   || (THUNAR_VFS_MAJOR_VERSION == (major) \
+       && THUNAR_VFS_MINOR_VERSION > (minor)) \
+   || (THUNAR_VFS_MAJOR_VERSION == (major) \
+       && THUNAR_VFS_MINOR_VERSION == (minor) \
+       && THUNAR_VFS_MICRO_VERSION >= (micro)))
+
+extern const guint thunar_vfs_major_version;
+extern const guint thunar_vfs_minor_version;
+extern const guint thunar_vfs_micro_version;
+
+const gchar *thunar_vfs_check_version (guint required_major,
+                                       guint required_minor,
+                                       guint required_micro);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_CONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-config.h.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,54 @@
+/* $Id$ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_CONFIG_H__
+#define __THUNAR_VFS_CONFIG_H__
+
+#include <exo/exo.h>
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+G_BEGIN_DECLS;
+
+#define THUNAR_VFS_MAJOR_VERSION @THUNAR_VERSION_MAJOR@
+#define THUNAR_VFS_MINOR_VERSION @THUNAR_VERSION_MINOR@
+#define THUNAR_VFS_MICRO_VERSION @THUNAR_VERSION_MICRO@
+
+#define THUNAR_VFS_CHECK_VERSION(major,minor,micro) \
+  (THUNAR_VFS_MAJOR_VERSION > (major) \
+   || (THUNAR_VFS_MAJOR_VERSION == (major) \
+       && THUNAR_VFS_MINOR_VERSION > (minor)) \
+   || (THUNAR_VFS_MAJOR_VERSION == (major) \
+       && THUNAR_VFS_MINOR_VERSION == (minor) \
+       && THUNAR_VFS_MICRO_VERSION >= (micro)))
+
+extern const guint thunar_vfs_major_version;
+extern const guint thunar_vfs_minor_version;
+extern const guint thunar_vfs_micro_version;
+
+const gchar *thunar_vfs_check_version (guint required_major,
+                                       guint required_minor,
+                                       guint required_micro);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_CONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,193 @@
+
+/* Generated data (by glib-mkenums) */
+
+#undef GTK_DISABLE_DEPRECATED
+#define GTK_ENABLE_BROKEN
+#include <thunar-vfs/thunar-vfs.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+/* enumerations from "thunar-vfs-interactive-job.h" */
+GType
+thunar_vfs_interactive_job_response_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GFlagsValue values[] = {
+	{ THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES, "THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES", "yes" },
+	{ THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL, "THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL", "yes-all" },
+	{ THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO, "THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO", "no" },
+	{ THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL, "THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL", "cancel" },
+	{ 0, NULL, NULL }
+	};
+	type = g_flags_register_static ("ThunarVfsInteractiveJobResponse", values);
+  }
+	return type;
+}
+
+/* enumerations from "thunar-vfs-mime-application.h" */
+GType
+thunar_vfs_mime_application_error_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GEnumValue values[] = {
+	{ THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY, "THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY", "only" },
+	{ 0, NULL, NULL }
+	};
+	type = g_enum_register_static ("ThunarVfsMimeApplicationError", values);
+  }
+	return type;
+}
+GType
+thunar_vfs_mime_application_flags_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GFlagsValue values[] = {
+	{ THUNAR_VFS_MIME_APPLICATION_HIDDEN, "THUNAR_VFS_MIME_APPLICATION_HIDDEN", "hidden" },
+	{ THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL, "THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL", "requires-terminal" },
+	{ THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY, "THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY", "supports-startup-notify" },
+	{ THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI, "THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI", "supports-multi" },
+	{ 0, NULL, NULL }
+	};
+	type = g_flags_register_static ("ThunarVfsMimeApplicationFlags", values);
+  }
+	return type;
+}
+
+/* enumerations from "thunar-vfs-monitor.h" */
+GType
+thunar_vfs_monitor_event_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GEnumValue values[] = {
+	{ THUNAR_VFS_MONITOR_EVENT_CHANGED, "THUNAR_VFS_MONITOR_EVENT_CHANGED", "changed" },
+	{ THUNAR_VFS_MONITOR_EVENT_CREATED, "THUNAR_VFS_MONITOR_EVENT_CREATED", "created" },
+	{ THUNAR_VFS_MONITOR_EVENT_DELETED, "THUNAR_VFS_MONITOR_EVENT_DELETED", "deleted" },
+	{ 0, NULL, NULL }
+	};
+	type = g_enum_register_static ("ThunarVfsMonitorEvent", values);
+  }
+	return type;
+}
+
+/* enumerations from "thunar-vfs-thumb.h" */
+GType
+thunar_vfs_thumb_size_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GEnumValue values[] = {
+	{ THUNAR_VFS_THUMB_SIZE_NORMAL, "THUNAR_VFS_THUMB_SIZE_NORMAL", "normal" },
+	{ THUNAR_VFS_THUMB_SIZE_LARGE, "THUNAR_VFS_THUMB_SIZE_LARGE", "large" },
+	{ 0, NULL, NULL }
+	};
+	type = g_enum_register_static ("ThunarVfsThumbSize", values);
+  }
+	return type;
+}
+
+/* enumerations from "thunar-vfs-types.h" */
+GType
+thunar_vfs_file_type_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GEnumValue values[] = {
+	{ THUNAR_VFS_FILE_TYPE_SOCKET, "THUNAR_VFS_FILE_TYPE_SOCKET", "socket" },
+	{ THUNAR_VFS_FILE_TYPE_SYMLINK, "THUNAR_VFS_FILE_TYPE_SYMLINK", "symlink" },
+	{ THUNAR_VFS_FILE_TYPE_REGULAR, "THUNAR_VFS_FILE_TYPE_REGULAR", "regular" },
+	{ THUNAR_VFS_FILE_TYPE_BLOCKDEV, "THUNAR_VFS_FILE_TYPE_BLOCKDEV", "blockdev" },
+	{ THUNAR_VFS_FILE_TYPE_DIRECTORY, "THUNAR_VFS_FILE_TYPE_DIRECTORY", "directory" },
+	{ THUNAR_VFS_FILE_TYPE_CHARDEV, "THUNAR_VFS_FILE_TYPE_CHARDEV", "chardev" },
+	{ THUNAR_VFS_FILE_TYPE_FIFO, "THUNAR_VFS_FILE_TYPE_FIFO", "fifo" },
+	{ THUNAR_VFS_FILE_TYPE_UNKNOWN, "THUNAR_VFS_FILE_TYPE_UNKNOWN", "unknown" },
+	{ 0, NULL, NULL }
+	};
+	type = g_enum_register_static ("ThunarVfsFileType", values);
+  }
+	return type;
+}
+GType
+thunar_vfs_file_mode_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GFlagsValue values[] = {
+	{ THUNAR_VFS_FILE_MODE_SUID, "THUNAR_VFS_FILE_MODE_SUID", "suid" },
+	{ THUNAR_VFS_FILE_MODE_SGID, "THUNAR_VFS_FILE_MODE_SGID", "sgid" },
+	{ THUNAR_VFS_FILE_MODE_STICKY, "THUNAR_VFS_FILE_MODE_STICKY", "sticky" },
+	{ THUNAR_VFS_FILE_MODE_USR_ALL, "THUNAR_VFS_FILE_MODE_USR_ALL", "usr-all" },
+	{ THUNAR_VFS_FILE_MODE_USR_READ, "THUNAR_VFS_FILE_MODE_USR_READ", "usr-read" },
+	{ THUNAR_VFS_FILE_MODE_USR_WRITE, "THUNAR_VFS_FILE_MODE_USR_WRITE", "usr-write" },
+	{ THUNAR_VFS_FILE_MODE_USR_EXEC, "THUNAR_VFS_FILE_MODE_USR_EXEC", "usr-exec" },
+	{ THUNAR_VFS_FILE_MODE_GRP_ALL, "THUNAR_VFS_FILE_MODE_GRP_ALL", "grp-all" },
+	{ THUNAR_VFS_FILE_MODE_GRP_READ, "THUNAR_VFS_FILE_MODE_GRP_READ", "grp-read" },
+	{ THUNAR_VFS_FILE_MODE_GRP_WRITE, "THUNAR_VFS_FILE_MODE_GRP_WRITE", "grp-write" },
+	{ THUNAR_VFS_FILE_MODE_GRP_EXEC, "THUNAR_VFS_FILE_MODE_GRP_EXEC", "grp-exec" },
+	{ THUNAR_VFS_FILE_MODE_OTH_ALL, "THUNAR_VFS_FILE_MODE_OTH_ALL", "oth-all" },
+	{ THUNAR_VFS_FILE_MODE_OTH_READ, "THUNAR_VFS_FILE_MODE_OTH_READ", "oth-read" },
+	{ THUNAR_VFS_FILE_MODE_OTH_WRITE, "THUNAR_VFS_FILE_MODE_OTH_WRITE", "oth-write" },
+	{ THUNAR_VFS_FILE_MODE_OTH_EXEC, "THUNAR_VFS_FILE_MODE_OTH_EXEC", "oth-exec" },
+	{ 0, NULL, NULL }
+	};
+	type = g_flags_register_static ("ThunarVfsFileMode", values);
+  }
+	return type;
+}
+GType
+thunar_vfs_file_flags_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GFlagsValue values[] = {
+	{ THUNAR_VFS_FILE_FLAGS_NONE, "THUNAR_VFS_FILE_FLAGS_NONE", "none" },
+	{ THUNAR_VFS_FILE_FLAGS_SYMLINK, "THUNAR_VFS_FILE_FLAGS_SYMLINK", "symlink" },
+	{ THUNAR_VFS_FILE_FLAGS_EXECUTABLE, "THUNAR_VFS_FILE_FLAGS_EXECUTABLE", "executable" },
+	{ 0, NULL, NULL }
+	};
+	type = g_flags_register_static ("ThunarVfsFileFlags", values);
+  }
+	return type;
+}
+
+/* enumerations from "thunar-vfs-volume.h" */
+GType
+thunar_vfs_volume_kind_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GEnumValue values[] = {
+	{ THUNAR_VFS_VOLUME_KIND_UNKNOWN, "THUNAR_VFS_VOLUME_KIND_UNKNOWN", "unknown" },
+	{ THUNAR_VFS_VOLUME_KIND_CDROM, "THUNAR_VFS_VOLUME_KIND_CDROM", "cdrom" },
+	{ THUNAR_VFS_VOLUME_KIND_DVD, "THUNAR_VFS_VOLUME_KIND_DVD", "dvd" },
+	{ THUNAR_VFS_VOLUME_KIND_FLOPPY, "THUNAR_VFS_VOLUME_KIND_FLOPPY", "floppy" },
+	{ THUNAR_VFS_VOLUME_KIND_HARDDISK, "THUNAR_VFS_VOLUME_KIND_HARDDISK", "harddisk" },
+	{ THUNAR_VFS_VOLUME_KIND_USBSTICK, "THUNAR_VFS_VOLUME_KIND_USBSTICK", "usbstick" },
+	{ 0, NULL, NULL }
+	};
+	type = g_enum_register_static ("ThunarVfsVolumeKind", values);
+  }
+	return type;
+}
+GType
+thunar_vfs_volume_status_get_type (void)
+{
+	static GType type = 0;
+	if (type == 0) {
+	static const GFlagsValue values[] = {
+	{ THUNAR_VFS_VOLUME_STATUS_MOUNTED, "THUNAR_VFS_VOLUME_STATUS_MOUNTED", "mounted" },
+	{ THUNAR_VFS_VOLUME_STATUS_PRESENT, "THUNAR_VFS_VOLUME_STATUS_PRESENT", "present" },
+	{ 0, NULL, NULL }
+	};
+	type = g_flags_register_static ("ThunarVfsVolumeStatus", values);
+  }
+	return type;
+}
+
+#define __THUNAR_VFS_ENUM_TYPES_C__
+#include "thunar-vfs-aliasdef.c"
+
+/* Generated data ends here */
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-enum-types.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,39 @@
+
+/* Generated data (by glib-mkenums) */
+
+#ifndef __THUNAR_VFS_ENUM_TYPES_H__
+#define __THUNAR_VFS_ENUM_TYPES_H__
+#include <exo/exo.h>
+G_BEGIN_DECLS
+/* enumerations from "thunar-vfs-interactive-job.h" */
+GType thunar_vfs_interactive_job_response_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_INTERACTIVE_JOB_RESPONSE (thunar_vfs_interactive_job_response_get_type())
+/* enumerations from "thunar-vfs-mime-application.h" */
+GType thunar_vfs_mime_application_error_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_MIME_APPLICATION_ERROR (thunar_vfs_mime_application_error_get_type())
+GType thunar_vfs_mime_application_flags_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_MIME_APPLICATION_FLAGS (thunar_vfs_mime_application_flags_get_type())
+/* enumerations from "thunar-vfs-monitor.h" */
+GType thunar_vfs_monitor_event_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_MONITOR_EVENT (thunar_vfs_monitor_event_get_type())
+/* enumerations from "thunar-vfs-thumb.h" */
+GType thunar_vfs_thumb_size_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_THUMB_SIZE (thunar_vfs_thumb_size_get_type())
+/* enumerations from "thunar-vfs-types.h" */
+GType thunar_vfs_file_type_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_FILE_TYPE (thunar_vfs_file_type_get_type())
+GType thunar_vfs_file_mode_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_FILE_MODE (thunar_vfs_file_mode_get_type())
+GType thunar_vfs_file_flags_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_FILE_FLAGS (thunar_vfs_file_flags_get_type())
+/* enumerations from "thunar-vfs-volume.h" */
+GType thunar_vfs_volume_kind_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_VOLUME_KIND (thunar_vfs_volume_kind_get_type())
+GType thunar_vfs_volume_status_get_type (void) G_GNUC_CONST;
+#define THUNAR_VFS_TYPE_VFS_VOLUME_STATUS (thunar_vfs_volume_status_get_type())
+G_END_DECLS
+
+#endif /* !__THUNAR_VFS_ENUM_TYPES_H__ */
+
+/* Generated data ends here */
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,467 @@
+/* $Id: thunar-vfs-exec.c 18847 2005-11-14 19:07:49Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-exec.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#ifdef GDK_WINDOWING_X11
+#include <X11/Xatom.h>
+#include <gdk/gdkx.h>
+#endif
+
+
+
+/**
+ * thunar_vfs_exec_parse:
+ * @exec      : the value of the <literal>Exec</literal> field.
+ * @path_list : the list of #ThunarVfsPath<!---->s.
+ * @icon      : value of the <literal>Icon</literal> field or %NULL.
+ * @name      : translated value for the <literal>Name</literal> field or %NULL.
+ * @path      : full path to the desktop file or %NULL.
+ * @terminal  : whether to execute the command in a terminal.
+ * @argc      : return location for the number of items placed into @argv.
+ * @argv      : return location for the argument vector.
+ * @error     : return location for errors or %NULL.
+ *
+ * Substitutes <literal>Exec</literal> parameter variables according
+ * to the <ulink href="http://freedesktop.org/wiki/Standards_2fdesktop_2dentry_2dspec"
+ * type="http">Desktop Entry Specification</ulink> and returns the
+ * parsed argument vector (in @argv) and the number of items placed
+ * into @argv (in @argc).
+ *
+ * The @icon, @name and @path fields are optional and may be %NULL
+ * if you don't know their values. The @icon parameter should be
+ * the value of the <literal>Icon</literal> field from the desktop
+ * file, the @name parameter should be the translated <literal>Name</literal>
+ * value, while the @path parameter should refer to the full path
+ * to the desktop file, whose <literal>Exec</literal> field is
+ * being parsed here.
+ *
+ * Return value: %TRUE on success, else %FALSE.
+ **/
+gboolean
+thunar_vfs_exec_parse (const gchar *exec,
+                       GList       *path_list,
+                       const gchar *icon,
+                       const gchar *name,
+                       const gchar *path,
+                       gboolean     terminal,
+                       gint        *argc,
+                       gchar     ***argv,
+                       GError     **error)
+{
+  const ThunarVfsPath *parent;
+  const gchar         *p;
+  gboolean             result = FALSE;
+  GString             *command_line = g_string_new (NULL);
+  GList               *lp;
+  gchar                buffer[THUNAR_VFS_PATH_MAXURILEN];
+  gchar               *quoted;
+
+  /* prepend terminal command if required */
+  if (G_UNLIKELY (terminal))
+    {
+      g_string_append (command_line, "Terminal ");
+      if (G_LIKELY (name != NULL))
+        {
+          quoted = g_shell_quote (name);
+          g_string_append (command_line, "-T ");
+          g_string_append (command_line, quoted);
+          g_string_append_c (command_line, ' ');
+          g_free (quoted);
+        }
+      g_string_append (command_line, "-x ");
+    }
+
+  for (p = exec; *p != '\0'; ++p)
+    {
+      if (p[0] == '%' && p[1] != '\0')
+        {
+          switch (*++p)
+            {
+            case 'f':
+              if (G_LIKELY (path_list != NULL))
+                {
+                  if (thunar_vfs_path_to_string (path_list->data, buffer, sizeof (buffer), error) < 0)
+                    goto done;
+
+                  quoted = g_shell_quote (buffer);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'F':
+              for (lp = path_list; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != path_list))
+                    g_string_append_c (command_line, ' ');
+
+                  if (thunar_vfs_path_to_string (lp->data, buffer, sizeof (buffer), error) < 0)
+                    goto done;
+
+                  quoted = g_shell_quote (buffer);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'u':
+              if (G_LIKELY (path_list != NULL))
+                {
+                  if (thunar_vfs_path_to_uri (path_list->data, buffer, sizeof (buffer), error) < 0)
+                    goto done;
+
+                  quoted = g_shell_quote (buffer);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'U':
+              for (lp = path_list; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != path_list))
+                    g_string_append_c (command_line, ' ');
+
+                  if (thunar_vfs_path_to_uri (lp->data, buffer, sizeof (buffer), error) < 0)
+                    goto done;
+
+                  quoted = g_shell_quote (buffer);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'd':
+              if (G_LIKELY (path_list != NULL))
+                {
+                  parent = thunar_vfs_path_get_parent (path_list->data);
+                  if (G_LIKELY (parent != NULL))
+                    {
+                      if (thunar_vfs_path_to_string (parent, buffer, sizeof (buffer), error) < 0)
+                        goto done;
+
+                      quoted = g_shell_quote (buffer);
+                      g_string_append (command_line, quoted);
+                      g_free (quoted);
+                    }
+                }
+              break;
+
+            case 'D':
+              for (lp = path_list; lp != NULL; lp = lp->next)
+                {
+                  parent = thunar_vfs_path_get_parent (lp->data);
+                  if (G_LIKELY (parent != NULL))
+                    {
+                      if (G_LIKELY (lp != path_list))
+                        g_string_append_c (command_line, ' ');
+
+                      if (thunar_vfs_path_to_string (parent, buffer, sizeof (buffer), error) < 0)
+                        goto done;
+
+                      quoted = g_shell_quote (buffer);
+                      g_string_append (command_line, quoted);
+                      g_free (quoted);
+                    }
+                }
+              break;
+
+            case 'n':
+              if (G_LIKELY (path_list != NULL))
+                {
+                  quoted = g_shell_quote (thunar_vfs_path_get_name (path_list->data));
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'N':
+              for (lp = path_list; lp != NULL; lp = lp->next)
+                {
+                  if (G_LIKELY (lp != path_list))
+                    g_string_append_c (command_line, ' ');
+                  quoted = g_shell_quote (thunar_vfs_path_get_name (lp->data));
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'i':
+              if (G_LIKELY (icon != NULL))
+                {
+                  quoted = g_shell_quote (icon);
+                  g_string_append (command_line, "--icon ");
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'c':
+              if (G_LIKELY (name != NULL))
+                {
+                  quoted = g_shell_quote (name);
+                  g_string_append (command_line, quoted);
+                  g_free (quoted);
+                }
+              break;
+
+            case 'k':
+              if (G_LIKELY (path != NULL))
+                {
+                  quoted = g_shell_quote (path);
+                  g_string_append (command_line, path);
+                  g_free (quoted);
+                }
+              break;
+
+            case '%':
+              g_string_append_c (command_line, '%');
+              break;
+            }
+        }
+      else
+        {
+          g_string_append_c (command_line, *p);
+        }
+    }
+
+  result = g_shell_parse_argv (command_line->str, argc, argv, error);
+
+done:
+  g_string_free (command_line, TRUE);
+  return result;
+}
+
+
+
+#ifdef HAVE_LIBSTARTUP_NOTIFICATION
+#include <libsn/sn.h>
+
+/* the max. timeout for an application to startup */
+#define TVSN_STARTUP_TIMEOUT (30 * 1000)
+
+static gboolean
+tvsn_startup_timeout (gpointer data)
+{
+  SnLauncherContext *sn_launcher = data;
+  GTimeVal           now;
+  gdouble            elapsed;
+  glong              tv_sec;
+  glong              tv_usec;
+
+  GDK_THREADS_ENTER ();
+
+  /* determine the amount of elapsed time */
+  g_get_current_time (&now);
+  sn_launcher_context_get_last_active_time (sn_launcher, &tv_sec, &tv_usec);
+  elapsed = (((gdouble) now.tv_sec - tv_sec) * G_USEC_PER_SEC + (now.tv_usec - tv_usec)) / 1000.0;
+
+  /* check if the timeout was reached */
+  if (elapsed >= TVSN_STARTUP_TIMEOUT)
+    {
+      /* abort the startup notification */
+      sn_launcher_context_complete (sn_launcher);
+      sn_launcher_context_unref (sn_launcher);
+    }
+
+  GDK_THREADS_LEAVE ();
+
+  /* keep the startup timeout if not elapsed */
+  return (elapsed < TVSN_STARTUP_TIMEOUT);
+}
+
+static gint
+tvsn_get_active_workspace_number (GdkScreen *screen)
+{
+  GdkWindow *root;
+  gulong     bytes_after_ret = 0;
+  gulong     nitems_ret = 0;
+  guint     *prop_ret = NULL;
+  Atom       _NET_CURRENT_DESKTOP;
+  Atom       _WIN_WORKSPACE;
+  Atom       type_ret = None;
+  gint       format_ret;
+  gint       ws_num = 0;
+
+  gdk_error_trap_push ();
+
+  root = gdk_screen_get_root_window (screen);
+
+  /* determine the X atom values */
+  _NET_CURRENT_DESKTOP = XInternAtom (GDK_WINDOW_XDISPLAY (root), "_NET_CURRENT_DESKTOP", False);
+  _WIN_WORKSPACE = XInternAtom (GDK_WINDOW_XDISPLAY (root), "_WIN_WORKSPACE", False);
+
+  if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root), GDK_WINDOW_XWINDOW (root),
+                          _NET_CURRENT_DESKTOP, 0, 32, False, XA_CARDINAL,
+                          &type_ret, &format_ret, &nitems_ret, &bytes_after_ret,
+                          (unsigned char **) &prop_ret) != Success)
+    {
+      if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root), GDK_WINDOW_XWINDOW (root),
+                              _WIN_WORKSPACE, 0, 32, False, XA_CARDINAL,
+                              &type_ret, &format_ret, &nitems_ret, &bytes_after_ret,
+                              (unsigned char **) &prop_ret) != Success)
+        {
+          if (G_UNLIKELY (prop_ret != NULL))
+            {
+              XFree (prop_ret);
+              prop_ret = NULL;
+            }
+        }
+    }
+
+  if (G_LIKELY (prop_ret != NULL))
+    {
+      if (G_LIKELY (type_ret != None && format_ret != 0))
+        ws_num = *prop_ret;
+      XFree (prop_ret);
+    }
+
+  gdk_error_trap_pop ();
+
+  return ws_num;
+}
+#endif
+
+
+
+/**
+ * thunar_vfs_exec_on_screen:
+ * @screen            : a #GdkScreen.
+ * @working_directory : child's current working directory or %NULL to inherit parent's.
+ * @argv              : child's argument vector.
+ * @envp              : child's environment vector or %NULL to inherit parent's.
+ * @flags             : flags from #GSpawnFlags.
+ * @startup_notify    : whether to use startup notification.
+ * @error             : return location for errors or %NULL.
+ *
+ * Like gdk_spawn_on_screen(), but also supports startup notification
+ * (if Thunar-VFS was built with startup notification support).
+ *
+ * Return value: %TRUE on success, %FALSE if @error is set.
+ **/
+gboolean
+thunar_vfs_exec_on_screen (GdkScreen   *screen,
+                           const gchar *working_directory,
+                           gchar      **argv,
+                           gchar      **envp,
+                           GSpawnFlags  flags,
+                           gboolean     startup_notify,
+                           GError     **error)
+{
+#ifdef HAVE_LIBSTARTUP_NOTIFICATION
+  SnLauncherContext *sn_launcher = NULL;
+  extern char      **environ;
+  SnDisplay         *sn_display = NULL;
+  gint               sn_workspace;
+  gint               n, m;
+#endif
+  gboolean           succeed;
+  gchar            **sn_envp = envp;
+
+#ifdef HAVE_LIBSTARTUP_NOTIFICATION
+  /* initialize the sn launcher context */
+  if (G_LIKELY (startup_notify))
+    {
+      sn_display = sn_display_new (GDK_SCREEN_XDISPLAY (screen),
+                                   (SnDisplayErrorTrapPush) gdk_error_trap_push,
+                                   (SnDisplayErrorTrapPop) gdk_error_trap_pop);
+
+      if (G_LIKELY (sn_display != NULL))
+        {
+          sn_launcher = sn_launcher_context_new (sn_display, GDK_SCREEN_XNUMBER (screen));
+
+          if (G_LIKELY (sn_launcher != NULL && !sn_launcher_context_get_initiated (sn_launcher)))
+            {
+              /* initiate the sn launcher context */
+              sn_workspace = tvsn_get_active_workspace_number (screen);
+              sn_launcher_context_set_binary_name (sn_launcher, argv[0]);
+              sn_launcher_context_set_workspace (sn_launcher, sn_workspace);
+              sn_launcher_context_initiate (sn_launcher, g_get_prgname (), argv[0], CurrentTime);
+
+              /* setup the child environment */
+              if (G_LIKELY (envp == NULL))
+                envp = (gchar **) environ;
+              for (n = 0; envp[n] != NULL; ++n)
+                ;
+              sn_envp = g_new (gchar *, n + 2);
+              for (n = m = 0; envp[n] != NULL; ++n)
+                if (strncmp (envp[n], "DESKTOP_STARTUP_ID", 18) != 0)
+                  sn_envp[m++] = g_strdup (envp[n]);
+              sn_envp[m++] = g_strconcat ("DESKTOP_STARTUP_ID=", sn_launcher_context_get_startup_id (sn_launcher), NULL);
+              sn_envp[m] = NULL;
+            }
+        }
+    }
+#endif
+
+  /* try to spawn the new process */
+  succeed = gdk_spawn_on_screen (screen, working_directory, argv, sn_envp, flags, NULL, NULL, NULL, error);
+
+#ifdef HAVE_LIBSTARTUP_NOTIFICATION
+  /* handle the sn launcher context */
+  if (G_LIKELY (sn_launcher != NULL))
+    {
+      if (G_UNLIKELY (!succeed))
+        {
+          /* abort the sn sequence */
+          sn_launcher_context_complete (sn_launcher);
+          sn_launcher_context_unref (sn_launcher);
+        }
+      else
+        {
+          /* schedule a startup notification timeout */
+          g_timeout_add (TVSN_STARTUP_TIMEOUT, tvsn_startup_timeout, sn_launcher);
+        }
+    }
+
+  /* release the sn display */
+  if (G_LIKELY (sn_display != NULL))
+    sn_display_unref (sn_display);
+#endif
+
+  /* release the environment */
+  if (G_UNLIKELY (sn_envp != envp))
+    g_strfreev (sn_envp);
+
+  return succeed;
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-exec.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+/* $Id: thunar-vfs-exec.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_EXEC_H__
+#define __THUNAR_VFS_EXEC_H__
+
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS;
+
+gboolean thunar_vfs_exec_parse     (const gchar    *exec,
+                                    GList          *path_list,
+                                    const gchar    *icon,
+                                    const gchar    *name,
+                                    const gchar    *path,
+                                    gboolean        terminal,
+                                    gint           *argc,
+                                    gchar        ***argv,
+                                    GError        **error) G_GNUC_INTERNAL;
+
+gboolean thunar_vfs_exec_on_screen (GdkScreen      *screen,
+                                    const gchar    *working_directory,
+                                    gchar         **argv,
+                                    gchar         **envp,
+                                    GSpawnFlags     flags,
+                                    gboolean        startup_notify,
+                                    GError        **error) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_EXEC_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,802 @@
+/* $Id: thunar-vfs-info.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* implement thunar-vfs-info's inline functions */
+#define G_IMPLEMENT_INLINES 1
+#define __THUNAR_VFS_INFO_C__
+#include <thunar-vfs/thunar-vfs-info.h>
+
+#include <thunar-vfs/thunar-vfs-exec.h>
+#include <thunar-vfs/thunar-vfs-mime-database.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+/* Use g_access() if possible */
+#if GLIB_CHECK_VERSION(2,8,0)
+#include <glib/gstdio.h>
+#else
+#define g_access(path, mode) (access ((path), (mode)))
+#endif
+
+/* Use g_rename() if possible */
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_rename(from, to) (rename ((from), (to)))
+#endif
+
+
+
+static ThunarVfsMimeDatabase *mime_database;
+static ThunarVfsMimeInfo     *mime_application_x_shellscript;
+static ThunarVfsMimeInfo     *mime_application_x_executable;
+static ThunarVfsMimeInfo     *mime_application_x_desktop;
+static ThunarVfsMimeInfo     *mime_inode_blockdevice;
+static ThunarVfsMimeInfo     *mime_inode_chardevice;
+static ThunarVfsMimeInfo     *mime_inode_directory;
+static ThunarVfsMimeInfo     *mime_inode_symlink;
+static ThunarVfsMimeInfo     *mime_inode_socket;
+static ThunarVfsMimeInfo     *mime_inode_fifo;
+
+
+
+GType
+thunar_vfs_info_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      type = g_boxed_type_register_static ("ThunarVfsInfo",
+                                           (GBoxedCopyFunc) thunar_vfs_info_ref,
+                                           (GBoxedFreeFunc) thunar_vfs_info_unref);
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunar_vfs_info_new_for_path:
+ * @path  : the #ThunarVfsPath of the file whose info should be queried.
+ * @error : return location for errors or %NULL.
+ *
+ * Queries the #ThunarVfsInfo for the given @path. Returns the
+ * #ThunarVfsInfo if the operation is successfull, else %NULL.
+ * In the latter case, @error will be set to point to a #GError
+ * describing the cause of the failure.
+ *
+ * Return value: the #ThunarVfsInfo for @path or %NULL.
+ **/
+ThunarVfsInfo*
+thunar_vfs_info_new_for_path (ThunarVfsPath *path,
+                              GError       **error)
+{
+  gchar absolute_path[PATH_MAX + 1];
+  if (thunar_vfs_path_to_string (path, absolute_path, sizeof (absolute_path), error) < 0)
+    return NULL;
+  return _thunar_vfs_info_new_internal (path, absolute_path, error);
+}
+
+
+
+/**
+ * thunar_vfs_info_unref:
+ * @info : a #ThunarVfsInfo.
+ *
+ * Decrements the reference count on @info by 1 and if
+ * the reference count drops to zero as a result of this
+ * operation, the @info will be freed completely.
+ **/
+void
+thunar_vfs_info_unref (ThunarVfsInfo *info)
+{
+  if (exo_atomic_dec (&info->ref_count))
+    {
+      /* free the display name if dynamically allocated */
+      if (info->display_name != thunar_vfs_path_get_name (info->path))
+        g_free (info->display_name);
+
+      /* free the custom icon name */
+      g_free (info->custom_icon);
+
+      /* drop the public info part */
+      thunar_vfs_mime_info_unref (info->mime_info);
+      thunar_vfs_path_unref (info->path);
+
+#ifndef G_DISABLE_CHECKS
+      memset (info, 0xaa, sizeof (*info));
+#endif
+
+      g_free (info);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_info_copy:
+ * @info : a #ThunarVfsInfo.
+ *
+ * Takes a deep copy of the @info and returns
+ * it.
+ *
+ * Return value: a deep copy of @info.
+ **/
+ThunarVfsInfo*
+thunar_vfs_info_copy (const ThunarVfsInfo *info)
+{
+  ThunarVfsInfo *dst;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  dst = g_new (ThunarVfsInfo, 1);
+  dst->type = info->type;
+  dst->mode = info->mode;
+  dst->flags = info->flags;
+  dst->uid = info->uid;
+  dst->gid = info->gid;
+  dst->size = info->size;
+  dst->atime = info->atime;
+  dst->mtime = info->mtime;
+  dst->ctime = info->ctime;
+  dst->inode = info->inode;
+  dst->device = info->device;
+  dst->mime_info = thunar_vfs_mime_info_ref (info->mime_info);
+  dst->path = thunar_vfs_path_ref (info->path);
+  dst->custom_icon = g_strdup (info->custom_icon);
+  dst->display_name = g_strdup (info->display_name);
+  dst->ref_count = 1;
+
+  return dst;
+}
+
+
+
+/**
+ * thunar_vfs_info_execute:
+ * @info      : a #ThunarVfsInfo.
+ * @screen    : a #GdkScreen or %NULL to use the default #GdkScreen.
+ * @path_list : the list of #ThunarVfsPath<!---->s to give as parameters
+ *              to the file referred to by @info on execution.
+ * @error     : return location for errors or %NULL.
+ *
+ * Executes the file referred to by @info, given @path_list as parameters,
+ * on the specified @screen. @info may refer to either a regular,
+ * executable file, or a <filename>.desktop</filename> file, whose
+ * type is <literal>Application</literal>.
+ *
+ * Return value: %TRUE on success, else %FALSE.
+ **/
+gboolean
+thunar_vfs_info_execute (const ThunarVfsInfo *info,
+                         GdkScreen           *screen,
+                         GList               *path_list,
+                         GError             **error)
+{
+  ThunarVfsPath *parent;
+  const gchar   *icon;
+  const gchar   *name;
+  gboolean       startup_notify = FALSE;
+  gboolean       terminal;
+  gboolean       result = FALSE;
+  XfceRc        *rc;
+  gchar          absolute_path[PATH_MAX + 1];
+  gchar         *working_directory;
+  gchar         *path_escaped;
+  gchar        **argv = NULL;
+  gchar         *exec;
+
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (info->ref_count > 0, FALSE);
+  g_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* fallback to the default screen if none given */
+  if (G_UNLIKELY (screen == NULL))
+    screen = gdk_screen_get_default ();
+
+  /* determine the absolute path */
+  if (thunar_vfs_path_to_string (info->path, absolute_path, sizeof (absolute_path), error) < 0)
+    return FALSE;
+
+  /* check if we have a .desktop (and NOT a .directory) file here */
+  if (G_UNLIKELY (info->mime_info == mime_application_x_desktop && strcmp (thunar_vfs_path_get_name (info->path), ".directory") != 0))
+    {
+      rc = xfce_rc_simple_open (absolute_path, TRUE);
+      if (G_LIKELY (rc != NULL))
+        {
+          /* check if we have a valid Exec field */
+          exec = (gchar *) xfce_rc_read_entry_untranslated (rc, "Exec", NULL);
+          if (G_LIKELY (exec != NULL))
+            {
+              /* parse the Exec field */
+              name = xfce_rc_read_entry (rc, "Name", NULL);
+              icon = xfce_rc_read_entry_untranslated (rc, "Icon", NULL);
+              terminal = xfce_rc_read_bool_entry (rc, "Terminal", FALSE);
+              startup_notify = xfce_rc_read_bool_entry (rc, "StartupNotify", FALSE) || xfce_rc_read_bool_entry (rc, "X-KDE-StartupNotify", FALSE);
+              result = thunar_vfs_exec_parse (exec, path_list, icon, name, absolute_path, terminal, NULL, &argv, error);
+            }
+          else
+            {
+              g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("No Exec field specified"));
+            }
+
+          /* close the rc file */
+          xfce_rc_close (rc);
+        }
+      else
+        {
+          g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Unable to parse file"));
+        }
+    }
+  else
+    {
+      /* fake the Exec line */
+      path_escaped = g_shell_quote (absolute_path);
+      exec = g_strconcat (path_escaped, " %F", NULL);
+      result = thunar_vfs_exec_parse (exec, path_list, NULL, NULL, NULL, FALSE, NULL, &argv, error);
+      g_free (path_escaped);
+      g_free (exec);
+    }
+
+  if (G_LIKELY (result))
+    {
+      /* determine the working directory */
+      if (G_LIKELY (path_list != NULL))
+        {
+          /* use the directory of the first list item */
+          parent = thunar_vfs_path_get_parent (path_list->data);
+          working_directory = (parent != NULL) ? thunar_vfs_path_dup_string (parent) : NULL;
+        }
+      else
+        {
+          /* use the directory of the executable file */
+          working_directory = g_path_get_dirname (absolute_path);
+        }
+
+      /* execute the command */
+      result = thunar_vfs_exec_on_screen (screen, working_directory, argv, NULL, G_SPAWN_SEARCH_PATH, startup_notify, error);
+
+      /* release the working directory */
+      g_free (working_directory);
+    }
+
+  /* clean up */
+  g_strfreev (argv);
+
+  return result;
+}
+
+
+
+/**
+ * thunar_vfs_info_rename:
+ * @info  : a #ThunarVfsInfo.
+ * @name  : the new file name in UTF-8 encoding.
+ * @error : return location for errors or %NULL.
+ *
+ * Tries to rename the file referred to by @info to the
+ * new @name.
+ *
+ * The rename operation is smart in that it checks the
+ * type of @info first, and if @info refers to a
+ * <filename>.desktop</filename> file, the file name
+ * won't be touched, but instead the <literal>Name</literal>
+ * field of the <filename>.desktop</filename> will be
+ * changed to @name. Else, if @info refers to a regular
+ * file or directory, the file will be given a new
+ * name.
+ *
+ * Return value: %TRUE on success, else %FALSE.
+ **/
+gboolean
+thunar_vfs_info_rename (ThunarVfsInfo *info,
+                        const gchar   *name,
+                        GError       **error)
+{
+  const gchar * const *locale;
+  ThunarVfsMimeInfo   *mime_info;
+  GKeyFile            *key_file;
+  gsize                data_length;
+  gchar               *data;
+  gchar               *key;
+  gchar                src_path[PATH_MAX + 1];
+  gchar               *dir_name;
+  gchar               *dst_name;
+  gchar               *dst_path;
+#if !GLIB_CHECK_VERSION(2,8,0)
+  FILE                *fp;
+#endif
+
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (info->ref_count > 0, FALSE);
+  g_return_val_if_fail (g_utf8_validate (name, -1, NULL), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* validate the name */
+  if (*name == '\0' || strchr (name, '/') != NULL)
+    {
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Invalid file name"));
+      return FALSE;
+    }
+
+  /* determine the source path */
+  if (thunar_vfs_path_to_string (info->path, src_path, sizeof (src_path), error) < 0)
+    return FALSE;
+
+  /* check if we have a .desktop (and NOT a .directory) file here */
+  if (G_UNLIKELY (info->mime_info == mime_application_x_desktop && strcmp (thunar_vfs_path_get_name (info->path), ".directory") != 0))
+    {
+      /* try to open the .desktop file */
+      key_file = g_key_file_new ();
+      if (!g_key_file_load_from_file (key_file, src_path, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, error))
+        {
+          g_key_file_free (key_file);
+          return FALSE;
+        }
+
+      /* check if the file is valid */
+      if (G_UNLIKELY (!g_key_file_has_group (key_file, "Desktop Entry")))
+        {
+          g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Invalid desktop file"));
+          g_key_file_free (key_file);
+          return FALSE;
+        }
+
+      /* save the new name (localized if required) */
+      for (locale = g_get_language_names (); *locale != NULL; ++locale)
+        {
+          key = g_strdup_printf ("Name[%s]", *locale);
+          if (g_key_file_has_key (key_file, "Desktop Entry", key, NULL))
+            {
+              g_key_file_set_string (key_file, "Desktop Entry", key, name);
+              g_free (key);
+              break;
+            }
+          g_free (key);
+        }
+
+      /* fallback to unlocalized name */
+      if (G_UNLIKELY (*locale == NULL))
+        g_key_file_set_string (key_file, "Desktop Entry", "Name", name);
+
+      /* serialize the key file to a buffer */
+      data = g_key_file_to_data (key_file, &data_length, error);
+      g_key_file_free (key_file);
+      if (G_UNLIKELY (data == NULL))
+        return FALSE;
+
+      /* write the data back to the file */
+#if GLIB_CHECK_VERSION(2,8,0)
+      if (!g_file_set_contents (src_path, data, data_length, error))
+        {
+          g_free (data);
+          return FALSE;
+        }
+#else
+      fp = fopen (src_path, "w");
+      if (G_UNLIKELY (fp == NULL))
+        {
+          g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+          g_free (data);
+          return FALSE;
+        }
+      fwrite (data, data_length, 1, fp);
+      fclose (fp);
+#endif
+
+      /* release the previous display name */
+      if (G_LIKELY (info->display_name != thunar_vfs_path_get_name (info->path)))
+        g_free (info->display_name);
+
+      /* apply the new display name */
+      info->display_name = g_strdup (name);
+
+      /* clean up */
+      g_free (data);
+    }
+  else
+    {
+      /* convert the destination file to local encoding */
+      dst_name = g_filename_from_utf8 (name, -1, NULL, NULL, error);
+      if (G_UNLIKELY (dst_name == NULL))
+        return FALSE;
+
+      /* determine the destination path */
+      dir_name = g_path_get_dirname (src_path);
+      dst_path = g_build_filename (dir_name, dst_name, NULL);
+      g_free (dst_name);
+      g_free (dir_name);
+
+      /* verify that the rename target does not already exist */
+      if (G_UNLIKELY (g_file_test (dst_path, G_FILE_TEST_EXISTS)))
+        {
+          g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_EXIST, g_strerror (EEXIST));
+          g_free (dst_path);
+          return FALSE;
+        }
+
+      /* perform the rename */
+      if (G_UNLIKELY (g_rename (src_path, dst_path) < 0))
+        {
+          g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+          g_free (dst_path);
+          return FALSE;
+        }
+
+      /* update the info's display name */
+      if (info->display_name != thunar_vfs_path_get_name (info->path))
+        g_free (info->display_name);
+      info->display_name = g_strdup (name);
+
+      /* update the info's path */
+      thunar_vfs_path_unref (info->path);
+      info->path = thunar_vfs_path_new (dst_path, NULL);
+
+      /* if we have a regular file here, then we'll need to determine
+       * the mime type again, as it may be based on the file name
+       */
+      if (G_LIKELY (info->type == THUNAR_VFS_FILE_TYPE_REGULAR))
+        {
+          mime_info = info->mime_info;
+          info->mime_info = thunar_vfs_mime_database_get_info_for_file (mime_database, dst_path, info->display_name);
+          thunar_vfs_mime_info_unref (mime_info);
+        }
+
+      /* clean up */
+      g_free (dst_path);
+    }
+
+  return TRUE;
+}
+
+
+
+/**
+ * thunar_vfs_info_matches:
+ * @a : a #ThunarVfsInfo.
+ * @b : a #ThunarVfsInfo.
+ *
+ * Checks whether @a and @b refer to the same file
+ * and share the same properties.
+ *
+ * Return value: %TRUE if @a and @b match.
+ **/
+gboolean
+thunar_vfs_info_matches (const ThunarVfsInfo *a,
+                         const ThunarVfsInfo *b)
+{
+  g_return_val_if_fail (a != NULL, FALSE);
+  g_return_val_if_fail (b != NULL, FALSE);
+  g_return_val_if_fail (a->ref_count > 0, FALSE);
+  g_return_val_if_fail (b->ref_count > 0, FALSE);
+
+  return a->type == b->type
+      && a->mode == b->mode
+      && a->flags == b->flags
+      && a->uid == b->uid
+      && a->gid == b->gid
+      && a->size == b->size
+      && a->atime == b->atime
+      && a->mtime == b->mtime
+      && a->ctime == b->ctime
+      && a->inode == b->inode
+      && a->device == b->device
+      && a->mime_info == b->mime_info
+      && thunar_vfs_path_equal (a->path, b->path)
+      && strcmp (a->display_name, b->display_name) == 0;
+}
+
+
+
+/**
+ * _thunar_vfs_info_init:
+ *
+ * Initializes the info component of the Thunar-VFS
+ * library.
+ **/
+void
+_thunar_vfs_info_init (void)
+{
+  /* grab a reference on the mime database */
+  mime_database = thunar_vfs_mime_database_get_default ();
+
+  /* pre-determine the most important mime types */
+  mime_inode_fifo = thunar_vfs_mime_database_get_info (mime_database, "inode/fifo");
+  mime_inode_socket = thunar_vfs_mime_database_get_info (mime_database, "inode/socket");
+  mime_inode_symlink = thunar_vfs_mime_database_get_info (mime_database, "inode/symlink");
+  mime_inode_directory = thunar_vfs_mime_database_get_info (mime_database, "inode/directory");
+  mime_inode_chardevice = thunar_vfs_mime_database_get_info (mime_database, "inode/chardevice");
+  mime_inode_blockdevice = thunar_vfs_mime_database_get_info (mime_database, "inode/blockdevice");
+  mime_application_x_desktop = thunar_vfs_mime_database_get_info (mime_database, "application/x-desktop");
+  mime_application_x_executable = thunar_vfs_mime_database_get_info (mime_database, "application/x-executable");
+  mime_application_x_shellscript = thunar_vfs_mime_database_get_info (mime_database, "application/x-shellscript");
+}
+
+
+
+/**
+ * _thunar_vfs_info_shutdown:
+ *
+ * Shuts down the info component of the Thunar-VFS
+ * library.
+ **/
+void
+_thunar_vfs_info_shutdown (void)
+{
+  /* release the mime type references */
+  thunar_vfs_mime_info_unref (mime_application_x_shellscript);
+  thunar_vfs_mime_info_unref (mime_application_x_executable);
+  thunar_vfs_mime_info_unref (mime_application_x_desktop);
+  thunar_vfs_mime_info_unref (mime_inode_blockdevice);
+  thunar_vfs_mime_info_unref (mime_inode_chardevice);
+  thunar_vfs_mime_info_unref (mime_inode_directory);
+  thunar_vfs_mime_info_unref (mime_inode_symlink);
+  thunar_vfs_mime_info_unref (mime_inode_socket);
+  thunar_vfs_mime_info_unref (mime_inode_fifo);
+
+  /* release the reference on the mime database */
+  g_object_unref (G_OBJECT (mime_database));
+  mime_database = NULL;
+}
+
+
+
+/**
+ * _thunar_vfs_info_new_internal:
+ * @path
+ * @absolute_path
+ * @error         : return location for errors or %NULL.
+ *
+ * Return value:
+ **/
+ThunarVfsInfo*
+_thunar_vfs_info_new_internal (ThunarVfsPath *path,
+                               const gchar   *absolute_path,
+                               GError       **error)
+{
+  ThunarVfsInfo *info;
+  const guchar  *s;
+  const gchar   *name;
+  const gchar   *str;
+  struct stat    lsb;
+  struct stat    sb;
+  XfceRc        *rc;
+  GList         *mime_infos;
+  GList         *lp;
+  gchar         *p;
+
+  g_return_val_if_fail (g_path_is_absolute (absolute_path), NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  if (G_UNLIKELY (lstat (absolute_path, &lsb) < 0))
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+                   _("Failed to stat file `%s': %s"),
+                   absolute_path, g_strerror (errno));
+      return NULL;
+    }
+
+  info = g_new (ThunarVfsInfo, 1);
+  info->path = thunar_vfs_path_ref (path);
+  info->ref_count = 1;
+  info->custom_icon = NULL;
+
+  /* determine the display name of the file */
+  name = thunar_vfs_path_get_name (path);
+  for (s = (const guchar *) name; *s >= 32 && *s <= 127; ++s)
+    ;
+  if (G_LIKELY (*s == '\0'))
+    {
+      /* we don't need to perform any transformation if
+       * the file contains only valid ASCII characters.
+       */
+      info->display_name = (gchar *) name;
+    }
+  else
+    {
+      /* determine the displayname using various tricks */
+      info->display_name = g_filename_display_name (name);
+    }
+
+  /* determine the POSIX file attributes */
+  if (G_LIKELY (!S_ISLNK (lsb.st_mode)))
+    {
+      info->type = (lsb.st_mode & S_IFMT) >> 12;
+      info->mode = lsb.st_mode & 07777;
+      info->flags = THUNAR_VFS_FILE_FLAGS_NONE;
+      info->uid = lsb.st_uid;
+      info->gid = lsb.st_gid;
+      info->size = lsb.st_size;
+      info->atime = lsb.st_atime;
+      info->ctime = lsb.st_ctime;
+      info->mtime = lsb.st_mtime;
+      info->inode = lsb.st_ino;
+      info->device = lsb.st_dev;
+    }
+  else
+    {
+      if (stat (absolute_path, &sb) == 0)
+        {
+          info->type = (sb.st_mode & S_IFMT) >> 12;
+          info->mode = sb.st_mode & 07777;
+          info->flags = THUNAR_VFS_FILE_FLAGS_SYMLINK;
+          info->uid = sb.st_uid;
+          info->gid = sb.st_gid;
+          info->size = sb.st_size;
+          info->atime = sb.st_atime;
+          info->ctime = sb.st_ctime;
+          info->mtime = sb.st_mtime;
+          info->inode = sb.st_ino;
+          info->device = sb.st_dev;
+        }
+      else
+        {
+          info->type = THUNAR_VFS_FILE_TYPE_SYMLINK;
+          info->mode = lsb.st_mode & 07777;
+          info->flags = THUNAR_VFS_FILE_FLAGS_SYMLINK;
+          info->uid = lsb.st_uid;
+          info->gid = lsb.st_gid;
+          info->size = lsb.st_size;
+          info->atime = lsb.st_atime;
+          info->ctime = lsb.st_ctime;
+          info->mtime = lsb.st_mtime;
+          info->inode = lsb.st_ino;
+          info->device = lsb.st_dev;
+        }
+    }
+
+  /* determine the file's mime type */
+  switch (info->type)
+    {
+    case THUNAR_VFS_FILE_TYPE_SOCKET:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_socket);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_SYMLINK:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_symlink);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_BLOCKDEV:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_blockdevice);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_DIRECTORY:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_directory);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_CHARDEV:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_chardevice);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_FIFO:
+      info->mime_info = thunar_vfs_mime_info_ref (mime_inode_fifo);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_REGULAR:
+      /* determine the MIME-type for the regular file */
+      info->mime_info = thunar_vfs_mime_database_get_info_for_file (mime_database, absolute_path, info->display_name);
+
+      /* check if the file is executable (for security reasons
+       * we only allow execution of well known file types).
+       */
+      if ((info->mode & 0444) != 0 && g_access (absolute_path, X_OK) == 0)
+        {
+          mime_infos = thunar_vfs_mime_database_get_infos_for_info (mime_database, info->mime_info);
+          for (lp = mime_infos; lp != NULL; lp = lp->next)
+            {
+              if (lp->data == mime_application_x_executable || lp->data == mime_application_x_shellscript)
+                {
+                  info->flags |= THUNAR_VFS_FILE_FLAGS_EXECUTABLE;
+                  break;
+                }
+            }
+          thunar_vfs_mime_info_list_free (mime_infos);
+        }
+
+      /* check if we have a .desktop (and NOT a .directory) file here */
+      if (G_UNLIKELY (info->mime_info == mime_application_x_desktop && strcmp (thunar_vfs_path_get_name (info->path), ".directory") != 0))
+        {
+          /* try to query the hints from the .desktop file */
+          rc = xfce_rc_simple_open (absolute_path, TRUE);
+          if (G_LIKELY (rc != NULL))
+            {
+              /* we're only interested in the desktop data */
+              xfce_rc_set_group (rc, "Desktop Entry");
+
+              /* check if we have a valid icon info */
+              str = xfce_rc_read_entry_untranslated (rc, "Icon", NULL);
+              if (G_LIKELY (str != NULL && *str != '\0'))
+                {
+                  /* setup the custom icon */
+                  info->custom_icon = g_strdup (str);
+
+                  /* drop any suffix (e.g. '.png') from themed icons */
+                  if (!g_path_is_absolute (info->custom_icon))
+                    {
+                      p = strrchr (info->custom_icon, '.');
+                      if (G_UNLIKELY (p != NULL))
+                        *p = '\0';
+                    }
+                }
+
+              /* check if we have a valid name info */
+              str = xfce_rc_read_entry (rc, "Name", NULL);
+              if (G_LIKELY (str != NULL && *str != '\0'))
+                {
+                  /* release the previous display name */
+                  if (G_UNLIKELY (info->display_name != thunar_vfs_path_get_name (info->path)))
+                    g_free (info->path);
+
+                  /* use the name specified by the .desktop file as display name */
+                  info->display_name = g_strdup (str);
+                }
+
+              /* check if the desktop file refers to an application
+               * and has a non-NULL Exec field set.
+               */
+              str = xfce_rc_read_entry_untranslated (rc, "Type", "Application");
+              if (G_LIKELY (exo_str_is_equal (str, "Application"))
+                  && xfce_rc_read_entry (rc, "Exec", NULL) != NULL)
+                {
+                  info->flags |= THUNAR_VFS_FILE_FLAGS_EXECUTABLE;
+                }
+
+              /* close the file */
+              xfce_rc_close (rc);
+            }
+        }
+      break;
+
+    default:
+      g_assert_not_reached ();
+      break;
+    }
+
+  return info;
+}
+
+
+
+#define __THUNAR_VFS_INFO_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-info.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,194 @@
+/* $Id: thunar-vfs-info.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_INFO_H__
+#define __THUNAR_VFS_INFO_H__
+
+#include <thunar-vfs/thunar-vfs-mime-info.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+#include <thunar-vfs/thunar-vfs-types.h>
+
+G_BEGIN_DECLS;
+
+#define THUNAR_VFS_TYPE_INFO (thunar_vfs_info_get_type ())
+
+/**
+ * ThunarVfsInfo:
+ *
+ * The #ThunarVfsInfo structure provides information about a file system
+ * entity.
+ **/
+typedef struct _ThunarVfsInfo ThunarVfsInfo;
+struct _ThunarVfsInfo
+{
+  /* File type */
+  ThunarVfsFileType type;
+
+  /* File permissions and special mode flags */
+  ThunarVfsFileMode mode;
+
+  /* File flags */
+  ThunarVfsFileFlags flags;
+
+  /* Owner's user id */
+  ThunarVfsUserId uid;
+
+  /* Owner's group id */
+  ThunarVfsGroupId gid;
+
+  /* Size in bytes */
+  ThunarVfsFileSize size;
+
+  /* time of last access */
+  ThunarVfsFileTime atime;
+
+  /* time of last modification */
+  ThunarVfsFileTime mtime;
+
+  /* time of last status change */
+  ThunarVfsFileTime ctime;
+
+  /* inode id */
+  ThunarVfsFileInode inode;
+
+  /* device id */
+  ThunarVfsFileDevice device;
+
+  /* file's mime type */
+  ThunarVfsMimeInfo *mime_info;
+
+  /* file's absolute path */
+  ThunarVfsPath *path;
+
+  /* file's custom icon (path or themed icon name) */
+  gchar *custom_icon;
+
+  /* file's display name (UTF-8) */
+  gchar *display_name;
+
+  /*< private >*/
+  gint ref_count;
+};
+
+GType                        thunar_vfs_info_get_type         (void) G_GNUC_CONST;
+
+ThunarVfsInfo               *thunar_vfs_info_new_for_path     (ThunarVfsPath       *path,
+                                                               GError             **error) G_GNUC_MALLOC;
+
+G_INLINE_FUNC ThunarVfsInfo *thunar_vfs_info_ref              (ThunarVfsInfo       *info);
+void                         thunar_vfs_info_unref            (ThunarVfsInfo       *info);
+
+ThunarVfsInfo               *thunar_vfs_info_copy             (const ThunarVfsInfo *info) G_GNUC_MALLOC;
+
+G_INLINE_FUNC const gchar   *thunar_vfs_info_get_custom_icon  (const ThunarVfsInfo *info);
+
+gboolean                     thunar_vfs_info_execute          (const ThunarVfsInfo *info,
+                                                               GdkScreen           *screen,
+                                                               GList               *path_list,
+                                                               GError             **error);
+
+gboolean                     thunar_vfs_info_rename           (ThunarVfsInfo       *info,
+                                                               const gchar         *name,
+                                                               GError             **error);
+
+gboolean                     thunar_vfs_info_matches          (const ThunarVfsInfo *a,
+                                                               const ThunarVfsInfo *b);
+
+G_INLINE_FUNC void           thunar_vfs_info_list_free        (GList               *info_list);
+
+
+/* inline functions implementations */
+#if defined(G_CAN_INLINE) || defined(__THUNAR_VFS_INFO_C__)
+/**
+ * thunar_vfs_info_ref:
+ * @info : a #ThunarVfsInfo.
+ *
+ * Increments the reference count on @info by 1 and
+ * returns a pointer to @info.
+ *
+ * Return value: a pointer to @info.
+ **/
+G_INLINE_FUNC ThunarVfsInfo*
+thunar_vfs_info_ref (ThunarVfsInfo *info)
+{
+  exo_atomic_inc (&info->ref_count);
+  return info;
+}
+
+/**
+ * thunar_vfs_info_get_custom_icon:
+ * @info : a #ThunarVfsInfo.
+ *
+ * Returns the custom icon for @info if there's
+ * a custom icon, else %NULL.
+ *
+ * The custom icon can be a themed icon name or
+ * an absolute path to an icon file in the local
+ * file system.
+ *
+ * Return value: the custom icon for @info or %NULL.
+ **/
+G_INLINE_FUNC const gchar*
+thunar_vfs_info_get_custom_icon (const ThunarVfsInfo *info)
+{
+  return info->custom_icon;
+}
+
+/**
+ * thunar_vfs_info_list_free:
+ * @info_list : a list #ThunarVfsInfo<!---->s.
+ *
+ * Unrefs all #ThunarVfsInfo<!---->s in @info_list and
+ * frees the list itself.
+ *
+ * This method always returns %NULL for the convenience of
+ * being able to do:
+ * <informalexample><programlisting>
+ * info_list = thunar_vfs_info_list_free (info_list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the empty list (%NULL).
+ **/
+G_INLINE_FUNC void
+thunar_vfs_info_list_free (GList *info_list)
+{
+  GList *lp;
+  for (lp = info_list; lp != NULL; lp = lp->next)
+    thunar_vfs_info_unref (lp->data);
+  g_list_free (info_list);
+}
+#endif /* G_CAN_INLINE || __THUNAR_VFS_INFO_C__ */
+
+
+#if defined(THUNAR_VFS_COMPILATION)
+void           _thunar_vfs_info_init          (void) G_GNUC_INTERNAL;
+void           _thunar_vfs_info_shutdown      (void) G_GNUC_INTERNAL;
+ThunarVfsInfo *_thunar_vfs_info_new_internal  (ThunarVfsPath *path,
+                                               const gchar   *absolute_path,
+                                               GError       **error) G_GNUC_INTERNAL;
+#endif
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_INFO_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,410 @@
+/* $Id: thunar-vfs-interactive-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-enum-types.h>
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+#include <thunar-vfs/thunar-vfs-marshal.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+enum
+{
+  ASK,
+  INFO_MESSAGE,
+  NEW_FILES,
+  PERCENT,
+  LAST_SIGNAL,
+};
+
+
+
+static void                            thunar_vfs_interactive_job_class_init (ThunarVfsInteractiveJobClass   *klass);
+static void                            thunar_vfs_interactive_job_init       (ThunarVfsInteractiveJob        *interactive_job);
+static void                            thunar_vfs_interactive_job_finalize   (GObject                        *object);
+static ThunarVfsInteractiveJobResponse thunar_vfs_interactive_job_real_ask   (ThunarVfsInteractiveJob        *interactive_job,
+                                                                              const gchar                    *message,
+                                                                              ThunarVfsInteractiveJobResponse choices);
+static ThunarVfsInteractiveJobResponse thunar_vfs_interactive_job_ask        (ThunarVfsInteractiveJob        *interactive_job,
+                                                                              const gchar                    *message,
+                                                                              ThunarVfsInteractiveJobResponse choices);
+
+
+
+static guint interactive_signals[LAST_SIGNAL];
+
+
+
+G_DEFINE_ABSTRACT_TYPE (ThunarVfsInteractiveJob, thunar_vfs_interactive_job, THUNAR_VFS_TYPE_JOB);
+
+
+
+static gboolean
+ask_accumulator (GSignalInvocationHint *ihint,
+                 GValue                *return_accu,
+                 const GValue          *handler_return,
+                 gpointer               data)
+{
+  g_value_copy (handler_return, return_accu);
+  return FALSE;
+}
+
+
+
+static void
+thunar_vfs_interactive_job_class_init (ThunarVfsInteractiveJobClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_interactive_job_finalize;
+
+  klass->ask = thunar_vfs_interactive_job_real_ask;
+
+  /**
+   * ThunarVfsInteractiveJob::ask:
+   * @job     : a #ThunarVfsJob.
+   * @message : question to display to the user.
+   * @choices : a combination of #ThunarVfsInteractiveJobResponse<!---->s.
+   *
+   * The @message is garantied to contain valid UTF-8.
+   *
+   * Return value: the selected choice.
+   **/
+  interactive_signals[ASK] =
+    g_signal_new ("ask",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS | G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (ThunarVfsInteractiveJobClass, ask),
+                  ask_accumulator, NULL,
+                  _thunar_vfs_marshal_FLAGS__STRING_FLAGS,
+                  THUNAR_VFS_TYPE_VFS_INTERACTIVE_JOB_RESPONSE,
+                  2, G_TYPE_STRING,
+                  THUNAR_VFS_TYPE_VFS_INTERACTIVE_JOB_RESPONSE);
+
+  /**
+   * ThunarVfsInteractiveJob::new-files:
+   * @job       : a #ThunarVfsJob.
+   * @path_list : a list of #ThunarVfsPath<!---->s that were created by @job.
+   *
+   * This signal is emitted by the @job right before the @job is terminated
+   * and informs the application about the list of created files in @path_list.
+   * @path_list contains only the toplevel path items, that were specified by
+   * the application on creation of the @job.
+   **/
+  interactive_signals[NEW_FILES] =
+    g_signal_new ("new-files",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+  /**
+   * ThunarVfsInteractiveJob::info-message:
+   * @job     : a #ThunarVfsJob.
+   * @message : information to be displayed about @job.
+   *
+   * This signal is emitted to display information about the
+   * @job. Examples of messages are "Preparing..." or
+   * "Cleaning up...".
+   *
+   * The @message is garantied to contain valid UTF-8, so
+   * it can be displayed by #GtkWidget<!---->s out of the
+   * box.
+   **/
+  interactive_signals[INFO_MESSAGE] =
+    g_signal_new ("info-message",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__STRING,
+                  G_TYPE_NONE, 1, G_TYPE_STRING);
+
+  /**
+   * ThunarVfsInteractiveJob::percent:
+   * @job     : a #ThunarVfsJob.
+   * @percent : the percentage of completeness.
+   *
+   * This signal is emitted to present the state
+   * of the overall progress.
+   **/
+  interactive_signals[PERCENT] =
+    g_signal_new ("percent",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__DOUBLE,
+                  G_TYPE_NONE, 1, G_TYPE_DOUBLE);
+}
+
+
+
+static void
+thunar_vfs_interactive_job_init (ThunarVfsInteractiveJob *interactive_job)
+{
+  /* grab a reference on the default vfs monitor */
+  interactive_job->monitor = thunar_vfs_monitor_get_default ();
+}
+
+
+
+static void
+thunar_vfs_interactive_job_finalize (GObject *object)
+{
+  ThunarVfsInteractiveJob *interactive_job = THUNAR_VFS_INTERACTIVE_JOB (object);
+
+  /* release the reference on the default vfs monitor */
+  g_object_unref (G_OBJECT (interactive_job->monitor));
+
+  (*G_OBJECT_CLASS (thunar_vfs_interactive_job_parent_class)->finalize) (object);
+}
+
+
+
+static ThunarVfsInteractiveJobResponse
+thunar_vfs_interactive_job_real_ask (ThunarVfsInteractiveJob        *interactive_job,
+                                     const gchar                    *message,
+                                     ThunarVfsInteractiveJobResponse choices)
+{
+  return THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL;
+}
+
+
+
+static ThunarVfsInteractiveJobResponse
+thunar_vfs_interactive_job_ask (ThunarVfsInteractiveJob        *interactive_job,
+                                const gchar                    *message,
+                                ThunarVfsInteractiveJobResponse choices)
+{
+  ThunarVfsInteractiveJobResponse response;
+  thunar_vfs_job_emit (THUNAR_VFS_JOB (interactive_job), interactive_signals[ASK], 0, message, choices, &response);
+  return response;
+}
+
+
+
+/**
+ * thunar_vfs_interactive_job_info_message:
+ * @interactive_job : a #ThunarVfsInteractiveJob.
+ * @message         : an informational message about @interactive_job.
+ *
+ * Emits the ::info-message signal on @interactive_job with @message.
+ *
+ * The text contained in @message must be valid UTF-8.
+ **/
+void
+thunar_vfs_interactive_job_info_message (ThunarVfsInteractiveJob *interactive_job,
+                                         const gchar             *message)
+{
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (interactive_job));
+  g_return_if_fail (g_utf8_validate (message, -1, NULL));
+
+  thunar_vfs_job_emit (THUNAR_VFS_JOB (interactive_job), interactive_signals[INFO_MESSAGE], 0, message);
+}
+
+
+
+/**
+ * thunar_vfs_interactive_job_percent:
+ * @interactive_job : a #ThunarVfsInteractiveJob.
+ * @percent         : the percentage of completeness (in the range of 0.0 to 100.0).
+ *
+ * Emits the ::percent signal on @interactive_job with @percent.
+ **/
+void
+thunar_vfs_interactive_job_percent (ThunarVfsInteractiveJob *interactive_job,
+                                    gdouble                  percent)
+{
+  struct timeval tv;
+  guint64        time;
+
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (interactive_job));
+  g_return_if_fail (percent >= 0.0 && percent <= 100.0);
+
+  /* determine the current time in msecs */
+  gettimeofday (&tv, NULL);
+  time = tv.tv_sec * 1000 + tv.tv_usec / 1000;
+
+  /* don't fire the "percent" signal more than ten times per second
+   * to avoid unneccessary load on the main thread.
+   */
+  if (G_UNLIKELY (time - interactive_job->last_percent_time > 100))
+    {
+      thunar_vfs_job_emit (THUNAR_VFS_JOB (interactive_job), interactive_signals[PERCENT], 0, percent);
+      interactive_job->last_percent_time = time;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_interactive_job_new_files:
+ * @interactive_job : a #ThunarVfsInteractiveJob.
+ * @path_list       : the #ThunarVfsPath<!---->s that were created by @interactive_job.
+ *
+ * Emits the ::created signal on @interactive_job with @info_list.
+ **/
+void
+thunar_vfs_interactive_job_new_files (ThunarVfsInteractiveJob *interactive_job,
+                                      const GList             *path_list)
+{
+  g_return_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (interactive_job));
+
+  /* wait for the monitor to process all pending events */
+  thunar_vfs_monitor_wait (interactive_job->monitor);
+
+  /* emit the new-files signal */
+  thunar_vfs_job_emit (THUNAR_VFS_JOB (interactive_job), interactive_signals[NEW_FILES], 0, path_list);
+}
+
+
+
+/**
+ * thunar_vfs_interactive_job_overwrite:
+ * @interactive_job : a #ThunarVfsInteractiveJob.
+ * @message         : the message to be displayed in valid UTF-8.
+ *
+ * Asks the user whether to overwrite a certain file as described by
+ * @message.
+ *
+ * The return value may be %TRUE to perform the overwrite, or %FALSE,
+ * which means to either skip the file or cancel the @interactive_job.
+ * The caller must check using thunar_vfs_job_cancelled() if %FALSE
+ * is returned.
+ *
+ * Return value: %TRUE to overwrite or %FALSE to leave it or cancel
+ *               the @interactive_job.
+ **/
+gboolean
+thunar_vfs_interactive_job_overwrite (ThunarVfsInteractiveJob *interactive_job,
+                                      const gchar             *message)
+{
+  ThunarVfsInteractiveJobResponse response;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (interactive_job), FALSE);
+  g_return_val_if_fail (g_utf8_validate (message, -1, NULL), FALSE);
+
+  /* check if the user cancelled the job already */
+  if (thunar_vfs_job_cancelled (THUNAR_VFS_JOB (interactive_job)))
+    return FALSE;
+
+  /* check if the user said "overwrite all" earlier */
+  if (interactive_job->overwrite_all)
+    return TRUE;
+
+  /* ask the user */
+  response = thunar_vfs_interactive_job_ask (interactive_job, message,
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES |
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL |
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO |
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+
+  /* evaluate the response */
+  switch (response)
+    {
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL:
+      interactive_job->overwrite_all = TRUE;
+      /* FALL-THROUGH */
+
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES:
+      return TRUE;
+
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL:
+      thunar_vfs_job_cancel (THUNAR_VFS_JOB (interactive_job));
+      /* FALL-THROUGH */
+
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO:
+      return FALSE;
+
+    default:
+      g_assert_not_reached ();
+      return FALSE;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_interactive_job_skip:
+ * @interactive_job : a #ThunarVfsInteractiveJob.
+ * @message         : the message to be displayed as valid UTF-8.
+ *
+ * Asks the user whether to skip a certain file as described by
+ * @message.
+ *
+ * The return value may be %TRUE to perform the skip, or %FALSE,
+ * which means to cancel the @interactive_job.
+ *
+ * Return value: %TRUE to overwrite or %FALSE to cancel
+ *               the @interactive_job.
+ **/
+gboolean
+thunar_vfs_interactive_job_skip (ThunarVfsInteractiveJob *interactive_job,
+                                 const gchar             *message)
+{
+  ThunarVfsInteractiveJobResponse response;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_INTERACTIVE_JOB (interactive_job), FALSE);
+  g_return_val_if_fail (g_utf8_validate (message, -1, NULL), FALSE);
+
+  /* check if the user cancelled the job already */
+  if (thunar_vfs_job_cancelled (THUNAR_VFS_JOB (interactive_job)))
+    return FALSE;
+
+  /* check if the user said "skip all" earlier */
+  if (interactive_job->skip_all)
+    return TRUE;
+
+  /* ask the user */
+  response = thunar_vfs_interactive_job_ask (interactive_job, message,
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES |
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL |
+                                             THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL);
+
+  /* evaluate the response */
+  switch (response)
+    {
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL:
+      interactive_job->skip_all = TRUE;
+      /* FALL-THROUGH */
+
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES:
+      return TRUE;
+
+    case THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL:
+      thunar_vfs_job_cancel (THUNAR_VFS_JOB (interactive_job));
+      return FALSE;
+
+    default:
+      g_assert_not_reached ();
+      return FALSE;
+    }
+}
+
+
+
+#define __THUNAR_VFS_INTERACTIVE_JOB_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-interactive-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,100 @@
+/* $Id: thunar-vfs-interactive-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_INTERACTIVE_JOB_H__
+#define __THUNAR_VFS_INTERACTIVE_JOB_H__
+
+#include <thunar-vfs/thunar-vfs-job.h>
+#include <thunar-vfs/thunar-vfs-monitor.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsInteractiveJobClass ThunarVfsInteractiveJobClass;
+typedef struct _ThunarVfsInteractiveJob      ThunarVfsInteractiveJob;
+
+#define THUNAR_VFS_TYPE_INTERACTIVE_JOB             (thunar_vfs_interactive_job_get_type ())
+#define THUNAR_VFS_INTERACTIVE_JOB(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_INTERACTIVE_JOB, ThunarVfsInteractiveJob))
+#define THUNAR_VFS_INTERACTIVE_JOB_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_INTERACTIVE_JOB, ThunarVfsInteractiveJobClass))
+#define THUNAR_VFS_IS_INTERACTIVE_JOB(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_INTERACTIVE_JOB))
+#define THUNAR_VFS_IS_INTERACTIVE_JOB_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_INTERACTIVE_JOB))
+#define THUNAR_VFS_INTERACTIVE_JOB_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_INTERACTIVE_JOB, ThunarVfsInteractiveJobClass))
+
+/**
+ * ThunarVfsInteractiveJobResponse:
+ * @THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES     :
+ * @THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL :
+ * @THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO      :
+ * @THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL  :
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES     = 1 << 0,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_YES_ALL = 1 << 1,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_NO      = 1 << 2,
+  THUNAR_VFS_INTERACTIVE_JOB_RESPONSE_CANCEL  = 1 << 3,
+} ThunarVfsInteractiveJobResponse;
+
+struct _ThunarVfsInteractiveJobClass
+{
+  ThunarVfsJobClass __parent__;
+
+  /* signals */
+  ThunarVfsInteractiveJobResponse (*ask) (ThunarVfsInteractiveJob        *interactive_job,
+                                          const gchar                    *message,
+                                          ThunarVfsInteractiveJobResponse choices);
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+};
+
+struct _ThunarVfsInteractiveJob
+{
+  ThunarVfsJob __parent__;
+
+  /* the last time we fired the "percent" signal (in msecs) */
+  guint64 last_percent_time;
+
+  /* connection to the default ThunarVfsMonitor */
+  ThunarVfsMonitor *monitor;
+
+  guint overwrite_all : 1;
+  guint skip_all : 1;
+};
+
+GType     thunar_vfs_interactive_job_get_type     (void) G_GNUC_CONST;
+
+void      thunar_vfs_interactive_job_info_message (ThunarVfsInteractiveJob *interactive_job,
+                                                   const gchar             *message) G_GNUC_INTERNAL;
+void      thunar_vfs_interactive_job_percent      (ThunarVfsInteractiveJob *interactive_job,
+                                                   gdouble                  percent) G_GNUC_INTERNAL;
+
+void      thunar_vfs_interactive_job_new_files    (ThunarVfsInteractiveJob *interactive_job,
+                                                   const GList             *path_list) G_GNUC_INTERNAL;
+
+gboolean  thunar_vfs_interactive_job_overwrite    (ThunarVfsInteractiveJob *interactive_job,
+                                                   const gchar             *message) G_GNUC_INTERNAL;
+gboolean  thunar_vfs_interactive_job_skip         (ThunarVfsInteractiveJob *interactive_job,
+                                                   const gchar             *message) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_INTERACTIVE_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,451 @@
+/* $Id: thunar-vfs-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* implement thunar-vfs-job's inline functions */
+#define G_IMPLEMENT_INLINES 1
+#define __THUNAR_VFS_JOB_C__
+#include <thunar-vfs/thunar-vfs-job.h>
+
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#include <gdk/gdk.h>
+
+
+
+#define THUNAR_VFS_JOB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), THUNAR_VFS_TYPE_JOB, ThunarVfsJobPrivate))
+
+
+
+/* Signal identifiers */
+enum
+{
+  ERROR,
+  FINISHED,
+  LAST_SIGNAL,
+};
+
+
+
+/* signal emission details */
+typedef struct
+{
+  ThunarVfsJob     *job;
+  guint             signal_id;
+  GQuark            signal_detail;
+  va_list           var_args;
+  volatile gboolean pending;
+} ThunarVfsJobEmitDetails;
+
+
+
+static void     thunar_vfs_job_class_init  (ThunarVfsJobClass *klass);
+static void     thunar_vfs_job_init        (ThunarVfsJob      *job);
+static void     thunar_vfs_job_finalize    (GObject           *object);
+static void     thunar_vfs_job_execute     (gpointer           data,
+                                            gpointer           user_data);
+static gboolean thunar_vfs_job_emit_idle   (gpointer           user_data);
+static gboolean thunar_vfs_job_launch_idle (gpointer           user_data);
+
+
+
+struct _ThunarVfsJobPrivate
+{
+  GCond     *cond;
+  GMutex    *mutex;
+  GMainLoop *loop;
+  gint       launch_idle_id;
+};
+
+
+
+static GObjectClass *thunar_vfs_job_parent_class;
+static guint         job_signals[LAST_SIGNAL];
+static GThreadPool  *job_pool = NULL;
+
+
+
+GType
+thunar_vfs_job_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsJobClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_job_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsJob),
+        0,
+        (GInstanceInitFunc) thunar_vfs_job_init,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_OBJECT, "ThunarVfsJob", &info, G_TYPE_FLAG_ABSTRACT);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_job_class_init (ThunarVfsJobClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* add our private data for this class */
+  g_type_class_add_private (klass, sizeof (ThunarVfsJobPrivate));
+
+  /* determine the parent class */
+  thunar_vfs_job_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_job_finalize;
+
+  /**
+   * ThunarVfsJob::error:
+   * @job   : a #ThunarVfsJob.
+   * @error : a #GError describing the cause.
+   *
+   * Emitted whenever an error occurs while executing the
+   * @job.
+   **/
+  job_signals[ERROR] =
+    g_signal_new ("error",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+  /**
+   * ThunarVfsJob::finished:
+   * @job : a #ThunarVfsJob.
+   *
+   * This signal will be automatically emitted once the
+   * @job finishes its execution, no matter whether @job
+   * completed successfully or was cancelled by the
+   * user.
+   **/
+  job_signals[FINISHED] =
+    g_signal_new ("finished",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+}
+
+
+
+static void
+thunar_vfs_job_init (ThunarVfsJob *job)
+{
+  job->priv = THUNAR_VFS_JOB_GET_PRIVATE (job);
+  job->priv->cond = g_cond_new ();
+  job->priv->mutex = g_mutex_new ();
+  job->priv->launch_idle_id = -1;
+}
+
+
+
+static void
+thunar_vfs_job_finalize (GObject *object)
+{
+  ThunarVfsJob *job = THUNAR_VFS_JOB (object);
+
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (job->priv->loop == NULL);
+
+  /* drop the launch idle source if it's active */
+  if (G_LIKELY (job->priv->launch_idle_id >= 0))
+    g_source_remove (job->priv->launch_idle_id);
+
+  /* destroy the synchronization entities */
+  g_mutex_free (job->priv->mutex);
+  g_cond_free (job->priv->cond);
+
+  /* invoke the parent's finalize method */
+  (*G_OBJECT_CLASS (thunar_vfs_job_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_job_execute (gpointer data,
+                        gpointer user_data)
+{
+  ThunarVfsJob *job = THUNAR_VFS_JOB (data);
+
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (job->priv->loop != NULL);
+
+  /* perform the real work */
+  (*THUNAR_VFS_JOB_GET_CLASS (job)->execute) (job);
+
+  /* exit from the execution loop */
+  g_main_loop_quit (job->priv->loop);
+}
+
+
+
+static gboolean
+thunar_vfs_job_emit_idle (gpointer user_data)
+{
+  ThunarVfsJobEmitDetails *details = user_data;
+  ThunarVfsJob            *job = details->job;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_JOB (job), FALSE);
+
+  g_mutex_lock (job->priv->mutex);
+
+  /* emit the signal */
+  GDK_THREADS_ENTER ();
+  g_signal_emit_valist (job, details->signal_id, details->signal_detail, details->var_args);
+  GDK_THREADS_LEAVE ();
+
+  /* tell the other thread, that we're done */
+  details->pending = FALSE;
+  g_cond_signal (job->priv->cond);
+  g_mutex_unlock (job->priv->mutex);
+
+  /* remove the idle source */
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_vfs_job_launch_idle (gpointer user_data)
+{
+  ThunarVfsJob *job = THUNAR_VFS_JOB (user_data);
+
+  g_return_val_if_fail (THUNAR_VFS_IS_JOB (job), FALSE);
+  g_return_val_if_fail (job_pool != NULL, FALSE);
+
+  /* take an additional reference on the job */
+  g_object_ref (G_OBJECT (job));
+
+  /* allocate a main loop for this job */
+  job->priv->loop = g_main_loop_new (NULL, FALSE);
+
+  /* schedule a thread to handle the job */
+  g_thread_pool_push (job_pool, job, NULL);
+
+  /* wait for the job to finish */
+  g_main_loop_run (job->priv->loop);
+
+  /* emit the "finished" signal */
+  g_signal_emit (G_OBJECT (job), job_signals[FINISHED], 0);
+
+  /* drop the main loop */
+  g_main_loop_unref (job->priv->loop);
+  job->priv->loop = NULL;
+
+  /* drop the additional reference on the job */
+  g_object_unref (G_OBJECT (job));
+
+  return FALSE;
+}
+
+
+
+/**
+ * thunar_vfs_job_launch:
+ * @job : a #ThunarVfsJob.
+ *
+ * This functions schedules @job to be run as soon
+ * as possible, in a separate thread.
+ *
+ * Return value: a pointer to @job.
+ **/
+ThunarVfsJob*
+thunar_vfs_job_launch (ThunarVfsJob *job)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_JOB (job), NULL);
+  g_return_val_if_fail (job->priv->launch_idle_id < 0, NULL);
+  g_return_val_if_fail (job_pool != NULL, NULL);
+
+  /* schedule the launch idle source */
+  job->priv->launch_idle_id = g_idle_add_full (G_PRIORITY_HIGH, thunar_vfs_job_launch_idle, job, NULL);
+
+  return job;
+}
+
+
+
+/**
+ * thunar_vfs_job_cancel:
+ * @job : a #ThunarVfsJob.
+ *
+ * Attempts to cancel the operation currently
+ * performed by @job. Even after the cancellation
+ * of @job, it may still emit signals, so you
+ * must take care of disconnecting all handlers
+ * appropriately if you cannot handle signals
+ * after cancellation.
+ **/
+void
+thunar_vfs_job_cancel (ThunarVfsJob *job)
+{
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  job->cancelled = TRUE;
+}
+
+
+
+/**
+ * thunar_vfs_job_emit:
+ * @job           : a #ThunarVfsJob.
+ * @signal_id     : the id of the signal to emit on @job.
+ * @signal_detail : the detail.
+ * @var_args      : a list of paramters to be passed to the signal,
+ *                  folled by a location for the return value. If
+ *                  the return type of the signals is %G_TYPE_NONE,
+ *                  the return value location can be omitted.
+ *
+ * Emits the signal identified by @signal_id on @job in
+ * the context of the main thread. This method doesn't
+ * return until the signal was emitted.
+ **/
+void
+thunar_vfs_job_emit_valist (ThunarVfsJob *job,
+                            guint         signal_id,
+                            GQuark        signal_detail,
+                            va_list       var_args)
+{
+  ThunarVfsJobEmitDetails details;
+
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (job->priv->loop != NULL);
+
+  details.job = job;
+  details.signal_id = signal_id;
+  details.signal_detail = signal_detail;
+  details.pending = TRUE;
+
+  /* copy the variable argument list (portable) */
+  G_VA_COPY (details.var_args, var_args);
+
+  g_mutex_lock (job->priv->mutex);
+  g_idle_add_full (G_PRIORITY_HIGH, thunar_vfs_job_emit_idle, &details, NULL);
+  while (G_UNLIKELY (details.pending))
+    g_cond_wait (job->priv->cond, job->priv->mutex);
+  g_mutex_unlock (job->priv->mutex);
+}
+
+
+
+/**
+ * thunar_vfs_job_emit:
+ * @job           : a #ThunarVfsJob.
+ * @signal_id     : the id of the signal to emit on qjob.
+ * @signal_detail : the signal detail.
+ * @...           : a list of parameters to be passed to the signal.
+ *
+ * Convenience wrapper for thunar_vfs_job_emit_valist().
+ **/
+void
+thunar_vfs_job_emit (ThunarVfsJob *job,
+                     guint         signal_id,
+                     GQuark        signal_detail,
+                     ...)
+{
+  va_list var_args;
+
+  va_start (var_args, signal_detail);
+  thunar_vfs_job_emit_valist (job, signal_id, signal_detail, var_args);
+  va_end (var_args);
+}
+
+
+
+/**
+ * thunar_vfs_job_error:
+ * @job   : a #ThunarVfsJob.
+ * @error : a #GError describing the error cause.
+ *
+ * Emits the ::error signal on @job with the given @error. Whether
+ * or not the @job continues after emitting the error depends on
+ * the particular implementation of @job, but most jobs will
+ * terminate instantly after emitting an error.
+ **/
+void
+thunar_vfs_job_error (ThunarVfsJob *job,
+                      GError       *error)
+{
+  g_return_if_fail (THUNAR_VFS_IS_JOB (job));
+  g_return_if_fail (error != NULL && error->message != NULL);
+
+  thunar_vfs_job_emit (job, job_signals[ERROR], 0, error);
+}
+
+
+
+
+/**
+ * _thunar_vfs_job_init:
+ *
+ * Initializes the jobs module of the Thunar-VFS
+ * library.
+ **/
+void
+_thunar_vfs_job_init (void)
+{
+  g_return_if_fail (job_pool == NULL);
+
+  job_pool = g_thread_pool_new (thunar_vfs_job_execute, NULL, 8, FALSE, NULL);
+}
+
+
+
+/**
+ * _thunar_vfs_job_shutdown:
+ *
+ * Shuts down the jobs module of the Thunar-VFS
+ * library.
+ **/
+void
+_thunar_vfs_job_shutdown (void)
+{
+  g_return_if_fail (job_pool != NULL);
+
+  g_thread_pool_free (job_pool, FALSE, TRUE);
+  job_pool = NULL;
+}
+
+
+
+#define __THUNAR_VFS_JOB_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,118 @@
+/* $Id: thunar-vfs-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_JOB_H__
+#define __THUNAR_VFS_JOB_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsJobPrivate ThunarVfsJobPrivate;
+typedef struct _ThunarVfsJobClass   ThunarVfsJobClass;
+typedef struct _ThunarVfsJob        ThunarVfsJob;
+
+#define THUNAR_VFS_TYPE_JOB             (thunar_vfs_job_get_type ())
+#define THUNAR_VFS_JOB(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_JOB, ThunarVfsJob))
+#define THUNAR_VFS_JOB_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_JOB, ThunarVfsJobClass))
+#define THUNAR_VFS_IS_JOB(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_JOB))
+#define THUNAR_VFS_IS_JOB_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_JOB))
+#define THUNAR_VFS_JOB_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_JOB, ThunarVfsJobClass))
+
+struct _ThunarVfsJobClass
+{
+  GObjectClass __parent__;
+
+  /* virtual methods */
+  void (*execute)  (ThunarVfsJob *job);
+
+  /* signals */
+  void (*finished) (ThunarVfsJob *job);
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+};
+
+struct _ThunarVfsJob
+{
+  GObject __parent__;
+
+  /*< private >*/
+  volatile gboolean    cancelled;
+  ThunarVfsJobPrivate *priv;
+};
+
+GType                  thunar_vfs_job_get_type     (void) G_GNUC_CONST;
+
+/* public API */
+ThunarVfsJob          *thunar_vfs_job_launch       (ThunarVfsJob       *job);
+void                   thunar_vfs_job_cancel       (ThunarVfsJob       *job);
+G_INLINE_FUNC gboolean thunar_vfs_job_cancelled    (const ThunarVfsJob *job);
+
+
+
+/* module API */
+void                   thunar_vfs_job_emit_valist  (ThunarVfsJob       *job,
+                                                    guint               signal_id,
+                                                    GQuark              signal_detail,
+                                                    va_list             var_args) G_GNUC_INTERNAL;
+void                   thunar_vfs_job_emit         (ThunarVfsJob       *job,
+                                                    guint               signal_id,
+                                                    GQuark              signal_detail,
+                                                    ...) G_GNUC_INTERNAL;
+void                   thunar_vfs_job_error        (ThunarVfsJob       *job,
+                                                    GError             *error) G_GNUC_INTERNAL;
+
+
+/* inline function implementations */
+#if defined(G_CAN_INLINE) || defined(__THUNAR_VFS_JOB_C__)
+/**
+ * thunar_vfs_job_cancelled:
+ * @job : a #ThunarVfsJob.
+ *
+ * Checks whether @job was previously cancelled
+ * by a call to thunar_vfs_job_cancel().
+ *
+ * Return value: %TRUE if @job is cancelled.
+ **/
+G_INLINE_FUNC gboolean
+thunar_vfs_job_cancelled (const ThunarVfsJob *job)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_JOB (job), FALSE);
+  return job->cancelled;
+}
+#endif /* G_CAN_INLINE || __THUNAR_VFS_JOB_C__ */
+
+
+#if defined(THUNAR_VFS_COMPILATION)
+void _thunar_vfs_job_init     (void) G_GNUC_INTERNAL;
+void _thunar_vfs_job_shutdown (void) G_GNUC_INTERNAL;
+#endif
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,271 @@
+/* $Id: thunar-vfs-link-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-link-job.h>
+#include <thunar-vfs/thunar-vfs-xfer.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_unlink(path) (unlink ((path)))
+#endif
+
+
+
+static void thunar_vfs_link_job_class_init (ThunarVfsLinkJobClass *klass);
+static void thunar_vfs_link_job_finalize   (GObject               *object);
+static void thunar_vfs_link_job_execute    (ThunarVfsJob          *job);
+
+
+
+struct _ThunarVfsLinkJobClass
+{
+  ThunarVfsInteractiveJobClass __parent__;
+};
+
+struct _ThunarVfsLinkJob
+{
+  ThunarVfsInteractiveJob __parent__;
+
+  /* source and target path list */
+  GList *source_path_list;
+  GList *target_path_list;
+};
+
+
+
+static GObjectClass *thunar_vfs_link_job_parent_class;
+
+
+
+GType
+thunar_vfs_link_job_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsLinkJobClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_link_job_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsLinkJob),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_INTERACTIVE_JOB,
+                                     "ThunarVfsLinkJob", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_link_job_class_init (ThunarVfsLinkJobClass *klass)
+{
+  ThunarVfsJobClass *thunarvfs_job_class;
+  GObjectClass      *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_link_job_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_link_job_finalize;
+
+  thunarvfs_job_class = THUNAR_VFS_JOB_CLASS (klass);
+  thunarvfs_job_class->execute = thunar_vfs_link_job_execute;
+}
+
+
+
+static void
+thunar_vfs_link_job_finalize (GObject *object)
+{
+  ThunarVfsLinkJob *link_job = THUNAR_VFS_LINK_JOB (object);
+
+  /* release the target path list */
+  thunar_vfs_path_list_free (link_job->target_path_list);
+
+  /* release the source path list */
+  thunar_vfs_path_list_free (link_job->source_path_list);
+
+  (*G_OBJECT_CLASS (thunar_vfs_link_job_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_link_job_execute (ThunarVfsJob *job)
+{
+  ThunarVfsLinkJob *link_job = THUNAR_VFS_LINK_JOB (job);
+  ThunarVfsPath    *target_path;
+  gboolean          overwrite;
+  gdouble           percent;
+  GError           *error = NULL;
+  gchar             target_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+  gchar            *display_name;
+  gchar            *message;
+  guint             completed = 0;
+  guint             total;
+  GList            *target_path_list = NULL;
+  GList            *sp;
+  GList            *tp;
+
+  /* determine the total number of source files */
+  total = g_list_length (link_job->source_path_list);
+
+  /* process all files */
+  for (sp = link_job->source_path_list, tp = link_job->target_path_list; sp != NULL && tp != NULL; sp = sp->next, tp = tp->next)
+    {
+      /* check if the job was cancelled */
+      if (thunar_vfs_job_cancelled (job))
+        break;
+
+      /* update the progress message */
+      display_name = g_filename_display_name (thunar_vfs_path_get_name (sp->data));
+      thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (link_job), display_name);
+      g_free (display_name);
+
+again:
+      /* try to perform the symlink operation */
+      if (thunar_vfs_xfer_link (sp->data, tp->data, &target_path, &error))
+        {
+          /* add the item to the target path list */
+          target_path_list = g_list_prepend (target_path_list, target_path);
+        }
+      else if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_EXIST)
+        {
+          /* ask the user whether we should remove the target first */
+          message = g_strdup_printf (_("%s.\n\nDo you want to overwrite it?"), error->message);
+          overwrite = thunar_vfs_interactive_job_overwrite (THUNAR_VFS_INTERACTIVE_JOB (link_job), message);
+          g_free (message);
+
+          /* release the error */
+          g_clear_error (&error);
+
+          if (G_LIKELY (overwrite))
+            {
+              /* determine the absolute path to the target file */
+              if (thunar_vfs_path_to_string (tp->data, target_absolute_path, sizeof (target_absolute_path), &error) < 0)
+                {
+error_and_cancel:
+                  /* notify the user about the error */
+                  thunar_vfs_job_error (job, error);
+                  thunar_vfs_job_cancel (job);
+                  g_clear_error (&error);
+                  break;
+                }
+
+              /* try to unlink the target file */
+              if (g_unlink (target_absolute_path) < 0 && errno != ENOENT)
+                {
+                  error = g_error_new (G_FILE_ERROR, g_file_error_from_errno (errno),
+                                       _("Failed to remove `%s': %s"), target_absolute_path,
+                                       g_strerror (errno));
+                  goto error_and_cancel;
+                }
+
+              /* try again... */
+              goto again;
+            }
+        }
+      else
+        {
+          /* ask the user whether to skip this file (used for cancellation only) */
+          message = g_strdup_printf (_("%s.\n\nDo you want to skip it?"), error->message);
+          thunar_vfs_interactive_job_skip (THUNAR_VFS_INTERACTIVE_JOB (link_job), message);
+          g_free (message);
+
+          /* reset the error */
+          g_clear_error (&error);
+        }
+
+      /* update the progress status */
+      percent = (++completed * 100.0) / total;
+      percent = CLAMP (percent, 0.0, 100.0);
+      thunar_vfs_interactive_job_percent (THUNAR_VFS_INTERACTIVE_JOB (link_job), percent);
+    }
+
+  /* emit the "new-files" signal if we have any new files */
+  if (G_LIKELY (target_path_list != NULL))
+    {
+      thunar_vfs_interactive_job_new_files (THUNAR_VFS_INTERACTIVE_JOB (link_job), target_path_list);
+      thunar_vfs_path_list_free (target_path_list);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_link_job_new:
+ * @source_path_list : the list of #ThunarVfsPath<!---->s to the source files.
+ * @target_path_list : the list of #ThunarVfsPath<!---->s to the target files.
+ * @error            : return location for errors or %NULL.
+ *
+ * Allocates a new #ThunarVfsLinkJob, that symlinks all files from @source_path_list
+ * to the paths listed in @target_path_list.
+ *
+ * The caller is responsible to free the returned object using g_object_unref() when
+ * no longer needed.
+ *
+ * Return value: the newly allocated #ThunarVfsLinkJob or %NULL on error.
+ **/
+ThunarVfsJob*
+thunar_vfs_link_job_new (GList   *source_path_list,
+                         GList   *target_path_list,
+                         GError **error)
+{
+  ThunarVfsLinkJob *link_job;
+
+  g_return_val_if_fail (g_list_length (source_path_list) == g_list_length (target_path_list), NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate the new job */
+  link_job = g_object_new (THUNAR_VFS_TYPE_LINK_JOB, NULL);
+  link_job->source_path_list = thunar_vfs_path_list_copy (source_path_list);
+  link_job->target_path_list = thunar_vfs_path_list_copy (target_path_list);
+
+  return THUNAR_VFS_JOB (link_job);
+}
+
+
+
+#define __THUNAR_VFS_LINK_JOB_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-link-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,50 @@
+/* $Id: thunar-vfs-link-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_LINK_JOB_H__
+#define __THUNAR_VFS_LINK_JOB_H__
+
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsLinkJobClass ThunarVfsLinkJobClass;
+typedef struct _ThunarVfsLinkJob      ThunarVfsLinkJob;
+
+#define THUNAR_VFS_TYPE_LINK_JOB            (thunar_vfs_link_job_get_type ())
+#define THUNAR_VFS_LINK_JOB(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_LINK_JOB, ThunarVfsLinkJob))
+#define THUNAR_VFS_LINK_JOB_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_LINK_JOB, ThunarVfsLinkJobClass))
+#define THUNAR_VFS_IS_LINK_JOB(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_LINK_JOB))
+#define THUNAR_VFS_IS_LINK_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_LINK_JOB))
+#define THUNAR_VFS_LINK_JOB_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_LINK_JOB, ThunarVfsLinkJobClass))
+
+GType         thunar_vfs_link_job_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsJob *thunar_vfs_link_job_new      (GList   *source_path_list,
+                                            GList   *target_path_list,
+                                            GError **error) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_LINK_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,351 @@
+/* $Id: thunar-vfs-listdir-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-info.h>
+#include <thunar-vfs/thunar-vfs-listdir-job.h>
+#include <thunar-vfs/thunar-vfs-scandir.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+enum
+{
+  INFOS_READY,
+  LAST_SIGNAL,
+};
+
+
+
+typedef struct _ThunarVfsListdirJobTask ThunarVfsListdirJobTask;
+
+
+
+static void thunar_vfs_listdir_job_class_init (ThunarVfsJobClass       *klass);
+static void thunar_vfs_listdir_job_finalize   (GObject                 *object);
+static void thunar_vfs_listdir_job_execute    (ThunarVfsJob            *job);
+static void thunar_vfs_listdir_job_task       (ThunarVfsListdirJobTask *task);
+
+
+struct _ThunarVfsListdirJobClass
+{
+  ThunarVfsJobClass __parent__;
+};
+
+struct _ThunarVfsListdirJob
+{
+  ThunarVfsJob __parent__;
+  ThunarVfsPath *path;
+};
+
+struct _ThunarVfsListdirJobTask
+{
+  GList *first;
+  GList *last;
+  guint  floc;
+  gchar  fpath[THUNAR_VFS_PATH_MAXSTRLEN + 128];
+};
+
+
+
+static GObjectClass *thunar_vfs_listdir_job_parent_class;
+static guint         listdir_signals[LAST_SIGNAL];
+
+
+
+GType
+thunar_vfs_listdir_job_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsListdirJobClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_listdir_job_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsListdirJob),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_JOB,
+                                     "ThunarVfsListdirJob",
+                                     &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_listdir_job_class_init (ThunarVfsJobClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_listdir_job_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_listdir_job_finalize;
+
+  klass->execute = thunar_vfs_listdir_job_execute;
+
+  /**
+   * ThunarVfsListdirJob::infos-ready:
+   * @job   : a #ThunarVfsJob.
+   * @infos : a list of #ThunarVfsInfo<!---->s.
+   *
+   * This signal is emitted whenever there's a new bunch of
+   * #ThunarVfsInfo<!---->s ready. This signal is garantied
+   * to be never emitted with an @infos parameter of %NULL.
+   **/
+  listdir_signals[INFOS_READY] =
+    g_signal_new ("infos-ready",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_NO_HOOKS, 0, NULL, NULL,
+                  g_cclosure_marshal_VOID__POINTER,
+                  G_TYPE_NONE, 1, G_TYPE_POINTER);
+}
+
+
+
+static void
+thunar_vfs_listdir_job_finalize (GObject *object)
+{
+  ThunarVfsListdirJob *listdir_job = THUNAR_VFS_LISTDIR_JOB (object);
+
+  /* free the folder path */
+  if (G_LIKELY (listdir_job->path != NULL))
+    thunar_vfs_path_unref (listdir_job->path);
+
+  /* call the parents finalize method */
+  (*G_OBJECT_CLASS (thunar_vfs_listdir_job_parent_class)->finalize) (object);
+}
+
+
+
+static gint
+pathcmp (gconstpointer a,
+         gconstpointer b)
+{
+  return -strcmp (thunar_vfs_path_get_name (a),
+                  thunar_vfs_path_get_name (b));
+}
+
+
+
+static void
+thunar_vfs_listdir_job_execute (ThunarVfsJob *job)
+{
+  GThreadPool *pool;
+  GError      *error = NULL;
+  GList       *list = NULL;
+  GList       *lp;
+  GList       *hp;
+  guint        n;
+
+  /* scan the given directory */
+  list = thunar_vfs_scandir (THUNAR_VFS_LISTDIR_JOB (job)->path, THUNAR_VFS_SCANDIR_FOLLOW_LINKS, pathcmp, &error);
+  if (G_LIKELY (list != NULL))
+    {
+      for (lp = hp = list, n = 0; lp != NULL; lp = lp->next, ++n)
+        if ((n % 2) == 0)
+          hp = hp->next;
+
+      /* no need to parallelize for really small folders */
+      if (G_UNLIKELY (n < 50))
+        {
+          /* initialize the task struct */
+          ThunarVfsListdirJobTask task;
+          task.first = list;
+          task.last = NULL;
+
+          /* put in the absolute path to the folder */
+          task.floc = thunar_vfs_path_to_string (THUNAR_VFS_LISTDIR_JOB (job)->path, task.fpath, sizeof (task.fpath), &error);
+          if (G_LIKELY (task.floc > 0))
+            {
+              /* append a path separator to the absolute folder path, so we can easily generate child paths */
+              task.fpath[task.floc - 1] = G_DIR_SEPARATOR;
+
+              /* run the task */
+              thunar_vfs_listdir_job_task (&task);
+            }
+        }
+      else
+        {
+          /* allocate memory for 2 tasks */
+          ThunarVfsListdirJobTask tasks[2];
+
+          /* initialize the first task */
+          tasks[0].first = list;
+          tasks[0].last = NULL;
+
+          /* put in the absolute path to the folder */
+          tasks[0].floc = thunar_vfs_path_to_string (THUNAR_VFS_LISTDIR_JOB (job)->path, tasks[0].fpath, sizeof (tasks[0].fpath), &error);
+          if (G_LIKELY (tasks[0].floc > 0))
+            {
+              /* allocate a thread pool for the first task */
+              pool = g_thread_pool_new ((GFunc) thunar_vfs_listdir_job_task, NULL, 1, FALSE, NULL);
+
+              /* append a path separator to the absolute folder path, so we can easily generate child paths */
+              tasks[0].fpath[tasks[0].floc - 1] = G_DIR_SEPARATOR;
+
+              /* terminate the list for the first task */
+              hp->prev->next = NULL;
+              hp->prev = NULL;
+
+              /* launch the first task */
+              g_thread_pool_push (pool, &tasks[0], NULL);
+
+              /* initialize the second task */
+              tasks[1].first = hp;
+              tasks[1].last = NULL;
+              tasks[1].floc = tasks[0].floc;
+              memcpy (tasks[1].fpath, tasks[0].fpath, tasks[0].floc);
+
+              /* run the second task */
+              thunar_vfs_listdir_job_task (&tasks[1]);
+
+              /* wait for the first task to finish */
+              g_thread_pool_free (pool, FALSE, TRUE);
+
+              /* concatenate the info lists */
+              if (G_UNLIKELY (tasks[0].last == NULL))
+                {
+                  list = tasks[1].first;
+                }
+              else
+                {
+                  tasks[0].last->next = tasks[1].first;
+                  if (G_LIKELY (tasks[1].first != NULL))
+                    tasks[1].first->prev = tasks[0].last;
+                }
+            }
+        }
+
+      /* release the path list in case of an early error */
+      if (G_UNLIKELY (error != NULL))
+        {
+          thunar_vfs_path_list_free (list);
+          list = NULL;
+        }
+    }
+
+  /* emit appropriate signals */
+  if (G_UNLIKELY (error != NULL))
+    {
+      thunar_vfs_job_error (job, error);
+      g_error_free (error);
+    }
+  else if (G_LIKELY (list != NULL))
+    {
+      thunar_vfs_job_emit (job, listdir_signals[INFOS_READY], 0, list);
+    }
+
+  /* cleanup */
+  thunar_vfs_info_list_free (list);
+}
+
+
+
+static void
+thunar_vfs_listdir_job_task (ThunarVfsListdirJobTask *task)
+{
+  ThunarVfsInfo *info;
+  GList         *sp;
+  GList         *tp;
+
+  for (sp = tp = task->first; sp != NULL; sp = sp->next)
+    {
+      /* generate the absolute path to the file */
+      g_strlcpy (task->fpath + task->floc, thunar_vfs_path_get_name (sp->data), sizeof (task->fpath) - task->floc);
+
+      /* try to determine the file info */
+      info = _thunar_vfs_info_new_internal (sp->data, task->fpath, NULL);
+
+      /* release the reference on the path (the info holds the reference now) */
+      thunar_vfs_path_unref (sp->data);
+
+      /* replace the path with the info on the list */
+      if (G_LIKELY (info != NULL))
+        {
+          task->last = tp;
+          tp->data = info;
+          tp = tp->next;
+        }
+    }
+
+  /* release the not-filled list items (only non-NULL in case of an info error) */
+  if (G_UNLIKELY (tp != NULL))
+    {
+      if (G_LIKELY (tp->prev != NULL))
+        tp->prev->next = NULL;
+      g_list_free (tp);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_job_new:
+ * @folder_path : the #ThunarVfsPath of the directory whose contents to query.
+ *
+ * Allocates a new #ThunarVfsListdirJob object, which can be used to
+ * query the contents of the directory @folder_path.
+ *
+ * You need to call thunar_vfs_job_launch() in order to start the
+ * job. You may want to connect to ::finished, ::error-occurred and
+ * ::infos-ready prior to launching the job.
+ *
+ * The caller is responsible to call g_object_unref() on the
+ * returned object.
+ *
+ * Return value: the newly allocated #ThunarVfsJob, which performs the
+ *               directory listing.
+ **/
+ThunarVfsJob*
+thunar_vfs_listdir_job_new (ThunarVfsPath *folder_path)
+{
+  ThunarVfsListdirJob *listdir_job;
+
+  listdir_job = g_object_new (THUNAR_VFS_TYPE_LISTDIR_JOB, NULL);
+  listdir_job->path = thunar_vfs_path_ref (folder_path);
+
+  return THUNAR_VFS_JOB (listdir_job);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-listdir-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,45 @@
+/* $Id: thunar-vfs-listdir-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_LISTDIR_JOB_H__
+#define __THUNAR_VFS_LISTDIR_JOB_H__
+
+#include <thunar-vfs/thunar-vfs-job.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsListdirJobClass ThunarVfsListdirJobClass;
+typedef struct _ThunarVfsListdirJob      ThunarVfsListdirJob;
+
+#define THUNAR_VFS_TYPE_LISTDIR_JOB             (thunar_vfs_listdir_job_get_type ())
+#define THUNAR_VFS_LISTDIR_JOB(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_LISTDIR_JOB, ThunarVfsListdirJob))
+#define THUNAR_VFS_LISTDIR_JOB_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_LISTDIR_JOB, ThunarVfsListdirJobClass))
+#define THUNAR_VFS_IS_LISTDIR_JOB(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_LISTDIR_JOB))
+#define THUNAR_VFS_IS_LISTDIR_JOB_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_LISTDIR_JOB))
+#define THUNAR_VFS_LISTDIR_JOB_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_LISTDIR_JOB, ThunarVfsListdirJobClass))
+
+GType         thunar_vfs_listdir_job_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsJob *thunar_vfs_listdir_job_new      (ThunarVfsPath *folder_path) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_LISTDIR_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,90 @@
+
+#include	<glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* FLAGS:STRING,FLAGS (thunar-vfs-marshal.list:1) */
+void
+_thunar_vfs_marshal_FLAGS__STRING_FLAGS (GClosure     *closure,
+                                         GValue       *return_value,
+                                         guint         n_param_values,
+                                         const GValue *param_values,
+                                         gpointer      invocation_hint,
+                                         gpointer      marshal_data)
+{
+  typedef guint (*GMarshalFunc_FLAGS__STRING_FLAGS) (gpointer     data1,
+                                                     gpointer     arg_1,
+                                                     guint        arg_2,
+                                                     gpointer     data2);
+  register GMarshalFunc_FLAGS__STRING_FLAGS callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  guint v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_FLAGS__STRING_FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_flags (param_values + 2),
+                       data2);
+
+  g_value_set_flags (return_value, v_return);
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,20 @@
+
+#ifndef ___thunar_vfs_marshal_MARSHAL_H__
+#define ___thunar_vfs_marshal_MARSHAL_H__
+
+#include	<glib-object.h>
+
+G_BEGIN_DECLS
+
+/* FLAGS:STRING,FLAGS (thunar-vfs-marshal.list:1) */
+extern void _thunar_vfs_marshal_FLAGS__STRING_FLAGS (GClosure     *closure,
+                                                     GValue       *return_value,
+                                                     guint         n_param_values,
+                                                     const GValue *param_values,
+                                                     gpointer      invocation_hint,
+                                                     gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* ___thunar_vfs_marshal_MARSHAL_H__ */
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.list
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.list	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-marshal.list	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1 @@
+FLAGS:STRING,FLAGS

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,587 @@
+/* $Id: thunar-vfs-mime-application.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-exec.h>
+#include <thunar-vfs/thunar-vfs-mime-application.h>
+#include <thunar-vfs/thunar-vfs-util.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+GQuark
+thunar_vfs_mime_application_error_quark (void)
+{
+  static GQuark quark = 0;
+  if (G_UNLIKELY (quark == 0))
+    quark = g_quark_from_static_string ("thunar-vfs-mime-application-error-quark");
+  return quark;
+}
+
+
+
+
+static gboolean thunar_vfs_mime_application_get_argv (const ThunarVfsMimeApplication *application,
+                                                      GList                          *path_list,
+                                                      gint                           *argc,
+                                                      gchar                        ***argv,
+                                                      GError                        **error);
+
+
+
+struct _ThunarVfsMimeApplication
+{
+  gint                          ref_count;
+  gchar                        *binary_name;
+  gchar                        *desktop_id;
+  gchar                        *exec;
+  gchar                        *icon;
+  gchar                        *name;
+  gchar                       **mime_types;
+  ThunarVfsMimeApplicationFlags flags;
+};
+
+
+
+GType
+thunar_vfs_mime_application_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      type = g_boxed_type_register_static ("ThunarVfsMimeApplication",
+                                           (GBoxedCopyFunc) thunar_vfs_mime_application_ref,
+                                           (GBoxedFreeFunc) thunar_vfs_mime_application_unref);
+    }
+
+  return type;
+}
+
+
+
+static gboolean
+thunar_vfs_mime_application_get_argv (const ThunarVfsMimeApplication *application,
+                                      GList                          *path_list,
+                                      gint                           *argc,
+                                      gchar                        ***argv,
+                                      GError                        **error)
+{
+  return thunar_vfs_exec_parse (application->exec, path_list, application->icon, application->name, NULL,
+                                (application->flags & THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL) != 0,
+                                argc, argv, error);
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_new_from_desktop_id:
+ * @desktop_id : the id of an application's .desktop file.
+ *
+ * Generates a #ThunarVfsMimeApplication instance for the application
+ * referenced by @desktop_id. Returns %NULL if @desktop_id is not valid.
+ *
+ * The caller is responsible to free the returned instance using
+ * thunar_vfs_mime_application_unref().
+ *
+ * Return value: the #ThunarVfsMimeApplication for @desktop_id or %NULL.
+ **/
+ThunarVfsMimeApplication*
+thunar_vfs_mime_application_new_from_desktop_id (const gchar *desktop_id)
+{
+  ThunarVfsMimeApplication *application = NULL;
+  gchar                    *spec;
+  gchar                    *path = NULL;
+  gchar                    *s;
+
+  g_return_val_if_fail (desktop_id != NULL, NULL);
+
+  /* lookup the .desktop file by the given desktop-id */
+  s = spec = g_build_filename ("applications", desktop_id, NULL);
+  do
+    {
+      path = xfce_resource_lookup (XFCE_RESOURCE_DATA, spec);
+      if (G_LIKELY (path != NULL))
+        break;
+
+      for (; *s != '\0' && *s != '-'; ++s) ;
+      if (G_LIKELY (*s == '-'))
+        *s++ = G_DIR_SEPARATOR;
+    }
+  while (*s != '\0');
+  g_free (spec);
+
+  /* check if we found a file */
+  if (G_UNLIKELY (path == NULL))
+    return NULL;
+
+  /* try to load the application from the path */
+  application = thunar_vfs_mime_application_new_from_file (path, desktop_id);
+
+  /* cleanup */
+  g_free (path);
+
+  return application;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_new_from_file:
+ * @path       : the absolute path to the desktop file.
+ * @desktop_id : the desktop-id of the file.
+ *
+ * Generates a new #ThunarVfsMimeApplication for the application
+ * described by @path and @desktop_id.
+ *
+ * The caller is responsible to free the returned instance using
+ * thunar_vfs_mime_application_unref().
+ *
+ * You should really seldomly use this function and always
+ * prefer thunar_vfs_mime_application_new_from_desktop_id().
+ *
+ * Return value: the #ThunarVfsMimeApplication for @desktop_id
+ *               or %NULL.
+ **/
+ThunarVfsMimeApplication*
+thunar_vfs_mime_application_new_from_file (const gchar *path,
+                                           const gchar *desktop_id)
+{
+  ThunarVfsMimeApplication *application = NULL;
+  const gchar              *exec;
+  const gchar              *icon;
+  const gchar              *name;
+  XfceRc                   *rc;
+  gchar                   **argv;
+  gchar                   **ms;
+  gchar                   **mt;
+  gint                      argc;
+
+  g_return_val_if_fail (g_path_is_absolute (path), NULL);
+  g_return_val_if_fail (desktop_id != NULL && *desktop_id != '\0', NULL);
+
+  /* try to open the .desktop file */
+  rc = xfce_rc_simple_open (path, TRUE);
+  if (G_UNLIKELY (rc == NULL))
+    return NULL;
+
+  /* parse the file */
+  xfce_rc_set_group (rc, "Desktop Entry");
+  exec = xfce_rc_read_entry (rc, "Exec", NULL);
+  name = xfce_rc_read_entry (rc, "Name", NULL);
+  icon = xfce_rc_read_entry (rc, "Icon", NULL);
+
+  /* generate the application object */
+  if (G_LIKELY (exec != NULL && name != NULL && g_shell_parse_argv (exec, &argc, &argv, NULL)))
+    {
+      application = g_new0 (ThunarVfsMimeApplication, 1);
+      application->ref_count = 1;
+
+      application->binary_name = g_path_get_basename (argv[0]);
+      application->desktop_id = g_strdup (desktop_id);
+      application->name = g_strdup (name);
+      application->icon = g_strdup (icon);
+
+      /* strip off known suffixes for image files if a themed icon is specified */
+      if (application->icon != NULL && !g_path_is_absolute (application->icon) && g_str_has_suffix (application->icon, ".png"))
+        application->icon[strlen (application->icon) - 4] = '\0';
+
+      /* determine the list of mime types supported by the application */
+      application->mime_types = xfce_rc_read_list_entry (rc, "MimeType", ";");
+      if (G_LIKELY (application->mime_types != NULL))
+        {
+          /* strip off the useless mime types */
+          for (ms = mt = application->mime_types; *ms != NULL; ++ms)
+            {
+              /* ignore empty entries, GNOME pseudo mime types and KDE junk */
+              if (**ms == '\0' || g_str_equal (*ms, "x-directory/gnome-default-handler") || g_str_has_prefix (*ms, "print/"))
+                g_free (*ms);
+              else
+                *mt++ = *ms;
+            }
+
+          /* verify that we have atleast one mime type left */
+          if (G_UNLIKELY (mt == application->mime_types))
+            {
+              g_free (application->mime_types);
+              application->mime_types = NULL;
+            }
+          else
+            {
+              /* be sure to zero-terminate the new list */
+              *mt = NULL;
+            }
+        }
+
+      /* we assume %f if the application hasn't set anything else,
+       * as that's also what KDE and Gnome do in this case.
+       */
+      if (strstr (exec, "%f") == NULL && strstr (exec, "%F") == NULL && strstr (exec, "%u") == NULL && strstr (exec, "%U") == NULL)
+        application->exec = g_strconcat (exec, " %f", NULL);
+      else
+        application->exec = g_strdup (exec);
+
+      if (G_UNLIKELY (xfce_rc_read_bool_entry (rc, "Terminal", FALSE)))
+        application->flags |= THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL;
+
+      if (xfce_rc_read_bool_entry (rc, "Hidden", FALSE) || xfce_rc_read_bool_entry (rc, "NoDisplay", FALSE))
+        application->flags |= THUNAR_VFS_MIME_APPLICATION_HIDDEN;
+
+      if (xfce_rc_read_bool_entry (rc, "StartupNotify", FALSE) || xfce_rc_read_bool_entry (rc, "X-KDE-StartupNotify", FALSE))
+        application->flags |= THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY;
+
+      if ((strstr (application->exec, "%F") != NULL) || (strstr (application->exec, "%U") != NULL))
+        application->flags |= THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI;
+
+      g_strfreev (argv);
+    }
+
+  /* close the file */
+  xfce_rc_close (rc);
+
+  return application;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_ref:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Increases the reference count on @application by one
+ * and returns the reference to @application.
+ *
+ * Return value: a reference to @application.
+ **/
+ThunarVfsMimeApplication*
+thunar_vfs_mime_application_ref (ThunarVfsMimeApplication *application)
+{
+  exo_atomic_inc (&application->ref_count);
+  return application;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_unref:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Decreases the reference count on @application and frees
+ * the @application object once the reference count drops
+ * to zero.
+ **/
+void
+thunar_vfs_mime_application_unref (ThunarVfsMimeApplication *application)
+{
+  if (exo_atomic_dec (&application->ref_count))
+    {
+      /* free resources */
+      g_strfreev (application->mime_types);
+      g_free (application->binary_name);
+      g_free (application->desktop_id);
+      g_free (application->exec);
+      g_free (application->icon);
+      g_free (application->name);
+      g_free (application);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_get_command:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Returns the command line to run @application.
+ *
+ * Return value: the command to run @application.
+ **/
+const gchar*
+thunar_vfs_mime_application_get_command (const ThunarVfsMimeApplication *application)
+{
+  return application->exec;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_get_desktop_id:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Returns the desktop-id of @application.
+ *
+ * Return value: the desktop-id of @application.
+ **/
+const gchar*
+thunar_vfs_mime_application_get_desktop_id (const ThunarVfsMimeApplication *application)
+{
+  return application->desktop_id;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_get_flags:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Returns the flags for @application.
+ *
+ * Return value: the flags for @application.
+ **/
+ThunarVfsMimeApplicationFlags
+thunar_vfs_mime_application_get_flags (const ThunarVfsMimeApplication *application)
+{
+  return application->flags;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_get_name:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Returns the generic name of @application.
+ *
+ * Return value: the generic name of @application.
+ **/
+const gchar*
+thunar_vfs_mime_application_get_name (const ThunarVfsMimeApplication *application)
+{
+  return application->name;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_get_mime_types:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Returns the list of MIME-types supported by @application
+ * or %NULL if the @application doesn't support any MIME-types
+ * at all.
+ *
+ * The returned %NULL-terminated string array is owned by
+ * @application and must not be free by the caller.
+ *
+ * Return value: the list of supported MIME-types for @application.
+ **/
+const gchar* const*
+thunar_vfs_mime_application_get_mime_types (const ThunarVfsMimeApplication *application)
+{
+  return (gconstpointer) application->mime_types;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_exec:
+ * @application : a #ThunarVfsMimeApplication.
+ * @screen      : a #GdkScreen or %NULL to use the default screen.
+ * @path_list   : a list of #ThunarVfsPath<!---->s to open.
+ * @error       : return location for errors or %NULL.
+ *
+ * Wrapper to thunar_vfs_mime_application_exec_with_env(), which
+ * simply passes a %NULL pointer for the environment variables.
+ *
+ * Return value: %TRUE if the execution succeed, else %FALSE.
+ **/
+gboolean
+thunar_vfs_mime_application_exec (const ThunarVfsMimeApplication *application,
+                                  GdkScreen                      *screen,
+                                  GList                          *path_list,
+                                  GError                        **error)
+{
+  return thunar_vfs_mime_application_exec_with_env (application, screen, path_list, NULL, error);
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_exec_with_env:
+ * @application : a #ThunarVfsMimeApplication.
+ * @screen      : a #GdkScreen or %NULL to use the default screen.
+ * @path_list   : a list of #ThunarVfsPath<!---->s to open.
+ * @envp        : child's environment or %NULL to inherit parent's.
+ * @error       : return location for errors or %NULL.
+ *
+ * Executes @application on @screen using the given @path_list. If
+ * @path_list contains more than one #ThunarVfsPath and @application
+ * doesn't support opening multiple documents at once, one
+ * instance of @application will be spawned for every #ThunarVfsPath
+ * given in @path_list.
+ *
+ * Return value: %TRUE if the execution succeed, else %FALSE.
+ **/
+gboolean
+thunar_vfs_mime_application_exec_with_env (const ThunarVfsMimeApplication *application,
+                                           GdkScreen                      *screen,
+                                           GList                          *path_list,
+                                           gchar                         **envp,
+                                           GError                        **error)
+{
+  ThunarVfsPath *parent;
+  gboolean       result = TRUE;
+  GList          list;
+  GList         *lp;
+  gchar         *working_directory;
+  gchar        **argv;
+  gint           argc;
+
+  g_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* fallback to the default screen if no screen is given */
+  if (G_UNLIKELY (screen == NULL))
+    screen = gdk_screen_get_default ();
+
+  /* check whether the application can open multiple documents at once */
+  if (G_LIKELY ((application->flags & THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI) == 0))
+    {
+      for (lp = path_list; lp != NULL; lp = lp->next)
+        {
+          /* use a short list with only one entry */
+          list.data = lp->data;
+          list.next = NULL;
+          list.prev = NULL;
+
+          /* figure out the argument vector to run the application */
+          if (!thunar_vfs_mime_application_get_argv (application, &list, &argc, &argv, error))
+            return FALSE;
+
+          /* use the paths base directory as working directory for the application */
+          parent = thunar_vfs_path_get_parent (list.data);
+          working_directory = (parent != NULL) ? thunar_vfs_path_dup_string (parent) : NULL;
+
+          /* try to spawn the application */
+          result = thunar_vfs_exec_on_screen (screen, working_directory, argv, envp, G_SPAWN_SEARCH_PATH,
+                                              application->flags & THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY, error);
+
+          /* cleanup */
+          g_free (working_directory);
+          g_strfreev (argv);
+
+          /* check if we succeed */
+          if (G_UNLIKELY (!result))
+            break;
+        }
+    }
+  else
+    {
+      /* we can open all documents at once */
+      if (!thunar_vfs_mime_application_get_argv (application, path_list, &argc, &argv, error))
+        return FALSE;
+
+      /* use the first paths base directory as working directory for the application */
+      parent = (path_list != NULL) ? thunar_vfs_path_get_parent (path_list->data) : NULL;
+      working_directory = (parent != NULL) ? thunar_vfs_path_dup_string (parent) : NULL;
+
+      /* try to spawn the application */
+      result = thunar_vfs_exec_on_screen (screen, working_directory, argv, envp, G_SPAWN_SEARCH_PATH,
+                                          application->flags & THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY, error);
+
+      /* cleanup */
+      g_free (working_directory);
+      g_strfreev (argv);
+    }
+
+  return result;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_lookup_icon_name:
+ * @application : a #ThunarVfsMimeApplication.
+ * @icon_theme  : a #GtkIconTheme.
+ *
+ * Looks up the icon name for @application in
+ * @icon_theme. Returns %NULL if no suitable
+ * icon is present in @icon_theme.
+ *
+ * Return value: the icon name for @application or
+ *               %NULL.
+ **/
+const gchar*
+thunar_vfs_mime_application_lookup_icon_name (const ThunarVfsMimeApplication *application,
+                                              GtkIconTheme                   *icon_theme)
+{
+  if (application->icon != NULL && (g_path_is_absolute (application->icon) || gtk_icon_theme_has_icon (icon_theme, application->icon)))
+    return application->icon;
+  else if (application->binary_name != NULL && gtk_icon_theme_has_icon (icon_theme, application->binary_name))
+    return application->binary_name;
+  else
+    return NULL;
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_hash:
+ * @application : a #ThunarVfsMimeApplication.
+ *
+ * Converts @application to a hash value. It can be passed
+ * to g_hash_table_new() as the @hash_func parameter,
+ * when using #ThunarVfsMimeApplication<!---->s as keys
+ * in a #GHashTable.
+ *
+ * Return value: a hash value corresponding to the key.
+ **/
+guint
+thunar_vfs_mime_application_hash (gconstpointer application)
+{
+  return g_str_hash (((const ThunarVfsMimeApplication *) application)->desktop_id);
+}
+
+
+
+/**
+ * thunar_vfs_mime_application_equal:
+ * @a : a #ThunarVfsMimeApplication.
+ * @b : a #ThunarVfsMimeApplication.
+ *
+ * Checks whether @a and @b refer to the same application.
+ *
+ * Return value: %TRUE if @a and @b are equal.
+ **/
+gboolean
+thunar_vfs_mime_application_equal (gconstpointer a,
+                                   gconstpointer b)
+{
+  const ThunarVfsMimeApplication *a_application = a;
+  const ThunarVfsMimeApplication *b_application = b;
+  return (strcmp (a_application->desktop_id, b_application->desktop_id) == 0);
+}
+
+
+
+#define __THUNAR_VFS_MIME_APPLICATION_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-application.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,96 @@
+/* $Id: thunar-vfs-mime-application.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_APPLICATION_H__
+#define __THUNAR_VFS_MIME_APPLICATION_H__
+
+#include <gdk/gdk.h>
+
+#include <thunar-vfs/thunar-vfs-path.h>
+
+G_BEGIN_DECLS;
+
+#define THUNAR_VFS_MIME_APPLICATION_ERROR (thunar_vfs_mime_application_error_quark ())
+
+typedef enum
+{
+  THUNAR_VFS_MIME_APPLICATION_ERROR_LOCAL_FILES_ONLY,
+} ThunarVfsMimeApplicationError;
+
+GQuark thunar_vfs_mime_application_error_quark (void) G_GNUC_CONST;
+
+
+/**
+ * ThunarVfsMimeApplicationFlags:
+ * @THUNAR_VFS_MIME_APPLICATION_HIDDEN                  : the application should not be displayed in the menu system.
+ * @THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL       : the application must be run in a terminal.
+ * @THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY : the application supports startup notification.
+ * @THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI          : the application supports opening multiple documents at once (%F or %U).
+ *
+ * Various flags associated with a #ThunarVfsMimeApplication.
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_VFS_MIME_APPLICATION_HIDDEN                  = (1 << 0L),
+  THUNAR_VFS_MIME_APPLICATION_REQUIRES_TERMINAL       = (1 << 1L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_STARTUP_NOTIFY = (1 << 2L),
+  THUNAR_VFS_MIME_APPLICATION_SUPPORTS_MULTI          = (1 << 3L),
+} ThunarVfsMimeApplicationFlags;
+
+
+typedef struct _ThunarVfsMimeApplication ThunarVfsMimeApplication;
+
+#define THUNAR_VFS_TYPE_MIME_APPLICATION (thunar_vfs_mime_application_get_type ())
+
+GType                         thunar_vfs_mime_application_get_type            (void) G_GNUC_CONST;
+
+ThunarVfsMimeApplication     *thunar_vfs_mime_application_new_from_desktop_id (const gchar                    *desktop_id) G_GNUC_MALLOC;
+ThunarVfsMimeApplication     *thunar_vfs_mime_application_new_from_file       (const gchar                    *path,
+                                                                               const gchar                    *desktop_id) G_GNUC_MALLOC;
+
+ThunarVfsMimeApplication     *thunar_vfs_mime_application_ref                 (ThunarVfsMimeApplication       *application);
+void                          thunar_vfs_mime_application_unref               (ThunarVfsMimeApplication       *application);
+
+const gchar                  *thunar_vfs_mime_application_get_command         (const ThunarVfsMimeApplication *application);
+const gchar                  *thunar_vfs_mime_application_get_desktop_id      (const ThunarVfsMimeApplication *application);
+ThunarVfsMimeApplicationFlags thunar_vfs_mime_application_get_flags           (const ThunarVfsMimeApplication *application);
+const gchar                  *thunar_vfs_mime_application_get_name            (const ThunarVfsMimeApplication *application);
+const gchar * const          *thunar_vfs_mime_application_get_mime_types      (const ThunarVfsMimeApplication *application);
+
+gboolean                      thunar_vfs_mime_application_exec                (const ThunarVfsMimeApplication *application,
+                                                                               GdkScreen                      *screen,
+                                                                               GList                          *path_list,
+                                                                               GError                        **error);
+gboolean                      thunar_vfs_mime_application_exec_with_env       (const ThunarVfsMimeApplication *application,
+                                                                               GdkScreen                      *screen,
+                                                                               GList                          *path_list,
+                                                                               gchar                         **envp,
+                                                                               GError                        **error);
+
+const gchar                  *thunar_vfs_mime_application_lookup_icon_name    (const ThunarVfsMimeApplication *application,
+                                                                               GtkIconTheme                   *icon_theme);
+
+guint                         thunar_vfs_mime_application_hash                (gconstpointer                   application);
+gboolean                      thunar_vfs_mime_application_equal               (gconstpointer                   a,
+                                                                               gconstpointer                   b);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_APPLICATION_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,588 @@
+/* $Id: thunar-vfs-mime-cache.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Based on code initially written by Matthias Clasen <mclasen at redhat.com>
+ * for the xdgmime library.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_FNMATCH_H
+#include <fnmatch.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-mime-cache.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_open(path, flags, mode) (open ((path), (flags), (mode)))
+#endif
+
+
+
+#define CACHE_MAJOR_VERSION (1)
+#define CACHE_MINOR_VERSION (0)
+
+#define CACHE_READ16(cache, offset) (GUINT16_FROM_BE (*((guint16 *) ((cache) + (offset)))))
+#define CACHE_READ32(cache, offset) (GUINT32_FROM_BE (*((guint32 *) ((cache) + (offset)))))
+
+
+
+static void         thunar_vfs_mime_cache_class_init             (ThunarVfsMimeCacheClass *klass);
+static void         thunar_vfs_mime_cache_finalize               (GObject                 *object);
+static const gchar *thunar_vfs_mime_cache_lookup_data            (ThunarVfsMimeProvider   *provider,
+                                                                  gconstpointer            data,
+                                                                  gsize                    length,
+                                                                  gint                    *priority);
+static const gchar *thunar_vfs_mime_cache_lookup_literal         (ThunarVfsMimeProvider   *provider,
+                                                                  const gchar             *filename);
+static const gchar *thunar_vfs_mime_cache_lookup_suffix          (ThunarVfsMimeProvider   *provider,
+                                                                  const gchar             *suffix,
+                                                                  gboolean                 ignore_case);
+static const gchar *thunar_vfs_mime_cache_lookup_glob            (ThunarVfsMimeProvider   *provider,
+                                                                  const gchar             *filename);
+static const gchar *thunar_vfs_mime_cache_lookup_alias           (ThunarVfsMimeProvider   *provider,
+                                                                  const gchar             *alias);
+static guint        thunar_vfs_mime_cache_lookup_parents         (ThunarVfsMimeProvider   *provider,
+                                                                  const gchar             *mime_type,
+                                                                  gchar                  **parents,
+                                                                  guint                    max_parents);
+static GList       *thunar_vfs_mime_cache_get_stop_characters    (ThunarVfsMimeProvider   *provider);
+static gsize        thunar_vfs_mime_cache_get_max_buffer_extents (ThunarVfsMimeProvider   *provider);
+
+
+
+struct _ThunarVfsMimeCacheClass
+{
+  ThunarVfsMimeProviderClass __parent__;
+};
+
+struct _ThunarVfsMimeCache
+{
+  ThunarVfsMimeProvider __parent__;
+
+  gchar *buffer;
+  gsize  bufsize;
+};
+
+
+
+static GObjectClass *thunar_vfs_mime_cache_parent_class;
+
+
+
+GType
+thunar_vfs_mime_cache_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsMimeCacheClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_mime_cache_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsMimeCache),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_MIME_PROVIDER,
+                                     "ThunarVfsMimeCache", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_mime_cache_class_init (ThunarVfsMimeCacheClass *klass)
+{
+  ThunarVfsMimeProviderClass *thunarvfs_mime_provider_class;
+  GObjectClass               *gobject_class;
+
+  thunar_vfs_mime_cache_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_mime_cache_finalize;
+
+  thunarvfs_mime_provider_class = THUNAR_VFS_MIME_PROVIDER_CLASS (klass);
+  thunarvfs_mime_provider_class->lookup_data = thunar_vfs_mime_cache_lookup_data;
+  thunarvfs_mime_provider_class->lookup_literal = thunar_vfs_mime_cache_lookup_literal;
+  thunarvfs_mime_provider_class->lookup_suffix = thunar_vfs_mime_cache_lookup_suffix;
+  thunarvfs_mime_provider_class->lookup_glob = thunar_vfs_mime_cache_lookup_glob;
+  thunarvfs_mime_provider_class->lookup_alias = thunar_vfs_mime_cache_lookup_alias;
+  thunarvfs_mime_provider_class->lookup_parents = thunar_vfs_mime_cache_lookup_parents;
+  thunarvfs_mime_provider_class->get_stop_characters = thunar_vfs_mime_cache_get_stop_characters;
+  thunarvfs_mime_provider_class->get_max_buffer_extents = thunar_vfs_mime_cache_get_max_buffer_extents;
+}
+
+
+
+static void
+thunar_vfs_mime_cache_finalize (GObject *object)
+{
+  ThunarVfsMimeCache *cache = THUNAR_VFS_MIME_CACHE (object);
+
+#ifdef HAVE_MMAP
+  if (G_LIKELY (cache->buffer != NULL))
+    munmap (cache->buffer, cache->bufsize);
+#endif
+
+  (*G_OBJECT_CLASS (thunar_vfs_mime_cache_parent_class)->finalize) (object);
+}
+
+
+
+static gboolean
+cache_magic_matchlet_compare_to_data (const gchar  *buffer,
+                                      guint32       offset,
+                                      gconstpointer data,
+                                      gsize         length)
+{
+  gboolean valid_matchlet;
+  guint32  range_start = CACHE_READ32 (buffer, offset);
+  guint32  range_length = CACHE_READ32 (buffer, offset + 4);
+  guint32  data_length = CACHE_READ32 (buffer, offset + 12);
+  guint32  data_offset = CACHE_READ32 (buffer, offset + 16);
+  guint32  mask_offset = CACHE_READ32 (buffer, offset + 20);
+  guint32  i, j;
+
+  for (i = range_start; i <= range_start + range_length; i++)
+    {
+      valid_matchlet = TRUE;
+      
+      if (i + data_length > length)
+        return FALSE;
+
+      if (mask_offset)
+        {
+          for (j = 0; j < data_length; j++)
+            if ((buffer[data_offset + j] & buffer[mask_offset + j]) != ((((gchar *) data)[j + i]) & buffer[mask_offset + j]))
+              {
+                valid_matchlet = FALSE;
+                break;
+              }
+        }
+      else
+        {
+          for (j = 0; j < data_length; j++)
+            if (buffer[data_offset + j] != ((gchar *) data)[j + i])
+              {
+                valid_matchlet = FALSE;
+                break;
+              }
+        }
+          
+      if (valid_matchlet)
+        return TRUE;
+    }
+  
+  return FALSE;  
+}
+
+
+
+static gboolean
+cache_magic_matchlet_compare (const gchar  *buffer,
+                              guint32       offset,
+                              gconstpointer data,
+                              gsize         length)
+{
+  guint32 n_children = CACHE_READ32 (buffer, offset + 24);
+  guint32 child_offset = CACHE_READ32 (buffer, offset + 28);
+  guint32 i;
+  
+  if (cache_magic_matchlet_compare_to_data (buffer, offset, data, length))
+    {
+      if (n_children == 0)
+        return TRUE;
+      
+      for (i = 0; i < n_children; i++)
+        if (cache_magic_matchlet_compare (buffer, child_offset + 32 * i, data, length))
+          return TRUE;
+    }
+  
+  return FALSE;  
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_cache_lookup_data (ThunarVfsMimeProvider *provider,
+                                   gconstpointer          data,
+                                   gsize                  length,
+                                   gint                  *priority)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      matchlet_offset;
+  guint32      offset;
+  guint32      n, m;
+
+  offset = CACHE_READ32 (buffer, 24);
+  n = CACHE_READ32 (buffer, offset);
+  offset = CACHE_READ32 (buffer, offset + 8);
+
+  for (; n-- > 0; offset += 16)
+    {
+      matchlet_offset = CACHE_READ32 (buffer, offset + 12);
+      for (m = CACHE_READ32 (buffer, offset + 8); m-- > 0; matchlet_offset += 32)
+        if (cache_magic_matchlet_compare (buffer, matchlet_offset, data, length))
+          {
+            if (G_LIKELY (priority != NULL))
+              *priority = (gint) CACHE_READ32 (buffer, offset);
+            return buffer + CACHE_READ32 (buffer, offset + 4);
+          }
+    }
+
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_cache_lookup_literal (ThunarVfsMimeProvider *provider,
+                                      const gchar           *filename)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      list_offset = CACHE_READ32 (buffer, 12);
+  guint32      n_entries = CACHE_READ32 (buffer, list_offset);
+  guint32      offset;
+  gint         min;
+  gint         mid;
+  gint         max;
+  gint         cmp;
+
+  for (min = 0, max = (gint) n_entries - 1; max >= min; )
+    {
+      mid = (min + max) / 2;
+
+      offset = CACHE_READ32 (buffer, list_offset + 4 + 8 * mid);
+      cmp = strcmp (buffer + offset, filename);
+
+      if (cmp < 0)
+        min = mid + 1;
+      else if (cmp > 0)
+        max = mid - 1;
+      else
+        return buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * mid + 4);
+    }
+
+  return NULL;
+}
+
+
+
+static const gchar*
+cache_node_lookup_suffix (const gchar *buffer,
+                          guint32      n_entries,
+                          guint32      offset,
+                          const gchar *suffix, 
+                          gboolean     ignore_case)
+{
+  const gchar *type;
+  gunichar     character;
+  gunichar     match_char;
+  gint         min, max, mid;
+
+next:
+  character = g_utf8_get_char (suffix);
+  if (ignore_case)
+    character = g_unichar_tolower (character);
+
+  for (min = 0, max = (gint) n_entries - 1; max >= min; )
+    {
+      mid = (min + max) /  2;
+
+      match_char = (gunichar) CACHE_READ32 (buffer, offset + 16 * mid);
+
+      if (match_char < character)
+        min = mid + 1;
+      else if (match_char > character)
+        max = mid - 1;
+      else 
+        {
+          suffix = g_utf8_next_char (suffix);
+          if (*suffix == '\0')
+            {
+              /* need to verify the type here, as the stopchars may be
+               * misleading, which in turn may lead to the problem of
+               * returning '' here, which in turn will cause the mime
+               * database to return application/octet-stream for those
+               * files!
+               */
+              type = buffer + CACHE_READ32 (buffer, offset + 16 * mid + 4);
+              if (G_LIKELY (*type != '\0'))
+                return type;
+            }
+          else
+            {
+              /* We emulate a recursive call to cache_node_lookup_suffix()
+               * here. This optimization works because the algorithm is
+               * tail-recursive. The goto is not necessarily nice, but it
+               * works for our purpose and doesn't decrease readability.
+               * If we'd use a recursive call here, the code would look
+               * like this:
+               *
+               * return cache_node_lookup_suffix (buffer, CACHE_READ32 (buffer, offset + 16 * mid + 8),
+               *                                  CACHE_READ32 (buffer, offset + 16 * mid + 12),
+               *                                  suffix, ignore_case);
+               */
+              n_entries = CACHE_READ32 (buffer, offset + 16 * mid + 8);
+              offset = CACHE_READ32 (buffer, offset + 16 * mid + 12);
+              goto next;
+            }
+        }
+    }
+
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_cache_lookup_suffix (ThunarVfsMimeProvider *provider,
+                                     const gchar           *suffix,
+                                     gboolean               ignore_case)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      offset = CACHE_READ32 (buffer, 16);
+
+  g_return_val_if_fail (g_utf8_validate (suffix, -1, NULL), NULL);
+
+  return cache_node_lookup_suffix (buffer, CACHE_READ32 (buffer, offset),
+                                   CACHE_READ32 (buffer, offset + 4),
+                                   suffix, ignore_case);
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_cache_lookup_glob (ThunarVfsMimeProvider *provider,
+                                   const gchar           *filename)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      list_offset = CACHE_READ32 (buffer, 20);
+  guint32      n_entries = CACHE_READ32 (buffer, list_offset);
+  guint32      n;
+
+  for (n = 0; n < n_entries; ++n)
+    if (fnmatch (buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * n), filename, 0) == 0)
+      return buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * n + 4);
+
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_cache_lookup_alias (ThunarVfsMimeProvider *provider,
+                                    const gchar           *alias)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      list_offset = CACHE_READ32 (buffer, 4);
+  gint         max;
+  gint         mid;
+  gint         min;
+  gint         n;
+
+  for (max = ((gint) CACHE_READ32 (buffer, list_offset)) - 1, min = 0; max >= min; )
+    {
+      mid = (min + max) / 2;
+
+      n = strcmp (buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * mid), alias);
+      if (n < 0)
+        min = mid + 1;
+      else if (n > 0)
+        max = mid - 1;
+      else
+        return buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * mid + 4);
+    }
+
+  return NULL;
+}
+
+
+
+static guint
+thunar_vfs_mime_cache_lookup_parents (ThunarVfsMimeProvider *provider,
+                                      const gchar           *mime_type,
+                                      gchar                **parents,
+                                      guint                  max_parents)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  guint32      parents_offset;
+  guint32      list_offset = CACHE_READ32 (buffer, 8);
+  guint32      n_entries = CACHE_READ32 (buffer, list_offset);
+  guint32      n_parents;
+  guint32      i, j, l;
+
+  for (i = j = 0; i < n_entries && j < max_parents; ++i)
+    if (strcmp (buffer + CACHE_READ32 (buffer, list_offset + 4 + 8 * i), mime_type) == 0)
+      {
+        parents_offset = CACHE_READ32 (buffer, list_offset + 4 + 8 * i + 4);
+        n_parents = CACHE_READ32 (buffer, parents_offset);
+
+        for (l = 0; l < n_parents && j < max_parents; ++l, ++j)
+          parents[j] = (gchar *) (buffer + CACHE_READ32 (buffer, parents_offset + 4 + 4 * l));
+      }
+
+  return j;
+}
+
+
+
+static GList*
+thunar_vfs_mime_cache_get_stop_characters (ThunarVfsMimeProvider *provider)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+  gunichar     character;
+  guint32      offset = CACHE_READ32 (buffer, 16);
+  guint32      n = CACHE_READ32 (buffer, offset);
+  GList       *list = NULL;
+
+  for (offset = CACHE_READ32 (buffer, offset + 4); n-- > 0; offset += 16)
+    {
+      /* query the suffix start character */
+      character = (gunichar) CACHE_READ32 (buffer, offset);
+      if (G_UNLIKELY (character >= 128))
+        continue;
+
+      /* prepend the character to the list (if not already present) */
+      if (G_UNLIKELY (g_list_find (list, GUINT_TO_POINTER (character)) == NULL))
+        list = g_list_prepend (list, GUINT_TO_POINTER (character));
+    }
+
+  return list;
+}
+
+
+
+static gsize
+thunar_vfs_mime_cache_get_max_buffer_extents (ThunarVfsMimeProvider *provider)
+{
+  const gchar *buffer = THUNAR_VFS_MIME_CACHE (provider)->buffer;
+
+  /* get the MAX_EXTENTS entry from the MagicList */
+  return CACHE_READ32 (buffer, CACHE_READ32 (buffer, 24) + 4);
+}
+
+
+
+/**
+ * thunar_vfs_mime_cache_new:
+ * @directory : the mime base directory.
+ *
+ * Creates a new #ThunarVfsMimeCache for @directory. Returns
+ * %NULL if for some reason, @directory could not be opened
+ * as a #ThunarVfsMimeCache.
+ *
+ * The caller is responsible to call g_object_unref()
+ * on the returned instance.
+ *
+ * Return value: a #ThunarVfsMimeCache for @directory or %NULL.
+ **/
+ThunarVfsMimeProvider*
+thunar_vfs_mime_cache_new (const gchar *directory)
+{
+  ThunarVfsMimeCache *cache = NULL;
+
+#ifdef HAVE_MMAP
+  struct stat         stat;
+  gchar              *buffer;
+  gchar              *path;
+  gint                fd;
+
+  /* try to open the mime.cache file */
+  path = g_build_filename (directory, "mime.cache", NULL);
+  fd = g_open (path, O_RDONLY, 0);
+  g_free (path);
+
+  if (G_UNLIKELY (fd < 0))
+    return NULL;
+
+  /* stat the file to get proper size info */
+  if (fstat (fd, &stat) < 0 || stat.st_size < 4)
+    goto done;
+
+  /* try to map the file into memory */
+  buffer = (gchar *) mmap (NULL, stat.st_size, PROT_READ, MAP_SHARED, fd, 0);
+  if (G_UNLIKELY (buffer == MAP_FAILED))
+    goto done;
+
+  /* check that we actually support the file version */
+  if (CACHE_READ16 (buffer, 0) != CACHE_MAJOR_VERSION || CACHE_READ16 (buffer, 2) != CACHE_MINOR_VERSION)
+    {
+      munmap (buffer, stat.st_size);
+      goto done;
+    }
+
+  /* allocate a new cache provider */
+  cache = g_object_new (THUNAR_VFS_TYPE_MIME_CACHE, NULL);
+  cache->buffer = buffer;
+  cache->bufsize = stat.st_size;
+
+  /* tell the system that we'll use this buffer quite often */
+#ifdef HAVE_POSIX_MADVISE
+  posix_madvise (buffer, stat.st_size, POSIX_MADV_WILLNEED);
+#endif
+
+  /* cleanup */
+done:
+  if (G_LIKELY (fd >= 0))
+    close (fd);
+#endif /* !HAVE_MMAP */
+
+  return (ThunarVfsMimeProvider *) cache;
+}
+
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-cache.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,44 @@
+/* $Id: thunar-vfs-mime-cache.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_CACHE_H__
+#define __THUNAR_VFS_MIME_CACHE_H__
+
+#include <thunar-vfs/thunar-vfs-mime-provider.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMimeCacheClass ThunarVfsMimeCacheClass;
+typedef struct _ThunarVfsMimeCache      ThunarVfsMimeCache;
+
+#define THUNAR_VFS_TYPE_MIME_CACHE            (thunar_vfs_mime_cache_get_type ())
+#define THUNAR_VFS_MIME_CACHE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MIME_CACHE, ThunarVfsMimeCache))
+#define THUNAR_VFS_MIME_CACHE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MIME_CACHE, ThunarVfsMimeCacheClass))
+#define THUNAR_VFS_IS_MIME_CACHE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MIME_CACHE))
+#define THUNAR_VFS_IS_MIME_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MIME_CACHE))
+#define THUNAR_VFS_MIME_CACHE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MIME_CACHE, ThunarVfsMimeCacheClass))
+
+GType                  thunar_vfs_mime_cache_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsMimeProvider *thunar_vfs_mime_cache_new      (const gchar *directory) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_CACHE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1639 @@
+/* $Id: thunar-vfs-mime-database.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Based on code initially written by Matthias Clasen <mclasen at redhat.com>
+ * for the xdgmime library.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_EXTATTR_H
+#include <sys/extattr.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-mime-cache.h>
+#include <thunar-vfs/thunar-vfs-mime-database.h>
+#include <thunar-vfs/thunar-vfs-mime-legacy.h>
+#include <thunar-vfs/thunar-vfs-mime-sniffer.h>
+#include <thunar-vfs/thunar-vfs-monitor.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_open(path, flagsremove, mode) (open ((path), (flags), (mode)))
+#define g_rename(oldfilename, newfilename) (rename ((oldfilename), (newfilename)))
+#define g_unlink(path) (unlink ((path)))
+#endif
+
+
+
+typedef struct _ThunarVfsMimeDesktopStore ThunarVfsMimeDesktopStore;
+typedef struct _ThunarVfsMimeProviderData ThunarVfsMimeProviderData;
+
+
+
+#define THUNAR_VFS_MIME_DESKTOP_STORE(store) ((ThunarVfsMimeDesktopStore *) (store))
+#define THUNAR_VFS_MIME_PROVIDER_DATA(data)  ((ThunarVfsMimeProviderData *) (data))
+
+
+
+static void                      thunar_vfs_mime_database_class_init                   (ThunarVfsMimeDatabaseClass *klass);
+static void                      thunar_vfs_mime_database_init                         (ThunarVfsMimeDatabase      *database);
+static void                      thunar_vfs_mime_database_finalize                     (GObject                    *object);
+static ThunarVfsMimeApplication *thunar_vfs_mime_database_get_application_locked       (ThunarVfsMimeDatabase      *database,
+                                                                                        const gchar                *desktop_id);
+static ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_locked              (ThunarVfsMimeDatabase      *database,
+                                                                                        const gchar                *mime_type);
+static ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_for_data_locked     (ThunarVfsMimeDatabase      *database,
+                                                                                        gconstpointer               data,
+                                                                                        gsize                       length);
+static ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_for_name_locked     (ThunarVfsMimeDatabase      *database,
+                                                                                        const gchar                *name);
+static GList                    *thunar_vfs_mime_database_get_infos_for_info_locked    (ThunarVfsMimeDatabase      *database,
+                                                                                        ThunarVfsMimeInfo          *info);
+static void                      thunar_vfs_mime_database_initialize_providers         (ThunarVfsMimeDatabase      *database);
+static void                      thunar_vfs_mime_database_shutdown_providers           (ThunarVfsMimeDatabase      *database);
+static void                      thunar_vfs_mime_database_initialize_stores            (ThunarVfsMimeDatabase      *database);
+static void                      thunar_vfs_mime_database_shutdown_stores              (ThunarVfsMimeDatabase      *database);
+static void                      thunar_vfs_mime_database_store_changed                (ThunarVfsMonitor           *monitor,
+                                                                                        ThunarVfsMonitorHandle     *handle,
+                                                                                        ThunarVfsMonitorEvent       event,
+                                                                                        ThunarVfsPath              *handle_path,
+                                                                                        ThunarVfsPath              *event_path,
+                                                                                        gpointer                    user_data);
+static void                      thunar_vfs_mime_database_store_parse_file             (ThunarVfsMimeDatabase      *database,
+                                                                                        ThunarVfsPath              *path,
+                                                                                        GHashTable                 *table);
+static gboolean                  thunar_vfs_mime_database_icon_theme_changed           (GSignalInvocationHint      *ihint,
+                                                                                        guint                       n_param_values,
+                                                                                        const GValue               *param_values,
+                                                                                        gpointer                    user_data);
+
+
+
+struct _ThunarVfsMimeDatabaseClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsMimeDatabase
+{
+  GObject __parent__;
+
+  GMutex           *lock;
+
+  ThunarVfsMonitor *monitor;
+
+  /* GtkIconTheme changed hook id */
+  gulong                    changed_hook_id;
+
+  /* mime detection support */
+  GHashTable                *infos;
+  GList                     *providers;
+  gsize                      max_buffer_extents;
+  gchar                     *stopchars;
+
+  /* commonly used mime types */
+  ThunarVfsMimeInfo         *application_octet_stream;
+  ThunarVfsMimeInfo         *text_plain;
+
+  /* mime applications support */
+  ThunarVfsMimeDesktopStore *stores;
+  guint                      n_stores;
+  GHashTable                *applications;
+};
+
+struct _ThunarVfsMimeDesktopStore
+{
+  ThunarVfsMonitorHandle *defaults_list_handle;
+  ThunarVfsPath          *defaults_list_path;
+  GHashTable             *defaults_list;
+
+  ThunarVfsMonitorHandle *mimeinfo_cache_handle;
+  ThunarVfsPath          *mimeinfo_cache_path;
+  GHashTable             *mimeinfo_cache;
+};
+
+struct _ThunarVfsMimeProviderData
+{
+  ThunarVfsMonitorHandle *handle;
+  ThunarVfsMimeProvider  *provider;
+  ThunarVfsPath          *path;
+};
+
+
+
+G_DEFINE_TYPE (ThunarVfsMimeDatabase, thunar_vfs_mime_database, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_vfs_mime_database_class_init (ThunarVfsMimeDatabaseClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_mime_database_finalize;
+}
+
+
+
+static void
+thunar_vfs_mime_database_init (ThunarVfsMimeDatabase *database)
+{
+  gpointer klass;
+
+  /* create the lock for this object */
+  database->lock = g_mutex_new ();
+
+  /* acquire a reference on the file alteration monitor */
+  database->monitor = thunar_vfs_monitor_get_default ();
+
+  /* allocate the hash table for the mime infos */
+  database->infos = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) thunar_vfs_mime_info_unref);
+
+  /* grab references on commonly used mime infos */
+  database->application_octet_stream = thunar_vfs_mime_database_get_info_locked (database, "application/octet-stream");
+  database->text_plain = thunar_vfs_mime_database_get_info_locked (database, "text/plain");
+
+  /* allocate the applications cache */
+  database->applications = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) thunar_vfs_mime_application_unref);
+
+  /* initialize the MIME providers */
+  thunar_vfs_mime_database_initialize_providers (database);
+
+  /* initialize the MIME desktop stores */
+  thunar_vfs_mime_database_initialize_stores (database);
+
+  /* connect emission hook for the "changed" signal on the GtkIconTheme class. We use the emission
+   * hook to reset the icon names of all mime infos at once.
+   */
+  klass = g_type_class_ref (GTK_TYPE_ICON_THEME);
+  database->changed_hook_id = g_signal_add_emission_hook (g_signal_lookup ("changed", GTK_TYPE_ICON_THEME),
+                                                          0, thunar_vfs_mime_database_icon_theme_changed,
+                                                          database, NULL);
+  g_type_class_unref (klass);
+}
+
+
+
+static void
+thunar_vfs_mime_database_finalize (GObject *object)
+{
+  ThunarVfsMimeDatabase *database = THUNAR_VFS_MIME_DATABASE (object);
+
+  /* remove the "changed" emission hook from the GtkIconTheme class */
+  g_signal_remove_emission_hook (g_signal_lookup ("changed", GTK_TYPE_ICON_THEME), database->changed_hook_id);
+
+  /* shutdown the MIME desktop stores */
+  thunar_vfs_mime_database_shutdown_stores (database);
+
+  /* release the MIME providers */
+  thunar_vfs_mime_database_shutdown_providers (database);
+
+  /* free all cached applications */
+  g_hash_table_destroy (database->applications);
+
+  /* free commonly used mime infos */
+  thunar_vfs_mime_info_unref (database->application_octet_stream);
+  thunar_vfs_mime_info_unref (database->text_plain);
+
+  /* free all mime infos */
+  g_hash_table_destroy (database->infos);
+
+  /* release the reference on the file alteration monitor */
+  g_object_unref (G_OBJECT (database->monitor));
+
+  /* release the mutex for this object */
+  g_mutex_free (database->lock);
+
+  /* call the parent's finalize method */
+  (*G_OBJECT_CLASS (thunar_vfs_mime_database_parent_class)->finalize) (object);
+}
+
+
+
+static ThunarVfsMimeApplication*
+thunar_vfs_mime_database_get_application_locked (ThunarVfsMimeDatabase *database,
+                                                 const gchar           *desktop_id)
+{
+  ThunarVfsMimeApplication *application;
+
+  /* check if we have that application cached */
+  application = g_hash_table_lookup (database->applications, desktop_id);
+  if (G_UNLIKELY (application == NULL))
+    {
+      /* try to load the application from disk */
+      application = thunar_vfs_mime_application_new_from_desktop_id (desktop_id);
+      if (G_LIKELY (application != NULL))
+        {
+          /* add the application to the cache (we don't take a copy of the desktop-id here) */
+          g_hash_table_insert (database->applications, (gchar *) thunar_vfs_mime_application_get_desktop_id (application), application);
+        }
+    }
+
+  /* take an additional reference for the caller */
+  if (G_LIKELY (application != NULL))
+    thunar_vfs_mime_application_ref (application);
+
+  return application;
+}
+
+
+
+static ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_locked (ThunarVfsMimeDatabase *database,
+                                          const gchar           *mime_type)
+{
+  ThunarVfsMimeProvider *provider;
+  ThunarVfsMimeInfo     *info;
+  const gchar           *p;
+  GList                 *lp;
+  guint                  n;
+
+  /* unalias the mime type */
+  for (lp = database->providers; lp != NULL; lp = lp->next)
+    {
+      provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+      if (G_LIKELY (provider != NULL))
+        {
+          p = thunar_vfs_mime_provider_lookup_alias (provider, mime_type);
+          if (G_UNLIKELY (p != NULL && strcmp (mime_type, p) != 0))
+            {
+              mime_type = p;
+              break;
+            }
+        }
+    }
+
+  /* check if we have a cached version of the mime type */
+  info = g_hash_table_lookup (database->infos, mime_type);
+  if (G_UNLIKELY (info == NULL))
+    {
+      /* count the number of slashes in the mime_type */
+      for (n = 0, p = mime_type; *p != '\0'; ++p)
+        if (G_UNLIKELY (*p == '/'))
+          ++n;
+
+      /* fallback to 'application/octet-stream' if the type is invalid */
+      if (G_UNLIKELY (n != 1))
+        return thunar_vfs_mime_info_ref (database->application_octet_stream);
+
+      /* allocate the MIME info instance */
+      info = thunar_vfs_mime_info_new (mime_type, (p - mime_type));
+
+      /* insert the mime type into the cache (w/o taking a copy on the name) */
+      g_hash_table_insert (database->infos, (gpointer) thunar_vfs_mime_info_get_name (info), info);
+    }
+
+  /* take a reference for the caller */
+  return thunar_vfs_mime_info_ref (info);
+}
+
+
+
+static ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_for_data_locked (ThunarVfsMimeDatabase *database,
+                                                   gconstpointer          data,
+                                                   gsize                  length)
+{
+  ThunarVfsMimeProvider *provider;
+  ThunarVfsMimeInfo     *info = NULL;
+  const gchar           *type_best;
+  const gchar           *type;
+  GList                 *lp;
+  gint                   prio_best;
+  gint                   prio;
+
+  if (G_UNLIKELY (length == 0))
+    {
+      /* empty files are considered to be textfiles, so
+       * newly created (empty) files can be opened in
+       * a text editor.
+       */
+      info = thunar_vfs_mime_info_ref (database->text_plain);
+    }
+  else
+    {
+      /* perform a 'best fit' lookup on all active providers */
+      for (type_best = NULL, prio_best = -1, lp = database->providers; lp != NULL; lp = lp->next)
+        {
+          provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+          if (G_LIKELY (provider != NULL))
+            {
+              type = thunar_vfs_mime_provider_lookup_data (provider, data, length, &prio);
+              if (G_LIKELY (type != NULL && prio > prio_best))
+                {
+                  prio_best = prio;
+                  type_best = type;
+                }
+            }
+        }
+
+      if (G_LIKELY (type_best != NULL))
+        {
+          /* lookup the info for the best type (if any) */
+          info = thunar_vfs_mime_database_get_info_locked (database, type_best);
+        }
+      else if (thunar_vfs_mime_sniffer_looks_like_text (data, length))
+        {
+          /* we have valid UTF-8 text here! */
+          info = thunar_vfs_mime_info_ref (database->text_plain);
+        }
+    }
+
+  return info;
+}
+
+
+
+static ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_for_name_locked (ThunarVfsMimeDatabase *database,
+                                                   const gchar           *name)
+{
+  ThunarVfsMimeProvider *provider;
+  const gchar           *type = NULL;
+  const gchar           *ptr;
+  GList                 *lp;
+
+  /* try the literals first */
+  for (lp = database->providers; lp != NULL && type == NULL; lp = lp->next)
+    {
+      provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+      if (G_LIKELY (provider != NULL))
+        type = thunar_vfs_mime_provider_lookup_literal (provider, name);
+    }
+
+  /* next the suffixes */
+  if (G_LIKELY (type == NULL))
+    {
+      ptr = strpbrk (name, database->stopchars);
+      while (ptr != NULL)
+        {
+          /* case-sensitive first */
+          for (lp = database->providers; lp != NULL && type == NULL; lp = lp->next)
+            {
+              provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+              if (G_LIKELY (provider != NULL))
+                type = thunar_vfs_mime_provider_lookup_suffix (provider, ptr, FALSE);
+            }
+
+          /* case-insensitive next */
+          if (G_UNLIKELY (type == NULL))
+            {
+              for (lp = database->providers; lp != NULL && type == NULL; lp = lp->next)
+                {
+                  provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+                  if (G_LIKELY (provider != NULL))
+                    type = thunar_vfs_mime_provider_lookup_suffix (provider, ptr, TRUE);
+                }
+            }
+
+          /* check if we got a type */
+          if (G_LIKELY (type != NULL))
+            break;
+
+          ptr = strpbrk (ptr + 1, database->stopchars);
+        }
+    }
+
+  /* the glob match comes last */
+  if (G_UNLIKELY (type == NULL))
+    {
+      for (lp = database->providers; lp != NULL && type == NULL; lp = lp->next)
+        {
+          provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+          if (G_LIKELY (provider != NULL))
+            type = thunar_vfs_mime_provider_lookup_glob (provider, name);
+        }
+    }
+
+  return (type != NULL) ? thunar_vfs_mime_database_get_info_locked (database, type) : NULL;
+}
+
+
+
+static GList*
+thunar_vfs_mime_database_get_infos_for_info_locked (ThunarVfsMimeDatabase *database,
+                                                    ThunarVfsMimeInfo     *info)
+{
+  ThunarVfsMimeProvider *provider;
+  ThunarVfsMimeInfo     *parent_info;
+  const gchar           *name = thunar_vfs_mime_info_get_name (info);
+  gchar                 *parents[128];
+  GList                 *infos;
+  GList                 *lp;
+  guint                  n, m;
+
+  /* the info itself is of course on the list */
+  infos = g_list_prepend (NULL, thunar_vfs_mime_info_ref (info));
+
+  /* lookup all parents on every provider */
+  for (lp = database->providers; lp != NULL; lp = lp->next)
+    {
+      provider = THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider;
+      if (G_LIKELY (provider != NULL))
+        {
+          /* ask this provider for the parents list */
+          n = thunar_vfs_mime_provider_lookup_parents (provider, name, parents, G_N_ELEMENTS (parents));
+          if (G_UNLIKELY (n == 0))
+            continue;
+
+          /* process the parents */
+          for (m = 0; m < n; ++m)
+            {
+              /* append the type if we don't have it already */
+              parent_info = thunar_vfs_mime_database_get_info_locked (database, parents[m]);
+              if (G_LIKELY (g_list_find (infos, parent_info) == NULL))
+                infos = g_list_append (infos, parent_info);
+              else
+                thunar_vfs_mime_info_unref (parent_info);
+            }
+        }
+    }
+
+  /* all text/xxxx types are subtype of text/plain */
+  if (G_UNLIKELY (strncmp ("text/", thunar_vfs_mime_info_get_name (info), 5) == 0))
+    {
+      /* append text/plain if we don't have it already */
+      if (g_list_find (infos, database->text_plain) == NULL)
+        infos = g_list_append (infos, thunar_vfs_mime_info_ref (database->text_plain));
+    }
+
+  /* everything is subtype of application/octet-stream */
+  if (g_list_find (infos, database->application_octet_stream) == NULL)
+    infos = g_list_append (infos, thunar_vfs_mime_info_ref (database->application_octet_stream));
+
+  return infos;
+}
+
+
+
+static void
+thunar_vfs_mime_database_initialize_providers (ThunarVfsMimeDatabase *database)
+{
+  ThunarVfsMimeProviderData *data;
+  const gchar               *s;
+  GList                     *stopchars = NULL;
+  GList                     *lp;
+  gchar                     *directory;
+  gchar                    **basedirs;
+  gchar                     *p;
+  gchar                      c;
+  gint                       n;
+
+  /* process all "mime" directories */
+  basedirs = xfce_resource_dirs (XFCE_RESOURCE_DATA);
+  for (n = 0; basedirs[n] != NULL; ++n)
+    {
+      /* determine the path for the MIME directory */
+      directory = g_build_filename (basedirs[n], "mime", NULL);
+
+      /* allocate the provider data for the directory */
+      data = g_new (ThunarVfsMimeProviderData, 1);
+      data->handle = NULL;
+      data->path = thunar_vfs_path_new (directory, NULL);
+
+      /* try to allocate a provider for the directory */
+      data->provider = thunar_vfs_mime_cache_new (directory);
+      if (G_UNLIKELY (data->provider == NULL))
+        data->provider = thunar_vfs_mime_legacy_new (directory);
+
+      /* add the provider to our list */
+      database->providers = g_list_append (database->providers, data);
+
+      /* collect the stopchars for this provider */
+      if (G_LIKELY (data->provider != NULL))
+        stopchars = g_list_concat (stopchars, thunar_vfs_mime_provider_get_stop_characters (data->provider));
+
+      /* collect the max buffer extents for this provider */
+      if (G_LIKELY (data->provider != NULL))
+        database->max_buffer_extents = MAX (database->max_buffer_extents, thunar_vfs_mime_provider_get_max_buffer_extents (data->provider));
+
+      /* cleanup */
+      g_free (directory);
+    }
+  g_strfreev (basedirs);
+
+  /* clamp the max buffer extents to [64..256] to make
+   * sure we don't try insane values (everything below
+   * 64 bytes would be useless for the UTF-8 check).
+   */
+  database->max_buffer_extents = CLAMP (database->max_buffer_extents, 64, 256);
+
+  /* collect the stop characters */
+  database->stopchars = g_new (gchar, g_list_length (stopchars) + 1);
+  for (lp = stopchars, p = database->stopchars; lp != NULL; lp = lp->next)
+    {
+      /* check if we have that character already */
+      c = (gchar) GPOINTER_TO_UINT (lp->data);
+      for (s = database->stopchars; s < p; ++s)
+        if (G_UNLIKELY (*s == c))
+          break;
+
+      /* insert the stopchar */
+      if (G_LIKELY (s == p))
+        *p++ = c;
+    }
+  g_list_free (stopchars);
+  *p = '\0';
+}
+
+
+
+static void
+thunar_vfs_mime_database_shutdown_providers (ThunarVfsMimeDatabase *database)
+{
+  GList *lp;
+
+  /* free the providers */
+  for (lp = database->providers; lp != NULL; lp = lp->next)
+    {
+      if (G_LIKELY (THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider != NULL))
+        g_object_unref (THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->provider);
+      thunar_vfs_path_unref (THUNAR_VFS_MIME_PROVIDER_DATA (lp->data)->path);
+      g_free (THUNAR_VFS_MIME_PROVIDER_DATA (lp->data));
+    }
+  g_list_free (database->providers);
+
+  /* free the stopchars */
+  g_free (database->stopchars);
+}
+
+
+
+static void
+thunar_vfs_mime_database_initialize_stores (ThunarVfsMimeDatabase *database)
+{
+  ThunarVfsMimeDesktopStore *store;
+  gchar                     *path;
+  gchar                    **basedirs;
+  guint                      n;
+
+  /* count all base data directories (with possible "applications" subdirs) */
+  basedirs = xfce_resource_dirs (XFCE_RESOURCE_DATA);
+  for (n = 0; basedirs[n] != NULL; ++n)
+    ;
+
+  /* allocate memory for the stores */
+  database->n_stores = n;
+  database->stores = g_new (ThunarVfsMimeDesktopStore, n);
+
+  /* initialize the stores */
+  for (n = 0, store = database->stores; basedirs[n] != NULL; ++n, ++store)
+    {
+      /* setup the defaults.list */
+      path = g_build_filename (basedirs[n], "applications" G_DIR_SEPARATOR_S "defaults.list", NULL);
+      store->defaults_list = g_hash_table_new_full (thunar_vfs_mime_info_hash,
+                                                    thunar_vfs_mime_info_equal,
+                                                    (GDestroyNotify) thunar_vfs_mime_info_unref,
+                                                    (GDestroyNotify) g_strfreev);
+      store->defaults_list_path = thunar_vfs_path_new (path, NULL);
+      store->defaults_list_handle = thunar_vfs_monitor_add_file (database->monitor, store->defaults_list_path,
+                                                                 thunar_vfs_mime_database_store_changed, database);
+      thunar_vfs_mime_database_store_parse_file (database, store->defaults_list_path, store->defaults_list);
+      g_free (path);
+
+      /* setup the mimeinfo.cache */
+      path = g_build_filename (basedirs[n], "applications" G_DIR_SEPARATOR_S "mimeinfo.cache", NULL);
+      store->mimeinfo_cache = g_hash_table_new_full (thunar_vfs_mime_info_hash,
+                                                     thunar_vfs_mime_info_equal,
+                                                     (GDestroyNotify) thunar_vfs_mime_info_unref,
+                                                     (GDestroyNotify) g_strfreev);
+      store->mimeinfo_cache_path = thunar_vfs_path_new (path, NULL);
+      store->mimeinfo_cache_handle = thunar_vfs_monitor_add_file (database->monitor, store->mimeinfo_cache_path,
+                                                                  thunar_vfs_mime_database_store_changed, database);
+      thunar_vfs_mime_database_store_parse_file (database, store->mimeinfo_cache_path, store->mimeinfo_cache);
+      g_free (path);
+    }
+  g_strfreev (basedirs);
+}
+
+
+
+static void
+thunar_vfs_mime_database_shutdown_stores (ThunarVfsMimeDatabase *database)
+{
+  ThunarVfsMimeDesktopStore *store;
+  guint                      n;
+
+  /* release all stores */
+  for (n = 0, store = database->stores; n < database->n_stores; ++n, ++store)
+    {
+      /* release the defaults.list part */
+      thunar_vfs_monitor_remove (database->monitor, store->defaults_list_handle);
+      thunar_vfs_path_unref (store->defaults_list_path);
+      g_hash_table_destroy (store->defaults_list);
+
+      /* release the mimeinfo.cache part */
+      thunar_vfs_monitor_remove (database->monitor, store->mimeinfo_cache_handle);
+      thunar_vfs_path_unref (store->mimeinfo_cache_path);
+      g_hash_table_destroy (store->mimeinfo_cache);
+    }
+
+#ifndef G_DISABLE_CHECKS
+  memset (database->stores, 0xaa, database->n_stores * sizeof (*store));
+#endif
+
+  /* free the memory allocated to the stores */
+  g_free (database->stores);
+}
+
+
+
+static void
+thunar_vfs_mime_database_store_changed (ThunarVfsMonitor       *monitor,
+                                        ThunarVfsMonitorHandle *handle,
+                                        ThunarVfsMonitorEvent   event,
+                                        ThunarVfsPath          *handle_path,
+                                        ThunarVfsPath          *event_path,
+                                        gpointer                user_data)
+{
+  ThunarVfsMimeDesktopStore *store;
+  ThunarVfsMimeDatabase     *database = THUNAR_VFS_MIME_DATABASE (user_data);
+  guint                      n;
+
+  /* lookup the store that changed */
+  g_mutex_lock (database->lock);
+  for (n = 0, store = database->stores; n < database->n_stores; ++n, ++store)
+    {
+      /* lookup a store that has this handle */
+      if (store->defaults_list_handle == handle)
+        {
+          /* clear any cached values */
+          g_hash_table_foreach_remove (store->defaults_list, (GHRFunc) exo_noop_true, NULL);
+
+          /* reload the store's defaults.list */
+          thunar_vfs_mime_database_store_parse_file (database, store->defaults_list_path, store->defaults_list);
+
+          /* and now we're done */
+          break;
+        }
+      else if (store->mimeinfo_cache_handle == handle)
+        {
+          /* clear the applications cache (as running update-desktop-database usually
+           * means that new applications are available)
+           */
+          g_hash_table_foreach_remove (database->applications, (GHRFunc) exo_noop_true, NULL);
+
+          /* clear any cached values */
+          g_hash_table_foreach_remove (store->mimeinfo_cache, (GHRFunc) exo_noop_true, NULL);
+
+          /* reload the store's mimeinfo.cache */
+          thunar_vfs_mime_database_store_parse_file (database, store->mimeinfo_cache_path, store->mimeinfo_cache);
+
+          /* and now we're done */
+          break;
+        }
+    }
+  g_mutex_unlock (database->lock);
+}
+
+
+
+static void
+thunar_vfs_mime_database_store_parse_file (ThunarVfsMimeDatabase *database,
+                                           ThunarVfsPath         *path,
+                                           GHashTable            *table)
+{
+  ThunarVfsMimeInfo *info;
+  const gchar       *type;
+  const gchar       *ids;
+  gchar              absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+  gchar            **id_list;
+  gchar              line[4096];
+  gchar             *lp;
+  FILE              *fp;
+  gint               n;
+  gint               m;
+
+  /* determine the absolute path */
+  if (thunar_vfs_path_to_string (path, absolute_path, sizeof (absolute_path), NULL) < 0)
+    return;
+
+  /* try to open the file */
+  fp = fopen (absolute_path, "r");
+  if (G_UNLIKELY (fp == NULL))
+    return;
+
+  /* process the file */
+  while (fgets (line, sizeof (line), fp) != NULL)
+    {
+      /* skip everything that doesn't look like a mime type line */
+      for (lp = line; g_ascii_isspace (*lp); ++lp) ;
+      if (G_UNLIKELY (*lp < 'a' || *lp > 'z'))
+        continue;
+
+      /* lookup the '=' */
+      for (type = lp++; *lp != '\0' && *lp != '='; ++lp) ;
+      if (G_UNLIKELY (*lp != '='))
+        continue;
+      *lp++ = '\0';
+
+      /* extract the application id list */
+      for (ids = lp; g_ascii_isgraph (*lp); ++lp) ;
+      if (G_UNLIKELY (ids == lp))
+        continue;
+      *lp = '\0';
+
+      /* parse the id list */
+      id_list = g_strsplit (ids, ";", -1);
+      for (m = n = 0; id_list[m] != NULL; ++m)
+        {
+          if (G_UNLIKELY (id_list[m][0] == '\0'))
+            g_free (id_list[m]);
+          else
+            id_list[n++] = id_list[m];
+        }
+      id_list[n] = NULL;
+
+      /* verify that the id list is not empty */
+      if (G_UNLIKELY (id_list[0] == NULL))
+        {
+          g_free (id_list);
+          continue;
+        }
+
+      /* lookup the mime info for the type */
+      info = thunar_vfs_mime_database_get_info_locked (database, type);
+      if (G_UNLIKELY (info == NULL))
+        {
+          g_strfreev (id_list);
+          continue;
+        }
+
+      /* insert the association for the desktop store */
+      g_hash_table_insert (table, info, id_list);
+    }
+
+  /* close the file */
+  fclose (fp);
+}
+
+
+
+static void
+invalidate_icon_name (gpointer key,
+                      gpointer value,
+                      gpointer user_data)
+{
+  _thunar_vfs_mime_info_invalidate_icon_name (value);
+}
+
+
+
+static gboolean
+thunar_vfs_mime_database_icon_theme_changed (GSignalInvocationHint *ihint,
+                                             guint                  n_param_values,
+                                             const GValue          *param_values,
+                                             gpointer               user_data)
+{
+  ThunarVfsMimeDatabase *database = THUNAR_VFS_MIME_DATABASE (user_data);
+
+  /* invalidate all cached icon names */
+  g_mutex_lock (database->lock);
+  g_hash_table_foreach (database->infos, invalidate_icon_name, NULL);
+  g_mutex_unlock (database->lock);
+
+  /* keep the emission hook alive */
+  return TRUE;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_default:
+ *
+ * Returns a reference on the shared #ThunarVfsMimeDatabase
+ * instance. The caller is responsible to call g_object_unref()
+ * on the returned object when no longer needed.
+ *
+ * Return value: the shared #ThunarVfsMimeDatabase.
+ **/
+ThunarVfsMimeDatabase*
+thunar_vfs_mime_database_get_default (void)
+{
+  static ThunarVfsMimeDatabase *database = NULL;
+
+  if (G_UNLIKELY (database == NULL))
+    {
+      database = g_object_new (THUNAR_VFS_TYPE_MIME_DATABASE, NULL);
+      g_object_add_weak_pointer (G_OBJECT (database), (gpointer) &database);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (database));
+    }
+
+  return database;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_info:
+ * @database  : a #ThunarVfsMimeDatabase.
+ * @mime_type : the string representation of the mime type.
+ *
+ * Determines the #ThunarVfsMimeInfo which corresponds to @mime_type
+ * in database. The caller is responsible to call thunar_vfs_mime_info_unref()
+ * on the returned instance.
+ *
+ * Return value: the #ThunarVfsMimeInfo corresponding to @mime_type in @database.
+ **/
+ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info (ThunarVfsMimeDatabase *database,
+                                   const gchar           *mime_type)
+{
+  ThunarVfsMimeInfo *info;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+  g_return_val_if_fail (mime_type != NULL, NULL);
+
+  g_mutex_lock (database->lock);
+  info = thunar_vfs_mime_database_get_info_locked (database, mime_type);
+  g_mutex_unlock (database->lock);
+
+  return info;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_info_for_data:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @data     : the data to check.
+ * @length   : the length of @data in bytes.
+ *
+ * Determines the #ThunarVfsMimeInfo for @data in @database. The
+ * caller is responsible to call thunar_vfs_mime_info_unref() on
+ * the returned instance.
+ *
+ * Return value: the #ThunarVfsMimeInfo determined for @data.
+ **/
+ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_for_data (ThunarVfsMimeDatabase *database,
+                                            gconstpointer          data,
+                                            gsize                  length)
+{
+  ThunarVfsMimeInfo *info;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+
+  /* try to determine a MIME type based on the data */
+  g_mutex_lock (database->lock);
+  info = thunar_vfs_mime_database_get_info_for_data_locked (database, data, length);
+  g_mutex_unlock (database->lock);
+
+  /* fallback to 'application/octet-stream' if we could not determine any type */
+  if (G_UNLIKELY (info == NULL))
+    info = thunar_vfs_mime_info_ref (database->application_octet_stream);
+
+  return info;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_info_for_name:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @name     : a filename (must be valid UTF-8!).
+ *
+ * Determines the #ThunarVfsMimeInfo for the filename given
+ * in @name from @database. The caller is responsible to
+ * call thunar_vfs_mime_info_unref() on the returned instance.
+ *
+ * The @name must be a valid filename in UTF-8 encoding
+ * and it may not contained any slashes!
+ *
+ * Return value: the #ThunarVfsMimeInfo for @name in @database.
+ **/
+ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_for_name (ThunarVfsMimeDatabase *database,
+                                            const gchar           *name)
+{
+  ThunarVfsMimeInfo *info;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+  g_return_val_if_fail (g_utf8_validate (name, -1, NULL), NULL);
+  g_return_val_if_fail (strchr (name, '/') == NULL, NULL);
+  g_return_val_if_fail (*name != '\0', NULL);
+
+  /* try to determine the info from the name */
+  g_mutex_lock (database->lock);
+  info = thunar_vfs_mime_database_get_info_for_name_locked (database, name);
+  g_mutex_unlock (database->lock);
+
+  /* fallback to 'application/octet-stream' */
+  if (G_UNLIKELY (info == NULL))
+    info = thunar_vfs_mime_info_ref (database->application_octet_stream);
+
+  /* we got it */
+  return info;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_info_for_file:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @path     : the path to a file in the local filesystem (in the filesystem encoding).
+ * @name     : the basename of @path in UTF-8 encoding or %NULL.
+ *
+ * Determines the #ThunarVfsMimeInfo for @path in @database. The
+ * caller is responsible to free the returned instance using
+ * thunar_vfs_mime_info_unref().
+ *
+ * The @name parameter is optional. If the caller already knows the
+ * basename of @path in UTF-8 encoding, it should be specified here
+ * to speed up the lookup process.
+ *
+ * Return value: the #ThunarVfsMimeInfo for @path in @database.
+ **/
+ThunarVfsMimeInfo*
+thunar_vfs_mime_database_get_info_for_file (ThunarVfsMimeDatabase *database,
+                                            const gchar           *path,
+                                            const gchar           *name)
+{
+  ThunarVfsMimeInfo *info;
+  struct stat        stat;
+  const gchar       *p;
+  gssize             nbytes;
+  gchar             *basename;
+  gchar             *buffer;
+  gchar             *type;
+  gsize              buflen;
+  gint               fd;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+  g_return_val_if_fail (path != NULL && *path != '\0', NULL);
+  g_return_val_if_fail (name == NULL || g_utf8_validate (name, -1, NULL), NULL);
+
+  /* determine the basename in UTF-8 if not already given by the caller */
+  if (G_UNLIKELY (name == NULL))
+    {
+      buffer = g_path_get_basename (path);
+      name = basename = g_filename_display_name (buffer);
+      g_free (buffer);
+    }
+  else
+    {
+      basename = NULL;
+    }
+
+  /* try to determine the type from the name first */
+  g_mutex_lock (database->lock);
+  info = thunar_vfs_mime_database_get_info_for_name_locked (database, name);
+  g_mutex_unlock (database->lock);
+
+#ifdef HAVE_ATTROPEN
+  /* check if we have a valid mime type stored in the extattr (SunOS) */
+  if (G_UNLIKELY (info == NULL))
+    {
+      fd = attropen (path, "user.mime_type", O_RDONLY);
+      if (G_UNLIKELY (fd >= 0))
+        {
+          if (fstat (fd, &stat) == 0)
+            {
+              buffer = g_newa (gchar, stat.st_size + 1);
+              nbytes = read (fd, buffer, stat.st_size);
+              if (G_LIKELY (nbytes >= 3))
+                {
+                  buffer[nbytes] = '\0';
+                  info = thunar_vfs_mime_database_get_info (database, buffer);
+                }
+            }
+          close (fd);
+        }
+    }
+#endif
+
+  /* try to determine the type from the file content */
+  if (G_UNLIKELY (info == NULL))
+    {
+      fd = g_open (path, O_RDONLY, 0);
+      if (G_LIKELY (fd >= 0))
+        {
+#ifdef HAVE_EXTATTR_GET_FD
+          /* check if we have a valid mime type stored in the extattr (TrustedBSD) */
+          nbytes = extattr_get_fd (fd, EXTATTR_NAMESPACE_USER, "mime_type", NULL, 0);
+          if (G_UNLIKELY (nbytes >= 3))
+            {
+              buffer = g_newa (gchar, nbytes + 1);
+              nbytes = extattr_get_fd (fd, EXTATTR_NAMESPACE_USER, "mime_type", buffer, nbytes);
+              if (G_LIKELY (nbytes >= 3))
+                {
+                  buffer[nbytes] = '\0';
+                  info = thunar_vfs_mime_database_get_info (database, buffer);
+                }
+            }
+#elif defined(HAVE_FGETXATTR)
+          /* check for valid mime type stored in the extattr (Linux) */
+          nbytes = fgetxattr (fd, "user.mime_type", NULL, 0);
+          if (G_UNLIKELY (nbytes >= 3))
+            {
+              buffer = g_newa (gchar, nbytes + 1);
+              nbytes = fgetxattr (fd, "user.mime_type", buffer, nbytes);
+              if (G_LIKELY (nbytes >= 3))
+                {
+                  buffer[nbytes] = '\0';
+                  info = thunar_vfs_mime_database_get_info (database, buffer);
+                }
+            }
+#endif
+
+          /* stat the file and verify that we have a regular file */
+          if (G_LIKELY (info == NULL && fstat (fd, &stat) == 0 && S_ISREG (stat.st_mode)))
+            {
+              /* read the beginning from the file */
+              buflen = MIN (stat.st_size, database->max_buffer_extents);
+              buffer = g_newa (gchar, buflen);
+              nbytes = read (fd, buffer, buflen);
+
+              /* try to determine a type from the buffer contents */
+              if (G_LIKELY (nbytes >= 0))
+                {
+                  g_mutex_lock (database->lock);
+
+                  /* the regular magic check first */
+                  info = thunar_vfs_mime_database_get_info_for_data_locked (database, buffer, nbytes);
+
+                  /* then if magic doesn't tell us anything and the file is marked,
+                   * as executable, we just guess "application/x-executable", which
+                   * is atleast more precise than "application/octet-stream".
+                   */
+                  if (G_UNLIKELY (info == NULL && (stat.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0))
+                    info = thunar_vfs_mime_database_get_info_locked (database, "application/x-executable");
+
+                  g_mutex_unlock (database->lock);
+                }
+            }
+
+          /* cleanup */
+          close (fd);
+        }
+
+      /* if we have exactly a dot and a non-empty extension, we
+       * can generate a 'application/x-extension-<EXT>' on the fly
+       * or if no extension is found, we'll use the whole filename
+       * for '<EXT>'.
+       */
+      if (G_UNLIKELY (info == NULL))
+        {
+          /* check if the filename has an extension */
+          p = strrchr (name, '.');
+          if (G_UNLIKELY (p != NULL && *++p != '\0'))
+            {
+              /* use the file extension for the type */
+              buffer = g_utf8_strdown (p, -1);
+            }
+          else
+            {
+              /* use the whole filename for the type as suggested by jrb */
+              buffer = g_utf8_strdown (name, -1);
+            }
+
+          /* generate a new mime type */
+          type = g_strconcat ("application/x-extension-", buffer, NULL);
+          info = thunar_vfs_mime_database_get_info (database, type);
+          g_free (buffer);
+          g_free (type);
+        }
+    }
+
+  /* cleanup */
+  if (G_UNLIKELY (basename != NULL))
+    g_free (basename);
+
+  /* we got it */
+  return info;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_infos_for_info:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @info     : a #ThunarVfsMimeInfo.
+ *
+ * Returns a list of all #ThunarVfsMimeInfo<!---->s,
+ * that are related to @info in @database. Currently
+ * this is the list of parent MIME-types for @info,
+ * as defined in the Shared Mime Database.
+ *
+ * Note that the returned list will also include
+ * a reference @info itself. In addition, this
+ * method also handles details specified by the
+ * Shared Mime Database Specification like the
+ * fact that every "text/xxxx" MIME-type is a
+ * subclass of "text/plain" and every MIME-type
+ * is a subclass of "application/octet-stream".
+ *
+ * The caller is responsible to free the returned
+ * list using #thunar_vfs_mime_info_list_free()
+ * when done with it.
+ *
+ * Return value: the list of #ThunarVfsMimeInfo<!---->s
+ *               related to @info.
+ **/
+GList*
+thunar_vfs_mime_database_get_infos_for_info (ThunarVfsMimeDatabase *database,
+                                             ThunarVfsMimeInfo     *info)
+{
+  GList *infos;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+
+  g_mutex_lock (database->lock);
+  infos = thunar_vfs_mime_database_get_infos_for_info_locked (database, info);
+  g_mutex_unlock (database->lock);
+
+  return infos;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_applications:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @info     : a #ThunarVfsMimeInfo.
+ *
+ * Looks up all #ThunarVfsMimeApplication<!---->s in @database, which
+ * claim to be able to open files whose MIME-type is represented by
+ * @info.
+ *
+ * The caller is responsible to free the returned list using
+ * something like:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) thunar_vfs_mime_application_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #ThunarVfsMimeApplication<!---->s, that
+ *               can handle @info.
+ **/
+GList*
+thunar_vfs_mime_database_get_applications (ThunarVfsMimeDatabase *database,
+                                           ThunarVfsMimeInfo     *info)
+{
+  ThunarVfsMimeDesktopStore *store;
+  ThunarVfsMimeApplication  *application;
+  const gchar               *command;
+  const gchar              **id;
+  GList                     *applications = NULL;
+  GList                     *infos;
+  GList                     *lp;
+  GList                     *p;
+  guint                      n;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+
+  g_mutex_lock (database->lock);
+
+  /* determine the mime infos for info */
+  infos = thunar_vfs_mime_database_get_infos_for_info_locked (database, info);
+
+  /* lookup the default applications for the infos */
+  for (lp = infos; lp != NULL; lp = lp->next)
+    {
+      for (n = database->n_stores, store = database->stores; n-- > 0; ++store)
+        {
+          /* lookup the application ids */
+          id = g_hash_table_lookup (store->defaults_list, lp->data);
+          if (G_LIKELY (id == NULL))
+            continue;
+
+          /* merge the applications */
+          for (; *id != NULL; ++id)
+            {
+              /* lookup the application for the id */
+              application = thunar_vfs_mime_database_get_application_locked (database, *id);
+              if (G_UNLIKELY (application == NULL))
+                continue;
+
+              /* check if we already have an application with an equal command
+               * (thanks again Nautilus for the .desktop file mess).
+               */
+              command = thunar_vfs_mime_application_get_command (application);
+              for (p = applications; p != NULL; p = p->next)
+                if (g_str_equal (thunar_vfs_mime_application_get_command (p->data), command))
+                  break;
+
+              /* merge the application */
+              if (G_LIKELY (p == NULL))
+                applications = g_list_append (applications, application);
+              else
+                thunar_vfs_mime_application_unref (application);
+            }
+        }
+    }
+
+  /* lookup the other applications */
+  for (lp = infos; lp != NULL; lp = lp->next)
+    {
+      for (n = database->n_stores, store = database->stores; n-- > 0; ++store)
+        {
+          /* lookup the application ids */
+          id = g_hash_table_lookup (store->mimeinfo_cache, lp->data);
+          if (G_UNLIKELY (id == NULL))
+            continue;
+
+          /* merge the applications */
+          for (; *id != NULL; ++id)
+            {
+              /* lookup the application for the id */
+              application = thunar_vfs_mime_database_get_application_locked (database, *id);
+              if (G_UNLIKELY (application == NULL))
+                continue;
+
+              /* check if we already have an application with an equal command
+               * (thanks again Nautilus for the .desktop file mess).
+               */
+              command = thunar_vfs_mime_application_get_command (application);
+              for (p = applications; p != NULL; p = p->next)
+                if (g_str_equal (thunar_vfs_mime_application_get_command (p->data), command))
+                  break;
+
+              /* merge the application */
+              if (G_LIKELY (p == NULL))
+                applications = g_list_append (applications, application);
+              else
+                thunar_vfs_mime_application_unref (application);
+            }
+        }
+    }
+
+  g_mutex_unlock (database->lock);
+
+  /* free the temporary list of mime infos */
+  thunar_vfs_mime_info_list_free (infos);
+
+  return applications;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_get_default_application:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @info     : a #ThunarVfsMimeInfo.
+ *
+ * Returns the default #ThunarVfsMimeApplication to handle
+ * files of type @info or %NULL if no default application
+ * is set for @info.
+ *
+ * The caller is responsible to free the returned instance
+ * using thunar_vfs_mime_application_unref().
+ *
+ * Return value: the default #ThunarVfsMimeApplication for
+ *               @info or %NULL.
+ **/
+ThunarVfsMimeApplication*
+thunar_vfs_mime_database_get_default_application (ThunarVfsMimeDatabase *database,
+                                                  ThunarVfsMimeInfo     *info)
+{
+  ThunarVfsMimeDesktopStore *store;
+  ThunarVfsMimeApplication  *application = NULL;
+  const gchar              **id;
+  GList                     *applications;
+  GList                     *infos;
+  GList                     *lp;
+  guint                      n;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+
+  g_mutex_lock (database->lock);
+
+  infos = thunar_vfs_mime_database_get_infos_for_info_locked (database, info);
+  for (lp = infos; application == NULL && lp != NULL; lp = lp->next)
+    {
+      for (n = database->n_stores, store = database->stores; application == NULL && n-- > 0; ++store)
+        {
+          id = g_hash_table_lookup (store->defaults_list, lp->data);
+          if (G_LIKELY (id == NULL))
+            continue;
+
+          /* test all applications (use first match) */
+          for (; application == NULL && *id != NULL; ++id)
+            application = thunar_vfs_mime_database_get_application_locked (database, *id);
+        }
+    }
+
+  g_mutex_unlock (database->lock);
+
+  /* free the temporary list of mime infos */
+  thunar_vfs_mime_info_list_free (infos);
+
+  /* if we don't have a default application set, we simply
+   * use the first available application here.
+   */
+  if (G_LIKELY (application == NULL))
+    {
+      /* query all apps for this mime type */
+      applications = thunar_vfs_mime_database_get_applications (database, info);
+      if (G_LIKELY (applications != NULL))
+        {
+          /* use the first available application */
+          application = applications->data;
+          g_list_foreach (applications->next, (GFunc) thunar_vfs_mime_application_unref, NULL);
+          g_list_free (applications);
+        }
+    }
+
+  return application;
+}
+
+
+
+static void
+defaults_list_write (ThunarVfsMimeInfo *info,
+                     gchar            **ids,
+                     FILE              *fp)
+{
+  guint n;
+
+  fprintf (fp, "%s=%s", thunar_vfs_mime_info_get_name (info), ids[0]);
+  for (n = 1; ids[n] != NULL; ++n)
+    fprintf (fp, ";%s", ids[n]);
+  fprintf (fp, "\n");
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_set_default_application:
+ * @database    : a #ThunarVfsMimeDatabase.
+ * @info        : a valid #ThunarVfsMimeInfo for @database.
+ * @application : a #ThunarVfsMimeApplication.
+ * @error       : return location for errors or %NULL.
+ *
+ * Sets @application to be the default #ThunarVfsMimeApplication to open files
+ * of type @info in @database.
+ *
+ * Return value: %TRUE if the operation was successfull, else %FALSE.
+ **/
+gboolean
+thunar_vfs_mime_database_set_default_application (ThunarVfsMimeDatabase    *database,
+                                                  ThunarVfsMimeInfo        *info,
+                                                  ThunarVfsMimeApplication *application,
+                                                  GError                  **error)
+{
+  ThunarVfsMimeDesktopStore *store;
+  ThunarVfsPath             *parent;
+  gboolean                   succeed = FALSE;
+  gchar                      absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+  gchar                    **pids;
+  gchar                    **nids;
+  gchar                     *path;
+  guint                      n, m;
+  FILE                      *fp;
+  gint                       fd;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* acquire the lock on the database */
+  g_mutex_lock (database->lock);
+
+  /* grab the user's desktop applications store */
+  store = database->stores;
+
+  /* verify that the applications/ directory exists */
+  parent = thunar_vfs_path_get_parent (store->defaults_list_path);
+  if (thunar_vfs_path_to_string (parent, absolute_path, sizeof (absolute_path), NULL) > 0)
+    succeed = xfce_mkdirhier (absolute_path, 0700, error);
+
+  /* associate the application with the info */
+  if (G_LIKELY (succeed))
+    {
+      /* generate the new application id list */
+      pids = g_hash_table_lookup (store->defaults_list, info);
+      if (G_UNLIKELY (pids == NULL))
+        {
+          /* generate a new list that contains only the application */
+          nids = g_new (gchar *, 2);
+          nids[0] = g_strdup (thunar_vfs_mime_application_get_desktop_id (application));
+          nids[1] = NULL;
+        }
+      else
+        {
+          /* count the number of previously associated application ids */
+          for (n = 0; pids[n] != NULL; ++n)
+            ;
+
+          /* allocate a new list and prepend the application */
+          nids = g_new (gchar *, n + 2);
+          nids[0] = g_strdup (thunar_vfs_mime_application_get_desktop_id (application));
+
+          /* append the previously associated application ids */
+          for (m = 0, n = 1; pids[m] != NULL; ++m)
+            if (strcmp (pids[m], nids[0]) != 0)
+              nids[n++] = g_strdup (pids[m]);
+
+          /* null-terminate the new application id list */
+          nids[n] = NULL;
+        }
+
+      /* activate the new application id list */
+      g_hash_table_replace (store->defaults_list, thunar_vfs_mime_info_ref (info), nids);
+
+      /* determine the absolute path to the defaults.list file */
+      if (thunar_vfs_path_to_string (store->defaults_list_path, absolute_path, sizeof (absolute_path), error) < 0)
+        {
+          succeed = FALSE;
+          goto done;
+        }
+
+      /* write the default applications list to a temporary file */
+      path = g_strdup_printf ("%s.XXXXXX", absolute_path);
+      fd = g_mkstemp (path);
+      if (G_LIKELY (fd >= 0))
+        {
+          /* wrap the descriptor in a file pointer */
+          fp = fdopen (fd, "w");
+
+          /* write the default application list content */
+          fprintf (fp, "[Default Applications]\n");
+          g_hash_table_foreach (store->defaults_list, (GHFunc) defaults_list_write, fp);
+          fclose (fp);
+
+          /* disable the monitor handle for the defaults.list, so we don't unneccessary reload it */
+          thunar_vfs_monitor_remove (database->monitor, store->defaults_list_handle);
+
+          /* try to atomically rename the file */
+          if (G_UNLIKELY (g_rename (path, absolute_path) < 0))
+            {
+              /* tell the caller that we failed */
+              g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+              succeed = FALSE;
+
+              /* be sure to remove the temporary file */
+              g_unlink (path);
+            }
+
+          /* re-enable the monitor handle for the defaults.list */
+          store->defaults_list_handle = thunar_vfs_monitor_add_file (database->monitor, store->defaults_list_path,
+                                                                     thunar_vfs_mime_database_store_changed, database);
+        }
+      else
+        {
+          g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+          succeed = FALSE;
+        }
+      g_free (path);
+    }
+
+done:
+  /* release the lock on the database */
+  g_mutex_unlock (database->lock);
+
+  return succeed;
+}
+
+
+
+/**
+ * thunar_vfs_mime_database_add_application:
+ * @database : a #ThunarVfsMimeDatabase.
+ * @info     : a #ThunarVfsMimeInfo.
+ * @name     : the name for the application.
+ * @exec     : the command for the application.
+ * @error    : return location for errors or %NULL.
+ *
+ * Adds a new #ThunarVfsMimeApplication to the @database, whose
+ * name is @name and command is @exec, and which can be used to
+ * open files of type @info.
+ *
+ * The caller is responsible to free the returned object
+ * using thunar_vfs_mime_application_unref() when no longer
+ * needed.
+ *
+ * Return value: the newly created #ThunarVfsMimeApplication
+ *               or %NULL on error.
+ **/
+ThunarVfsMimeApplication*
+thunar_vfs_mime_database_add_application (ThunarVfsMimeDatabase *database,
+                                          ThunarVfsMimeInfo     *info,
+                                          const gchar           *name,
+                                          const gchar           *exec,
+                                          GError               **error)
+{
+  ThunarVfsMimeApplication *application = NULL;
+  gboolean                  succeed;
+  gchar                    *desktop_id;
+  gchar                    *directory;
+  gchar                    *command;
+  gchar                    *file;
+  guint                     n;
+  FILE                     *fp;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MIME_DATABASE (database), NULL);
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (g_utf8_validate (name, -1, NULL), NULL);
+  g_return_val_if_fail (exec != NULL, NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* determine a file name for the new applications .desktop file */
+  directory = xfce_resource_save_location (XFCE_RESOURCE_DATA, "applications/", TRUE);
+  file = g_strconcat (directory, G_DIR_SEPARATOR_S, name, "-usercreated.desktop", NULL);
+  for (n = 1; g_file_test (file, G_FILE_TEST_EXISTS); ++n)
+    {
+      g_free (file);
+      file = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s-usercreated-%u.desktop", directory, name, n);
+    }
+
+  /* open the .desktop file for writing */
+  fp = fopen (file, "w");
+  if (G_UNLIKELY (fp == NULL))
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+    }
+  else
+    {
+      /* write the content and close the file */
+      fprintf (fp, "[Desktop Entry]\n");
+      fprintf (fp, "Encoding=UTF-8\n");
+      fprintf (fp, "Type=Application\n");
+      fprintf (fp, "NoDisplay=true\n");
+      fprintf (fp, "Name=%s\n", name);
+      fprintf (fp, "Exec=%s\n", exec);
+      fprintf (fp, "MimeType=%s\n", thunar_vfs_mime_info_get_name (info));
+      fclose (fp);
+
+      /* update the mimeinfo.cache file for the directory */
+      command = g_strdup_printf ("update-desktop-database %s", directory);
+      succeed = g_spawn_command_line_sync (command, NULL, NULL, NULL, error);
+      g_free (command);
+
+      /* check if the update was successfull */
+      if (G_LIKELY (succeed))
+        {
+          /* load the application from the .desktop file */
+          desktop_id = g_path_get_basename (file);
+          application = thunar_vfs_mime_application_new_from_file (file, desktop_id);
+          g_free (desktop_id);
+
+          /* this shouldn't happen, but you never know */
+          if (G_UNLIKELY (application == NULL))
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_IO, _("Failed to load application from file %s"), file);
+        }
+    }
+
+  /* cleanup */
+  g_free (directory);
+  g_free (file);
+
+  return application;
+}
+
+
+
+#define __THUNAR_VFS_MIME_DATABASE_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-database.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,73 @@
+/* $Id: thunar-vfs-mime-database.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_DATABASE_H__
+#define __THUNAR_VFS_MIME_DATABASE_H__
+
+#include <thunar-vfs/thunar-vfs-mime-application.h>
+#include <thunar-vfs/thunar-vfs-mime-info.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMimeDatabaseClass ThunarVfsMimeDatabaseClass;
+typedef struct _ThunarVfsMimeDatabase      ThunarVfsMimeDatabase;
+
+#define THUNAR_VFS_TYPE_MIME_DATABASE             (thunar_vfs_mime_database_get_type ())
+#define THUNAR_VFS_MIME_DATABASE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MIME_DATABASE, ThunarVfsMimeDatabase))
+#define THUNAR_VFS_MIME_DATABASE_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MIME_DATABASE, ThunarVfsMimeDatabaseClass))
+#define THUNAR_VFS_IS_MIME_DATABASE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MIME_DATABASE))
+#define THUNAR_VFS_IS_MIME_DATABASE_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MIME_DATABASE))
+#define THUNAR_VFS_MIME_DATABASE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MIME_DATABASE, ThunarVfsMimeDatabaseClass))
+
+GType                     thunar_vfs_mime_database_get_type                 (void) G_GNUC_CONST;
+
+ThunarVfsMimeDatabase    *thunar_vfs_mime_database_get_default              (void);
+
+ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info                 (ThunarVfsMimeDatabase    *database,
+                                                                             const gchar              *mime_type);
+ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_for_data        (ThunarVfsMimeDatabase    *database,
+                                                                             gconstpointer             data,
+                                                                             gsize                     length);
+ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_for_name        (ThunarVfsMimeDatabase    *database,
+                                                                             const gchar              *name);
+ThunarVfsMimeInfo        *thunar_vfs_mime_database_get_info_for_file        (ThunarVfsMimeDatabase    *database,
+                                                                             const gchar              *path,
+                                                                             const gchar              *name);
+
+GList                    *thunar_vfs_mime_database_get_infos_for_info       (ThunarVfsMimeDatabase    *database,
+                                                                             ThunarVfsMimeInfo        *info);
+
+GList                    *thunar_vfs_mime_database_get_applications         (ThunarVfsMimeDatabase    *database,
+                                                                             ThunarVfsMimeInfo        *info);
+ThunarVfsMimeApplication *thunar_vfs_mime_database_get_default_application  (ThunarVfsMimeDatabase    *database,
+                                                                             ThunarVfsMimeInfo        *info);
+gboolean                  thunar_vfs_mime_database_set_default_application  (ThunarVfsMimeDatabase    *database,
+                                                                             ThunarVfsMimeInfo        *info,
+                                                                             ThunarVfsMimeApplication *application,
+                                                                             GError                  **error);
+ThunarVfsMimeApplication *thunar_vfs_mime_database_add_application          (ThunarVfsMimeDatabase    *database,
+                                                                             ThunarVfsMimeInfo        *info,
+                                                                             const gchar              *name,
+                                                                             const gchar              *exec,
+                                                                             GError                  **error);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_DATABASE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,461 @@
+/* $Id: thunar-vfs-mime-info.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* implement thunar-vfs-mime-info's inline functions */
+#define G_IMPLEMENT_INLINES 1
+#define __THUNAR_VFS_MIME_INFO_C__
+#include <thunar-vfs/thunar-vfs-mime-info.h>
+
+#include <thunar-vfs/thunar-vfs-mime-parser.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/* special mime type to gnome icon mapping */
+static const struct
+{
+  const gchar *const type;
+  const gchar *const icon;
+} GNOME_ICONNAMES[] =
+{
+  { "inode/blockdevice", "gnome-fs-blockdev" },
+  { "inode/chardevice", "gnome-fs-chardev" },
+  { "inode/directory", "gnome-fs-directory" },
+  { "inode/fifo", "gnome-fs-fifo" },
+  { "inode/socket", "gnome-fs-socket" },
+};
+
+/* static constant media-only gnome icon names
+ * (shared by all mime types that don't have
+ * a more specific icon).
+ */
+static const gchar * const GNOME_MEDIAICONS[] =
+{
+  "gnome-mime-application",
+  "gnome-mime-audio",
+  "gnome-mime-image",
+  "gnome-mime-text",
+  "gnome-mime-video",
+};
+
+/* fallback gnome icon name */
+static const gchar GNOME_MIME_APPLICATION_OCTET_STREAM[] = "gnome-mime-application-octet-stream";
+
+
+
+/* Checks whether info has a static constant icon name, that doesn't
+ * need to be freed using g_free().
+ */
+static inline gboolean
+thunar_vfs_mime_info_is_static_icon_name (const ThunarVfsMimeInfo *info)
+{
+  guint n;
+  for (n = 0; n < G_N_ELEMENTS (GNOME_ICONNAMES); ++n)
+    if (info->icon_name == GNOME_ICONNAMES[n].icon)
+      return TRUE;
+  for (n = 0; n < G_N_ELEMENTS (GNOME_MEDIAICONS); ++n)
+    if (info->icon_name == GNOME_MEDIAICONS[n])
+      return TRUE;
+  return (info->icon_name == GNOME_MIME_APPLICATION_OCTET_STREAM);
+}
+
+
+
+GType
+thunar_vfs_mime_info_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      type = g_boxed_type_register_static ("ThunarVfsMimeInfo",
+                                           (GBoxedCopyFunc) thunar_vfs_mime_info_ref,
+                                           (GBoxedFreeFunc) thunar_vfs_mime_info_unref);
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_new:
+ * @name : the mime type name.
+ * @len  : the length of @name or %-1 if zero-terminated.
+ *
+ * Allocates a new #ThunarVfsMimeInfo object with an
+ * initial reference count of one and sets it to the
+ * given @name.
+ *
+ * Note that no checking is performed on the given @name.
+ * You should not normally use this function, but use
+ * thunar_vfs_mime_database_get_info() instead.
+ *
+ * In addition, if you allocate #ThunarVfsMimeInfo<!---->s
+ * using this function, you cannot mix them with the objects
+ * allocated in a #ThunarVfsMimeDatabase, because the
+ * #ThunarVfsMimeDatabase and associated functions assume
+ * that #ThunarVfsMimeInfo objects are unique.
+ *
+ * Return value: the newly allocated #ThunarVfsMimeInfo.
+ **/
+ThunarVfsMimeInfo*
+thunar_vfs_mime_info_new (const gchar *name,
+                          gssize       len)
+{
+  ThunarVfsMimeInfo *info;
+
+  if (G_UNLIKELY (len < 0))
+    len = strlen (name);
+
+  /* allocate the new object */
+  info = g_malloc (sizeof (*info) + len + 1);
+  info->ref_count = 1;
+  info->comment = NULL;
+  info->icon_name = NULL;
+
+  /* set the name */
+  memcpy (((gchar *) info) + sizeof (*info), name, len + 1);
+
+  return info;
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_unref:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Decrements the reference count on @info and releases
+ * the resources allocated for @info once the reference
+ * count drops to zero.
+ **/
+void
+thunar_vfs_mime_info_unref (ThunarVfsMimeInfo *info)
+{
+  if (exo_atomic_dec (&info->ref_count))
+    {
+      /* free the comment */
+      if (info->comment != NULL && info->comment != thunar_vfs_mime_info_get_name (info))
+        {
+#ifndef G_DISABLE_CHECKS
+          memset (info->comment, 0xaa, strlen (info->comment) + 1);
+#endif
+          g_free (info->comment);
+        }
+
+      /* free the icon name if it isn't one of the statics */
+      if (G_LIKELY (!thunar_vfs_mime_info_is_static_icon_name (info)))
+        {
+#ifndef G_DISABLE_CHECKS
+          if (G_LIKELY (info->icon_name != NULL))
+            memset (info->icon_name, 0xaa, strlen (info->icon_name) + 1);
+#endif
+          g_free (info->icon_name);
+        }
+
+      /* free the info struct */
+      g_free (info);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_get_comment:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Determines the description for the given @info.
+ *
+ * Note that this method MUST NOT be called from threads other than
+ * the main thread, because it's not thread-safe!
+ *
+ * Return value: the comment associated with the @info or the empty string
+ *               if no comment was provided.
+ */
+const gchar*
+thunar_vfs_mime_info_get_comment (ThunarVfsMimeInfo *info)
+{
+  const gchar *name;
+  gchar       *path;
+  gchar       *spec;
+
+  if (G_UNLIKELY (info->comment == NULL))
+    {
+      name = thunar_vfs_mime_info_get_name (info);
+      spec = g_strdup_printf ("mime/%s.xml", name);
+      path = xfce_resource_lookup (XFCE_RESOURCE_DATA, spec);
+      g_free (spec);
+
+      if (G_LIKELY (path != NULL))
+        {
+          info->comment = _thunar_vfs_mime_parser_load_comment_from_file (path, NULL);
+          g_free (path);
+        }
+
+      if (G_UNLIKELY (info->comment == NULL))
+        {
+          /* we handle 'application/x-extension-<EXT>' special here */
+          if (G_UNLIKELY (strncmp (name, "application/x-extension-", 24) == 0))
+            info->comment = g_strdup_printf (_("%s document"), name + 24);
+          else
+            info->comment = (gchar *) name;
+        }
+    }
+
+  return info->comment;
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_get_media:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Returns the media portion of the MIME type, e.g. if your
+ * #ThunarVfsMimeInfo instance refers to "text/plain", invoking
+ * this method will return "text".
+ *
+ * The caller is responsible to free the returned string
+ * using g_free() when no longer needed.
+ *
+ * Return value: the media portion of the MIME type.
+ **/
+gchar*
+thunar_vfs_mime_info_get_media (const ThunarVfsMimeInfo *info)
+{
+  const gchar *name;
+  const gchar *p;
+
+  /* lookup the slash character */
+  name = thunar_vfs_mime_info_get_name (info);
+  for (p = name; *p != '/' && *p != '\0'; ++p)
+    ;
+
+  return g_strndup (name, p - name);
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_get_subtype:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Returns the subtype portion of the MIME type, e.g. if @info
+ * refers to "application/octect-stream", this method will
+ * return "octect-stream".
+ *
+ * The caller is responsible to free the returned string
+ * using g_free() when no longer needed.
+ *
+ * Return value: the subtype portion of @info.
+ **/
+gchar*
+thunar_vfs_mime_info_get_subtype (const ThunarVfsMimeInfo *info)
+{
+  const gchar *name;
+  const gchar *p;
+
+  /* lookup the slash character */
+  name = thunar_vfs_mime_info_get_name (info);
+  for (p = name; *p != '/' && *p != '\0'; ++p)
+    ;
+
+  /* skip the slash character */
+  if (G_LIKELY (*p == '/'))
+    ++p;
+
+  return g_strdup (p);
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_hash:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Calculates a hash value for @info.
+ *
+ * Return value: a hash value for @info.
+ **/
+guint
+thunar_vfs_mime_info_hash (gconstpointer info)
+{
+  const gchar *name;
+  guint        h;
+
+  name = thunar_vfs_mime_info_get_name (info);
+  for (h = *name; *++name != '\0'; )
+    h = (h << 5) - h + *name;
+
+  return h;
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_equal:
+ * @a : a #ThunarVfsMimeInfo.
+ * @b : a #ThunarVfsMimeInfo.
+ *
+ * Compares @a and @b and returns %TRUE if both
+ * are equal. 
+ *
+ * Return value: %TRUE if @a and @b are equal.
+ **/
+gboolean
+thunar_vfs_mime_info_equal (gconstpointer a,
+                            gconstpointer b)
+{
+  const gchar *a_name = thunar_vfs_mime_info_get_name (a);
+  const gchar *b_name = thunar_vfs_mime_info_get_name (b);
+
+  return (a == b) || G_UNLIKELY (strcmp (a_name, b_name) == 0);
+}
+
+
+
+/**
+ * thunar_vfs_mime_info_lookup_icon_name:
+ * @info       : a #ThunarVfsMimeInfo.
+ * @icon_theme : the #GtkIconTheme on which to perform the lookup.
+ *
+ * Tries to determine the name of a suitable icon for @info
+ * in @icon_theme. The returned icon name can then be used
+ * in calls to gtk_icon_theme_lookup_icon() or
+ * gtk_icon_theme_load_icon().
+ *
+ * The returned icon name is owned by @info and MUST NOT be freed
+ * by the caller.
+ *
+ * Note that this method MUST NOT be called from threads other than
+ * the main thread, because it's not thread-safe!
+ *
+ * Return value: a suitable icon name for @info in @icon_theme.
+ **/
+const gchar*
+thunar_vfs_mime_info_lookup_icon_name (ThunarVfsMimeInfo *info,
+                                       GtkIconTheme      *icon_theme)
+{
+  const gchar *subtype;
+  const gchar *name;
+  const gchar *p;
+  gchar       *media;
+  gsize        n;
+
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
+
+  /* determine the icon name if we don't already have it cached */
+  if (G_UNLIKELY (info->icon_name == NULL))
+    {
+      /* determine media and subtype */
+      name = thunar_vfs_mime_info_get_name (info);
+      for (p = name + 1; *p != '/' && *p != '\0'; ++p);
+      media = g_newa (gchar, p - name + 1);
+      memcpy (media, name, p - name);
+      media[p - name] = '\0';
+      subtype = G_LIKELY (*p == '/') ? p + 1 : p;
+
+      /* start out with the full name */
+      info->icon_name = g_strdup_printf ("gnome-mime-%s-%s", media, subtype);
+      if (!gtk_icon_theme_has_icon (icon_theme, info->icon_name))
+        {
+          /* only the media portion */
+          info->icon_name[11 + ((subtype - 1) - name)] = '\0';
+          if (!gtk_icon_theme_has_icon (icon_theme, info->icon_name))
+            {
+              /* if we get here, we'll use a static icon name */
+              g_free (info->icon_name);
+
+              /* GNOME uses non-standard names for special MIME types */
+              for (n = 0; n < G_N_ELEMENTS (GNOME_ICONNAMES); ++n)
+                if (strcmp (name, GNOME_ICONNAMES[n].type) == 0)
+                  if (gtk_icon_theme_has_icon (icon_theme, GNOME_ICONNAMES[n].icon))
+                    {
+                      info->icon_name = (gchar *) GNOME_ICONNAMES[n].icon;
+                      break;
+                    }
+
+              /* fallback is always application/octet-stream */
+              if (n == G_N_ELEMENTS (GNOME_ICONNAMES))
+                info->icon_name = (gchar *) GNOME_MIME_APPLICATION_OCTET_STREAM;
+            }
+          else
+            {
+              /* check if we can use one of the static media icon names */
+              for (n = 0; n < G_N_ELEMENTS (GNOME_MEDIAICONS); ++n)
+                if (strcmp (info->icon_name, GNOME_MEDIAICONS[n]) == 0)
+                  {
+                    g_free (info->icon_name);
+                    info->icon_name = (gchar *) GNOME_MEDIAICONS[n];
+                    break;
+                  }
+            }
+        }
+
+      /* verify the icon name */
+      g_assert (info->icon_name != NULL);
+      g_assert (info->icon_name[0] != '\0');
+    }
+
+  return info->icon_name;
+}
+
+
+
+/**
+ * _thunar_vfs_mime_info_invalidate_icon_name:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Invalidates the cached icon name for @info.
+ *
+ * Note that this method MUST NOT be called from threads other than
+ * the main thread, because it's not thread-safe!
+ **/
+void
+_thunar_vfs_mime_info_invalidate_icon_name (ThunarVfsMimeInfo *info)
+{
+  if (!thunar_vfs_mime_info_is_static_icon_name (info))
+    {
+#ifndef G_DISABLE_CHECKS
+      if (G_LIKELY (info->icon_name != NULL))
+        memset (info->icon_name, 0xaa, strlen (info->icon_name));
+#endif
+      g_free (info->icon_name);
+    }
+  info->icon_name = NULL;
+}
+
+
+
+#define __THUNAR_VFS_MIME_INFO_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-info.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,120 @@
+/* $Id: thunar-vfs-mime-info.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_INFO_H__
+#define __THUNAR_VFS_MIME_INFO_H__
+
+#include <thunar-vfs/thunar-vfs-config.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMimeInfo ThunarVfsMimeInfo;
+struct _ThunarVfsMimeInfo
+{
+  /*< private >*/
+  gint          ref_count;
+  gchar        *comment;
+  gchar        *icon_name;
+};
+
+
+#define THUNAR_VFS_TYPE_MIME_INFO (thunar_vfs_mime_info_get_type ())
+
+GType                            thunar_vfs_mime_info_get_type         (void) G_GNUC_CONST;
+
+ThunarVfsMimeInfo               *thunar_vfs_mime_info_new              (const gchar             *name,
+                                                                        gssize                   len) G_GNUC_MALLOC;
+
+G_INLINE_FUNC ThunarVfsMimeInfo *thunar_vfs_mime_info_ref              (ThunarVfsMimeInfo       *info);
+void                             thunar_vfs_mime_info_unref            (ThunarVfsMimeInfo       *info);
+
+const gchar                     *thunar_vfs_mime_info_get_comment      (ThunarVfsMimeInfo       *info);
+G_INLINE_FUNC const gchar       *thunar_vfs_mime_info_get_name         (const ThunarVfsMimeInfo *info);
+
+gchar                           *thunar_vfs_mime_info_get_media        (const ThunarVfsMimeInfo *info) G_GNUC_MALLOC;
+gchar                           *thunar_vfs_mime_info_get_subtype      (const ThunarVfsMimeInfo *info) G_GNUC_MALLOC;
+
+guint                            thunar_vfs_mime_info_hash             (gconstpointer            info);
+gboolean                         thunar_vfs_mime_info_equal            (gconstpointer            a,
+                                                                        gconstpointer            b);
+
+const gchar                     *thunar_vfs_mime_info_lookup_icon_name (ThunarVfsMimeInfo       *info,
+                                                                        GtkIconTheme            *icon_theme);
+
+G_INLINE_FUNC void               thunar_vfs_mime_info_list_free        (GList                   *info_list);
+
+
+#if defined(THUNAR_VFS_COMPILATION)
+void _thunar_vfs_mime_info_invalidate_icon_name (ThunarVfsMimeInfo *info) G_GNUC_INTERNAL;
+#endif
+
+
+/* inline function implementations */
+#if defined(G_CAN_INLINE) || defined(__THUNAR_VFS_MIME_INFO_C__)
+/**
+ * thunar_vfs_mime_info_ref:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Increments the reference count on @info and returns
+ * the reference to @info.
+ *
+ * Return value: a reference to @info.
+ **/
+G_INLINE_FUNC ThunarVfsMimeInfo*
+thunar_vfs_mime_info_ref (ThunarVfsMimeInfo *info)
+{
+  exo_atomic_inc (&info->ref_count);
+  return info;
+}
+
+/**
+ * thunar_vfs_mime_info_get_name:
+ * @info : a #ThunarVfsMimeInfo.
+ *
+ * Returns the full qualified name of the MIME type
+ * described by the @info object.
+ *
+ * Return value: the name of @info.
+ **/
+G_INLINE_FUNC const gchar*
+thunar_vfs_mime_info_get_name (const ThunarVfsMimeInfo *info)
+{
+  return ((const gchar *) info) + sizeof (*info);
+}
+
+/**
+ * thunar_vfs_mime_info_list_free:
+ * @info_list : a #GList of #ThunarVfsMimeInfo<!---->s
+ *
+ * Frees the list and all #ThunarVfsMimeInfo<!---->s
+ * contained within the list.
+ **/
+G_INLINE_FUNC void
+thunar_vfs_mime_info_list_free (GList *info_list)
+{
+  g_list_foreach (info_list, (GFunc) thunar_vfs_mime_info_unref, NULL);
+  g_list_free (info_list);
+}
+#endif /* G_CAN_INLINE || __THUNAR_VFS_MIME_INFO_C__ */
+
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_INFO_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,643 @@
+/* $Id: thunar-vfs-mime-legacy.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Based on code initially written by Matthias Clasen <mclasen at redhat.com>
+ * for the xdgmime library.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_FNMATCH_H
+#include <fnmatch.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-mime-legacy.h>
+
+
+
+#define THUNAR_VFS_MIME_LEGACY_GLOB(obj)   ((ThunarVfsMimeLegacyGlob *) (obj))
+#define THUNAR_VFS_MIME_LEGACY_SUFFIX(obj) ((ThunarVfsMimeLegacySuffix *) (obj))
+
+
+
+typedef struct _ThunarVfsMimeLegacyGlob   ThunarVfsMimeLegacyGlob;
+typedef struct _ThunarVfsMimeLegacySuffix ThunarVfsMimeLegacySuffix;
+
+
+
+static void         thunar_vfs_mime_legacy_class_init             (ThunarVfsMimeLegacyClass *klass);
+static void         thunar_vfs_mime_legacy_init                   (ThunarVfsMimeLegacy      *legacy);
+static void         thunar_vfs_mime_legacy_finalize               (GObject                  *object);
+static const gchar *thunar_vfs_mime_legacy_lookup_data            (ThunarVfsMimeProvider    *provider,
+                                                                   gconstpointer             data,
+                                                                   gsize                     length,
+                                                                   gint                     *priority);
+static const gchar *thunar_vfs_mime_legacy_lookup_literal         (ThunarVfsMimeProvider    *provider,
+                                                                   const gchar              *filename);
+static const gchar *thunar_vfs_mime_legacy_lookup_suffix          (ThunarVfsMimeProvider    *provider,
+                                                                   const gchar              *suffix,
+                                                                   gboolean                  ignore_case);
+static const gchar *thunar_vfs_mime_legacy_lookup_glob            (ThunarVfsMimeProvider    *provider,
+                                                                   const gchar              *filename);
+static const gchar *thunar_vfs_mime_legacy_lookup_alias           (ThunarVfsMimeProvider    *provider,
+                                                                   const gchar              *alias);
+static guint        thunar_vfs_mime_legacy_lookup_parents         (ThunarVfsMimeProvider    *provider,
+                                                                   const gchar              *mime_type,
+                                                                   gchar                   **parents,
+                                                                   guint                     max_parents);
+static GList       *thunar_vfs_mime_legacy_get_stop_characters    (ThunarVfsMimeProvider    *provider);
+static gsize        thunar_vfs_mime_legacy_get_max_buffer_extents (ThunarVfsMimeProvider    *provider);
+static void         thunar_vfs_mime_legacy_parse_aliases          (ThunarVfsMimeLegacy      *legacy,
+                                                                   const gchar              *directory);
+static gboolean     thunar_vfs_mime_legacy_parse_globs            (ThunarVfsMimeLegacy      *legacy,
+                                                                   const gchar              *directory);
+static void         thunar_vfs_mime_legacy_parse_subclasses       (ThunarVfsMimeLegacy      *legacy,
+                                                                   const gchar              *directory);
+
+
+
+struct _ThunarVfsMimeLegacyClass
+{
+  ThunarVfsMimeProviderClass __parent__;
+};
+
+struct _ThunarVfsMimeLegacy
+{
+  ThunarVfsMimeProvider __parent__;
+
+  GStringChunk              *string_chunk;
+  GMemChunk                 *suffix_chunk;
+  GMemChunk                 *glob_chunk;
+
+  GHashTable                *literals;
+  ThunarVfsMimeLegacySuffix *suffixes;
+  GList                     *globs;
+
+  GHashTable                *aliases;
+  GHashTable                *parents;
+};
+
+struct _ThunarVfsMimeLegacyGlob
+{
+  const gchar *pattern;
+  const gchar *mime_type;
+};
+
+struct _ThunarVfsMimeLegacySuffix
+{
+  ThunarVfsMimeLegacySuffix *child;
+  ThunarVfsMimeLegacySuffix *next;
+  const gchar               *mime_type;
+  gunichar                   character;
+};
+
+
+
+static GObjectClass *thunar_vfs_mime_legacy_parent_class;
+
+
+
+GType
+thunar_vfs_mime_legacy_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsMimeLegacyClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_mime_legacy_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsMimeLegacy),
+        0,
+        (GInstanceInitFunc) thunar_vfs_mime_legacy_init,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_MIME_PROVIDER,
+                                     "ThunarVfsMimeLegacy", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_mime_legacy_class_init (ThunarVfsMimeLegacyClass *klass)
+{
+  ThunarVfsMimeProviderClass *thunarvfs_mime_provider_class;
+  GObjectClass               *gobject_class;
+
+  thunar_vfs_mime_legacy_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_mime_legacy_finalize;
+
+  thunarvfs_mime_provider_class = THUNAR_VFS_MIME_PROVIDER_CLASS (klass);
+  thunarvfs_mime_provider_class->lookup_data = thunar_vfs_mime_legacy_lookup_data;
+  thunarvfs_mime_provider_class->lookup_literal = thunar_vfs_mime_legacy_lookup_literal;
+  thunarvfs_mime_provider_class->lookup_suffix = thunar_vfs_mime_legacy_lookup_suffix;
+  thunarvfs_mime_provider_class->lookup_glob = thunar_vfs_mime_legacy_lookup_glob;
+  thunarvfs_mime_provider_class->lookup_alias = thunar_vfs_mime_legacy_lookup_alias;
+  thunarvfs_mime_provider_class->lookup_parents = thunar_vfs_mime_legacy_lookup_parents;
+  thunarvfs_mime_provider_class->get_stop_characters = thunar_vfs_mime_legacy_get_stop_characters;
+  thunarvfs_mime_provider_class->get_max_buffer_extents = thunar_vfs_mime_legacy_get_max_buffer_extents;
+}
+
+
+
+static void
+thunar_vfs_mime_legacy_init (ThunarVfsMimeLegacy *legacy)
+{
+  legacy->string_chunk = g_string_chunk_new (1024);
+  legacy->glob_chunk = g_mem_chunk_create (ThunarVfsMimeLegacyGlob, 32, G_ALLOC_ONLY);
+  legacy->suffix_chunk = g_mem_chunk_create (ThunarVfsMimeLegacySuffix, 128, G_ALLOC_ONLY);
+
+  legacy->literals = g_hash_table_new (g_str_hash, g_str_equal);
+
+  legacy->aliases = g_hash_table_new (g_str_hash, g_str_equal);
+  legacy->parents = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_list_free);
+}
+
+
+
+static void
+thunar_vfs_mime_legacy_finalize (GObject *object)
+{
+  ThunarVfsMimeLegacy *legacy = THUNAR_VFS_MIME_LEGACY (object);
+
+  /* free parents hash table */
+  g_hash_table_destroy (legacy->parents);
+
+  /* free aliases hash table */
+  g_hash_table_destroy (legacy->aliases);
+
+  /* free the list of globs */
+  g_list_free (legacy->globs);
+
+  /* free literals hash table */
+  g_hash_table_destroy (legacy->literals);
+
+  /* free chunks */
+  g_string_chunk_free (legacy->string_chunk);
+  g_mem_chunk_destroy (legacy->suffix_chunk);
+  g_mem_chunk_destroy (legacy->glob_chunk);
+
+  (*G_OBJECT_CLASS (thunar_vfs_mime_legacy_parent_class)->finalize) (object);
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_legacy_lookup_data (ThunarVfsMimeProvider *provider,
+                                    gconstpointer          data,
+                                    gsize                  length,
+                                    gint                  *priority)
+{
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_legacy_lookup_literal (ThunarVfsMimeProvider *provider,
+                                       const gchar           *filename)
+{
+  return g_hash_table_lookup (THUNAR_VFS_MIME_LEGACY (provider)->literals, filename);
+}
+
+
+
+static ThunarVfsMimeLegacySuffix*
+suffix_insert (ThunarVfsMimeLegacy       *legacy,
+               ThunarVfsMimeLegacySuffix *suffix_node,
+               const gchar               *pattern,
+               const gchar               *mime_type)
+{
+  ThunarVfsMimeLegacySuffix *previous;
+  ThunarVfsMimeLegacySuffix *node;
+  gboolean                   found_node = FALSE;
+  gunichar                   character;
+
+  character = g_utf8_get_char (pattern);
+
+  if (suffix_node == NULL || character < suffix_node->character)
+    {
+      node = g_chunk_new0 (ThunarVfsMimeLegacySuffix, legacy->suffix_chunk);
+      node->next = suffix_node;
+      node->character = character;
+      suffix_node = node;
+    }
+  else if (character == suffix_node->character)
+    {
+      node = suffix_node;
+    }
+  else
+    {
+      for (previous = suffix_node, node = previous->next; node != NULL; previous = node, node = node->next)
+        {
+          if (character < node->character)
+            {
+              node = g_chunk_new0 (ThunarVfsMimeLegacySuffix, legacy->suffix_chunk);
+              node->next = previous->next;
+              node->character = character;
+              previous->next = node;
+              found_node = TRUE;
+              break;
+            }
+          else if (character == node->character)
+            {
+              found_node = TRUE;
+              break;
+            }
+        }
+
+      if (!found_node)
+        {
+          node = g_chunk_new0 (ThunarVfsMimeLegacySuffix, legacy->suffix_chunk);
+          node->next = previous->next;
+          node->character = character;
+          previous->next = node;
+        }
+    }
+
+  pattern = g_utf8_next_char (pattern);
+  if (G_UNLIKELY (*pattern == '\0'))
+    node->mime_type = mime_type;
+  else
+    node->child = suffix_insert (legacy, node->child, pattern, mime_type);
+
+  return suffix_node;
+}
+
+
+
+static const gchar*
+suffix_lookup (ThunarVfsMimeLegacySuffix *suffix_node,
+               const gchar               *filename,
+               gboolean                   ignore_case)
+{
+  ThunarVfsMimeLegacySuffix *node;
+  gunichar                   character;
+
+  if (G_UNLIKELY (suffix_node == NULL))
+    return NULL;
+
+  character = g_utf8_get_char (filename);
+  if (G_UNLIKELY (ignore_case))
+    character = g_unichar_tolower (character);
+
+  for (node = suffix_node; node != NULL && character >= node->character; node = node->next)
+    if (character == node->character)
+      {
+        filename = g_utf8_next_char (filename);
+        if (*filename == '\0')
+          return node->mime_type;
+        else
+          return suffix_lookup (node->child, filename, ignore_case);
+      }
+
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_legacy_lookup_suffix (ThunarVfsMimeProvider *provider,
+                                      const gchar           *suffix,
+                                      gboolean               ignore_case)
+{
+  return suffix_lookup (THUNAR_VFS_MIME_LEGACY (provider)->suffixes, suffix, ignore_case);
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_legacy_lookup_glob (ThunarVfsMimeProvider *provider,
+                                    const gchar           *filename)
+{
+  GList *lp;
+
+  for (lp = THUNAR_VFS_MIME_LEGACY (provider)->globs; lp != NULL; lp = lp->next)
+    if (fnmatch (THUNAR_VFS_MIME_LEGACY_GLOB (lp->data)->pattern, filename, 0) == 0)
+      return THUNAR_VFS_MIME_LEGACY_GLOB (lp->data)->mime_type;
+
+  return NULL;
+}
+
+
+
+static const gchar*
+thunar_vfs_mime_legacy_lookup_alias (ThunarVfsMimeProvider *provider,
+                                     const gchar           *alias)
+{
+  return g_hash_table_lookup (THUNAR_VFS_MIME_LEGACY (provider)->aliases, alias);
+}
+
+
+
+static guint
+thunar_vfs_mime_legacy_lookup_parents (ThunarVfsMimeProvider *provider,
+                                       const gchar           *mime_type,
+                                       gchar                **parents,
+                                       guint                  max_parents)
+{
+  GList *lp;
+  guint  n = 0;
+
+  /* determine the known parents for the MIME-type */
+  lp = g_hash_table_lookup (THUNAR_VFS_MIME_LEGACY (provider)->parents, mime_type);
+  for (; lp != NULL && n < max_parents; lp = lp->next, ++n, ++parents)
+    *parents = lp->data;
+
+  return n;
+}
+
+
+
+static GList*
+thunar_vfs_mime_legacy_get_stop_characters (ThunarVfsMimeProvider *provider)
+{
+  ThunarVfsMimeLegacySuffix *node;
+  GList                     *stopchars = NULL;
+
+  for (node = THUNAR_VFS_MIME_LEGACY (provider)->suffixes; node != NULL; node = node->next)
+    if (node->character < 128u)
+      stopchars = g_list_prepend (stopchars, GUINT_TO_POINTER (node->character));
+
+  return stopchars;
+}
+
+
+
+static gsize
+thunar_vfs_mime_legacy_get_max_buffer_extents (ThunarVfsMimeProvider *provider)
+{
+  return 0;
+}
+
+
+
+static void
+thunar_vfs_mime_legacy_parse_aliases (ThunarVfsMimeLegacy *legacy,
+                                      const gchar         *directory)
+{
+  gchar  line[2048];
+  gchar *alias;
+  gchar *name;
+  gchar *path;
+  gchar *lp;
+  FILE  *fp;
+
+  /* try to open the "aliases" file */
+  path = g_build_filename (directory, "aliases", NULL);
+  fp = fopen (path, "r");
+  g_free (path);
+
+  /* check if we succeed */
+  if (G_UNLIKELY (fp == NULL))
+    return;
+
+  /* parse all aliases */
+  while (fgets (line, sizeof (line), fp) != NULL)
+    {
+      /* skip whitespace/comments */
+      for (lp = line; g_ascii_isspace (*lp); ++lp);
+      if (G_UNLIKELY (*lp == '\0' || *lp == '#'))
+        continue;
+
+      /* extract the alias name */
+      for (alias = lp; *lp != '\0' && !g_ascii_isspace (*lp); ++lp);
+      if (G_UNLIKELY (*lp == '\0' || alias == lp))
+        continue;
+      *lp++ = '\0';
+
+      /* skip whitespace */
+      for (; G_UNLIKELY (g_ascii_isspace (*lp)); ++lp);
+      if (G_UNLIKELY (*lp == '\0'))
+        continue;
+
+      /* extract the MIME-type name */
+      for (name = lp; *lp != '\0' && *lp != '\n' && *lp != '\r'; ++lp);
+      if (G_UNLIKELY (name == lp))
+        continue;
+      *lp = '\0';
+
+      /* insert the alias into the string chunk */
+      alias = g_string_chunk_insert_const (legacy->string_chunk, alias);
+
+      /* insert the MIME-type name into the string chunk */
+      name = g_string_chunk_insert_const (legacy->string_chunk, name);
+
+      /* insert the association into the aliases hash table */
+      g_hash_table_insert (legacy->aliases, alias, name);
+    }
+
+  fclose (fp);
+}
+
+
+
+static gboolean
+thunar_vfs_mime_legacy_parse_globs (ThunarVfsMimeLegacy *legacy,
+                                    const gchar         *directory)
+{
+  ThunarVfsMimeLegacyGlob *glob;
+  gchar                    line[2048];
+  gchar                   *pattern;
+  gchar                   *path;
+  gchar                   *name;
+  gchar                   *lp;
+  FILE                    *fp;
+
+  /* try to open the "globs" file */
+  path = g_build_filename (directory, "globs", NULL);
+  fp = fopen (path, "r");
+  g_free (path);
+
+  /* cannot continue */
+  if (G_UNLIKELY (fp == NULL))
+    return FALSE;
+
+  /* parse all globs */
+  while (fgets (line, sizeof (line), fp) != NULL)
+    {
+      /* skip whitespace/comments */
+      for (lp = line; g_ascii_isspace (*lp); ++lp);
+      if (*lp == '\0' || *lp == '#')
+        continue;
+
+      /* extract the MIME-type name */
+      for (name = lp; *lp != '\0' && *lp != ':'; ++lp);
+      if (*lp == '\0' || name == lp)
+        continue;
+
+      /* extract the pattern */
+      for (*lp = '\0', pattern = ++lp; *lp != '\0' && *lp != '\n' && *lp != '\r'; ++lp);
+      *lp = '\0';
+      if (*pattern == '\0')
+        continue;
+
+      /* insert the name into the string chunk */
+      name = g_string_chunk_insert_const (legacy->string_chunk, name);
+
+      /* determine the type of the pattern */
+      if (strpbrk (pattern, "*?[") == NULL)
+        {
+          g_hash_table_insert (legacy->literals, g_string_chunk_insert (legacy->string_chunk, pattern), name);
+        }
+      else if (pattern[0] == '*' && pattern[1] == '.' && strpbrk (pattern + 2, "*?[") == NULL)
+        {
+          legacy->suffixes = suffix_insert (legacy, legacy->suffixes, pattern + 1, name);
+        }
+      else
+        {
+          glob = g_chunk_new (ThunarVfsMimeLegacyGlob, legacy->glob_chunk);
+          glob->pattern = g_string_chunk_insert (legacy->string_chunk, pattern);
+          glob->mime_type = name;
+          legacy->globs = g_list_append (legacy->globs, glob);
+        }
+    }
+
+  fclose (fp);
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_vfs_mime_legacy_parse_subclasses (ThunarVfsMimeLegacy *legacy,
+                                         const gchar         *directory)
+{
+  gchar  line[2048];
+  GList *parents;
+  gchar *subclass;
+  gchar *name;
+  gchar *path;
+  gchar *lp;
+  FILE  *fp;
+
+  /* try to open the "subclasses" file */
+  path = g_build_filename (directory, "subclasses", NULL);
+  fp = fopen (path, "r");
+  g_free (path);
+
+  /* check if we succeed */
+  if (G_UNLIKELY (fp == NULL))
+    return;
+
+  /* parse all subclasses */
+  while (fgets (line, sizeof (line), fp) != NULL)
+    {
+      /* skip whitespace/comments */
+      for (lp = line; g_ascii_isspace (*lp); ++lp);
+      if (G_UNLIKELY (*lp == '\0' || *lp == '#'))
+        continue;
+
+      /* extract the subclass name */
+      for (subclass = lp; *lp != '\0' && !g_ascii_isspace (*lp); ++lp);
+      if (G_UNLIKELY (*lp == '\0' || subclass == lp))
+        continue;
+      *lp++ = '\0';
+
+      /* skip whitespace */
+      for (; G_UNLIKELY (g_ascii_isspace (*lp)); ++lp);
+      if (G_UNLIKELY (*lp == '\0'))
+        continue;
+
+      /* extract the MIME-type name */
+      for (name = lp; *lp != '\0' && *lp != '\n' && *lp != '\r'; ++lp);
+      if (G_UNLIKELY (name == lp))
+        continue;
+      *lp = '\0';
+
+      /* insert the subclass into the string chunk */
+      subclass = g_string_chunk_insert_const (legacy->string_chunk, subclass);
+
+      /* insert the MIME-type name into the string chunk */
+      name = g_string_chunk_insert_const (legacy->string_chunk, name);
+
+      /* add the MIME-type name to the list of parents for the subclass */
+      parents = g_hash_table_lookup (legacy->parents, subclass);
+      if (G_UNLIKELY (parents != NULL))
+        parents = g_list_copy (parents);
+      parents = g_list_append (parents, name);
+      g_hash_table_insert (legacy->parents, subclass, parents);
+    }
+
+  fclose (fp);
+}
+
+
+
+/**
+ * thunar_vfs_mime_legacy_new:
+ * @directory : an XDG mime base directory.
+ *
+ * Allocates a new #ThunarVfsMimeLegacy for @directory and
+ * returns the instance on success, or %NULL on error.
+ *
+ * The caller is responsible to free the returned instance
+ * using g_object_unref().
+ *
+ * Return value: the newly allocated #ThunarVfsMimeLegacy
+ *               instance or %NULL on error.
+ **/
+ThunarVfsMimeProvider*
+thunar_vfs_mime_legacy_new (const gchar *directory)
+{
+  ThunarVfsMimeLegacy *legacy;
+
+  /* allocate the new object */
+  legacy = g_object_new (THUNAR_VFS_TYPE_MIME_LEGACY, NULL);
+
+  /* try to parse the globs file */
+  if (!thunar_vfs_mime_legacy_parse_globs (legacy, directory))
+    {
+      g_object_unref (legacy);
+      return NULL;
+    }
+
+  /* parse the aliases file (optional) */
+  thunar_vfs_mime_legacy_parse_aliases (legacy, directory);
+
+  /* parse the subclasses file (optional) */
+  thunar_vfs_mime_legacy_parse_subclasses (legacy, directory);
+
+  /* we got it */
+  return THUNAR_VFS_MIME_PROVIDER (legacy);
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-legacy.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,44 @@
+/* $Id: thunar-vfs-mime-legacy.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_LEGACY_H__
+#define __THUNAR_VFS_MIME_LEGACY_H__
+
+#include <thunar-vfs/thunar-vfs-mime-provider.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMimeLegacyClass ThunarVfsMimeLegacyClass;
+typedef struct _ThunarVfsMimeLegacy      ThunarVfsMimeLegacy;
+
+#define THUNAR_VFS_TYPE_MIME_LEGACY             (thunar_vfs_mime_legacy_get_type ())
+#define THUNAR_VFS_MIME_LEGACY(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MIME_LEGACY, ThunarVfsMimeLegacy))
+#define THUNAR_VFS_MIME_LEGACY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MIME_LEGACY, ThunarVfsMimeLegacyClass))
+#define THUNAR_VFS_IS_MIME_LEGACY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MIME_LEGACY))
+#define THUNAR_VFS_IS_MIME_LEGACY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MIME_LEGACY))
+#define THUNAR_VFS_MIME_LEGACY_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MIME_LEGACY, ThunarVfsMimeLegacyClass))
+
+GType                  thunar_vfs_mime_legacy_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsMimeProvider *thunar_vfs_mime_legacy_new      (const gchar *directory) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_LEGACY_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,257 @@
+/* $Id: thunar-vfs-mime-parser.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-mime-parser.h>
+
+
+
+typedef enum
+{
+  PARSER_STATE_START,
+  PARSER_STATE_MIMETYPE,
+  PARSER_STATE_COMMENT,
+  PARSER_STATE_UNKNOWN,
+} ParserState;
+ 
+typedef XFCE_GENERIC_STACK(ParserState) ParserStateStack;
+ 
+typedef struct
+{
+  ParserStateStack *stack;
+  guint             comment_match;
+  gboolean          comment_use;
+  GString          *comment;
+  const gchar      *locale;
+} Parser;
+ 
+ 
+ 
+static void         start_element_handler     (GMarkupParseContext  *context,
+                                               const gchar          *element_name,
+                                               const gchar         **attribute_names,
+                                               const gchar         **attribute_values,
+                                               gpointer              user_data,
+                                               GError              **error);
+static void         end_element_handler       (GMarkupParseContext  *context,
+                                               const gchar          *element_name,
+                                               gpointer              user_data,
+                                               GError              **error);
+static void         text_handler              (GMarkupParseContext  *context,
+                                               const gchar          *text,
+                                               gsize                 text_len,
+                                               gpointer              user_data,
+                                               GError             **error);
+ 
+ 
+ 
+static GMarkupParser markup_parser =
+{
+  start_element_handler,
+  end_element_handler,
+  text_handler,
+  NULL,
+  NULL,
+};
+ 
+ 
+ 
+static void
+start_element_handler (GMarkupParseContext  *context,
+                       const gchar          *element_name,
+                       const gchar         **attribute_names,
+                       const gchar         **attribute_values,
+                       gpointer              user_data,
+                       GError              **error)
+{
+  Parser *parser = (Parser *) user_data;
+  guint   match;
+  guint   n;
+ 
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_STATE_START:
+      if (exo_str_is_equal (element_name, "mime-type"))
+        {
+          xfce_stack_push (parser->stack, PARSER_STATE_MIMETYPE);
+        }
+      else
+        goto unknown_element;
+      break;
+ 
+    case PARSER_STATE_MIMETYPE:
+      if (exo_str_is_equal (element_name, "comment"))
+        {
+          for (n = 0; attribute_names[n] != NULL; ++n)
+            if (exo_str_is_equal (attribute_names[n], "xml:lang"))
+              break;
+ 
+          if (G_UNLIKELY (attribute_names[n] == NULL))
+            {
+              parser->comment_use = (parser->comment_match <= XFCE_LOCALE_NO_MATCH);
+            }
+          else
+            {
+              match = xfce_locale_match (parser->locale, attribute_values[n]);
+              if (parser->comment_match < match)
+                {
+                  parser->comment_match = match;
+                  parser->comment_use = TRUE;
+                }
+              else
+                {
+                  parser->comment_use = FALSE;
+                }
+            }
+ 
+          if (parser->comment_use)
+            g_string_truncate (parser->comment, 0);
+ 
+          xfce_stack_push (parser->stack, PARSER_STATE_COMMENT);
+        }
+      else
+        xfce_stack_push (parser->stack, PARSER_STATE_UNKNOWN);
+      break;
+ 
+    default:
+      xfce_stack_push (parser->stack, PARSER_STATE_UNKNOWN);
+      break;
+    }
+ 
+  return;
+ 
+unknown_element:
+  g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+               "Unknown element <%s>", element_name);
+  return;
+}
+ 
+ 
+ 
+static void
+end_element_handler (GMarkupParseContext  *context,
+                     const gchar          *element_name,
+                     gpointer              user_data,
+                     GError              **error)
+{
+  Parser *parser = (Parser *) user_data;
+ 
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_STATE_START:
+      g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
+                   "End element handler called while in root context");
+      return;
+ 
+    case PARSER_STATE_MIMETYPE:
+      if (!exo_str_is_equal (element_name, "mime-type"))
+        goto unknown_element;
+      break;
+ 
+    case PARSER_STATE_COMMENT:
+      if (!exo_str_is_equal (element_name, "comment"))
+        goto unknown_element;
+      break;
+ 
+    default:
+      break;
+    }
+ 
+  xfce_stack_pop (parser->stack);
+  return;
+ 
+unknown_element:
+  g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+               "Unknown closing element <%s>", element_name);
+  return;
+}
+ 
+ 
+ 
+static void
+text_handler (GMarkupParseContext  *context,
+              const gchar          *text,
+              gsize                 text_len,
+              gpointer              user_data,
+              GError             **error)
+{
+  Parser *parser = (Parser *) user_data;
+ 
+  switch (xfce_stack_top (parser->stack))
+    {
+    case PARSER_STATE_COMMENT:
+      if (parser->comment_use)
+        g_string_append_len (parser->comment, text, text_len);
+      break;
+ 
+    default:
+      break;
+    }
+}
+ 
+ 
+ 
+gchar*
+_thunar_vfs_mime_parser_load_comment_from_file (const gchar *filename,
+                                                GError     **error)
+{
+  GMarkupParseContext *context;
+  Parser               parser;
+  gchar               *content;
+  gsize                content_len;
+  gboolean             comment_free = TRUE;
+  gchar               *comment = NULL;
+ 
+  if (!g_file_get_contents (filename, &content, &content_len, error))
+    return NULL;
+ 
+  parser.comment_match = XFCE_LOCALE_NO_MATCH;
+  parser.comment = g_string_new ("");
+  parser.locale = setlocale (LC_MESSAGES, NULL);
+ 
+  parser.stack = xfce_stack_new (ParserStateStack);
+  xfce_stack_push (parser.stack, PARSER_STATE_START);
+ 
+  context = g_markup_parse_context_new (&markup_parser, 0, &parser, NULL);
+ 
+  if (!g_markup_parse_context_parse (context, content, content_len, error))
+    goto done;
+ 
+  if (!g_markup_parse_context_end_parse (context, error))
+    goto done;
+ 
+  comment = parser.comment->str;
+  comment_free = FALSE;
+ 
+done:
+  g_markup_parse_context_free (context);
+  g_string_free (parser.comment, comment_free);
+  xfce_stack_free (parser.stack);
+  g_free (content);
+ 
+  return comment;
+}

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-parser.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,33 @@
+/* $Id: thunar-vfs-mime-parser.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_PARSER_H__
+#define __THUNAR_VFS_MIME_PARSER_H__
+
+#include <exo/exo.h>
+
+G_BEGIN_DECLS;
+
+gchar *_thunar_vfs_mime_parser_load_comment_from_file (const gchar *filename,
+                                                       GError     **error);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_PARSER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,55 @@
+/* $Id: thunar-vfs-mime-provider.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunar-vfs/thunar-vfs-mime-provider.h>
+
+
+
+GType
+thunar_vfs_mime_provider_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsMimeProviderClass),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsMimeProvider),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_OBJECT, "ThunarVfsMimeProvider", &info, G_TYPE_FLAG_ABSTRACT);
+    }
+
+  return type;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-provider.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,210 @@
+/* $Id: thunar-vfs-mime-provider.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MIME_PROVIDER_H__
+#define __THUNAR_VFS_MIME_PROVIDER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMimeProviderClass ThunarVfsMimeProviderClass;
+typedef struct _ThunarVfsMimeProvider      ThunarVfsMimeProvider;
+
+#define THUNAR_VFS_TYPE_MIME_PROVIDER             (thunar_vfs_mime_provider_get_type ())
+#define THUNAR_VFS_MIME_PROVIDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MIME_PROVIDER, ThunarVfsMimeProvider))
+#define THUNAR_VFS_MIME_PROVIDER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MIME_PROVIDER, ThunarVfsMimeProviderClass))
+#define THUNAR_VFS_IS_MIME_PROVIDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MIME_PROVIDER))
+#define THUNAR_VFS_IS_MIME_PROVIDER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MIME_PROVIDER))
+#define THUNAR_VFS_MIME_PROVIDER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MIME_PROVIDER, ThunarVfsMimeProviderClass))
+
+struct _ThunarVfsMimeProviderClass
+{
+  GObjectClass __parent__;
+
+  const gchar *(*lookup_data)             (ThunarVfsMimeProvider *provider,
+                                           gconstpointer          data,
+                                           gsize                  length,
+                                           gint                  *priority);
+
+  const gchar *(*lookup_literal)          (ThunarVfsMimeProvider *provider,
+                                           const gchar           *filename);
+  const gchar *(*lookup_suffix)           (ThunarVfsMimeProvider *provider,
+                                           const gchar           *suffix,
+                                           gboolean               ignore_case);
+  const gchar *(*lookup_glob)             (ThunarVfsMimeProvider *provider,
+                                           const gchar           *filename);
+
+  const gchar *(*lookup_alias)            (ThunarVfsMimeProvider *provider,
+                                           const gchar           *alias);
+
+  guint        (*lookup_parents)          (ThunarVfsMimeProvider *provider,
+                                           const gchar           *mime_type,
+                                           gchar                **parents,
+                                           guint                  max_parents);
+
+  GList       *(*get_stop_characters)     (ThunarVfsMimeProvider *provider);
+  gsize        (*get_max_buffer_extents)  (ThunarVfsMimeProvider *provider);
+};
+
+struct _ThunarVfsMimeProvider
+{
+  GObject __parent__;
+};
+
+GType thunar_vfs_mime_provider_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+/**
+ * thunar_vfs_mime_provider_lookup_data:
+ * @provider : a #ThunarVfsMimeProvider.
+ * @data     : pointer to the data.
+ * @length   : length of @data in bytes.
+ * @priority : return location for the priority or %NULL.
+ *
+ * The location pointed to by @priority (if not %NULL) will only
+ * be set to a meaningfull value if this method returns a
+ * non-%NULL value.
+ *
+ * Return value: a pointer to the MIME type or %NULL.
+ **/
+static inline const gchar*
+thunar_vfs_mime_provider_lookup_data (ThunarVfsMimeProvider *provider,
+                                      gconstpointer          data,
+                                      gsize                  length,
+                                      gint                  *priority)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_data) (provider, data, length, priority);
+}
+
+/**
+ * thunar_vfs_mime_provider_lookup_literal:
+ * @provider : a #ThunarVfsMimeProvider.
+ * @filename : a filename.
+ *
+ * Return value: a pointer to the MIME type or %NULL.
+ **/
+static inline const gchar*
+thunar_vfs_mime_provider_lookup_literal (ThunarVfsMimeProvider *provider,
+                                         const gchar           *filename)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_literal) (provider, filename);
+}
+
+/**
+ * thunar_vfs_mime_provider_lookup_suffix:
+ * @provider    : a #ThunarVfsMimeProvider.
+ * @suffix      : a filename suffix.
+ * @ignore_case : %TRUE to perform case-insensitive comparison.
+ *
+ * Return value: a pointer to the MIME type or %NULL.
+ **/
+static inline const gchar*
+thunar_vfs_mime_provider_lookup_suffix (ThunarVfsMimeProvider *provider,
+                                        const gchar           *suffix,
+                                        gboolean               ignore_case)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_suffix) (provider, suffix, ignore_case);
+}
+
+/**
+ * thunar_vfs_mime_provider_lookup_glob:
+ * @provider : a #ThunarVfsMimeProvider.
+ * @filename : a filename.
+ *
+ * Return value: a pointer to the MIME type or %NULL.
+ **/
+static inline const gchar*
+thunar_vfs_mime_provider_lookup_glob (ThunarVfsMimeProvider *provider,
+                                      const gchar           *filename)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_glob) (provider, filename);
+}
+
+/**
+ * thunar_vfs_mime_provider_lookup_alias:
+ * @provider : a #ThunarVfsMimeProvider.
+ * @alias    : a valid mime type.
+ *
+ * Unaliases the @alias using the alias table found in @provider.
+ *
+ * Return value: the unaliased mime type or %NULL if @alias
+ *               is not a valid mime type alias.
+ */
+static inline const gchar*
+thunar_vfs_mime_provider_lookup_alias (ThunarVfsMimeProvider *provider,
+                                       const gchar           *alias)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_alias) (provider, alias);
+}
+
+/**
+ * thunar_vfs_mime_provider_lookup_parents:
+ * @provider    : a #ThunarVfsMimeProvider.
+ * @mime_type   : a valid mime type.
+ * @parents     : buffer to store the parents to.
+ * @max_parents : the maximum number of parents that should be stored to @parents.
+ *
+ * Looks up up to @max_parents parent types of @mime_type in @provider and
+ * stores them to @parents. Returns the list of mime parents.
+ *
+ * Return value: the list of mime parents.
+ **/
+static inline guint
+thunar_vfs_mime_provider_lookup_parents (ThunarVfsMimeProvider *provider,
+                                         const gchar           *mime_type,
+                                         gchar                **parents,
+                                         guint                  max_parents)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->lookup_parents) (provider, mime_type, parents, max_parents);
+}
+
+/**
+ * thunar_vfs_mime_provider_get_stop_characters:
+ * @provider : a #ThunarVfsMimeProvider.
+ *
+ * Returns the list of stop characters for all suffix entries in @provider as
+ * a #GList of #gunichar<!---->s. The caller is responsible to free the list
+ * using g_list_free().
+ *
+ * Return value: the list of stop characters for the suffix entries in @provider.
+ **/
+static inline GList*
+thunar_vfs_mime_provider_get_stop_characters (ThunarVfsMimeProvider *provider)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->get_stop_characters) (provider);
+}
+
+/**
+ * thunar_vfs_mime_provider_get_max_buffer_extents:
+ * @provider : a #ThunarVfsMimeProvider.
+ *
+ * Returns the max buffer extents required for a data lookup in @provider.
+ *
+ * Return value: the max buffer extents for @provider.
+ **/
+static inline gsize
+thunar_vfs_mime_provider_get_max_buffer_extents (ThunarVfsMimeProvider *provider)
+{
+  return (*THUNAR_VFS_MIME_PROVIDER_GET_CLASS (provider)->get_max_buffer_extents) (provider);
+}
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_PROVIDER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,118 @@
+/* $Id: thunar-vfs-mime-sniffer.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Based on code initially written by James Youngman <jay at gnu.org>
+ * and Pavel Cisler <pavel at eazel.com>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-mime-sniffer.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/**
+ * thunar_vfs_mime_sniffer_looks_like_text:
+ * @data   : the input data (most probably file content).
+ * @length : the number of bytes in @data.
+ *
+ * Checks whether @data can be considered valid text, e.g.
+ * valid UTF-8 or valid multi-byte string. If so, %TRUE is
+ * returned, else %FALSE is returned.
+ *
+ * Return value: %TRUE if @data looks like text, else %FALSE.
+ **/
+gboolean
+thunar_vfs_mime_sniffer_looks_like_text (const gchar *data,
+                                         gsize        length)
+{
+  const gchar *end;
+#ifdef HAVE_MBRTOWC
+  const gchar *send;
+  const gchar *src;
+  mbstate_t    ms;
+  wchar_t      wc;
+  gsize        wlen;
+#endif
+  gint         remaining;
+
+  /* check if we have valid UTF8 here */
+  if (!g_utf8_validate (data, length, &end))
+    {
+      /* Check whether the string was truncated in the middle of a valid
+       * UTF8 character, or if we really have an invalid UTF8 string.
+       */
+      remaining = length - (end - data);
+      if (g_utf8_get_char_validated (end, remaining) == -2)
+        return TRUE;
+
+#ifdef HAVE_MBRTOWC
+      /* let's see, maybe we have a valid multi-byte text here */
+      memset (&ms, 0, sizeof (ms));
+      for (src = data, send = data + length; src < send; src += wlen)
+        {
+          /* Don't allow embedded zeros in textfiles */
+          if (*src == '\0')
+            return FALSE;
+
+          /* check for illegal mutli-byte sequence */
+          wlen = mbrtowc (&wc, src, send - src, &ms);
+          if (G_UNLIKELY (wlen == (gsize) (-1)))
+            return FALSE;
+
+          /* Check for incomplete multi-byte character before
+           * end. Probably cut off char which is ok.
+           */
+          if (wlen == (gsize) (-2))
+            return TRUE;
+
+          /* Don't allow embedded zeros in textfiles */
+          if (G_UNLIKELY (wlen == 0))
+            return FALSE;
+
+          /* Check for neither printable or whitespace */
+          if (!iswspace (wc) && !iswprint (wc))
+            return FALSE;
+        }
+#endif
+    }
+
+  return TRUE;
+}
+
+
+
+#define __THUNAR_VFS_MIME_SNIFFER_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mime-sniffer.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,37 @@
+/* $Id: thunar-vfs-mime-sniffer.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_MIME_SNIFFER_H__
+#define __THUNAR_VFS_MIME_SNIFFER_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS;
+
+gboolean thunar_vfs_mime_sniffer_looks_like_text (const gchar *data,
+                                                  gsize        length) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MIME_SNIFFER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,233 @@
+/* $Id: thunar-vfs-mkdir-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-mkdir-job.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_mkdir(path, mode) (mkdir ((path), (mode)))
+#define g_unmkdir(path) (unmkdir ((path)))
+#endif
+
+
+
+static void thunar_vfs_mkdir_job_class_init (ThunarVfsMkdirJobClass *klass);
+static void thunar_vfs_mkdir_job_finalize   (GObject                *object);
+static void thunar_vfs_mkdir_job_execute    (ThunarVfsJob           *job);
+
+
+
+struct _ThunarVfsMkdirJobClass
+{
+  ThunarVfsInteractiveJobClass __parent__;
+};
+
+struct _ThunarVfsMkdirJob
+{
+  ThunarVfsInteractiveJob __parent__;
+  GList                  *path_list;
+};
+
+
+
+static GObjectClass *thunar_vfs_mkdir_job_parent_class;
+
+
+
+GType
+thunar_vfs_mkdir_job_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsMkdirJobClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_mkdir_job_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsMkdirJob),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_INTERACTIVE_JOB,
+                                     "ThunarVfsMkdirJob", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_mkdir_job_class_init (ThunarVfsMkdirJobClass *klass)
+{
+  ThunarVfsJobClass *thunarvfs_job_class;
+  GObjectClass      *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_mkdir_job_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_mkdir_job_finalize;
+
+  thunarvfs_job_class = THUNAR_VFS_JOB_CLASS (klass);
+  thunarvfs_job_class->execute = thunar_vfs_mkdir_job_execute;
+}
+
+
+
+static void
+thunar_vfs_mkdir_job_finalize (GObject *object)
+{
+  ThunarVfsMkdirJob *mkdir_job = THUNAR_VFS_MKDIR_JOB (object);
+
+  /* release the path list */
+  thunar_vfs_path_list_free (mkdir_job->path_list);
+
+  (*G_OBJECT_CLASS (thunar_vfs_mkdir_job_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_mkdir_job_execute (ThunarVfsJob *job)
+{
+  ThunarVfsMkdirJob *mkdir_job = THUNAR_VFS_MKDIR_JOB (job);
+  gdouble            percent;
+  GError            *error;
+  gchar             *absolute_path;
+  gchar             *display_name;
+  guint              completed = 0;
+  guint              total;
+  GList             *directories = NULL;
+  GList             *lp;
+
+  /* determine the total number of directories to create */
+  total = g_list_length (mkdir_job->path_list);
+
+  /* process all directories */
+  for (lp = mkdir_job->path_list; lp != NULL; lp = lp->next)
+    {
+      /* check if the job was cancelled */
+      if (thunar_vfs_job_cancelled (job))
+        break;
+
+      /* update the progress message */
+      display_name = g_filename_display_name (thunar_vfs_path_get_name (lp->data));
+      thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (mkdir_job), display_name);
+      g_free (display_name);
+
+      /* determine the absolute path */
+      absolute_path = thunar_vfs_path_dup_string (lp->data);
+
+      /* try to create the target directory */
+      if (g_mkdir (absolute_path, 0755) < 0)
+        {
+          /* generate an error describing the problem */
+          display_name = g_filename_display_name (absolute_path);
+          error = g_error_new (G_FILE_ERROR, g_file_error_from_errno (errno),
+                               _("Unable to create directory `%s': %s"),
+                               display_name, g_strerror (errno));
+          g_free (display_name);
+
+          /* notify theuser about the problem and cancel the job */
+          thunar_vfs_job_error (job, error);
+          thunar_vfs_job_cancel (job);
+          g_error_free (error);
+        }
+      else
+        {
+          /* feed a "created" event for the new directory */
+          thunar_vfs_monitor_feed (THUNAR_VFS_INTERACTIVE_JOB (mkdir_job)->monitor, THUNAR_VFS_MONITOR_EVENT_CREATED, lp->data);
+
+          /* add the path to the list of successfully created directories */
+          directories = g_list_prepend (directories, lp->data);
+        }
+
+      /* update the progress status */
+      percent = (++completed * 100.0) / total;
+      percent = CLAMP (percent, 0.0, 100.0);
+      thunar_vfs_interactive_job_percent (THUNAR_VFS_INTERACTIVE_JOB (mkdir_job), percent);
+
+      /* release the absolute path */
+      g_free (absolute_path);
+    }
+
+  /* emit the "new-files" signal if we have created any directories */
+  if (G_LIKELY (directories != NULL))
+    {
+      thunar_vfs_interactive_job_new_files (THUNAR_VFS_INTERACTIVE_JOB (mkdir_job), directories);
+      g_list_free (directories);
+    }
+}
+
+
+
+/**
+ * thunar_vfs_mkdir_job_new:
+ * @path_list : the list of #ThunarVfsPath<!---->s to the directories that should be created.
+ * @error     : return location for errors or %NULL.
+ *
+ * Allocates a new #ThunarVfsMkdirJob, that creates directories for all #ThunarVfsPath<!---->s
+ * listed in @path_list.
+ *
+ * The caller is responsible to free the returned object using g_object_unref() when
+ * no longer needed.
+ *
+ * Return value: the newly allocated #ThunarVfsMkdirJob or %NULL on error.
+ **/
+ThunarVfsJob*
+thunar_vfs_mkdir_job_new (GList   *path_list,
+                          GError **error)
+{
+  ThunarVfsMkdirJob *mkdir_job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate the new job */
+  mkdir_job = g_object_new (THUNAR_VFS_TYPE_MKDIR_JOB, NULL);
+  mkdir_job->path_list = thunar_vfs_path_list_copy (path_list);
+
+  return THUNAR_VFS_JOB (mkdir_job);
+}
+
+
+
+#define __THUNAR_VFS_MKDIR_JOB_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-mkdir-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,50 @@
+/* $Id: thunar-vfs-mkdir-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_MKDIR_MKDIR_H__
+#define __THUNAR_VFS_MKDIR_MKDIR_H__
+
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMkdirJobClass ThunarVfsMkdirJobClass;
+typedef struct _ThunarVfsMkdirJob      ThunarVfsMkdirJob;
+
+#define THUNAR_VFS_TYPE_MKDIR_JOB            (thunar_vfs_mkdir_job_get_type ())
+#define THUNAR_VFS_MKDIR_JOB(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MKDIR_JOB, ThunarVfsMkdirJob))
+#define THUNAR_VFS_MKDIR_JOB_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MKDIR_JOB, ThunarVfsMkdirJobClass))
+#define THUNAR_VFS_IS_MKDIR_JOB(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MKDIR_JOB))
+#define THUNAR_VFS_IS_MKDIR_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MKDIR_JOB))
+#define THUNAR_VFS_MKDIR_JOB_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MKDIR_JOB, ThunarVfsMkdirJobClass))
+
+GType         thunar_vfs_mkdir_job_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsJob *thunar_vfs_mkdir_job_new      (GList   *path_list,
+                                             GError **error) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MKDIR_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,689 @@
+/* $Id: thunar-vfs-monitor.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_FAM_H
+#include <fam.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <gdk/gdk.h>
+
+#include <thunar-vfs/thunar-vfs-monitor.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/* minimum timer interval (in ms) */
+#define THUNAR_VFS_MONITOR_TIMER_INTERVAL (250)
+
+/* tagging for notifications, so we can make sure that
+ * (slow) FAM events don't override properly feeded events.
+ */
+#define THUNAR_VFS_MONITOR_TAG_FAM  (0)
+#define THUNAR_VFS_MONITOR_TAG_FEED (1)
+
+
+
+typedef struct _ThunarVfsMonitorNotification ThunarVfsMonitorNotification;
+
+
+
+static void     thunar_vfs_monitor_class_init           (ThunarVfsMonitorClass *klass);
+static void     thunar_vfs_monitor_init                 (ThunarVfsMonitor      *monitor);
+static void     thunar_vfs_monitor_finalize             (GObject               *object);
+static void     thunar_vfs_monitor_queue_notification   (ThunarVfsMonitor      *monitor,
+                                                         gint                   id,
+                                                         gint                   tag,
+                                                         ThunarVfsMonitorEvent  event,
+                                                         const gchar           *filename);
+static gboolean thunar_vfs_monitor_notifications_timer  (gpointer               user_data);
+#ifdef HAVE_LIBFAM
+static void     thunar_vfs_monitor_fam_cancel           (ThunarVfsMonitor      *monitor);
+static gboolean thunar_vfs_monitor_fam_watch            (GIOChannel            *channel,
+                                                         GIOCondition           condition,
+                                                         gpointer               user_data);
+#endif
+
+
+
+struct _ThunarVfsMonitorClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsMonitor
+{
+  GObject __parent__;
+
+  GMemChunk                    *handle_chunk;
+  GList                        *handles;
+
+  gint                          notifications_timer_id;
+  ThunarVfsMonitorNotification *notifications;
+
+  /* the monitor lock and cond */
+  GCond                        *cond;
+  GMutex                       *lock;
+
+  /* the current handle id */
+  gint                          current_id;
+
+#ifdef HAVE_LIBFAM
+  /* FAM/Gamin support */
+  FAMConnection                 fc;
+  gint                          fc_watch_id;
+#endif
+};
+
+struct _ThunarVfsMonitorHandle
+{
+  ThunarVfsMonitorCallback callback;
+  gpointer                 user_data;
+  ThunarVfsPath           *path;
+  gboolean                 directory;
+
+  union
+  {
+#ifdef HAVE_LIBFAM
+    FAMRequest             fr;
+#endif
+    gint                   id;
+  };
+};
+
+struct _ThunarVfsMonitorNotification
+{
+  gint                          id;       /* the unique id of the handle */
+  gint                          tag;      /* the notification source tag */
+  gchar                        *filename; /* the name/path of the file that changed or NULL if the handle path should be used */
+  ThunarVfsMonitorEvent         event;    /* the type of the event */
+  ThunarVfsMonitorNotification *next;     /* the pointer to the next notification in the queue */
+};
+
+
+
+G_DEFINE_TYPE (ThunarVfsMonitor, thunar_vfs_monitor, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_vfs_monitor_class_init (ThunarVfsMonitorClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_monitor_finalize;
+}
+
+
+
+static void
+thunar_vfs_monitor_init (ThunarVfsMonitor *monitor)
+{
+  /* initialize the monitor */
+  monitor->notifications_timer_id = -1;
+  monitor->cond = g_cond_new ();
+  monitor->lock = g_mutex_new ();
+
+#ifdef HAVE_LIBFAM
+  if (FAMOpen2 (&monitor->fc, PACKAGE_NAME) == 0)
+    {
+      GIOChannel *channel;
+
+      channel = g_io_channel_unix_new (FAMCONNECTION_GETFD (&monitor->fc));
+      monitor->fc_watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP | G_IO_IN,
+                                             thunar_vfs_monitor_fam_watch, monitor);
+      g_io_channel_unref (channel);
+
+#ifdef HAVE_FAMNOEXISTS
+      /* luckily gamin offers a way to avoid the FAMExists events */
+      FAMNoExists (&monitor->fc);
+#endif
+    }
+  else
+    {
+      monitor->fc_watch_id = -1;
+    }
+#endif
+
+  /* allocate the memory chunk for the handles */
+  monitor->handle_chunk = g_mem_chunk_create (ThunarVfsMonitorHandle, 64, G_ALLOC_AND_FREE);
+}
+
+
+
+static void
+thunar_vfs_monitor_finalize (GObject *object)
+{
+  ThunarVfsMonitorNotification *notification;
+  ThunarVfsMonitor             *monitor = THUNAR_VFS_MONITOR (object);
+  GList                        *lp;
+
+#ifdef HAVE_LIBFAM
+  if (monitor->fc_watch_id >= 0)
+    thunar_vfs_monitor_fam_cancel (monitor);
+#endif
+
+  /* drop the notifications timer source */
+  if (G_UNLIKELY (monitor->notifications_timer_id >= 0))
+    g_source_remove (monitor->notifications_timer_id);
+
+  /* drop all pending notifications */
+  while (monitor->notifications != NULL)
+    {
+      notification = monitor->notifications;
+      monitor->notifications = notification->next;
+      g_free (notification);
+    }
+
+  /* drop all handles */
+  for (lp = monitor->handles; lp != NULL; lp = lp->next)
+    thunar_vfs_path_unref (((ThunarVfsMonitorHandle *) lp->data)->path);
+  g_list_free (monitor->handles);
+
+  /* release the memory chunk */
+  g_mem_chunk_destroy (monitor->handle_chunk);
+
+  /* release the monitor lock */
+  g_mutex_free (monitor->lock);
+  g_cond_free (monitor->cond);
+
+  (*G_OBJECT_CLASS (thunar_vfs_monitor_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_monitor_queue_notification (ThunarVfsMonitor     *monitor,
+                                       gint                  id,
+                                       gint                  tag,
+                                       ThunarVfsMonitorEvent event,
+                                       const gchar          *filename)
+{
+  ThunarVfsMonitorNotification *notification;
+  gint                          length;
+
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (id > 0 && id <= monitor->current_id);
+
+  /* check if we already have a matching notification */
+  for (notification = monitor->notifications; notification != NULL; notification = notification->next)
+    if (notification->id == id && strcmp (filename, notification->filename) == 0)
+      {
+        if (tag >= notification->tag)
+          {
+            notification->tag = tag;
+            notification->event = event;
+          }
+        return;
+      }
+
+  /* allocate a new notification */
+  if (G_LIKELY (filename != NULL))
+    {
+      length = strlen (filename);
+      notification = g_malloc (sizeof (ThunarVfsMonitorNotification) + length + 1);
+      notification->filename = ((gchar *) notification) + sizeof (ThunarVfsMonitorNotification);
+      memcpy (notification->filename, filename, length + 1);
+    }
+  else
+    {
+      notification = g_new (ThunarVfsMonitorNotification, 1);
+      notification->filename = NULL;
+    }
+
+  /* prepend the notification to the queue */
+  notification->id = id;
+  notification->tag = tag;
+  notification->next = monitor->notifications;
+  notification->event = event;
+  monitor->notifications = notification;
+
+  /* schedule the notification timer if not already active */
+  if (G_UNLIKELY (monitor->notifications_timer_id < 0))
+    monitor->notifications_timer_id = g_timeout_add (THUNAR_VFS_MONITOR_TIMER_INTERVAL, thunar_vfs_monitor_notifications_timer, monitor);
+}
+
+
+
+static gboolean
+thunar_vfs_monitor_notifications_timer (gpointer user_data)
+{
+  ThunarVfsMonitorNotification *notification;
+  ThunarVfsMonitorHandle       *handle;
+  ThunarVfsMonitor             *monitor = THUNAR_VFS_MONITOR (user_data);
+  ThunarVfsPath                *path;
+  GList                        *lp;
+
+  /* take an additional reference on the monitor, * so we don't accidently
+   * release the monitor while processing the notifications.
+   */
+  g_object_ref (G_OBJECT (monitor));
+
+  /* aquire the lock on the monitor */
+  g_mutex_lock (monitor->lock);
+
+  /* reset the timer id */
+  monitor->notifications_timer_id = -1;
+
+  /* process all pending notifications */
+  while (monitor->notifications != NULL)
+    {
+      /* grab the first notification from the queue */
+      notification = monitor->notifications;
+      monitor->notifications = notification->next;
+
+      /* lookup the handle for the current notification */
+      for (lp = monitor->handles; lp != NULL; lp = lp->next)
+        if (((ThunarVfsMonitorHandle *) lp->data)->id == notification->id)
+          break;
+
+      /* check if there's a valid handle */
+      if (G_LIKELY (lp != NULL))
+        {
+          /* grab the handle pointer */
+          handle = lp->data;
+
+          /* determine the event path for the notification */
+          if (G_UNLIKELY (notification->filename == NULL))
+            path = thunar_vfs_path_ref (handle->path);
+          else if (G_UNLIKELY (*notification->filename != '/'))
+            path = thunar_vfs_path_relative (handle->path, notification->filename);
+          else
+            path = thunar_vfs_path_new (notification->filename, NULL);
+
+          /* invoke the callback (w/o the monitor lock) */
+          GDK_THREADS_ENTER ();
+          g_mutex_unlock (monitor->lock);
+          (*handle->callback) (monitor, handle, notification->event, handle->path, path, handle->user_data);
+          g_mutex_lock (monitor->lock);
+          GDK_THREADS_LEAVE ();
+
+          /* cleanup */
+          thunar_vfs_path_unref (path);
+        }
+
+      /* release the current notification */
+      g_free (notification);
+    }
+
+  /* notify all waiting parties */
+  g_cond_broadcast (monitor->cond);
+
+  /* release the lock on the monitor */
+  g_mutex_unlock (monitor->lock);
+
+  /* drop the additional reference on the monitor */
+  g_object_unref (G_OBJECT (monitor));
+
+  /* drop the timer source */
+  return FALSE;
+}
+
+
+
+#ifdef HAVE_LIBFAM
+static void
+thunar_vfs_monitor_fam_cancel (ThunarVfsMonitor *monitor)
+{
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (monitor->fc_watch_id >= 0);
+
+  /* close the FAM connection */
+  FAMClose (&monitor->fc);
+
+  /* remove the I/O watch */
+  g_source_remove (monitor->fc_watch_id);
+  monitor->fc_watch_id = -1;
+}
+
+
+
+static gboolean
+thunar_vfs_monitor_fam_watch (GIOChannel  *channel,
+                              GIOCondition condition,
+                              gpointer     user_data)
+{
+  ThunarVfsMonitorEvent event;
+  ThunarVfsMonitor     *monitor = THUNAR_VFS_MONITOR (user_data);
+  FAMEvent              fe;
+
+  /* check for an error on the FAM connection */
+  if (G_UNLIKELY ((condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) != 0))
+    {
+error:
+      /* terminate the FAM connection */
+      thunar_vfs_monitor_fam_cancel (monitor);
+
+      /* thats it, no more FAM */
+      return FALSE;
+    }
+
+  /* process all pending FAM events */
+  while (FAMPending (&monitor->fc))
+    {
+      /* query the next pending event */
+      if (G_UNLIKELY (FAMNextEvent (&monitor->fc, &fe) < 0))
+        goto error;
+
+      /* translate the event code */
+      switch (fe.code)
+        {
+        case FAMChanged:
+          event = THUNAR_VFS_MONITOR_EVENT_CHANGED;
+          break;
+
+        case FAMCreated:
+          event = THUNAR_VFS_MONITOR_EVENT_CREATED;
+          break;
+
+        case FAMDeleted:
+          event = THUNAR_VFS_MONITOR_EVENT_DELETED;
+          break;
+
+        default:
+          /* ignore all other events */
+          continue;
+        }
+
+      /* schedule a notification for the monitor */
+      g_mutex_lock (monitor->lock);
+      thunar_vfs_monitor_queue_notification (monitor, fe.fr.reqnum, THUNAR_VFS_MONITOR_TAG_FAM, event, fe.filename);
+      g_mutex_unlock (monitor->lock);
+    }
+
+  return TRUE;
+}
+#endif
+
+
+
+/**
+ * thunar_vfs_monitor_get_default:
+ *
+ * Returns the shared #ThunarVfsMonitor instance. The caller
+ * is responsible to call g_object_unref() on the returned
+ * object when no longer needed.
+ *
+ * Return value: a reference to the shared #ThunarVfsMonitor
+ *               instance.
+ **/
+ThunarVfsMonitor*
+thunar_vfs_monitor_get_default (void)
+{
+  static ThunarVfsMonitor *monitor = NULL;
+
+  if (G_UNLIKELY (monitor == NULL))
+    {
+      monitor = g_object_new (THUNAR_VFS_TYPE_MONITOR, NULL);
+      g_object_add_weak_pointer (G_OBJECT (monitor), (gpointer) &monitor);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (monitor));
+    }
+
+  return monitor;
+}
+
+
+
+/**
+ * thunar_vfs_monitor_add_directory:
+ * @monitor   : a #ThunarVfsMonitor.
+ * @path      : the #ThunarVfsPath of the directory that should be watched.
+ * @callback  : the callback function to invoke.
+ * @user_data : additional data to pass to @callback.
+ *
+ * Return value: the #ThunarVfsMonitorHandle for the new watch.
+ **/
+ThunarVfsMonitorHandle*
+thunar_vfs_monitor_add_directory (ThunarVfsMonitor        *monitor,
+                                  ThunarVfsPath           *path,
+                                  ThunarVfsMonitorCallback callback,
+                                  gpointer                 user_data)
+{
+  ThunarVfsMonitorHandle *handle;
+#ifdef HAVE_LIBFAM
+  gchar                  *absolute_path;
+#endif
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MONITOR (monitor), NULL);
+  g_return_val_if_fail (callback != NULL, NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  /* acquire the monitor lock */
+  g_mutex_lock (monitor->lock);
+
+  /* allocate a new handle */
+  handle = g_chunk_new (ThunarVfsMonitorHandle, monitor->handle_chunk);
+  handle->path = thunar_vfs_path_ref (path);
+  handle->callback = callback;
+  handle->user_data = user_data;
+  handle->directory = TRUE;
+  handle->id = ++monitor->current_id;
+
+#ifdef HAVE_LIBFAM
+  if (G_LIKELY (monitor->fc_watch_id >= 0))
+    {
+      /* schedule the watch on the FAM daemon */
+      absolute_path = thunar_vfs_path_dup_string (path);
+      if (FAMMonitorDirectory2 (&monitor->fc, absolute_path, &handle->fr) < 0)
+        thunar_vfs_monitor_fam_cancel (monitor);
+      g_free (absolute_path);
+    }
+#endif
+
+  /* add the handle to the monitor */
+  monitor->handles = g_list_prepend (monitor->handles, handle);
+
+  /* release the monitor lock */
+  g_mutex_unlock (monitor->lock);
+
+  return handle;
+}
+
+
+
+/**
+ * thunar_vfs_monitor_add_file:
+ * @monitor   : a #ThunarVfsMonitor.
+ * @path      : the #ThunarVfsPath of the file that should be watched.
+ * @callback  : the callback function to invoke.
+ * @user_data : additional data to pass to @callback.
+ *
+ * Return value: the #ThunarVfsMonitorHandle for the new watch.
+ **/
+ThunarVfsMonitorHandle*
+thunar_vfs_monitor_add_file (ThunarVfsMonitor        *monitor,
+                             ThunarVfsPath           *path,
+                             ThunarVfsMonitorCallback callback,
+                             gpointer                 user_data)
+{
+  ThunarVfsMonitorHandle *handle;
+#ifdef HAVE_LIBFAM
+  gchar                  *absolute_path;
+#endif
+
+  g_return_val_if_fail (THUNAR_VFS_IS_MONITOR (monitor), NULL);
+  g_return_val_if_fail (callback != NULL, NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  /* acquire the monitor lock */
+  g_mutex_lock (monitor->lock);
+
+  /* allocate a new handle */
+  handle = g_chunk_new (ThunarVfsMonitorHandle, monitor->handle_chunk);
+  handle->path = thunar_vfs_path_ref (path);
+  handle->callback = callback;
+  handle->user_data = user_data;
+  handle->directory = FALSE;
+  handle->id = ++monitor->current_id;
+
+#ifdef HAVE_LIBFAM
+  if (G_LIKELY (monitor->fc_watch_id >= 0))
+    {
+      /* schedule the watch on the FAM daemon */
+      absolute_path = thunar_vfs_path_dup_string (path);
+      if (FAMMonitorFile2 (&monitor->fc, absolute_path, &handle->fr) < 0)
+        thunar_vfs_monitor_fam_cancel (monitor);
+      g_free (absolute_path);
+    }
+#endif
+
+  /* add the handle to the monitor */
+  monitor->handles = g_list_prepend (monitor->handles, handle);
+
+  /* release the monitor lock */
+  g_mutex_unlock (monitor->lock);
+
+  return handle;
+}
+
+
+
+/**
+ * thunar_vfs_monitor_remove:
+ * @monitor : a #ThunarVfsMonitor.
+ * @handle  : a valid #ThunarVfsMonitorHandle for @monitor.
+ *
+ * Removes @handle from @monitor.
+ **/
+void
+thunar_vfs_monitor_remove (ThunarVfsMonitor       *monitor,
+                           ThunarVfsMonitorHandle *handle)
+{
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (g_list_find (monitor->handles, handle) != NULL);
+
+  /* acquire the monitor lock */
+  g_mutex_lock (monitor->lock);
+
+#ifdef HAVE_LIBFAM
+  /* drop the FAM request from the daemon */
+  if (G_LIKELY (monitor->fc_watch_id >= 0))
+    {
+      if (FAMCancelMonitor (&monitor->fc, &handle->fr) < 0)
+        thunar_vfs_monitor_fam_cancel (monitor);
+    }
+#endif
+
+  /* unlink the handle */
+  monitor->handles = g_list_remove (monitor->handles, handle);
+
+  /* free the handle */
+  thunar_vfs_path_unref (handle->path);
+  g_mem_chunk_free (monitor->handle_chunk, handle);
+
+  /* release the monitor lock */
+  g_mutex_unlock (monitor->lock);
+}
+
+
+
+/**
+ * thunar_vfs_monitor_feed:
+ * @monitor : a #ThunarVfsMonitor.
+ * @event   : the #ThunarVfsMonitorEvent that should be emulated.
+ * @path    : the #ThunarVfsPath on which @event took place.
+ *
+ * Explicitly injects the given @event into @monitor<!---->s event
+ * processing logic.
+ **/
+void
+thunar_vfs_monitor_feed (ThunarVfsMonitor     *monitor,
+                         ThunarVfsMonitorEvent event,
+                         ThunarVfsPath        *path)
+{
+  ThunarVfsMonitorHandle *handle;
+  ThunarVfsPath          *parent;
+  GList                  *lp;
+
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+  g_return_if_fail (event == THUNAR_VFS_MONITOR_EVENT_CHANGED
+                 || event == THUNAR_VFS_MONITOR_EVENT_CREATED
+                 || event == THUNAR_VFS_MONITOR_EVENT_DELETED);
+
+  /* acquire the lock on the monitor */
+  g_mutex_lock (monitor->lock);
+
+  /* schedule notifications for all handles affected directly by this event */
+  for (lp = monitor->handles; lp != NULL; lp = lp->next)
+    {
+      handle = (ThunarVfsMonitorHandle *) lp->data;
+      if (thunar_vfs_path_equal (handle->path, path))
+        thunar_vfs_monitor_queue_notification (monitor, handle->id, THUNAR_VFS_MONITOR_TAG_FEED, event, NULL);
+    }
+
+  /* schedule notifications for all directory handles affected indirectly */
+  if (G_LIKELY (!thunar_vfs_path_is_root (path)))
+    {
+      parent = thunar_vfs_path_get_parent (path);
+      for (lp = monitor->handles; lp != NULL; lp = lp->next)
+        {
+          handle = (ThunarVfsMonitorHandle *) lp->data;
+          if (handle->directory && thunar_vfs_path_equal (handle->path, parent))
+            thunar_vfs_monitor_queue_notification (monitor, handle->id, THUNAR_VFS_MONITOR_TAG_FEED, event, thunar_vfs_path_get_name (path));
+        }
+    }
+
+  /* release the lock on the monitor */
+  g_mutex_unlock (monitor->lock);
+}
+
+
+
+/**
+ * thunar_vfs_monitor_wait:
+ * @monitor : a #ThunarVfsMonitor.
+ *
+ * Suspends the execution of the current thread until the
+ * @monitor has processed all currently pending events. The
+ * calling thread must own a reference on the @monitor!
+ *
+ * This method should never be called from the main thread
+ * or you'll lock up your application!!
+ **/
+void
+thunar_vfs_monitor_wait (ThunarVfsMonitor *monitor)
+{
+  static const GTimeVal tv = { 2, 0 };
+
+  g_return_if_fail (THUNAR_VFS_IS_MONITOR (monitor));
+
+  g_mutex_lock (monitor->lock);
+  while (g_atomic_int_get (&monitor->notifications_timer_id) >= 0)
+    g_cond_timed_wait (monitor->cond, monitor->lock, (GTimeVal *) &tv);
+  g_mutex_unlock (monitor->lock);
+}
+
+
+
+#define __THUNAR_VFS_MONITOR_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-monitor.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,106 @@
+/* $Id: thunar-vfs-monitor.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_MONITOR_H__
+#define __THUNAR_VFS_MONITOR_H__
+
+#include <thunar-vfs/thunar-vfs-path.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsMonitorClass ThunarVfsMonitorClass;
+typedef struct _ThunarVfsMonitor      ThunarVfsMonitor;
+
+#define THUNAR_VFS_TYPE_MONITOR             (thunar_vfs_monitor_get_type ())
+#define THUNAR_VFS_MONITOR(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_MONITOR, ThunarVfsMonitor))
+#define THUNAR_VFS_MONITOR_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_MONITOR, ThunarVfsMonitorClass))
+#define THUNAR_VFS_IS_MONITOR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_MONITOR))
+#define THUNAR_VFS_IS_MONITOR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_MONITOR))
+#define THUNAR_VFS_MONITOR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_MONITOR, ThunarVfsMonitorClass))
+
+/**
+ * ThunarVfsMonitorEvent:
+ * @THUNAR_VFS_MONITOR_EVENT_CHANGED : a file or directory was changed.
+ * @THUNAR_VFS_MONITOR_EVENT_CREATED : a file or directory was created.
+ * @THUNAR_VFS_MONITOR_EVENT_DELETED : a file or directory was deleted.
+ *
+ * Describes an event that occurred on a #ThunarVfsMonitorHandle.
+ **/
+typedef enum
+{
+  THUNAR_VFS_MONITOR_EVENT_CHANGED,
+  THUNAR_VFS_MONITOR_EVENT_CREATED,
+  THUNAR_VFS_MONITOR_EVENT_DELETED,
+} ThunarVfsMonitorEvent;
+
+/**
+ * ThunarVfsMonitorHandle:
+ *
+ * A handle on a file system entity, which is currently watched
+ * by a #ThunarVfsMonitor.
+ **/
+typedef struct _ThunarVfsMonitorHandle ThunarVfsMonitorHandle;
+
+/**
+ * ThunarVfsMonitorCallback:
+ * @monitor     : a #ThunarVfsMonitor.
+ * @handle      : a #ThunarVfsMonitorHandle.
+ * @event       : the event that occurred.
+ * @handle_path : the #ThunarVfsPath that was specified when registering the @handle.
+ * @event_path  : the #ThunarVfsPath on which the @event occurred.
+ * @user_data   : the user data that was specified when registering the @handle with the @monitor.
+ *
+ * The prototype for callback functions that will be called by a #ThunarVfsMonitor
+ * whenever one of its associated #ThunarVfsMonitorHandle<!---->s notice a
+ * change.
+ **/
+typedef void (*ThunarVfsMonitorCallback)  (ThunarVfsMonitor       *monitor,
+                                           ThunarVfsMonitorHandle *handle,
+                                           ThunarVfsMonitorEvent   event,
+                                           ThunarVfsPath          *handle_path,
+                                           ThunarVfsPath          *event_path,
+                                           gpointer                user_data);
+
+GType                   thunar_vfs_monitor_get_type       (void) G_GNUC_CONST;
+
+ThunarVfsMonitor       *thunar_vfs_monitor_get_default    (void);
+
+ThunarVfsMonitorHandle *thunar_vfs_monitor_add_directory  (ThunarVfsMonitor        *monitor,
+                                                           ThunarVfsPath           *path,
+                                                           ThunarVfsMonitorCallback callback,
+                                                           gpointer                 user_data);
+
+ThunarVfsMonitorHandle *thunar_vfs_monitor_add_file       (ThunarVfsMonitor        *monitor,
+                                                           ThunarVfsPath           *path,
+                                                           ThunarVfsMonitorCallback callback,
+                                                           gpointer                 user_data);
+
+void                    thunar_vfs_monitor_remove         (ThunarVfsMonitor        *monitor,
+                                                           ThunarVfsMonitorHandle  *handle);
+
+void                    thunar_vfs_monitor_feed           (ThunarVfsMonitor        *monitor,
+                                                           ThunarVfsMonitorEvent    event,
+                                                           ThunarVfsPath           *path);
+
+void                    thunar_vfs_monitor_wait           (ThunarVfsMonitor        *monitor);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_MONITOR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,1037 @@
+/* $Id: thunar-vfs-path.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/* implement thunar-vfs-path's inline functions */
+#define G_IMPLEMENT_INLINES 1
+#define __THUNAR_VFS_PATH_C__
+#include <thunar-vfs/thunar-vfs-path.h>
+
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define THUNAR_VFS_PATH_MASK (0xffu << ((sizeof (guint) - 1) * 8))
+#define THUNAR_VFS_PATH_ROOT (0x2fu)
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+#define THUNAR_VFS_PATH_MASK (0xffu)
+#define THUNAR_VFS_PATH_ROOT (0x2fu << ((sizeof (guint) - 1) * 8))
+#else
+#error "Unsupported endianess"
+#endif
+
+
+
+static guint thunar_vfs_path_escape_uri_length  (const ThunarVfsPath *path);
+static guint thunar_vfs_path_escape_uri         (const ThunarVfsPath *path,
+                                                 gchar               *buffer);
+
+
+
+/* A table of the ASCII chars from space (32) to DEL (127) */
+static const guchar ACCEPTABLE_URI_CHARS[96] = {
+  /*      !    "    #    $    %    &    '    (    )    *    +    ,    -    .    / */ 
+  0x00,0x3F,0x20,0x20,0x28,0x00,0x2C,0x3F,0x3F,0x3F,0x3F,0x2A,0x28,0x3F,0x3F,0x1C,
+  /* 0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ? */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x38,0x20,0x20,0x2C,0x20,0x20,
+  /* @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O */
+  0x38,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
+  /* P    Q    R    S    T    U    V    W    X    Y    Z    [    \    ]    ^    _ */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x20,0x3F,
+  /* `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o */
+  0x20,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
+  /* p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~  DEL */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x3F,0x20
+};
+
+/* List of hexadecimal characters */
+static const gchar HEX_CHARS[16] = "0123456789ABCDEF";
+
+#define ACCEPTABLE_URI_CHAR(c) ((c) >= 32 && (c) < 128 && (ACCEPTABLE_URI_CHARS[(c) - 32] & 0x08))
+
+
+
+#ifndef G_DISABLE_CHECKS
+G_LOCK_DEFINE_STATIC (debug_paths);
+static GList *debug_paths = NULL;
+#endif
+static ThunarVfsPath **home_components;
+static guint           n_home_components;
+
+
+
+static guint
+thunar_vfs_path_escape_uri_length (const ThunarVfsPath *path)
+{
+  const guchar *s;
+  guint         length = 8; /* base size for 'file:///' */
+
+  for (; path->parent != NULL; path = path->parent)
+    {
+      /* prepend a path separator */
+      if (length > 8)
+        length += 1;
+
+      for (s = (const guchar *) thunar_vfs_path_get_name (path); *s != '\0'; ++s)
+        length += ACCEPTABLE_URI_CHAR (*s) ? 1 : 3;
+    }
+
+  return length;
+}
+
+
+
+static guint
+thunar_vfs_path_escape_uri (const ThunarVfsPath *path,
+                            gchar               *buffer)
+{
+  typedef struct _ThunarVfsPathItem
+  {
+    const ThunarVfsPath       *path;
+    struct _ThunarVfsPathItem *next;
+  } ThunarVfsPathItem;
+
+  ThunarVfsPathItem *item;
+  ThunarVfsPathItem *root = NULL;
+  const gchar       *s = "file:///";
+  guchar             c;
+  gchar             *t = buffer + 8;
+
+  /* prepend the 'file:///' string */
+  ((guint32 *) buffer)[0] = ((const guint32 *) s)[0];
+  ((guint32 *) buffer)[1] = ((const guint32 *) s)[1];
+
+  /* generate the path item list (reverse parent relation) */
+  for (; path->parent != NULL; path = path->parent)
+    {
+      item = g_newa (ThunarVfsPathItem, 1);
+      item->path = path;
+      item->next = root;
+      root = item;
+    }
+
+  /* generate the uri */
+  for (item = root; item != NULL; item = item->next)
+    {
+      /* append a '/' character */
+      if (G_LIKELY (item != root))
+        *t++ = '/';
+
+      /* copy the path component name */
+      for (s = thunar_vfs_path_get_name (item->path); *s != '\0'; ++s)
+        {
+          c = *((const guchar *) s);
+          if (!ACCEPTABLE_URI_CHAR (c))
+            {
+              *t++ = '%';
+              *t++ = HEX_CHARS[c >> 4];
+              *t++ = HEX_CHARS[c & 15];
+            }
+          else
+            {
+              *t++ = *s;
+            }
+        }
+    }
+
+  /* zero-terminate the URI */
+  *t = '\0';
+
+  return (t - buffer) + 1;
+}
+
+
+
+GType
+thunar_vfs_path_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      type = g_boxed_type_register_static ("ThunarVfsPath",
+                                           (GBoxedCopyFunc) thunar_vfs_path_ref,
+                                           (GBoxedFreeFunc) thunar_vfs_path_unref);
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunar_vfs_path_new:
+ * @identifier : an URI identifier or an absolute path.
+ * @error      : return location for errors or %NULL.
+ *
+ * Returns a #ThunarVfsPath that represents the given
+ * @identifier or %NULL on error. In the latter case
+ * @error will be set to point to an #GError describing
+ * the problem.
+ * 
+ * The caller is responsible to free the returned
+ * object using thunar_vfs_path_unref() when no
+ * longer needed.
+ *
+ * Return value: the #ThunarVfsPath for @identifier
+ *               or %NULL on error.
+ **/
+ThunarVfsPath*
+thunar_vfs_path_new (const gchar *identifier,
+                     GError     **error)
+{
+  ThunarVfsPath *parent;
+  ThunarVfsPath *path = NULL;
+  const gchar   *s;
+  const gchar   *s1;
+  const gchar   *s2;
+  gchar         *filename;
+  gchar         *t;
+  guint          n;
+
+  /* check if we have an absolute path or an URI */
+  if (G_UNLIKELY (*identifier != '/'))
+    {
+      /* treat the identifier as URI */
+      filename = g_filename_from_uri (identifier, NULL, error);
+      if (G_UNLIKELY (filename == NULL))
+        return NULL;
+    }
+  else
+    {
+      /* the identifier includes an absolute path */
+      filename = (gchar *) identifier;
+    }
+
+  /* start at the root path */
+  path = home_components[0];
+  for (n = 1, s = filename + 1; n < n_home_components; ++n)
+    {
+      /* skip additional slashes */
+      for (; G_UNLIKELY (*s == '/'); ++s)
+        ;
+
+      /* check if we have reached the end of the filename */
+      if (G_UNLIKELY (*s == '\0'))
+        break;
+
+      /* check if the path component equals the next home path component */
+      for (s1 = thunar_vfs_path_get_name (home_components[n]), s2 = s; *s1 != '\0' && *s1 == *s2; ++s1, ++s2)
+        ;
+      if (*s1 != '\0' || (*s2 != '\0' && *s2 != '/'))
+        break;
+
+      /* go on with the next home path component */
+      path = home_components[n];
+      s = s2;
+    }
+
+  /* skip additional slashes */
+  for (; G_UNLIKELY (*s == '/'); ++s)
+    ;
+
+  /* generate the additional path components (if any) */
+  while (*s != '\0')
+    {
+      /* remember the current path as parent path */
+      parent = path;
+
+      /* determine the length of the path component in bytes */
+      for (s1 = s + 1; *s1 != '\0' && *s1 != '/'; ++s1)
+        ;
+      n = (((s1 - s) + sizeof (guint)) / sizeof (guint)) * sizeof (guint);
+
+      /* allocate memory for the new path component */
+      path = g_malloc (sizeof (ThunarVfsPath) + n);
+      path->ref_count = 0;
+      path->parent = thunar_vfs_path_ref (parent);
+
+      /* add the path to the debug list */
+#ifndef G_DISABLE_CHECKS
+      G_LOCK (debug_paths);
+      debug_paths = g_list_prepend (debug_paths, path);
+      G_UNLOCK (debug_paths);
+#endif
+
+      /* zero out the last word to have the name zero-terminated */
+      *(((guint *) (((gchar *) path) + sizeof (ThunarVfsPath) + n)) - 1) = 0;
+
+      /* copy the path component name */
+      for (t = (gchar *) thunar_vfs_path_get_name (path); *s != '\0' && *s != '/'; )
+        *t++ = *s++;
+
+      /* skip additional slashes */
+      for (; G_UNLIKELY (*s == '/'); ++s)
+        ;
+    }
+
+  /* cleanup */
+  if ((const gchar *) filename != identifier)
+    g_free (filename);
+
+  /* return a reference on the path */
+  return thunar_vfs_path_ref (path);
+}
+
+
+
+/**
+ * thunar_vfs_path_get_for_home:
+ *
+ * Returns the #ThunarVfsPath that represents
+ * the current users home directory.
+ *
+ * The caller is responsible to free the
+ * returned object using thunar_vfs_path_unref()
+ * when no longer needed.
+ *
+ * Return value: the #ThunarVfsPath for the 
+ *               current users home directory.
+ **/
+ThunarVfsPath*
+thunar_vfs_path_get_for_home (void)
+{
+  return thunar_vfs_path_ref (home_components[n_home_components - 1]);
+}
+
+
+
+/**
+ * thunar_vfs_path_get_for_root:
+ *
+ * Returns the #ThunarVfsPath that represents the
+ * file systems root directory.
+ *
+ * The caller is responsible to free the returned
+ * object using thunar_vfs_path_unref() when no
+ * longer needed.
+ *
+ * Return value: the #ThunarVfsPath for the file
+ *               systems root directory.
+ **/
+ThunarVfsPath*
+thunar_vfs_path_get_for_root (void)
+{
+  return thunar_vfs_path_ref (home_components[0]);
+}
+
+
+
+/**
+ * thunar_vfs_path_unref:
+ * @path : a #ThunarVfsPath.
+ *
+ * Decreases the reference count on @path and
+ * frees the resources allocated for @path
+ * once the reference count drops to zero.
+ **/
+void
+thunar_vfs_path_unref (ThunarVfsPath *path)
+{
+  ThunarVfsPath *parent;
+
+  while (path != NULL && exo_atomic_dec (&path->ref_count))
+    {
+      /* remember the parent path */
+      parent = path->parent;
+
+      /* remove the path from the debug list */
+#ifndef G_DISABLE_CHECKS
+      G_LOCK (debug_paths);
+      debug_paths = g_list_remove (debug_paths, path);
+      G_UNLOCK (debug_paths);
+#endif
+
+      /* release the path resources */
+      g_free (path);
+
+      /* continue with the parent */
+      path = parent;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_path_hash:
+ * @path_ptr : a #ThunarVfsPath.
+ *
+ * Generates a hash value for the given @path_ptr.
+ *
+ * Return value: the hash value for @path_ptr.
+ **/
+guint
+thunar_vfs_path_hash (gconstpointer path_ptr)
+{
+  const gchar *p = thunar_vfs_path_get_name (path_ptr);
+  guint        h = *p;
+
+  /* hash the last path component (which cannot be empty) */
+  while (*++p != '\0')
+    h = (h << 5) - h + *p;
+
+  return h;
+}
+
+
+
+/**
+ * thunar_vfs_path_equal:
+ * @path_ptr_a : first #ThunarVfsPath.
+ * @path_ptr_b : second #ThunarVfsPath.
+ *
+ * Checks whether @path_ptr_a and @path_ptr_b refer
+ * to the same local path.
+ *
+ * Return value: %TRUE if @path_ptr_a and @path_ptr_b
+ *               are equal.
+ **/
+gboolean
+thunar_vfs_path_equal (gconstpointer path_ptr_a,
+                       gconstpointer path_ptr_b)
+{
+  const ThunarVfsPath *path_a = path_ptr_a;
+  const ThunarVfsPath *path_b = path_ptr_b;
+  const guint         *a;
+  const guint         *b;
+
+again:
+  /* check if the paths are the same object */
+  if (G_UNLIKELY (path_a == path_b))
+    return TRUE;
+
+  /* compare the last path component */
+  a = (const guint *) thunar_vfs_path_get_name (path_a);
+  b = (const guint *) thunar_vfs_path_get_name (path_b);
+  for (;;)
+    {
+      if (*a != *b)
+        return FALSE;
+      else if ((*a & THUNAR_VFS_PATH_MASK) == 0u)
+        break;
+
+      ++a;
+      ++b;
+    }
+
+  /* compare the parent path components */
+  if (G_LIKELY (path_a->parent != NULL && path_b->parent != NULL))
+    {
+      path_a = path_a->parent;
+      path_b = path_b->parent;
+      goto again;
+    }
+
+  /* verify that both paths have no parents then */
+  return (path_a->parent == NULL && path_b->parent == NULL);
+}
+
+
+
+/**
+ * thunar_vfs_path_relative:
+ * @parent : a #ThunarVfsPath.
+ * @name   : a valid filename in the local file system encoding.
+ *
+ * Returns a #ThunarVfsPath for the file @name relative to
+ * @parent. @name must be a valid filename in the local file
+ * system encoding and it may not contain any slashes.
+ *
+ * The caller is responsible to free the returned object
+ * using thunar_vfs_path_unref() when no longer needed.
+ *
+ * Return value: the path to @name relative to @parent.
+ **/
+ThunarVfsPath*
+thunar_vfs_path_relative (ThunarVfsPath *parent,
+                          const gchar   *name)
+{
+  ThunarVfsPath *path;
+  const gchar   *s;
+  gchar         *t;
+  gint           n;
+
+  g_return_val_if_fail (parent != NULL, NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail (*name != '\0', NULL);
+  g_return_val_if_fail (strchr (name, '/') == NULL, NULL);
+
+  /* check if parent is one of the home path components */
+  for (n = n_home_components - 2; n >= 0; --n)
+    if (G_UNLIKELY (home_components[n] == parent))
+      {
+        /* check if the name equals the home path child component */
+        if (strcmp (name, thunar_vfs_path_get_name (home_components[n + 1])) == 0)
+          return thunar_vfs_path_ref (home_components[n + 1]);
+        break;
+      }
+
+  /* determine the length of the name in bytes */
+  for (s = name + 1; *s != '\0'; ++s)
+    ;
+  n = (((s - name) + sizeof (guint)) / sizeof (guint)) * sizeof (guint);
+
+  /* allocate memory for the new path component */
+  path = g_malloc (sizeof (ThunarVfsPath) + n);
+  path->ref_count = 1;
+  path->parent = thunar_vfs_path_ref (parent);
+
+  /* add the path to the debug list */
+#ifndef G_DISABLE_CHECKS
+  G_LOCK (debug_paths);
+  debug_paths = g_list_prepend (debug_paths, path);
+  G_UNLOCK (debug_paths);
+#endif
+
+  /* zero out the last word to have the name zero-terminated */
+  *(((guint *) (((gchar *) path) + sizeof (ThunarVfsPath) + n)) - 1) = 0;
+
+  /* copy the path component name */
+  for (s = name, t = (gchar *) thunar_vfs_path_get_name (path); *s != '\0'; )
+    *t++ = *s++;
+
+  return path;
+}
+
+
+
+/**
+ * thunar_vfs_path_is_home:
+ * @path : a #ThunarVfsPath.
+ *
+ * Checks whether @path refers to the users home
+ * directory.
+ *
+ * Return value: %TRUE if @path refers to the users
+ *               home directory.
+ **/
+gboolean
+thunar_vfs_path_is_home (const ThunarVfsPath *path)
+{
+  g_return_val_if_fail (path != NULL, FALSE);
+  return (path == home_components[n_home_components - 1]);
+}
+
+
+
+/**
+ * thunar_vfs_path_dup_string:
+ * @path : a #ThunarVfsPath.
+ *
+ * Like thunar_vfs_path_to_string(), this function transform
+ * the @path to its string representation, but unlike
+ * thunar_vfs_path_to_string(), this function automatically
+ * allocates the required amount of memory from the heap.
+ * The returned string must be freed by the caller when
+ * no longer needed.
+ *
+ * Return value: the string representation of @path.
+ **/
+gchar*
+thunar_vfs_path_dup_string (const ThunarVfsPath *path)
+{
+  const ThunarVfsPath *p;
+  gchar               *s;
+  guint                n;
+
+  /* determine the number of bytes required to
+   * store the path's string representation.
+   */
+  for (n = 0, p = path; p != NULL; p = p->parent)
+    n += strlen (thunar_vfs_path_get_name (p)) + 2;
+
+  /* allocate the buffer to store the string */
+  s = g_malloc (n);
+
+  /* store the path string to the buffer */
+  thunar_vfs_path_to_string (path, s, n, NULL);
+
+  /* return the string buffer */
+  return s;
+}
+
+
+
+/**
+ * thunar_vfs_path_to_string:
+ * @path    : a #ThunarVfsPath.
+ * @buffer  : the buffer to store the path string to.
+ * @bufsize : the size of @buffer in bytes.
+ * @error   : return location for errors or %NULL.
+ *
+ * Stores the @path into the string pointed to by @buffer,
+ * so it can be used for system path operations. Returns
+ * the number of bytes stored to @buffer or a negative
+ * value if @bufsize is too small to store the whole @path.
+ * In the latter case @error will be set to point to an
+ * error describing the problem.
+ *
+ * If @buffer is allocated on the stack, it is suggested
+ * to use #THUNAR_VFS_PATH_MAXSTRLEN for the buffer size
+ * in most cases. The stack should never be used in recursive
+ * functions; use thunar_vfs_path_dup_string() instead there.
+ *
+ * Return value: the number of bytes (including the null
+ *               byte) stored to @buffer or a negative
+ *               value if @buffer cannot hold the whole
+ *               @path.
+ **/
+gssize
+thunar_vfs_path_to_string (const ThunarVfsPath *path,
+                           gchar               *buffer,
+                           gsize                bufsize,
+                           GError             **error)
+{
+  typedef struct _ThunarVfsPathItem
+  {
+    const ThunarVfsPath       *path;
+    struct _ThunarVfsPathItem *next;
+  } ThunarVfsPathItem;
+
+  ThunarVfsPathItem *items = NULL;
+  ThunarVfsPathItem *item;
+  const gchar       *name;
+  gchar             *bp;
+  guint              n;
+
+  g_return_val_if_fail (buffer != NULL, -1);
+  g_return_val_if_fail (bufsize > 0, -1);
+  g_return_val_if_fail (error == NULL || *error == NULL, -1);
+
+  /* the root element is a special case to ease the processing */
+  if (G_UNLIKELY (path->parent == NULL))
+    {
+      if (G_UNLIKELY (bufsize < 2))
+        goto error;
+      buffer[0] = G_DIR_SEPARATOR;
+      buffer[1] = '\0';
+      return 2;
+    }
+
+  /* determine the buffer size required for the path buffer */
+  for (n = 1; path->parent != NULL; path = path->parent)
+    {
+      /* add the path to the item list */
+      item = g_newa (ThunarVfsPathItem, 1);
+      item->path = path;
+      item->next = items;
+      items = item;
+
+      /* add the size constraint (including the '/') */
+      n += strlen (thunar_vfs_path_get_name (path)) + 1;
+    }
+
+  /* verify the buffer size */
+  if (G_UNLIKELY (bufsize < n))
+    {
+error:
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NAMETOOLONG,
+                   _("Path too long to fit into buffer"));
+      return -1;
+    }
+
+  /* generate the path string */
+  for (bp = buffer, item = items; item != NULL; item = item->next)
+    {
+      /* prepend the path separator */
+      *bp++ = G_DIR_SEPARATOR;
+
+      /* append the component name */
+      for (name = thunar_vfs_path_get_name (item->path); *name != '\0'; )
+        *bp++ = *name++;
+    }
+
+  /* append the string terminator */
+  *bp = '\0';
+
+   /* return the number of bytes written to the buffer */
+  return n;
+}
+
+
+
+/**
+ * thunar_vfs_path_dup_uri:
+ * @path : a #ThunarVfsPath.
+ *
+ * Similar to thunar_vfs_path_to_uri(), but automatically
+ * allocates memory on the heap instead of using a user
+ * supplied buffer for the URI.
+ *
+ * The caller is responsible to free the returned string
+ * using g_free() when no longer needed.
+ *
+ * Return value: the escaped URI for @path.
+ **/
+gchar*
+thunar_vfs_path_dup_uri (const ThunarVfsPath *path)
+{
+  gchar *s;
+  guint  m;
+  guint  n;
+
+  g_return_val_if_fail (path != NULL, NULL);
+
+  /* calculate the length of the uri string */
+  n = thunar_vfs_path_escape_uri_length (path) + 1;
+
+  /* escape the path to an uri string */
+  s = g_malloc (sizeof (gchar) * n);
+  m = thunar_vfs_path_escape_uri (path, s);
+
+  /* verify the result */
+  g_assert (strlen (s) == m - 1);
+  g_assert (m == n);
+
+  return s;
+}
+
+
+
+/**
+ * thunar_vfs_path_to_uri:
+ * @path    : a #ThunarVfsPath.
+ * @buffer  : the buffer to store the URI string to.
+ * @bufsize : the size of @buffer in bytes.
+ * @error   : return location for errors or %NULL.
+ *
+ * Escapes @path according to the rules of the file URI
+ * specification and stores the escaped URI to @buffer.
+ * Returns the number of bytes stored to @buffer or a
+ * negative value if @bufsize is too small to store the
+ * escaped URI. In the latter case @error will be set to
+ * point to an #GError describing the problem.
+ *
+ * When using the stack for @buffer, it is suggested to
+ * use #THUNAR_VFS_PATH_MAXURILEN for the buffer size in
+ * most cases. The stack should never be used in recursive
+ * functions; use thunar_vfs_path_dup_uri() instead there.
+ *
+ * Return value: the number of bytes (including the null
+ *               byte) stored to @buffer or a negative
+ *               value if @buffer cannot hold the URI.
+ **/
+gssize
+thunar_vfs_path_to_uri (const ThunarVfsPath *path,
+                        gchar               *buffer,
+                        gsize                bufsize,
+                        GError             **error)
+{
+  guint n;
+  guint m;
+
+  g_return_val_if_fail (path != NULL, -1);
+  g_return_val_if_fail (buffer != NULL, -1);
+  g_return_val_if_fail (bufsize > 0, -1);
+  g_return_val_if_fail (error == NULL || *error == NULL, -1);
+
+  /* verify that the buffer is large enough */
+  n = thunar_vfs_path_escape_uri_length (path) + 1;
+  if (G_UNLIKELY (bufsize < n))
+    {
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NAMETOOLONG,
+                   _("URI too long to fit into buffer"));
+      return -1;
+    }
+
+  /* copy the URI to the buffer */
+  m = thunar_vfs_path_escape_uri (path, buffer);
+
+  /* verify the result */
+  g_assert (strlen (buffer) == m - 1);
+  g_assert (m == n);
+
+  return n;
+}
+
+
+
+/**
+ * thunar_vfs_path_list_from_string:
+ * @uri_string : a string representation of an URI list.
+ * @error      : return location for errors.
+ *
+ * Splits an URI list conforming to the text/uri-list
+ * mime type defined in RFC 2483 into individual URIs,
+ * discarding any comments and whitespace.
+ *
+ * If all URIs were successfully parsed into #ThunarVfsPath
+ * objects, the list of parsed URIs will be returned, and
+ * you'll need to call thunar_vfs_path_list_free() to
+ * release the list resources. Else if the parsing fails
+ * at some point, %NULL will be returned and @error will
+ * be set to describe the cause.
+ *
+ * Note, that if @string contains no URIs, this function
+ * will also return %NULL, but @error won't be set. So
+ * take care when checking for an error condition!
+ *
+ * Return value: the list of #ThunarVfsPath's or %NULL.
+ **/
+GList*
+thunar_vfs_path_list_from_string (const gchar *uri_string,
+                                  GError     **error)
+{
+  ThunarVfsPath *path;
+  const gchar   *s;
+  const gchar   *t;
+  GList         *path_list = NULL;
+  gchar         *identifier;
+
+  for (s = uri_string; s != NULL; )
+    {
+      if (*s != '#')
+        {
+          while (g_ascii_isspace (*s))
+            ++s;
+
+          for (t = s; *t != '\0' && *t != '\n' && *t != '\r'; ++t)
+            ;
+
+          if (t > s)
+            {
+              for (t--; t > s && g_ascii_isspace (*t); t--)
+                ;
+
+              if (t > s)
+                {
+                  /* try to parse the URI */
+                  identifier = g_strndup (s, t - s + 1);
+                  path = thunar_vfs_path_new (identifier, error);
+                  g_free (identifier);
+
+                  /* check if we succeed */
+                  if (G_UNLIKELY (path == NULL))
+                    {
+                      thunar_vfs_path_list_free (path_list);
+                      return NULL;
+                    }
+                  else
+                    {
+                      /* append the newly parsed path */
+                      path_list = g_list_append (path_list, path);
+                    }
+                }
+            }
+        }
+
+      for (; *s != '\0' && *s != '\n'; ++s)
+        ;
+
+      if (*s++ == '\0')
+        break;
+    }
+
+  return path_list;
+}
+
+
+
+/**
+ * thunar_vfs_path_list_to_string:
+ * @path_list : a list of #ThunarVfsPath<!---->s.
+ *
+ * Free the returned value using g_free() when you
+ * are done with it.
+ *
+ * Return value: the string representation of @path_list conforming to the
+ *               text/uri-list mime type defined in RFC 2483.
+ **/
+gchar*
+thunar_vfs_path_list_to_string (GList *path_list)
+{
+  gchar *buffer;
+  gsize  bufsize = 512;
+  gsize  bufpos = 0;
+  GList *lp;
+  gint   n;
+
+  /* allocate initial buffer */
+  buffer = g_new (gchar, bufsize + 1);
+
+  for (lp = path_list; lp != NULL; lp = lp->next)
+    {
+      for (;;)
+        {
+          /* increase the buffer automatically if required */
+          n = thunar_vfs_path_to_uri (lp->data, buffer + bufpos, bufsize - bufpos, NULL);
+          if (G_UNLIKELY (n < 0))
+            {
+              bufsize += 512;
+              buffer = g_realloc (buffer, bufsize + 1);
+              continue;
+            }
+
+          /* shift the buffer position */
+          bufpos += (n - 1);
+
+          /* append a line break */
+          if (G_UNLIKELY (bufpos == bufsize))
+            {
+              bufsize += 512;
+              buffer = g_realloc (buffer, bufsize + 1);
+            }
+          buffer[bufpos++] = '\n';
+          break;
+        }
+    }
+
+  /* zero terminate the string */
+  buffer[bufpos] = '\0';
+
+  return buffer;
+}
+
+
+
+/**
+ * _thunar_vfs_path_init:
+ *
+ * Intialize the #ThunarVfsPath module.
+ **/
+void
+_thunar_vfs_path_init (void)
+{
+  ThunarVfsPath *path;
+  const gchar   *s;
+  gchar         *offset;
+  gchar        **components;
+  gchar        **component;
+  guint          n_bytes;
+  guint          n = 0;
+  gchar         *t;
+
+  g_return_if_fail (home_components == NULL);
+  g_return_if_fail (n_home_components == 0);
+
+  /* include the root element */
+  n_bytes = sizeof (ThunarVfsPath) + sizeof (guint);
+  n_home_components = 1;
+
+  /* split the home path into its components */
+  components = g_strsplit (xfce_get_homedir (), "/", -1);
+  for (component = components; *component != NULL; ++component)
+    if (G_LIKELY (**component != '\0'))
+      {
+        n_bytes += sizeof (ThunarVfsPath) + ((strlen (*component) + sizeof (guint)) / sizeof (guint)) * sizeof (guint);
+        n_home_components += 1;
+      }
+
+  /* allocate the memory (including the pointer table overhead) */
+  home_components = g_malloc (n_bytes + n_home_components * sizeof (ThunarVfsPath *));
+  offset = ((gchar *) home_components) + n_home_components * sizeof (ThunarVfsPath *);
+
+  /* add the root node */
+  path = (gpointer) offset;
+  path->ref_count = 1;
+  path->parent = NULL;
+  home_components[0] = path;
+  *((guint *) thunar_vfs_path_get_name (path)) = THUNAR_VFS_PATH_ROOT;
+  offset += sizeof (ThunarVfsPath) + sizeof (guint);
+
+  /* add the remaining path components */
+  for (component = components; *component != NULL; ++component)
+    if (G_LIKELY (**component != '\0'))
+      {
+        /* setup the path basics */
+        path = (gpointer) offset;
+        path->ref_count = 1;
+        path->parent = home_components[n];
+        home_components[++n] = path;
+
+        /* calculate the offset for the next home path component */
+        offset += sizeof (ThunarVfsPath) + ((strlen (*component) + sizeof (guint)) / sizeof (guint)) * sizeof (guint);
+
+        /* copy the path */
+        for (s = *component, t = (gchar *) thunar_vfs_path_get_name (path); *s != '\0'; )
+          *t++ = *s++;
+
+        /* fill the path with zeros */
+        while (t < offset)
+          *t++ = '\0';
+      }
+
+  /* verify state */
+  g_assert (n_home_components == n + 1);
+
+  /* cleanup */
+  g_strfreev (components);
+}
+
+
+
+/**
+ * _thunar_vfs_path_shutdown:
+ *
+ * Shutdown the #ThunarVfsPath module.
+ **/
+void
+_thunar_vfs_path_shutdown (void)
+{
+  guint n;
+
+  g_return_if_fail (home_components != NULL);
+  g_return_if_fail (n_home_components != 0);
+
+  /* print out the list of leaked paths */
+#ifndef G_DISABLE_CHECKS
+  if (G_UNLIKELY (debug_paths != NULL))
+    {
+      GList *lp;
+      gchar *s;
+
+      G_LOCK (debug_paths);
+
+      g_print ("--- Leaked a total of %u ThunarVfsPath objects:\n", g_list_length (debug_paths));
+
+      for (lp = debug_paths; lp != NULL; lp = lp->next)
+        {
+          s = thunar_vfs_path_dup_string (lp->data);
+          g_print ("--> %s (%d)\n", s, ((ThunarVfsPath *) lp->data)->ref_count);
+          g_free (s);
+        }
+
+      G_UNLOCK (debug_paths);
+    }
+#endif
+
+  for (n = 0; n < n_home_components; ++n)
+    g_assert (home_components[n]->ref_count == 1);
+
+  g_free (home_components);
+  home_components = NULL;
+  n_home_components = 0;
+}
+
+
+
+#define __THUNAR_VFS_PATH_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-path.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,265 @@
+/* $Id: thunar-vfs-path.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_PATH_H__
+#define __THUNAR_VFS_PATH_H__
+
+#include <thunar-vfs/thunar-vfs-config.h>
+
+G_BEGIN_DECLS;
+
+/**
+ * THUNAR_VFS_PATH_MAXSTRLEN:
+ *
+ * The maximum length of a path string in bytes that
+ * can be handled by #ThunarVfsPath objects.
+ **/
+#if defined(PATH_MAX)
+#define THUNAR_VFS_PATH_MAXSTRLEN (PATH_MAX + 1)
+#else
+#define THUNAR_VFS_PATH_MAXSTRLEN (4 * 1024 + 1)
+#endif
+
+/**
+ * THUNAR_VFS_PATH_MAXURILEN:
+ *
+ * The maximum length of an URI string in bytes that
+ * will be produced by thunar_vfs_path_to_uri() and
+ * friends.
+ **/
+#define THUNAR_VFS_PATH_MAXURILEN (THUNAR_VFS_PATH_MAXSTRLEN * 3 - 2)
+
+#define THUNAR_VFS_TYPE_PATH (thunar_vfs_path_get_type ())
+
+typedef struct _ThunarVfsPath ThunarVfsPath;
+struct _ThunarVfsPath
+{
+  /*< private >*/
+  gint           ref_count;
+  ThunarVfsPath *parent;
+};
+
+GType                        thunar_vfs_path_get_type     (void) G_GNUC_CONST;
+
+ThunarVfsPath               *thunar_vfs_path_new          (const gchar          *identifier,
+                                                           GError              **error) G_GNUC_MALLOC;
+
+ThunarVfsPath               *thunar_vfs_path_get_for_home (void);
+ThunarVfsPath               *thunar_vfs_path_get_for_root (void);
+
+G_INLINE_FUNC ThunarVfsPath *thunar_vfs_path_ref          (ThunarVfsPath        *path);
+void                         thunar_vfs_path_unref        (ThunarVfsPath        *path);
+
+guint                        thunar_vfs_path_hash         (gconstpointer         path_ptr);
+gboolean                     thunar_vfs_path_equal        (gconstpointer         path_ptr_a,
+                                                           gconstpointer         path_ptr_b);
+
+ThunarVfsPath               *thunar_vfs_path_relative     (ThunarVfsPath        *parent,
+                                                           const gchar          *name) G_GNUC_MALLOC;
+
+gboolean                     thunar_vfs_path_is_home      (const ThunarVfsPath  *path);
+G_INLINE_FUNC gboolean       thunar_vfs_path_is_root      (const ThunarVfsPath  *path);
+
+G_INLINE_FUNC const gchar   *thunar_vfs_path_get_name     (const ThunarVfsPath  *path);
+G_INLINE_FUNC ThunarVfsPath *thunar_vfs_path_get_parent   (const ThunarVfsPath  *path);
+
+gchar                       *thunar_vfs_path_dup_string   (const ThunarVfsPath  *path) G_GNUC_MALLOC;
+gssize                       thunar_vfs_path_to_string    (const ThunarVfsPath  *path,
+                                                           gchar                *buffer,
+                                                           gsize                 bufsize,
+                                                           GError              **error);
+
+gchar                       *thunar_vfs_path_dup_uri      (const ThunarVfsPath  *path) G_GNUC_MALLOC;
+gssize                       thunar_vfs_path_to_uri       (const ThunarVfsPath  *path,
+                                                           gchar                *buffer,
+                                                           gsize                 bufsize,
+                                                           GError              **error);
+
+
+GList                       *thunar_vfs_path_list_from_string (const gchar          *uri_string,
+                                                               GError              **error) G_GNUC_MALLOC;
+gchar                       *thunar_vfs_path_list_to_string   (GList                *path_list) G_GNUC_MALLOC;
+G_INLINE_FUNC GList         *thunar_vfs_path_list_append      (GList                *path_list,
+                                                               ThunarVfsPath        *path);
+G_INLINE_FUNC GList         *thunar_vfs_path_list_prepend     (GList                *path_list,
+                                                               ThunarVfsPath        *path);
+G_INLINE_FUNC GList         *thunar_vfs_path_list_copy        (GList                *path_list);
+G_INLINE_FUNC void           thunar_vfs_path_list_free        (GList                *path_list);
+
+
+/* inline function implementations */
+#if defined(G_CAN_INLINE) || defined(__THUNAR_VFS_PATH_C__)
+/**
+ * thunar_vfs_path_ref:
+ * @path : a #ThunarVfsPath.
+ *
+ * Increments the reference count on @path
+ * and returns a reference to @path.
+ *
+ * Return value: a reference to @path.
+ **/
+G_INLINE_FUNC ThunarVfsPath*
+thunar_vfs_path_ref (ThunarVfsPath *path)
+{
+  exo_atomic_inc (&path->ref_count);
+  return path;
+}
+
+/**
+ * thunar_vfs_path_is_root:
+ * @path : a #ThunarVfsPath.
+ *
+ * Checks whether path refers to the root directory.
+ *
+ * Return value: %TRUE if @path refers to the root
+ *               directory.
+ **/
+G_INLINE_FUNC gboolean
+thunar_vfs_path_is_root (const ThunarVfsPath *path)
+{
+  return (path->parent == NULL);
+}
+
+/**
+ * thunar_vfs_path_get_name:
+ * @path : a #ThunarVfsPath.
+ *
+ * Returns the base name of the @path in the local
+ * file system encoding.
+ *
+ * Return value: the base name of @path.
+ **/
+G_INLINE_FUNC const gchar*
+thunar_vfs_path_get_name (const ThunarVfsPath *path)
+{
+  return ((const gchar *) path) + sizeof (*path);
+}
+
+/**
+ * thunar_vfs_path_get_parent:
+ * @path : a #ThunarVfsPath.
+ *
+ * Returns the #ThunarVfsPath that refers to the parent
+ * directory of @path or %NULL if @path refers to the
+ * root file system node.
+ *
+ * No additional reference is taken on the parent, so
+ * you'll need to call thunar_vfs_path_ref() yourself
+ * if you need to keep a reference.
+ *
+ * Return value: the parent of @path or %NULL.
+ **/
+G_INLINE_FUNC ThunarVfsPath*
+thunar_vfs_path_get_parent (const ThunarVfsPath *path)
+{
+  return path->parent;
+}
+
+/**
+ * thunar_vfs_path_list_append:
+ * @path_list : a list of #ThunarVfsPath<!---->s.
+ * @path      : a #ThunarVfsPath.
+ *
+ * Appends @path to the @path_list while taking
+ * an additional reference for @path.
+ *
+ * Return value: pointer to the extended @path_list.
+ **/
+G_INLINE_FUNC GList*
+thunar_vfs_path_list_append (GList         *path_list,
+                             ThunarVfsPath *path)
+{
+  thunar_vfs_path_ref (path);
+  return g_list_append (path_list, path);
+}
+
+/**
+ * thunar_vfs_path_list_prepend:
+ * @path_list : a list of #ThunarVfsPath<!---->s.
+ * @path      : a #ThunarVfsPath.
+ *
+ * Similar to thunar_vfs_path_list_append(), but
+ * prepends the @path to the @path_list.
+ *
+ * Return value: pointer to the extended @path_list.
+ **/
+G_INLINE_FUNC GList*
+thunar_vfs_path_list_prepend (GList         *path_list,
+                              ThunarVfsPath *path)
+{
+  thunar_vfs_path_ref (path);
+  return g_list_prepend (path_list, path);
+}
+
+/**
+ * thunar_vfs_path_list_copy:
+ * @path_list : a list of #ThunarVfsPath<!---->s.
+ *
+ * Takes a deep copy of @path_list and returns the
+ * result. The caller is responsible to free the
+ * returned list using thunar_vfs_path_list_free().
+ *
+ * Return value: a deep copy of @path_list.
+ **/
+G_INLINE_FUNC GList*
+thunar_vfs_path_list_copy (GList *path_list)
+{
+  GList *list;
+  GList *lp;
+
+  for (list = NULL, lp = g_list_last (path_list); lp != NULL; lp = lp->prev)
+    {
+      list = g_list_prepend (list, lp->data);
+      thunar_vfs_path_ref (lp->data);
+    }
+
+  return list;
+}
+
+/**
+ * thunar_vfs_path_list_free:
+ * @path_list : a list of #ThunarVfsPath<!---->s.
+ *
+ * Frees the #ThunarVfsPath<!---->s in @path_list and
+ * the @path_list itself.
+ **/
+G_INLINE_FUNC void
+thunar_vfs_path_list_free (GList *path_list)
+{
+  GList *lp;
+  for (lp = path_list; lp != NULL; lp = lp->next)
+    thunar_vfs_path_unref (lp->data);
+  g_list_free (path_list);
+}
+#endif /* G_CAN_INLINE || __THUNAR_VFS_PATH_C__ */
+
+
+#if defined(THUNAR_VFS_COMPILATION)
+void _thunar_vfs_path_init     (void) G_GNUC_INTERNAL;
+void _thunar_vfs_path_shutdown (void) G_GNUC_INTERNAL;
+#endif
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_PATH_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,428 @@
+/* $Id: thunar-vfs-scandir.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-scandir.h>
+
+
+
+typedef struct _ThunarVfsScandirHandle ThunarVfsScandirHandle;
+
+
+
+#ifdef __FreeBSD__
+static gboolean thunar_vfs_scandir_collect_fast (ThunarVfsScandirHandle *handle,
+                                                 ThunarVfsPath          *path,
+                                                 GList                 **directoriesp);
+#endif
+static gboolean thunar_vfs_scandir_collect_slow (ThunarVfsScandirHandle *handle,
+                                                 ThunarVfsPath          *path,
+                                                 GList                 **directoriesp);
+static gboolean thunar_vfs_scandir_collect      (ThunarVfsScandirHandle *handle,
+                                                 ThunarVfsPath          *path);
+
+
+
+struct _ThunarVfsScandirHandle
+{
+  ThunarVfsScandirFlags flags;
+  GCompareFunc          func;
+  GList                *path_list;
+  gchar                 fname[THUNAR_VFS_PATH_MAXSTRLEN];
+};
+
+
+
+#ifdef __FreeBSD__
+static gboolean
+thunar_vfs_scandir_collect_fast (ThunarVfsScandirHandle *handle,
+                                 ThunarVfsPath          *path,
+                                 GList                 **directoriesp)
+{
+#define statfsp ((struct statfs *) (dbuf))
+
+  ThunarVfsPath *child;
+  struct dirent *dp;
+  struct stat    statb;
+  gboolean       succeed = FALSE;
+  gchar         *dbuf;
+  guint          dlen;
+  glong          base;
+  gint           sverrno;
+  gint           size;
+  gint           loc;
+  gint           fd;
+  gint           n;
+
+  /* try to open the file (the file name is placed in handle->fname) */
+  fd = open (handle->fname, O_RDONLY | ((handle->flags & THUNAR_VFS_SCANDIR_FOLLOW_LINKS) ? 0 : O_NOFOLLOW));
+  if (G_UNLIKELY (fd < 0))
+    {
+      /* translate EMLINK to ENOTDIR */
+      if (G_UNLIKELY (errno == EMLINK))
+        errno = ENOTDIR;
+      return FALSE;
+    }
+
+  /* stat the file */
+  if (fstat (fd, &statb) < 0)
+    goto done;
+
+  /* verify that we have a directory here */
+  if (!S_ISDIR (statb.st_mode))
+    {
+      errno = ENOTDIR;
+      goto done;
+    }
+
+  /* calculate the directory buffer size */
+  dlen = statb.st_blksize * 4;
+  if (G_UNLIKELY ((dlen % DIRBLKSIZ) != 0))
+    dlen = ((dlen + DIRBLKSIZ - 1) / DIRBLKSIZ) * DIRBLKSIZ;
+  if (G_UNLIKELY (dlen < sizeof (struct statfs)))
+    dlen = sizeof (struct statfs);
+
+  /* allocate the directory buffer, which is
+   * also used to store the statfs(2) results.
+   */
+  dbuf = alloca (dlen);
+
+  /* determine the file system details */
+  if (fstatfs (fd, statfsp) < 0)
+    goto done;
+
+  /* check if we have a unionfs here, which requires special processing (not provided by the fast collector) */
+  if (memcmp (statfsp->f_fstypename, "unionfs", 8) == 0 || (statfsp->f_flags & MNT_UNION) != 0)
+    {
+      /* fallback to the slower collector */
+      succeed = thunar_vfs_scandir_collect_slow (handle, path, directoriesp);
+    }
+  else
+    {
+      /* read the directory content */
+      for (base = loc = size = 0;;)
+        {
+          /* check if we need to fill the buffer again */
+          if (loc >= size)
+            {
+              /* read the next chunk */
+              size = getdirentries (fd, dbuf, dlen, &base);
+              if (size <= 0)
+                break;
+              loc = 0;
+            }
+
+          /* grab the pointer to the next entry */
+          dp = (struct dirent *) (dbuf + loc);
+          if (G_UNLIKELY (((gulong) dp & 0x03) != 0))
+            break;
+
+          /* verify the next record length */
+          if (G_UNLIKELY (dp->d_reclen <= 0 || dp->d_reclen > dlen + 1 - loc))
+            break;
+
+          /* adjust the location pointer */
+          loc += dp->d_reclen;
+
+          /* verify the inode and type */
+          if (G_UNLIKELY (dp->d_ino == 0 || dp->d_type == DT_WHT))
+            continue;
+
+          /* ignore '.' and '..' entries */
+          if (G_UNLIKELY (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))))
+            continue;
+
+          /* add the child path to the path list */
+          child = thunar_vfs_path_relative (path, dp->d_name);
+          if (handle->func != NULL)
+            handle->path_list = g_list_insert_sorted (handle->path_list, child, handle->func);
+          else
+            handle->path_list = g_list_prepend (handle->path_list, child);
+
+          /* check if we want to collect children for recursive scanning */
+          if (G_UNLIKELY (directoriesp != NULL))
+            {
+              /* DT_UNKNOWN must be handled for certain file systems */
+              if (G_UNLIKELY (dp->d_type == DT_UNKNOWN))
+                {
+                  /* determine the absolute path to the child */
+                  if (!thunar_vfs_path_to_string (child, handle->fname, sizeof (handle->fname), NULL) < 0)
+                    {
+                      errno = ENAMETOOLONG;
+                      goto done;
+                    }
+
+                  /* stat the child (according to the FOLLOW_LINKS policy) */
+                  n = ((handle->flags & THUNAR_VFS_SCANDIR_FOLLOW_LINKS) == 0)
+                    ? lstat (handle->fname, &statb) : stat (handle->fname, &statb);
+
+                  /* check if we have a directory here */
+                  if (n == 0 && S_ISDIR (statb.st_mode))
+                    dp->d_type = DT_DIR;
+                }
+
+              /* check if we have a directory */
+              if (dp->d_type == DT_DIR)
+                *directoriesp = g_list_prepend (*directoriesp, child);
+            }
+        }
+
+      succeed = TRUE;
+    }
+
+done:
+  sverrno = errno;
+  close (fd);
+  errno = sverrno;
+  return succeed;
+
+#undef statfsp
+}
+#endif
+
+
+
+static gboolean
+thunar_vfs_scandir_collect_slow (ThunarVfsScandirHandle *handle,
+                                 ThunarVfsPath          *path,
+                                 GList                 **directoriesp)
+{
+  ThunarVfsPath *child;
+  struct dirent  dbuf;
+  struct dirent *dp;
+  gint           sverrno;
+  gint           n;
+  DIR           *dirp;
+
+  /* try to open the directory (handle->buffer still
+   * contains the absolute path when we get here!).
+   */
+  dirp = opendir (handle->fname);
+  if (G_UNLIKELY (dirp == NULL))
+    return FALSE;
+
+  /* verify that the directory is really the directory we want
+   * to open. If not, we've probably detected a race condition,
+   * so we'll better stop rather than doing anything stupid
+   * (remember, this method is also used in collecting
+   * files for the unlink job!!). Better safe than sorry!
+   */
+  if (G_UNLIKELY ((handle->flags & THUNAR_VFS_SCANDIR_FOLLOW_LINKS) == 0))
+    {
+      struct stat fstatb;
+      struct stat lstatb;
+
+      /* stat the just opened directory */
+      if (fstat (dirfd (dirp), &fstatb) < 0)
+        goto error;
+
+      /* stat the path (without following links) */
+      if (lstat (handle->fname, &lstatb) < 0)
+        goto error;
+
+      /* check that we have the same file here */
+      if (fstatb.st_ino != lstatb.st_ino || fstatb.st_dev != lstatb.st_dev)
+        {
+          errno = ENOTDIR;
+          goto error;
+        }
+    }
+
+  /* read the directory content */
+  for (;;)
+    {
+      /* read the next directory entry */
+      if (readdir_r (dirp, &dbuf, &dp) < 0 || dp == NULL)
+        break;
+
+      /* ignore '.' and '..' entries */
+      if (G_UNLIKELY (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))))
+        continue;
+
+      /* add the child path to the path list */
+      child = thunar_vfs_path_relative (path, dp->d_name);
+      if (handle->func != NULL)
+        handle->path_list = g_list_insert_sorted (handle->path_list, child, handle->func);
+      else
+        handle->path_list = g_list_prepend (handle->path_list, child);
+
+      /* check if we want to collect children for recursive scanning */
+      if (G_UNLIKELY (directoriesp != NULL))
+        {
+          struct stat statb;
+
+          /* determine the absolute path to the child */
+          if (thunar_vfs_path_to_string (child, handle->fname, sizeof (handle->fname), NULL) < 0)
+            {
+              errno = ENAMETOOLONG;
+              goto error;
+            }
+
+          /* stat the child (according to the FOLLOW_LINKS policy) */
+          n = ((handle->flags & THUNAR_VFS_SCANDIR_FOLLOW_LINKS) == 0)
+            ? lstat (handle->fname, &statb) : stat (handle->fname, &statb);
+
+          /* check if we have a directory here */
+          if (n == 0 && S_ISDIR (statb.st_mode))
+            *directoriesp = g_list_prepend (*directoriesp, child);
+        }
+    }
+
+  closedir (dirp);
+  return TRUE;
+
+error:
+  sverrno = errno;
+  closedir (dirp);
+  errno = sverrno;
+  return FALSE;
+}
+
+
+
+static gboolean
+thunar_vfs_scandir_collect (ThunarVfsScandirHandle *handle,
+                            ThunarVfsPath          *path)
+{
+  gboolean succeed = FALSE;
+  GList   *directories = NULL;
+  GList   *lp;
+  gint     sverrno;
+
+  /* determine the absolute path */
+  if (thunar_vfs_path_to_string (path, handle->fname, sizeof (handle->fname), NULL) < 0)
+    {
+      errno = ENAMETOOLONG;
+      return FALSE;
+    }
+
+#ifdef __FreeBSD__
+  /* We can some nice things in FreeBSD */
+  succeed = thunar_vfs_scandir_collect_fast (handle, path, (handle->flags & THUNAR_VFS_SCANDIR_RECURSIVE) ? &directories : NULL);
+#else
+  /* use the generic (slower) collector */
+  succeed = thunar_vfs_scandir_collect_slow (handle, path, (handle->flags & THUNAR_VFS_SCANDIR_RECURSIVE) ? &directories : NULL);
+#endif
+
+  /* check if we want to recurse */
+  if (G_UNLIKELY (directories != NULL))
+    {
+      /* perform the recursion */
+      for (lp = directories; lp != NULL && succeed; lp = lp->next)
+        {
+          succeed = thunar_vfs_scandir_collect (handle, lp->data);
+          if (G_UNLIKELY (!succeed))
+            {
+              /* we can ignore certain errors here */
+              if (errno == EMLINK || errno == ENOTDIR || errno == ENOENT)
+                succeed = TRUE;
+            }
+        }
+
+      /* release the directory list */
+      sverrno = errno;
+      g_list_free (directories);
+      errno = sverrno;
+    }
+
+  return succeed;
+}
+
+
+
+/**
+ * thunar_vfs_scandir:
+ * @path
+ * @flags
+ * @func
+ * @error     : return location for errors or %NULL.
+ *
+ * The caller is responsible to free the returned list
+ * using thunar_vfs_path_list_free() when no longer
+ * needed.
+ *
+ * Return value:
+ **/
+GList*
+thunar_vfs_scandir (ThunarVfsPath        *path,
+                    ThunarVfsScandirFlags flags,
+                    GCompareFunc          func,
+                    GError              **error)
+{
+  ThunarVfsScandirHandle handle;
+
+  g_return_val_if_fail (path != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* initialize the scandir handle */
+  handle.flags = flags;
+  handle.func = func;
+  handle.path_list = NULL;
+
+  /* collect the paths */
+  if (!thunar_vfs_scandir_collect (&handle, path))
+    {
+      /* forward the error */
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+      thunar_vfs_path_list_free (handle.path_list);
+      return NULL;
+    }
+
+  return handle.path_list;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-scandir.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,46 @@
+/* $Id: thunar-vfs-scandir.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_SCANDIR_H__
+#define __THUNAR_VFS_SCANDIR_H__
+
+#include <thunar-vfs/thunar-vfs-path.h>
+#include <thunar-vfs/thunar-vfs-types.h>
+
+G_BEGIN_DECLS;
+
+typedef enum /*< flags >*/
+{
+  THUNAR_VFS_SCANDIR_RECURSIVE    = (1L << 0),
+  THUNAR_VFS_SCANDIR_FOLLOW_LINKS = (1L << 1),
+} ThunarVfsScandirFlags;
+
+GList *thunar_vfs_scandir       (ThunarVfsPath        *path,
+                                 ThunarVfsScandirFlags flags,
+                                 GCompareFunc          func,
+                                 GError              **error) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_SCANDIR_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,337 @@
+/* $Id: thunar-vfs-thumb-jpeg.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Based on code written by Alexander Larsson <alexl at redhat.com>
+ * for libgnomeui.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_SETJMP_H
+#include <setjmp.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_JPEGLIB_H
+#undef HAVE_STDDEF_H
+#undef HAVE_STDLIB_H
+#include<jpeglib.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-thumb-jpeg.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+#if defined(HAVE_LIBJPEG) && defined(HAVE_MMAP)
+typedef struct
+{
+  struct jpeg_error_mgr mgr;
+  jmp_buf               setjmp_buffer;
+} TvtjErrorHandler;
+
+
+
+static void
+fatal_error_handler (j_common_ptr cinfo)
+{
+  TvtjErrorHandler *handler = (TvtjErrorHandler *) cinfo->err;
+  longjmp (handler->setjmp_buffer, 1);
+}
+
+
+
+static gboolean
+tvtj_fill_input_buffer (j_decompress_ptr cinfo)
+{
+  struct jpeg_source_mgr *source = cinfo->src;
+
+  /* return a fake EOI marker so we will eventually terminate */
+  if (G_LIKELY (source->bytes_in_buffer == 0))
+    {
+      static const JOCTET FAKE_EOI[2] =
+      {
+        (JOCTET) 0xff,
+        (JOCTET) JPEG_EOI,
+      };
+
+      source->next_input_byte = FAKE_EOI;
+      source->bytes_in_buffer = G_N_ELEMENTS (FAKE_EOI);
+    }
+
+  return TRUE;
+}
+
+
+
+static void
+tvtj_skip_input_data (j_decompress_ptr cinfo,
+                      glong            num_bytes)
+{
+  struct jpeg_source_mgr *source = cinfo->src;
+
+  if (G_LIKELY (num_bytes > 0))
+    {
+      num_bytes = MIN (num_bytes, source->bytes_in_buffer);
+
+      source->next_input_byte += num_bytes;
+      source->bytes_in_buffer -= num_bytes;
+    }
+}
+
+
+
+static inline gint
+tvtj_denom (gint width,
+            gint height,
+            gint size)
+{
+  if (width > size * 8 && height > size * 8)
+    return 8;
+  else if (width > size * 4 && height > size * 4)
+    return 4;
+  else if (width > size * 2 && height > size * 2)
+    return 2;
+  else
+    return 1;
+}
+
+
+
+static inline void
+tvtj_convert_cmyk_to_rgb (j_decompress_ptr cinfo,
+                          guchar          *line)
+{
+  guchar *p;
+  gint    c, k, m, n, y;
+
+  g_return_if_fail (cinfo != NULL);
+  g_return_if_fail (cinfo->output_components == 4);
+  g_return_if_fail (cinfo->out_color_space == JCS_CMYK);
+
+  for (n = cinfo->output_width, p = line; n > 0; --n, p += 4)
+    {
+      c = p[0];
+      m = p[1];
+      y = p[2];
+      k = p[3];
+
+      if (cinfo->saw_Adobe_marker)
+        {
+          p[0] = k * c / 255;
+          p[1] = k * m / 255;
+          p[2] = k * y / 255;
+        }
+      else
+        {
+          p[0] = (255 - k) * (255 - c) / 255;
+          p[1] = (255 - k) * (255 - m) / 255;
+          p[2] = (255 - k) * (255 - y) / 255;
+        }
+
+      p[3] = 255;
+    }
+}
+#endif
+
+
+                        
+/**
+ * thunar_vfs_thumb_jpeg_load:
+ * @path
+ * @size
+ *
+ * Return value:
+ **/
+GdkPixbuf*
+thunar_vfs_thumb_jpeg_load (const gchar *path,
+                            gint         size)
+{
+#if defined(HAVE_LIBJPEG) && defined(HAVE_MMAP)
+  struct jpeg_decompress_struct cinfo;
+  struct jpeg_source_mgr        source;
+  TvtjErrorHandler              handler;
+  struct stat                   statb;
+  JOCTET                       *content;
+  guchar                       *lines[1];
+  guchar                       *buffer = NULL;
+  guchar                       *pixels = NULL;
+  guchar                       *p;
+  gint                          out_num_components;
+  gint                          fd;
+  gint                          n;
+
+  /* try to open the file at the given path */
+  fd = open (path, O_RDONLY);
+  if (G_UNLIKELY (fd < 0))
+    return NULL;
+
+  /* determine the status of the file */
+  if (G_UNLIKELY (fstat (fd, &statb) < 0 || statb.st_size == 0))
+    {
+      close (fd);
+      return NULL;
+    }
+
+  /* try to mmap the file */
+  content = mmap (NULL, statb.st_size, PROT_READ, MAP_SHARED, fd, 0);
+
+  /* we can safely close the file now */
+  close (fd);
+
+  /* verify that the mmap was successful */
+  if (G_UNLIKELY (content == (JOCTET *) MAP_FAILED))
+    return NULL;
+
+  /* setup JPEG error handling */
+  cinfo.err = jpeg_std_error (&handler.mgr);
+  handler.mgr.error_exit = fatal_error_handler;
+  handler.mgr.output_message = (gpointer) exo_noop;
+  if (setjmp (handler.setjmp_buffer))
+    goto error;
+
+  /* setup the source */
+  source.bytes_in_buffer = statb.st_size;
+  source.next_input_byte = content;
+  source.init_source = (gpointer) exo_noop;
+  source.fill_input_buffer = tvtj_fill_input_buffer;
+  source.skip_input_data = tvtj_skip_input_data;
+  source.resync_to_restart = jpeg_resync_to_restart;
+  source.term_source = (gpointer) exo_noop;
+
+  /* setup the JPEG decompress struct */
+  jpeg_create_decompress (&cinfo);
+  cinfo.src = &source;
+
+  /* read the JPEG header from the file */
+  jpeg_read_header (&cinfo, TRUE);
+
+  /* configure the JPEG decompress struct */
+  cinfo.scale_num = 1;
+  cinfo.scale_denom = tvtj_denom (cinfo.image_width, cinfo.image_height, size);
+  cinfo.dct_method = JDCT_FASTEST;
+  cinfo.do_fancy_upsampling = FALSE;
+
+  /* calculate the output dimensions */
+  jpeg_calc_output_dimensions (&cinfo);
+
+  /* verify the JPEG color space */
+  if (cinfo.out_color_space != JCS_GRAYSCALE
+      && cinfo.out_color_space != JCS_CMYK
+      && cinfo.out_color_space != JCS_RGB)
+    {
+      /* we don't support this color space */
+      goto error;
+    }
+
+  /* start the decompression */
+  jpeg_start_decompress (&cinfo);
+
+  /* allocate the pixel buffer and extra space for grayscale data */
+  if (G_LIKELY (cinfo.num_components != 1))
+    {
+      pixels = g_malloc (cinfo.output_width * cinfo.output_height * cinfo.num_components);
+      out_num_components = cinfo.num_components;
+      lines[0] = pixels;
+    }
+  else
+    {
+      pixels = g_malloc (cinfo.output_width * cinfo.output_height * 3);
+      buffer = g_malloc (cinfo.output_width);
+      out_num_components = 3;
+      lines[0] = buffer;
+    }
+
+  /* process the JPEG data */
+  for (p = pixels; cinfo.output_scanline < cinfo.output_height; )
+    {
+      jpeg_read_scanlines (&cinfo, lines, 1);
+
+      /* convert the data to RGB */
+      if (cinfo.num_components == 1)
+        {
+          for (n = 0; n < cinfo.output_width; ++n)
+            {
+              p[n * 3 + 0] = buffer[n];
+              p[n * 3 + 1] = buffer[n];
+              p[n * 3 + 2] = buffer[n];
+            }
+          p += cinfo.output_width * 3;
+        }
+      else
+        {
+          if (cinfo.out_color_space == JCS_CMYK)
+            tvtj_convert_cmyk_to_rgb (&cinfo, lines[0]);
+          lines[0] += cinfo.output_width * cinfo.num_components;
+        }
+    }
+
+  /* release the grayscale buffer */
+  g_free (buffer);
+  buffer = NULL;
+
+  /* finish the JPEG decompression */
+  jpeg_finish_decompress (&cinfo);
+  jpeg_destroy_decompress (&cinfo);
+
+  /* unmap the file content */
+  munmap (content, statb.st_size);
+
+  /* generate a pixbuf for the pixel data */
+  return gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB,
+                                   (cinfo.out_color_components == 4), 8,
+                                   cinfo.output_width, cinfo.output_height,
+                                   cinfo.output_width * out_num_components,
+                                   (GdkPixbufDestroyNotify) g_free, NULL);
+
+error:
+  jpeg_destroy_decompress (&cinfo);
+  munmap (content, statb.st_size);
+  g_free (buffer);
+  g_free (pixels);
+#endif
+
+  return NULL;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb-jpeg.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,37 @@
+/* $Id: thunar-vfs-thumb-jpeg.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_THUMB_JPEG_H__
+#define __THUNAR_VFS_THUMB_JPEG_H__
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+G_BEGIN_DECLS;
+
+GdkPixbuf *thunar_vfs_thumb_jpeg_load (const gchar *path,
+                                       gint         size) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_THUMB_JPEG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,917 @@
+/* $Id: thunar-vfs-thumb.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <png.h>
+
+#include <thunar-vfs/thunar-vfs-enum-types.h>
+#include <thunar-vfs/thunar-vfs-mime-database.h>
+#include <thunar-vfs/thunar-vfs-thumb-jpeg.h>
+#include <thunar-vfs/thunar-vfs-thumb.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#ifdef HAVE_GCONF
+#include <gconf/gconf-client.h>
+#endif
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_rename(oldfilename, newfilename) (rename ((oldfilename), (newfilename)))
+#define g_unlink(filename) (unlink ((filename)))
+#endif
+
+
+
+enum
+{
+  PROP_0,
+  PROP_SIZE,
+};
+
+
+
+static void thunar_vfs_thumb_factory_class_init   (ThunarVfsThumbFactoryClass *klass);
+static void thunar_vfs_thumb_factory_init         (ThunarVfsThumbFactory      *factory);
+static void thunar_vfs_thumb_factory_finalize     (GObject                    *object);
+static void thunar_vfs_thumb_factory_get_property (GObject                    *object,
+                                                   guint                       prop_id,
+                                                   GValue                     *value,
+                                                   GParamSpec                 *pspec);
+static void thunar_vfs_thumb_factory_set_property (GObject                    *object,
+                                                   guint                       prop_id,
+                                                   const GValue               *value,
+                                                   GParamSpec                 *pspec);
+
+
+
+struct _ThunarVfsThumbFactoryClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsThumbFactory
+{
+  GObject __parent__;
+
+  ThunarVfsMimeDatabase *mime_database;
+  ThunarVfsMimeInfo     *mime_image_jpeg;
+
+  GHashTable            *pixbuf_mime_infos;
+
+  gchar                 *base_path;
+  gchar                 *fail_path;
+  ThunarVfsThumbSize     size;
+
+#ifdef HAVE_GCONF
+  GConfClient           *client;
+  GHashTable            *scripts;
+#endif
+};
+
+
+
+G_DEFINE_TYPE (ThunarVfsThumbFactory, thunar_vfs_thumb_factory, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_vfs_thumb_factory_class_init (ThunarVfsThumbFactoryClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_thumb_factory_finalize;
+  gobject_class->get_property = thunar_vfs_thumb_factory_get_property;
+  gobject_class->set_property = thunar_vfs_thumb_factory_set_property;
+
+  /**
+   * ThunarVfsThumbFactory::size:
+   *
+   * The #ThunarVfsThumbSize at which thumbnails should be
+   * looked up and saved for this #ThunarVfsThumbFactory.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_SIZE,
+                                   g_param_spec_enum ("size",
+                                                      _("Size"),
+                                                      _("The desired thumbnail size"),
+                                                      THUNAR_VFS_TYPE_VFS_THUMB_SIZE,
+                                                      THUNAR_VFS_THUMB_SIZE_NORMAL,
+                                                      G_PARAM_CONSTRUCT_ONLY | EXO_PARAM_READWRITE));
+}
+
+
+
+static void
+thunar_vfs_thumb_factory_init (ThunarVfsThumbFactory *factory)
+{
+  ThunarVfsMimeInfo *mime_info;
+  GSList            *formats;
+  GSList            *lp;
+  gchar            **mime_types;
+  guint              n;
+
+  /* take a reference on the mime database */
+  factory->mime_database = thunar_vfs_mime_database_get_default ();
+
+  /* take a reference on the image/jpeg mime info */
+  factory->mime_image_jpeg = thunar_vfs_mime_database_get_info (factory->mime_database, "image/jpeg");
+
+  /* pre-allocate the failed path, so we don't need to do that on every method call */
+  factory->fail_path = g_strconcat (xfce_get_homedir (),
+                                    G_DIR_SEPARATOR_S ".thumbnails"
+                                    G_DIR_SEPARATOR_S "fail"
+                                    G_DIR_SEPARATOR_S "thunar-vfs"
+                                    G_DIR_SEPARATOR_S, NULL);
+
+  /* we default to normal size here, so we don't need to override the constructor */
+  factory->base_path = g_strconcat (xfce_get_homedir (), G_DIR_SEPARATOR_S ".thumbnails" G_DIR_SEPARATOR_S "normal" G_DIR_SEPARATOR_S, NULL);
+  factory->size = THUNAR_VFS_THUMB_SIZE_NORMAL;
+
+  /* determine the MIME types supported by GdkPixbuf */
+  factory->pixbuf_mime_infos = g_hash_table_new_full (g_direct_hash, g_direct_equal, (GDestroyNotify) thunar_vfs_mime_info_unref, NULL);
+  formats = gdk_pixbuf_get_formats ();
+  for (lp = formats; lp != NULL; lp = lp->next)
+    if (!gdk_pixbuf_format_is_disabled (lp->data))
+      {
+        mime_types = gdk_pixbuf_format_get_mime_types (lp->data);
+        for (n = 0; mime_types[n] != NULL; ++n)
+          {
+            mime_info = thunar_vfs_mime_database_get_info (factory->mime_database, mime_types[n]);
+            if (G_LIKELY (mime_info != NULL))
+              g_hash_table_replace (factory->pixbuf_mime_infos, mime_info, GUINT_TO_POINTER (1));
+          }
+        g_strfreev (mime_types);
+      }
+  g_slist_free (formats);
+
+#ifdef HAVE_GCONF
+  /* grab a reference on the default GConf client */
+  factory->client = gconf_client_get_default ();
+
+  /* allocate the hash table for the GNOME thumbnailer scripts */
+  factory->scripts = g_hash_table_new_full (g_direct_hash, g_direct_equal, (GDestroyNotify) thunar_vfs_mime_info_unref, g_free);
+
+  /* check if the GNOME thumbnailers are enabled */
+  if (!gconf_client_get_bool (factory->client, "/desktop/gnome/thumbnailers/disable_all", NULL))
+    {
+      /* determine the MIME types supported by the GNOME thumbnailers */
+      formats = gconf_client_all_dirs (factory->client, "/desktop/gnome/thumbnailers", NULL);
+      for (lp = formats; lp != NULL; lp = lp->next)
+        {
+          gchar *mime_type;
+          gchar *script;
+          gchar *format = lp->data;
+          gchar  key[1024];
+
+          /* check if the given thumbnailer is enabled */
+          g_snprintf (key, sizeof (key), "%s/enable", format);
+          if (gconf_client_get_bool (factory->client, key, NULL))
+            {
+              /* determine the command */
+              g_snprintf (key, sizeof (key), "%s/command", format);
+              script = gconf_client_get_string (factory->client, key, NULL);
+              if (G_LIKELY (script != NULL))
+                {
+                  mime_type = strrchr (format, '/');
+                  if (G_LIKELY (mime_type != NULL))
+                    {
+                      /* skip past slash */
+                      ++mime_type;
+
+                      /* convert '@' to slash in the mime_type */
+                      for (n = 0; mime_type[n] != '\0'; ++n)
+                        if (G_UNLIKELY (mime_type[n] == '@'))
+                          mime_type[n] = '/';
+
+                      /* determine the mime info for the given mime_type */
+                      mime_info = thunar_vfs_mime_database_get_info (factory->mime_database, mime_type);
+                      if (G_LIKELY (mime_info != NULL))
+                        {
+                          g_hash_table_replace (factory->scripts, mime_info, script);
+                          script = NULL;
+                        }
+                    }
+                }
+
+              g_free (script);
+            }
+
+          g_free (format);
+        }
+
+      g_slist_free (formats);
+    }
+#endif
+}
+
+
+
+static void
+thunar_vfs_thumb_factory_finalize (GObject *object)
+{
+  ThunarVfsThumbFactory *factory = THUNAR_VFS_THUMB_FACTORY (object);
+
+#ifdef HAVE_GCONF
+  /* disconnect from the GConf client */
+  g_object_unref (G_OBJECT (factory->client));
+
+  /* release the scripts hash table */
+  g_hash_table_destroy (factory->scripts);
+#endif
+
+  /* release the image/jpeg mime info */
+  thunar_vfs_mime_info_unref (factory->mime_image_jpeg);
+
+  /* release the reference on the mime database */
+  g_object_unref (G_OBJECT (factory->mime_database));
+
+  /* destroy the hash table with mime infos supported by GdkPixbuf */
+  g_hash_table_destroy (factory->pixbuf_mime_infos);
+
+  /* free the thumbnail paths */
+  g_free (factory->base_path);
+  g_free (factory->fail_path);
+
+  (*G_OBJECT_CLASS (thunar_vfs_thumb_factory_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_thumb_factory_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec)
+{
+  ThunarVfsThumbFactory *factory = THUNAR_VFS_THUMB_FACTORY (object);
+
+  switch (prop_id)
+    {
+    case PROP_SIZE:
+      g_value_set_enum (value, factory->size);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunar_vfs_thumb_factory_set_property (GObject      *object,
+                                       guint         prop_id,
+                                       const GValue *value,
+                                       GParamSpec   *pspec)
+{
+  ThunarVfsThumbFactory *factory = THUNAR_VFS_THUMB_FACTORY (object);
+
+  switch (prop_id)
+    {
+    case PROP_SIZE:
+      if (G_UNLIKELY (g_value_get_enum (value) == THUNAR_VFS_THUMB_SIZE_LARGE))
+        {
+          /* free the previous base path */
+          g_free (factory->base_path);
+
+          /* setup the new base path */
+          factory->base_path = g_strconcat (xfce_get_homedir (), G_DIR_SEPARATOR_S ".thumbnails" G_DIR_SEPARATOR_S "large" G_DIR_SEPARATOR_S, NULL);
+          factory->size = THUNAR_VFS_THUMB_SIZE_LARGE;
+        }
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_thumb_factory_new:
+ * @size : the desired #ThunarVfsThumbSize.
+ *
+ * Allocates a new #ThunarVfsThumbFactory, that is able to
+ * load and store thumbnails in the given @size.
+ *
+ * The caller is responsible to free the returned object
+ * using g_object_unref() when no longer needed.
+ *
+ * Return value: the newly allocated #ThunarVfsThumbFactory.
+ **/
+ThunarVfsThumbFactory*
+thunar_vfs_thumb_factory_new (ThunarVfsThumbSize size)
+{
+  return g_object_new (THUNAR_VFS_TYPE_THUMB_FACTORY, "size", size, NULL);
+}
+
+
+
+/**
+ * thunar_vfs_thumb_factory_lookup:
+ * @factory : a #ThunarVfsThumbFactory.
+ * @info    : the #ThunarVfsInfo of the original file.
+ *
+ * Looks up the path to a thumbnail for @info in @factory and returns
+ * the absolute path to the thumbnail file if a valid thumbnail is
+ * found. Else %NULL is returned.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: the path to a valid thumbnail for @info in @factory
+ *               or %NULL if no valid thumbnail was found.
+ **/
+gchar*
+thunar_vfs_thumb_factory_lookup_thumbnail (ThunarVfsThumbFactory *factory,
+                                           const ThunarVfsInfo   *info)
+{
+  gchar  uri[THUNAR_VFS_PATH_MAXURILEN];
+  gchar *path;
+  gchar *md5;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), NULL);
+  g_return_val_if_fail (info != NULL, NULL);
+
+  /* determine the URI for the path */
+  if (thunar_vfs_path_to_uri (info->path, uri, sizeof (uri), NULL) < 0)
+    return FALSE;
+
+  /* determine the path to the thumbnail for the factory */
+  md5 = exo_str_get_md5_str (uri);
+  path = g_strconcat (factory->base_path, md5, ".png", NULL);
+  g_free (md5);
+
+  /* check if the path contains a valid thumbnail */
+  if (thunar_vfs_thumbnail_is_valid (path, uri, info->mtime))
+    return path;
+
+  /* no valid thumbnail in the global repository */
+  g_free (path);
+
+  return NULL;
+}
+
+
+
+/**
+ * thunar_vfs_thumb_factory_can_thumbnail:
+ * @factory : a #ThunarVfsThumbFactory.
+ * @info    : the #ThunarVfsInfo of a file.
+ *
+ * Checks if @factory can generate a thumbnail for
+ * the file specified by @info.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: %TRUE if @factory can generate a thumbnail for @info.
+ **/
+gboolean
+thunar_vfs_thumb_factory_can_thumbnail (ThunarVfsThumbFactory *factory,
+                                        const ThunarVfsInfo   *info)
+{
+  ThunarVfsPath *path;
+  const gchar   *name;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), FALSE);
+  g_return_val_if_fail (info != NULL, FALSE);
+
+  /* we can only handle thumbnails for regular files */
+  if (G_UNLIKELY (info->type != THUNAR_VFS_FILE_TYPE_REGULAR))
+    return FALSE;
+
+  /* we really don't want to generate a thumbnail for a thumbnail */
+  for (path = info->path; path != NULL; path = thunar_vfs_path_get_parent (path))
+    {
+      name = thunar_vfs_path_get_name (path);
+      if (strcmp (name, ".thumbnails") == 0 || strcmp (name, ".thumblocal") == 0)
+        return FALSE;
+    }
+
+  /* check GdkPixbuf supports the given mime info */
+  if (g_hash_table_lookup (factory->pixbuf_mime_infos, info->mime_info))
+    return !thunar_vfs_thumb_factory_has_failed_thumbnail (factory, info);
+
+#ifdef HAVE_GCONF
+  /* check if we have a GNOME thumbnailer for the given mime info */
+  if (g_hash_table_lookup (factory->scripts, info->mime_info) != NULL)
+    return !thunar_vfs_thumb_factory_has_failed_thumbnail (factory, info);
+#endif
+
+  return FALSE;
+}
+
+
+
+/**
+ * thunar_vfs_thumb_factory_has_failed_thumbnail:
+ * @factory : a #ThunarVfsThumbFactory.
+ * @info    : the #ThunarVfsInfo of a file.
+ *
+ * Checks whether we know that @factory won't be able to generate
+ * a thumbnail for the file referred to by @info.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: %TRUE if @factory knows that it cannot generate
+ *               a thumbnail for @info, else %TRUE.
+ **/
+gboolean
+thunar_vfs_thumb_factory_has_failed_thumbnail (ThunarVfsThumbFactory *factory,
+                                               const ThunarVfsInfo   *info)
+{
+  gchar  uri[THUNAR_VFS_PATH_MAXURILEN];
+  gchar  path[4096];
+  gchar *md5;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), FALSE);
+  g_return_val_if_fail (info != NULL, FALSE);
+
+  /* determine the URI of the info */
+  if (thunar_vfs_path_to_uri (info->path, uri, sizeof (uri), NULL) < 0)
+    return FALSE;
+
+  /* determine the path to the thumbnail */
+  md5 = exo_str_get_md5_str (uri);
+  g_snprintf (path, sizeof (path), "%s%s.png", factory->fail_path, md5);
+  g_free (md5);
+
+  return thunar_vfs_thumbnail_is_valid (path, uri, info->mtime);
+}
+
+
+
+#ifdef HAVE_GCONF
+static gchar*
+gnome_thumbnailer_script_expand (const gchar *script,
+                                 const gchar *ipath,
+                                 const gchar *opath,
+                                 gint         size)
+{
+  const gchar *p;
+  GString     *s;
+  gchar       *quoted;
+  gchar       *uri;
+
+  s = g_string_new (NULL);
+  for (p = script; *p != '\0'; ++p)
+    {
+      if (G_LIKELY (*p != '%'))
+        {
+          g_string_append_c (s, *p);
+          continue;
+        }
+
+      switch (*++p)
+        {
+        case 'u':
+          uri = g_filename_to_uri (ipath, NULL, NULL);
+          if (G_LIKELY (uri != NULL))
+            {
+              quoted = g_shell_quote (uri);
+              g_string_append (s, quoted);
+              g_free (quoted);
+              g_free (uri);
+            }
+          break;
+
+        case 'i':
+          quoted = g_shell_quote (ipath);
+          g_string_append (s, quoted);
+          g_free (quoted);
+          break;
+
+        case 'o':
+          quoted = g_shell_quote (opath);
+          g_string_append (s, quoted);
+          g_free (quoted);
+          break;
+
+        case 's':
+          g_string_append_printf (s, "%d", size);
+          break;
+
+        case '%':
+          g_string_append_c (s, '%');
+          break;
+
+        case '\0':
+          --p;
+          break;
+
+        default:
+          break;
+        }
+    }
+  return g_string_free (s, FALSE);
+}
+
+static GdkPixbuf*
+gnome_thumbnailer_script_run (const gchar *script,
+                              const gchar *path,
+                              gint         size)
+{
+  GdkPixbuf *pixbuf = NULL;
+  gchar     *tmp_path;
+  gchar     *command;
+  gint       status;
+  gint       fd;
+
+  /* create a temporary file for the thumbnailer */
+  fd = g_file_open_tmp (".thunar-vfs-thumbnail.XXXXXX", &tmp_path, NULL);
+  if (G_UNLIKELY (fd < 0))
+    return NULL;
+
+  /* determine the command for the script */
+  command = gnome_thumbnailer_script_expand (script, path, tmp_path, size);
+  if (G_LIKELY (command != NULL))
+    {
+      /* run the thumbnailer script and load the generated file */
+      if (g_spawn_command_line_sync (command, NULL, NULL, &status, NULL) && WIFEXITED (status) && WEXITSTATUS (status) == 0)
+        pixbuf = gdk_pixbuf_new_from_file (tmp_path, NULL);
+    }
+
+  /* unlink the temporary file */
+  g_unlink (tmp_path);
+
+  /* close the temporary file */
+  close (fd);
+
+  /* cleanup */
+  g_free (tmp_path);
+  g_free (command);
+
+  return pixbuf;
+}
+#endif
+
+
+
+/**
+ * thunar_vfs_thumb_factory_generate_thumbnail:
+ * @factory : a #ThunarVfsThumbFactory.
+ * @info    : the #ThunarVfsInfo of the file for which a thumbnail
+ *            should be generated.
+ *
+ * Tries to generate a thumbnail for the file referred to by @info in
+ * @factory.
+ *
+ * The caller is responsible to free the returned #GdkPixbuf using
+ * g_object_unref() when no longer needed.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: the thumbnail for the @uri or %NULL.
+ **/
+GdkPixbuf*
+thunar_vfs_thumb_factory_generate_thumbnail (ThunarVfsThumbFactory *factory,
+                                             const ThunarVfsInfo   *info)
+{
+  GdkPixbuf *pixbuf = NULL;
+  GdkPixbuf *scaled;
+#ifdef HAVE_GCONF
+  gchar     *script;
+#endif
+  gchar     *path;
+  gint       size;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), NULL);
+  g_return_val_if_fail (info != NULL, NULL);
+
+  /* determine the pixel size of the thumbnail */
+  size = G_LIKELY (factory->size == THUNAR_VFS_THUMB_SIZE_NORMAL) ? 128 : 256;
+
+  /* determine the absolute path to the file */
+  path = thunar_vfs_path_dup_string (info->path);
+
+#ifdef HAVE_GCONF
+  /* check if we have a GNOME thumbnailer for the given mime info */
+  script = g_hash_table_lookup (factory->scripts, info->mime_info);
+  if (G_UNLIKELY (script != NULL))
+    pixbuf = gnome_thumbnailer_script_run (script, path, size);
+#endif
+
+  /* try the fast JPEG thumbnailer */
+  if (G_LIKELY (pixbuf == NULL && info->mime_info == factory->mime_image_jpeg))
+    pixbuf = thunar_vfs_thumb_jpeg_load (path, size);
+
+  /* fallback to GdkPixbuf based loading */
+  if (G_LIKELY (pixbuf == NULL))
+    pixbuf = gdk_pixbuf_new_from_file (path, NULL);
+
+  /* check if we need to scale the image */
+  if (pixbuf != NULL && (gdk_pixbuf_get_width (pixbuf) > size || gdk_pixbuf_get_height (pixbuf) > size))
+    {
+      scaled = exo_gdk_pixbuf_scale_ratio (pixbuf, size);
+      g_object_unref (G_OBJECT (pixbuf));
+      pixbuf = scaled;
+    }
+
+  /* cleanup */
+  g_free (path);
+
+  return pixbuf;
+}
+
+
+
+/**
+ * thunar_vfs_thumb_factory_store_thumbnail:
+ * @factory : a #ThunarVfsThumbFactory.
+ * @pixbuf  : the thumbnail #GdkPixbuf to store or %NULL
+ *            to remember the thumbnail for @uri as failed.
+ * @info    : the #ThunarVfsInfo of the original file.
+ * @error   : return location for errors or %NULL.
+ *
+ * Stores @pixbuf as thumbnail for @info in the right place, according
+ * to the size set for @factory.
+ *
+ * If you specify %NULL for @pixbuf, the @factory will remember that
+ * the thumbnail generation for @info failed.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: %TRUE if the thumbnail was stored successfully,
+ *               else %FALSE.
+ **/
+gboolean
+thunar_vfs_thumb_factory_store_thumbnail (ThunarVfsThumbFactory *factory,
+                                          const GdkPixbuf       *pixbuf,
+                                          const ThunarVfsInfo   *info,
+                                          GError               **error)
+{
+  const gchar *base_path;
+  GdkPixbuf   *thumbnail;
+  gboolean     succeed;
+  gchar       *dst_path;
+  gchar       *tmp_path;
+  gchar       *mtime;
+  gchar       *size;
+  gchar       *md5;
+  gchar       *uri;
+  gint         tmp_fd;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_THUMB_FACTORY (factory), FALSE);
+  g_return_val_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf), FALSE);
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* check whether we should save a thumbnail or remember failed generation */
+  base_path = G_LIKELY (pixbuf != NULL) ? factory->base_path : factory->fail_path;
+
+  /* verify that the target directory exists */
+  if (!xfce_mkdirhier (base_path, 0700, error))
+    return FALSE;
+
+  /* determine the URI of the file */
+  uri = thunar_vfs_path_dup_uri (info->path);
+
+  /* determine the MD5 sum for the URI */
+  md5 = exo_str_get_md5_str (uri);
+
+  /* try to open a temporary file to write the thumbnail to */
+  tmp_path = g_strconcat (base_path, md5, ".png.XXXXXX", NULL);
+  tmp_fd = g_mkstemp (tmp_path);
+  if (G_UNLIKELY (tmp_fd < 0))
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+      g_free (md5);
+      g_free (uri);
+      return FALSE;
+    }
+
+  /* close the temporary file as it exists now, and hence
+   * we successfully avoided a race condition there.
+   */
+  close (tmp_fd);
+
+  /* generate a 1x1 image if we're storing a failure */
+  thumbnail = (pixbuf != NULL) ? GDK_PIXBUF (pixbuf) : gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
+
+  /* determine string representations for the modification time and size */
+  mtime = g_strdup_printf ("%lu", (gulong) info->mtime);
+  size = g_strdup_printf ("%" G_GUINT64_FORMAT, (guint64) info->size);
+
+  /* write the thumbnail to the temporary location */
+  succeed = gdk_pixbuf_save (thumbnail, tmp_path, "png", error,
+                             "tEXt::Thumb::URI", uri,
+                             "tEXt::Thumb::Size", size,
+                             "tEXt::Thumb::MTime", mtime,
+                             "tEXt::Thumb::Mimetype", thunar_vfs_mime_info_get_name (info->mime_info),
+                             "tEXt::Software", "Thunar-VFS Thumbnail Factory",
+                             NULL);
+
+  /* drop the failed thumbnail pixbuf (if any) */
+  if (G_UNLIKELY (pixbuf == NULL))
+    g_object_unref (G_OBJECT (thumbnail));
+
+  /* rename the file to the final location */
+  if (G_LIKELY (succeed))
+    {
+      dst_path = g_strconcat (base_path, md5, ".png", NULL);
+      if (G_UNLIKELY (g_rename (tmp_path, dst_path) < 0))
+        {
+          g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+          succeed = FALSE;
+        }
+      g_free (dst_path);
+    }
+
+  /* cleanup */
+  g_free (tmp_path);
+  g_free (mtime);
+  g_free (size);
+  g_free (md5);
+  g_free (uri);
+
+  return succeed;
+}
+
+
+
+/**
+ * thunar_vfs_thumbnail_for_path:
+ * @path : the #ThunarVfsPath to the original file.
+ * @size : the desired #ThunarVfsThumbSize.
+ *
+ * Returns the absolute path to the thumbnail location
+ * for the file described by @path, at the given @size.
+ *
+ * The caller is responsible to free the returned
+ * string using g_free() when no longer needed.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: the absolute path to the thumbnail
+ *               location for @path at @size.
+ **/
+gchar*
+thunar_vfs_thumbnail_for_path (const ThunarVfsPath *path,
+                               ThunarVfsThumbSize   size)
+{
+  gchar *thumbnail;
+  gchar *md5;
+  gchar *uri;
+
+  uri = thunar_vfs_path_dup_uri (path);
+  md5 = exo_str_get_md5_str (uri);
+  thumbnail = g_strconcat (xfce_get_homedir (),
+                           G_DIR_SEPARATOR_S ".thumbnails" G_DIR_SEPARATOR_S,
+                           (size == THUNAR_VFS_THUMB_SIZE_NORMAL) ? "normal" : "large",
+                           G_DIR_SEPARATOR_S, md5, ".png", NULL);
+  g_free (md5);
+  g_free (uri);
+
+  return thumbnail;
+}
+
+
+
+/**
+ * thunar_vfs_thumbnail_is_valid:
+ * @thumbnail : the absolute path to a thumbnail file.
+ * @uri       : the URI of the original file.
+ * @mtime     : the modification time of the original file.
+ *
+ * Checks whether the file located at @thumbnail contains a
+ * valid thumbnail for the file described by @uri and @mtime.
+ *
+ * The usage of this method is thread-safe.
+ *
+ * Return value: %TRUE if @thumbnail is a valid thumbnail for
+ *               the file referred to by @uri, else %FALSE.
+ **/
+gboolean
+thunar_vfs_thumbnail_is_valid (const gchar      *thumbnail,
+                               const gchar      *uri,
+                               ThunarVfsFileTime mtime)
+{
+  png_structp  png_ptr;
+  png_infop    info_ptr;
+  png_textp    text_ptr;
+  gboolean     is_valid = FALSE;
+  gchar        signature[4];
+  FILE        *fp;
+  gint         n_checked;
+  gint         n_text;
+  gint         n;
+
+  g_return_val_if_fail (g_path_is_absolute (thumbnail), FALSE);
+  g_return_val_if_fail (uri != NULL && *uri != '\0', FALSE);
+
+  /* try to open the thumbnail file */
+  fp = fopen (thumbnail, "r");
+  if (G_UNLIKELY (fp == NULL))
+    return FALSE;
+
+  /* read the png signature */
+  if (G_UNLIKELY (fread (signature, 1, sizeof (signature), fp) != sizeof (signature)))
+    goto done0;
+
+  /* verify the png signature */
+  if (G_LIKELY (png_check_sig ((png_bytep) signature, sizeof (signature))))
+    rewind (fp);
+  else
+    goto done0;
+
+  /* allocate the png read structure */
+  png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+  if (G_UNLIKELY (png_ptr == NULL))
+    goto done0;
+
+  /* allocate the png info structure */
+  info_ptr = png_create_info_struct (png_ptr);
+  if (G_UNLIKELY (info_ptr == NULL))
+    {
+      png_destroy_read_struct (&png_ptr, NULL, NULL);
+      goto done0;
+    }
+
+  /* read the png info from the file */
+  png_init_io (png_ptr, fp);
+  png_read_info (png_ptr, info_ptr);
+
+  /* verify the tEXt attributes defined by the thumbnail spec */
+  n_text = png_get_text (png_ptr, info_ptr, &text_ptr, &n_text);
+  for (n = 0, n_checked = 0; n_checked < 2 && n < n_text; ++n)
+    {
+      if (strcmp (text_ptr[n].key, "Thumb::MTime") == 0)
+        {
+          /* verify the modification time */
+          if (G_UNLIKELY (atol (text_ptr[n].text) != mtime))
+            goto done1;
+          ++n_checked;
+        }
+      else if (strcmp (text_ptr[n].key, "Thumb::URI") == 0)
+        {
+          /* check if the URIs are equal */
+          if (strcmp (text_ptr[n].text, uri) != 0)
+            goto done1;
+          ++n_checked;
+        }
+    }
+
+  /* check if all required attributes were checked successfully */
+  is_valid = (n_checked == 2);
+
+done1:
+  png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
+done0:
+  fclose (fp);
+  return is_valid;
+}
+
+
+
+#define __THUNAR_VFS_THUMB_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-thumb.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,86 @@
+/* $Id: thunar-vfs-thumb.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2004-2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_THUMB_H__
+#define __THUNAR_VFS_THUMB_H__
+
+#include <thunar-vfs/thunar-vfs-info.h>
+#include <thunar-vfs/thunar-vfs-job.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsThumbFactoryClass ThunarVfsThumbFactoryClass;
+typedef struct _ThunarVfsThumbFactory      ThunarVfsThumbFactory;
+
+#define THUNAR_VFS_TYPE_THUMB_FACTORY             (thunar_vfs_thumb_factory_get_type ())
+#define THUNAR_VFS_THUMB_FACTORY(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_THUMB_FACTORY, ThunarVfsThumbFactory))
+#define THUNAR_VFS_THUMB_FACTORY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_THUMB_FACTORY, ThunarVfsThumbFactoryClass))
+#define THUNAR_VFS_IS_THUMB_FACTORY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_THUMB_FACTORY))
+#define THUNAR_VFS_IS_THUMB_FACTORY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_THUMB_FACTORY))
+#define THUNAR_VFS_THUMB_FACTORY_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_THUMB_FACTORY, ThunarVfsThumbFactoryClass))
+
+/**
+ * ThunarVfsThumbSize:
+ * @THUNAR_VFS_THUMB_SIZE_NORMAL : thumbnails at size 128x128.
+ * @THUNAR_VFS_THUMB_SIZE_LARGE  : thumbnails at size 256x256.
+ *
+ * The desired size of thumbnails loaded by a #ThunarVfsThumbFactory.
+ **/
+typedef enum
+{
+  THUNAR_VFS_THUMB_SIZE_NORMAL,
+  THUNAR_VFS_THUMB_SIZE_LARGE,
+} ThunarVfsThumbSize;
+
+GType                  thunar_vfs_thumb_factory_get_type              (void) G_GNUC_CONST;
+
+ThunarVfsThumbFactory *thunar_vfs_thumb_factory_new                   (ThunarVfsThumbSize       size) G_GNUC_MALLOC;
+
+gchar                 *thunar_vfs_thumb_factory_lookup_thumbnail      (ThunarVfsThumbFactory   *factory,
+                                                                       const ThunarVfsInfo     *info) G_GNUC_MALLOC;
+
+gboolean               thunar_vfs_thumb_factory_can_thumbnail         (ThunarVfsThumbFactory   *factory,
+                                                                       const ThunarVfsInfo     *info);
+
+gboolean               thunar_vfs_thumb_factory_has_failed_thumbnail  (ThunarVfsThumbFactory   *factory,
+                                                                       const ThunarVfsInfo     *info);
+
+GdkPixbuf             *thunar_vfs_thumb_factory_generate_thumbnail    (ThunarVfsThumbFactory   *factory,
+                                                                       const ThunarVfsInfo     *info) G_GNUC_MALLOC;
+
+gboolean               thunar_vfs_thumb_factory_store_thumbnail       (ThunarVfsThumbFactory   *factory,
+                                                                       const GdkPixbuf         *pixbuf,
+                                                                       const ThunarVfsInfo     *info,
+                                                                       GError                 **error);
+
+
+gchar   *thunar_vfs_thumbnail_for_path  (const ThunarVfsPath *path,
+                                         ThunarVfsThumbSize   size) G_GNUC_MALLOC;
+gboolean thunar_vfs_thumbnail_is_valid  (const gchar         *thumbnail,
+                                         const gchar         *uri,
+                                         ThunarVfsFileTime    mtime);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_THUMB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,862 @@
+/* $Id: thunar-vfs-transfer-job.c 18850 2005-11-14 21:21:05Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-monitor.h>
+#include <thunar-vfs/thunar-vfs-scandir.h>
+#include <thunar-vfs/thunar-vfs-transfer-job.h>
+#include <thunar-vfs/thunar-vfs-xfer.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_lstat(path, statb) (lstat ((path), (statb)))
+#define g_rmdir(path) (rmdir ((path)))
+#define g_unlink(path) (unlink ((path)))
+#endif
+
+
+
+typedef struct _ThunarVfsTransferPair ThunarVfsTransferPair;
+
+
+
+static void                   thunar_vfs_transfer_job_class_init    (ThunarVfsTransferJobClass *klass);
+static void                   thunar_vfs_transfer_job_init          (ThunarVfsTransferJob      *transfer_job);
+static void                   thunar_vfs_transfer_job_finalize      (GObject                   *object);
+static void                   thunar_vfs_transfer_job_execute       (ThunarVfsJob              *job);
+static void                   thunar_vfs_transfer_job_update        (ThunarVfsTransferJob      *transfer_job);
+static gboolean               thunar_vfs_transfer_job_progress      (ThunarVfsFileSize          current_total_size,
+                                                                     ThunarVfsFileSize          current_completed_size,
+                                                                     gpointer                   user_data);
+static GList                 *thunar_vfs_transfer_job_collect_pairs (ThunarVfsTransferJob      *transfer_job,
+                                                                     ThunarVfsTransferPair     *pair,
+                                                                     GError                   **error);
+static void                   thunar_vfs_transfer_job_copy_pair     (ThunarVfsTransferJob      *transfer_job,
+                                                                     ThunarVfsTransferPair     *pair);
+static gboolean               thunar_vfs_transfer_job_overwrite     (ThunarVfsTransferJob      *transfer_job,
+                                                                     const GError              *error);
+static gboolean               thunar_vfs_transfer_job_skip          (ThunarVfsTransferJob      *transfer_job,
+                                                                     const GError              *error);
+static void                   thunar_vfs_transfer_job_skip_list_add (ThunarVfsTransferJob      *transfer_job,
+                                                                     ThunarVfsTransferPair     *pair);
+static gboolean               thunar_vfs_transfer_job_skip_list_has (ThunarVfsTransferJob      *transfer_job,
+                                                                     const ThunarVfsPath       *source_path);
+static ThunarVfsTransferPair *thunar_vfs_transfer_job_alloc_pair    (ThunarVfsTransferJob      *transfer_job,
+                                                                     ThunarVfsPath             *source_path,
+                                                                     ThunarVfsPath             *target_path,
+                                                                     gboolean                   toplevel,
+                                                                     GError                   **error);
+static inline void            thunar_vfs_transfer_job_free_pair     (ThunarVfsTransferJob      *transfer_job,
+                                                                     ThunarVfsTransferPair     *pair);
+
+
+
+struct _ThunarVfsTransferJobClass
+{
+  ThunarVfsInteractiveJobClass __parent__;
+};
+
+struct _ThunarVfsTransferJob
+{
+  ThunarVfsInteractiveJob __parent__;
+
+  /* the VFS monitor */
+  ThunarVfsMonitor *monitor;
+
+  /* the list of pairs */
+  GList            *pairs;
+
+  /* the pair chunks (alloc-only) */
+  GMemChunk        *pair_chunk;
+
+  /* whether to move files instead of copying them */
+  gboolean          move;
+
+  /* the amount of completeness */
+  ThunarVfsFileSize total_size;
+  ThunarVfsFileSize completed_size;
+
+  /* the last time we update the status info */
+  GTimeVal          last_update_time;
+
+  /* current file status */
+  gboolean          current_path_changed;
+  ThunarVfsPath    *current_path;
+  ThunarVfsFileSize current_total_size;
+  ThunarVfsFileSize current_completed_size;
+
+  /* list of directories that should be deleted when the job finishes */
+  GList            *directories_to_delete;
+
+  /* the list of toplevel ThunarVfsPath's that were created by this job */
+  GList            *new_files;
+
+  /* the list of directories to skip */
+  GList            *skip_list;
+};
+
+struct _ThunarVfsTransferPair
+{
+  ThunarVfsPath    *source_path;
+  ThunarVfsPath    *target_path;
+  ThunarVfsFileSize source_size;
+  guint             source_mode : 31;
+  gboolean          toplevel : 1;
+};
+
+
+
+G_DEFINE_TYPE (ThunarVfsTransferJob, thunar_vfs_transfer_job, THUNAR_VFS_TYPE_INTERACTIVE_JOB);
+
+
+
+static void
+thunar_vfs_transfer_job_class_init (ThunarVfsTransferJobClass *klass)
+{
+  ThunarVfsJobClass *thunarvfs_job_class;
+  GObjectClass      *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_transfer_job_finalize;
+
+  thunarvfs_job_class = THUNAR_VFS_JOB_CLASS (klass);
+  thunarvfs_job_class->execute = thunar_vfs_transfer_job_execute;
+}
+
+
+
+static void
+thunar_vfs_transfer_job_init (ThunarVfsTransferJob *transfer_job)
+{
+  /* connect to the VFS monitor */
+  transfer_job->monitor = thunar_vfs_monitor_get_default ();
+
+  /* allocate the pair chunk (alloc-only) */
+  transfer_job->pair_chunk = g_mem_chunk_new ("ThunarVfsTransferPair chunk",
+                                              sizeof (ThunarVfsTransferPair),
+                                              sizeof (ThunarVfsTransferPair) * 256,
+                                              G_ALLOC_ONLY);
+}
+
+
+
+static void
+thunar_vfs_transfer_job_finalize (GObject *object)
+{
+  ThunarVfsTransferJob *transfer_job = THUNAR_VFS_TRANSFER_JOB (object);
+  GList                *lp;
+
+  /* release the pairs */
+  for (lp = transfer_job->pairs; lp != NULL; lp = lp->next)
+    thunar_vfs_transfer_job_free_pair (transfer_job, lp->data);
+  g_list_free (transfer_job->pairs);
+
+  /* drop the list of directories to delete */
+  thunar_vfs_path_list_free (transfer_job->directories_to_delete);
+
+  /* release the new files list */
+  thunar_vfs_path_list_free (transfer_job->new_files);
+
+  /* release the skip list */
+  thunar_vfs_path_list_free (transfer_job->skip_list);
+
+  /* release the current path */
+  if (G_LIKELY (transfer_job->current_path != NULL))
+    thunar_vfs_path_unref (transfer_job->current_path);
+
+  /* destroy the pair chunk */
+  g_mem_chunk_destroy (transfer_job->pair_chunk);
+
+  /* disconnect from the VFS monitor */
+  g_object_unref (G_OBJECT (transfer_job->monitor));
+
+  /* call the parents finalize method */
+  (*G_OBJECT_CLASS (thunar_vfs_transfer_job_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_transfer_job_execute (ThunarVfsJob *job)
+{
+  ThunarVfsTransferPair *pair;
+  ThunarVfsTransferJob  *transfer_job = THUNAR_VFS_TRANSFER_JOB (job);
+  GError                *error;
+  gchar                 *source_absolute_path;
+  gchar                 *display_name;
+  GList                 *pairs;
+  GList                 *tmp;
+  GList                 *lp;
+
+  thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (job), _("Collecting files..."));
+
+  /* save the current list of pairs */
+  pairs = transfer_job->pairs;
+  transfer_job->pairs = NULL;
+
+  /* collect pairs recursively */
+  for (lp = pairs; lp != NULL; lp = lp->next)
+    {
+      // FIXME: Error handling?
+      pair = (ThunarVfsTransferPair *) lp->data;
+      tmp = thunar_vfs_transfer_job_collect_pairs (transfer_job, pair, NULL);
+      transfer_job->pairs = g_list_concat (transfer_job->pairs, tmp);
+      transfer_job->pairs = g_list_append (transfer_job->pairs, pair);
+    }
+
+  /* release the temporary list */
+  g_list_free (pairs);
+
+  /* reverse the pair list, so we have the directories first */
+  transfer_job->pairs = g_list_reverse (transfer_job->pairs);
+
+  /* determine the total number of bytes to process */
+  for (lp = transfer_job->pairs; lp != NULL; lp = lp->next)
+    {
+      pair = (ThunarVfsTransferPair *) lp->data;
+      transfer_job->total_size += pair->source_size;
+    }
+
+  /* process the pairs */
+  while (transfer_job->pairs != NULL)
+    {
+      /* check if the job was cancelled */
+      if (thunar_vfs_job_cancelled (job))
+        break;
+
+      /* pick the next pair from the list */
+      pair = transfer_job->pairs->data;
+      lp = transfer_job->pairs->next;
+      g_list_free_1 (transfer_job->pairs);
+      transfer_job->pairs = lp;
+
+      /* check if we should skip this pair */
+      if (thunar_vfs_transfer_job_skip_list_has (transfer_job, pair->source_path))
+        {
+          /* add the size that was calculated for the skipped pair */
+          transfer_job->completed_size += pair->source_size;
+        }
+      else
+        {
+          /* copy the pair */
+          thunar_vfs_transfer_job_copy_pair (transfer_job, pair);
+        }
+
+      /* drop the pair, to reduce the overhead for finalize() */
+      thunar_vfs_transfer_job_free_pair (transfer_job, pair);
+    }
+
+  /* delete the scheduled directories */
+  if (transfer_job->directories_to_delete && transfer_job->move)
+    {
+      /* display info message */
+      thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (job), _("Deleting directories..."));
+
+      /* delete the directories */
+      for (lp = transfer_job->directories_to_delete; lp != NULL; lp = lp->next)
+        {
+          /* check if the job was cancelled */
+          if (thunar_vfs_job_cancelled (job))
+            break;
+
+          /* check if we should skip this directory */
+          if (thunar_vfs_transfer_job_skip_list_has (transfer_job, lp->data))
+            continue;
+
+          /* try to delete the source directory */
+          source_absolute_path = thunar_vfs_path_dup_string (lp->data);
+          if (g_rmdir (source_absolute_path) < 0 && errno != ENOENT)
+            {
+              /* ask the user whether we should skip this directory */
+              display_name = g_filename_display_name (source_absolute_path);
+              error = g_error_new (G_FILE_ERROR, g_file_error_from_errno (errno),
+                                   _("Unable to remove directory `%s': %s"),
+                                   display_name, g_strerror (errno));
+              thunar_vfs_transfer_job_skip (transfer_job, error);
+              g_clear_error (&error);
+              g_free (display_name);
+            }
+          else
+            {
+              /* schedule a "deleted" event for the source directory */
+              thunar_vfs_monitor_feed (transfer_job->monitor, THUNAR_VFS_MONITOR_EVENT_DELETED, lp->data);
+            }
+          g_free (source_absolute_path);
+        }
+    }
+
+  /* emit the "new-files" signal if we have any new files */
+  if (G_LIKELY (transfer_job->new_files != NULL))
+    thunar_vfs_interactive_job_new_files (THUNAR_VFS_INTERACTIVE_JOB (transfer_job), transfer_job->new_files);
+}
+
+
+
+static void
+thunar_vfs_transfer_job_update (ThunarVfsTransferJob *transfer_job)
+{
+  ThunarVfsFileSize completed_size;
+  gdouble           percentage;
+  gchar            *display_name;
+
+  /* check if we need to display a new file name */
+  if (G_LIKELY (transfer_job->current_path_changed))
+    {
+      /* update the info message with the file name */
+      display_name = g_filename_display_name (thunar_vfs_path_get_name (transfer_job->current_path));
+      thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (transfer_job), display_name);
+      g_free (display_name);
+
+      /* remember that we don't need to update the info message again now */
+      transfer_job->current_path_changed = FALSE;
+    }
+
+  /* determine total/completed sizes */
+  completed_size = transfer_job->completed_size + transfer_job->current_completed_size;
+
+  /* update the percentage */
+  percentage = (completed_size * 100.0) / MAX (transfer_job->total_size, 1);
+  percentage = CLAMP (percentage, 0.0, 100.0);
+  thunar_vfs_interactive_job_percent (THUNAR_VFS_INTERACTIVE_JOB (transfer_job), percentage);
+
+  /* update the "last update time" */
+  g_get_current_time (&transfer_job->last_update_time);
+}
+
+
+
+static inline gboolean
+should_update (const GTimeVal now,
+               const GTimeVal last)
+{
+  /* we want to update every 100ms */
+  guint64 d = ((guint64) now.tv_sec - last.tv_sec) * G_USEC_PER_SEC
+            + ((guint64) now.tv_usec - last.tv_usec);
+  return (d > 100 * 1000);
+}
+
+
+
+static gboolean
+thunar_vfs_transfer_job_progress (ThunarVfsFileSize current_total_size,
+                                  ThunarVfsFileSize current_completed_size,
+                                  gpointer          user_data)
+{
+  ThunarVfsTransferJob *transfer_job = THUNAR_VFS_TRANSFER_JOB (user_data);
+  GTimeVal              now;
+
+  /* update the current total/completed size */
+  transfer_job->current_completed_size = current_completed_size;
+  transfer_job->current_total_size = current_total_size;
+
+  /* determine the current time */
+  g_get_current_time (&now);
+
+  /* check if we should update the user visible info */
+  if (should_update (now, transfer_job->last_update_time))
+    thunar_vfs_transfer_job_update (transfer_job);
+
+  return !thunar_vfs_job_cancelled (THUNAR_VFS_JOB (transfer_job));
+}
+
+
+
+static inline ThunarVfsPath*
+make_target_path (ThunarVfsPath *target_base_path,
+                  ThunarVfsPath *source_base_path,
+                  ThunarVfsPath *source_path)
+{
+  typedef struct _Component
+  {
+    struct _Component *next;
+    const gchar       *name;
+  } Component;
+
+  ThunarVfsPath *target_path = thunar_vfs_path_ref (target_base_path);
+  ThunarVfsPath *path;
+  Component     *components = NULL;
+  Component     *component;
+
+  /* determine the components in reverse order */
+  for (; !thunar_vfs_path_equal (source_base_path, source_path); source_path = thunar_vfs_path_get_parent (source_path))
+    {
+      g_assert (source_path != NULL);
+      component = g_newa (Component, 1);
+      component->next = components;
+      component->name = thunar_vfs_path_get_name (source_path);
+      components = component;
+    }
+
+  /* verify state */
+  g_assert (thunar_vfs_path_equal (source_base_path, source_path));
+
+  /* generate the target path */
+  for (component = components; component != NULL; component = component->next)
+    {
+      /* allocate relative path for the component */
+      path = thunar_vfs_path_relative (target_path, component->name);
+      thunar_vfs_path_unref (target_path);
+      target_path = path;
+    }
+
+  return target_path;
+}
+
+
+
+static GList*
+thunar_vfs_transfer_job_collect_pairs (ThunarVfsTransferJob  *transfer_job,
+                                       ThunarVfsTransferPair *pair,
+                                       GError               **error)
+{
+  ThunarVfsTransferPair *child;
+  ThunarVfsPath         *target_path;
+  GHashTable            *source_to_target;
+  GError                *serror = NULL;
+  GList                 *paths;
+  GList                 *pairs = NULL;
+  GList                 *lp;
+
+  /* check if the pair refers to a directory */
+  if (G_UNLIKELY (!S_ISDIR (pair->source_mode)))
+    return NULL;
+
+  /* scan the pair directory */
+  paths = thunar_vfs_scandir (pair->source_path, THUNAR_VFS_SCANDIR_RECURSIVE, NULL, &serror);
+  if (G_UNLIKELY (serror != NULL))
+    {
+      g_propagate_error (error, serror);
+      g_assert (paths == NULL);
+    }
+  else
+    {
+      /* simple optimization to save some memory (source->target directory mapping) */
+      source_to_target = g_hash_table_new (thunar_vfs_path_hash, thunar_vfs_path_equal);
+      g_hash_table_insert (source_to_target, pair->source_path, pair->target_path);
+
+      /* translate the paths to pairs */
+      for (lp = g_list_last (paths); lp != NULL; lp = lp->prev)
+        {
+          /* determine the target path */
+          target_path = g_hash_table_lookup (source_to_target, thunar_vfs_path_get_parent (lp->data));
+          if (G_LIKELY (target_path != NULL))
+            target_path = thunar_vfs_path_relative (target_path, thunar_vfs_path_get_name (lp->data));
+          else
+            target_path = make_target_path (pair->target_path, pair->source_path, lp->data);
+
+          /* try to allocate a pair for the child */
+          child = thunar_vfs_transfer_job_alloc_pair (transfer_job, lp->data, target_path, FALSE, NULL);
+
+          /* release the reference on the target path (the child holds the reference now) */
+          thunar_vfs_path_unref (target_path);
+
+          /* release the reference on the source path (the child holds the reference now) */
+          thunar_vfs_path_unref (lp->data);
+
+          /* prepend the child to the pair list */
+          if (G_LIKELY (child != NULL))
+            {
+              /* cache directory source->target mappings */
+              if (G_UNLIKELY (S_ISDIR (child->source_mode)))
+                g_hash_table_insert (source_to_target, child->source_path, child->target_path);
+
+              /* add to the list of pairs */
+              pairs = g_list_prepend (pairs, child);
+            }
+        }
+
+      /* drop the source->target directory mapping */
+      g_hash_table_destroy (source_to_target);
+
+      /* drop the path list */
+      g_list_free (paths);
+    }
+
+  return pairs;
+}
+
+
+
+static inline void
+maybe_replace_pair_target (ThunarVfsTransferPair *pair,
+                           ThunarVfsPath         *previous_target_path,
+                           ThunarVfsPath         *new_target_path)
+{
+  ThunarVfsPath *path;
+
+  /* check if the target path is below the previous_target_path */
+  for (path = thunar_vfs_path_get_parent (pair->target_path); path != NULL; path = thunar_vfs_path_get_parent (path))
+    if (thunar_vfs_path_equal (previous_target_path, path))
+      break;
+
+  if (G_LIKELY (path != NULL))
+    {
+      /* replace the target path */
+      path = make_target_path (new_target_path, path, pair->target_path);
+      thunar_vfs_path_unref (pair->target_path);
+      pair->target_path = path;
+    }
+}
+
+
+
+static void
+thunar_vfs_transfer_job_copy_pair (ThunarVfsTransferJob  *transfer_job,
+                                   ThunarVfsTransferPair *pair)
+{
+  ThunarVfsPath *target_path;
+  gboolean       skip;
+  GError        *error = NULL;
+  GList         *lp;
+  gchar         *absolute_path;
+  gchar         *display_name;
+
+  /* update the current file path */
+  if (G_LIKELY (transfer_job->current_path != NULL))
+    thunar_vfs_path_unref (transfer_job->current_path);
+  transfer_job->current_path = thunar_vfs_path_ref (pair->source_path);
+  transfer_job->current_path_changed = TRUE;
+
+  /* perform the xfer */
+  do
+    {
+      /* start with 0 completed/total current size */
+      transfer_job->current_completed_size = 0;
+      transfer_job->current_total_size = 0;
+
+      /* try to xfer the file */
+      if (thunar_vfs_xfer_copy (pair->source_path, pair->target_path, &target_path, thunar_vfs_transfer_job_progress, transfer_job, &error))
+        {
+          /* if this was a toplevel pair, then add the target path to the list of new files */
+          if (G_UNLIKELY (pair->toplevel))
+            transfer_job->new_files = thunar_vfs_path_list_prepend (transfer_job->new_files, target_path);
+
+          /* perform cleanup for moves */
+          if (G_UNLIKELY (transfer_job->move))
+            {
+              /* if we have a directory, schedule it for later deletion, else try to delete it directly */
+              if (G_UNLIKELY (((pair->source_mode & S_IFMT) >> 12) == THUNAR_VFS_FILE_TYPE_DIRECTORY))
+                {
+                  /* schedule the directory for later deletion */
+                  transfer_job->directories_to_delete = thunar_vfs_path_list_prepend (transfer_job->directories_to_delete, pair->source_path);
+                }
+              else
+                {
+                  absolute_path = thunar_vfs_path_dup_string (pair->source_path);
+                  if (g_unlink (absolute_path) < 0 && errno != ENOENT)
+                    {
+                      /* ask the user whether we should skip the file (used for cancellation only) */
+                      display_name = g_filename_display_name (absolute_path);
+                      error = g_error_new (G_FILE_ERROR, g_file_error_from_errno (errno),
+                                           _("Unable to remove `%s': %s"), display_name,
+                                           g_strerror (errno));
+                      thunar_vfs_transfer_job_skip (transfer_job, error);
+                      g_clear_error (&error);
+                      g_free (display_name);
+                    }
+                  else
+                    {
+                      /* schedule a deleted event for the source path */
+                      thunar_vfs_monitor_feed (transfer_job->monitor, THUNAR_VFS_MONITOR_EVENT_DELETED, pair->source_path);
+                    }
+                  g_free (absolute_path);
+                }
+            }
+          else if (!thunar_vfs_path_equal (pair->target_path, target_path))
+            {
+              /* replace the target path on the following elements */
+              for (lp = transfer_job->pairs; lp != NULL; lp = lp->next)
+                maybe_replace_pair_target (lp->data, pair->target_path, target_path);
+
+              /* replace the previous target path with the real target path */
+              thunar_vfs_path_unref (pair->target_path);
+              pair->target_path = thunar_vfs_path_ref (target_path);
+            }
+
+          /* release the real target path */
+          thunar_vfs_path_unref (target_path);
+          break;
+        }
+
+      /* G_FILE_ERROR_INTR is returned when the job is cancelled during the copy operation */
+      if (G_UNLIKELY (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_INTR))
+        {
+          g_error_free (error);
+          break;
+        }
+
+      /* check the error */
+      if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_EXIST)
+        {
+          /* ask the user whether we should remove the target first */
+          skip = !thunar_vfs_transfer_job_overwrite (transfer_job, error);
+          g_clear_error (&error);
+
+          /* try to remove the target */
+          if (G_LIKELY (!skip))
+            {
+              absolute_path = thunar_vfs_path_dup_string (pair->target_path);
+              if (g_unlink (absolute_path) < 0 && errno != ENOENT)
+                {
+                  /* ask the user whether we should skip the file */
+                  display_name = g_filename_display_name (absolute_path);
+                  error = g_error_new (G_FILE_ERROR, g_file_error_from_errno (errno),
+                                       _("Unable to remove `%s': %s"), display_name,
+                                       g_strerror (errno));
+                  skip = thunar_vfs_transfer_job_skip (transfer_job, error);
+                  g_free (display_name);
+                }
+              g_free (absolute_path);
+            }
+        }
+      else
+        {
+          /* ask the user whether to skip this pair */
+          skip = thunar_vfs_transfer_job_skip (transfer_job, error);
+        }
+
+      /* clear the error */
+      g_clear_error (&error);
+
+      /* check if we should skip this pair */
+      if (G_LIKELY (skip))
+        {
+          thunar_vfs_transfer_job_skip_list_add (transfer_job, pair);
+          break;
+        }
+    }
+  while (!thunar_vfs_job_cancelled (THUNAR_VFS_JOB (transfer_job)));
+
+  /* add the current file's size to the total completion state */
+  transfer_job->completed_size += transfer_job->current_completed_size;
+
+  /* reset the current completed/total size */
+  transfer_job->current_completed_size = 0;
+  transfer_job->current_total_size = 0;
+}
+
+
+
+static gboolean
+thunar_vfs_transfer_job_overwrite (ThunarVfsTransferJob *transfer_job,
+                                   const GError         *error)
+{
+  gboolean overwrite;
+  gchar   *message;
+
+  /* be sure to update the status info */
+  thunar_vfs_transfer_job_update (transfer_job);
+
+  /* ask the user whether to overwrite */
+  message = g_strdup_printf (_("%s.\n\nDo you want to overwrite it?"), error->message);
+  overwrite = thunar_vfs_interactive_job_overwrite (THUNAR_VFS_INTERACTIVE_JOB (transfer_job), message);
+  g_free (message);
+
+  return overwrite;
+}
+
+
+
+static gboolean
+thunar_vfs_transfer_job_skip (ThunarVfsTransferJob *transfer_job,
+                              const GError         *error)
+{
+  gboolean skip;
+  gchar   *message;
+
+  /* be sure to update the status info */
+  thunar_vfs_transfer_job_update (transfer_job);
+
+  /* ask the user whether to skip */
+  message = g_strdup_printf (_("%s.\n\nDo you want to skip it?"), error->message);
+  skip = thunar_vfs_interactive_job_skip (THUNAR_VFS_INTERACTIVE_JOB (transfer_job), message);
+  g_free (message);
+
+  return skip;
+}
+
+
+
+static void
+thunar_vfs_transfer_job_skip_list_add (ThunarVfsTransferJob  *transfer_job,
+                                       ThunarVfsTransferPair *pair)
+{
+  /* add only directories to the skip_list */
+  if (((pair->source_mode & S_IFMT) >> 12) == THUNAR_VFS_FILE_TYPE_DIRECTORY)
+    transfer_job->skip_list = thunar_vfs_path_list_prepend (transfer_job->skip_list, pair->source_path);
+}
+
+
+
+static gboolean
+thunar_vfs_transfer_job_skip_list_has (ThunarVfsTransferJob *transfer_job,
+                                       const ThunarVfsPath  *source_path)
+{
+  const ThunarVfsPath *path;
+  GList               *lp;
+
+  /* check if the source_path or any of its ancestors is on the skip list */
+  for (lp = transfer_job->skip_list; lp != NULL; lp = lp->next)
+    for (path = source_path; path != NULL; path = thunar_vfs_path_get_parent (path))
+      if (thunar_vfs_path_equal (path, lp->data))
+        return TRUE;
+
+  return FALSE;
+}
+
+
+
+static ThunarVfsTransferPair*
+thunar_vfs_transfer_job_alloc_pair (ThunarVfsTransferJob *transfer_job,
+                                    ThunarVfsPath        *source_path,
+                                    ThunarVfsPath        *target_path,
+                                    gboolean              toplevel,
+                                    GError              **error)
+{
+  ThunarVfsTransferPair *pair;
+  struct stat            source_statb;
+  gchar                  source_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  /* determine the absolute path to the source file */
+  if (thunar_vfs_path_to_string (source_path, source_absolute_path, sizeof (source_absolute_path), error) < 0)
+    return NULL;
+
+  /* determine the file info for the source file */
+  if (g_lstat (source_absolute_path, &source_statb) < 0)
+    {
+      g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno));
+      return NULL;
+    }
+
+  /* allocate a new transfer pair */
+  pair = g_chunk_new (ThunarVfsTransferPair, transfer_job->pair_chunk);
+  pair->source_path = thunar_vfs_path_ref (source_path);
+  pair->target_path = thunar_vfs_path_ref (target_path);
+  pair->source_size = source_statb.st_size;
+  pair->source_mode = source_statb.st_mode;
+  pair->toplevel = toplevel;
+
+  return pair;
+}
+
+
+
+static inline void
+thunar_vfs_transfer_job_free_pair (ThunarVfsTransferJob  *transfer_job,
+                                   ThunarVfsTransferPair *pair)
+{
+  thunar_vfs_path_unref (pair->source_path);
+  thunar_vfs_path_unref (pair->target_path);
+}
+
+
+
+/**
+ * thunar_vfs_transfer_job_new:
+ * @source_path_list : a list of #ThunarVfsPath<!---->s that should be transferred.
+ * @target_path_list : a list of #ThunarVfsPath<!---->s referring to the targets of the transfer.
+ * @move             : whether to copy or move the files.
+ * @error            : return location for errors or %NULL.
+ *
+ * Transfers the files from the @source_path_list to the files in the @target_path_list.
+ * @source_path_list and @target_path_list must be of the same length.
+ *
+ * If @move is %FALSE, then all source/target path tuple, which refer to the same
+ * file cause a duplicate action, which means a new unique target path will be
+ * generated based on the source path.
+ *
+ * The caller is responsible to free the returned object using g_object_unref()
+ * when no longer needed.
+ *
+ * Return value: the newly allocated #ThunarVfsTransferJob or %NULL on error.
+ **/
+ThunarVfsJob*
+thunar_vfs_transfer_job_new (GList   *source_path_list,
+                             GList   *target_path_list,
+                             gboolean move,
+                             GError **error)
+{
+  ThunarVfsTransferPair *pair;
+  ThunarVfsTransferJob  *transfer_job;
+  GList                 *sp, *tp;
+
+  g_return_val_if_fail (g_list_length (target_path_list) == g_list_length (source_path_list), NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate the job object */
+  transfer_job = g_object_new (THUNAR_VFS_TYPE_TRANSFER_JOB, NULL);
+  transfer_job->move = move;
+
+  /* just create a pair for every (source, target) tuple */
+  for (sp = source_path_list, tp = target_path_list; sp != NULL; sp = sp->next, tp = tp->next)
+    {
+      /* verify that we don't transfer the root directory */
+      if (G_UNLIKELY (thunar_vfs_path_is_root (sp->data) || thunar_vfs_path_is_root (tp->data)))
+        {
+          g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL,
+                       _("Cannot transfer the root directory"));
+          goto failure;
+        }
+
+      /* strip off all pairs with source=target when not copying */
+      if (G_LIKELY (!move || !thunar_vfs_path_equal (sp->data, tp->data)))
+        {
+          /* allocate a pair */
+          pair = thunar_vfs_transfer_job_alloc_pair (transfer_job, sp->data, tp->data, TRUE, error);
+          if (G_UNLIKELY (pair == NULL))
+            goto failure;
+          transfer_job->pairs = g_list_prepend (transfer_job->pairs, pair);
+        }
+    }
+
+  /* we did it */
+  return THUNAR_VFS_JOB (transfer_job);
+
+  /* some of the sources failed */
+failure:
+  g_object_unref (G_OBJECT (transfer_job));
+  return NULL;
+}
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-transfer-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,48 @@
+/* $Id: thunar-vfs-transfer-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_TRANSFER_JOB_H__
+#define __THUNAR_VFS_TRANSFER_JOB_H__
+
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsTransferJobClass ThunarVfsTransferJobClass;
+typedef struct _ThunarVfsTransferJob      ThunarVfsTransferJob;
+
+#define THUNAR_VFS_TYPE_TRANSFER_JOB            (thunar_vfs_transfer_job_get_type ())
+#define THUNAR_VFS_TRANSFER_JOB(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_TRANSFER_JOB, ThunarVfsTransferJob))
+#define THUNAR_VFS_TRANSFER_JOB_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_TRANSFER_JOB, ThunarVfsTransferJobClass))
+#define THUNAR_VFS_IS_TRANSFER_JOB(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_TRANSFER_JOB))
+#define THUNAR_VFS_IS_TRANSFER_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_TRANSFER_JOB))
+#define THUNAR_VFS_TRANSFER_JOB_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_TRANSFER_JOB, ThunarVfsTransferJobClass))
+
+GType         thunar_vfs_transfer_job_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsJob *thunar_vfs_transfer_job_new      (GList   *source_path_list,
+                                                GList   *target_path_list,
+                                                gboolean move,
+                                                GError **error) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_TRANSFER_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-types.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-types.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-types.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,150 @@
+/* $Id: thunar-vfs-types.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_TYPES_H__
+#define __THUNAR_VFS_TYPES_H__
+
+#include <sys/types.h>
+#include <unistd.h>
+
+G_BEGIN_DECLS;
+
+/**
+ * ThunarVfsFileType:
+ * @THUNAR_VFS_FILE_TYPE_FIFO     : A named FIFO.
+ * @THUNAR_VFS_FILE_TYPE_CHARDEV  : A character device node.
+ * @THUNAR_VFS_FILE_TYPE_DIRECTORY: A directory node.
+ * @THUNAR_VFS_FILE_TYPE_BLOCKDEV : A block device node.
+ * @THUNAR_VFS_FILE_TYPE_REGULAR  : A regular file.
+ * @THUNAR_VFS_FILE_TYPE_SYMLINK  : A broken symlink, for which the target does
+ *                                  not exist (if the target would exist, the
+ *                                  #ThunarVfsInfo object would have the type
+ *                                  of the target).
+ * @THUNAR_VFS_FILE_TYPE_SOCKET   : A unix domain socket.
+ *
+ * Describes the type of a file.
+ **/
+typedef enum {
+  THUNAR_VFS_FILE_TYPE_SOCKET     = 0140000 >> 12,
+  THUNAR_VFS_FILE_TYPE_SYMLINK    = 0120000 >> 12,
+  THUNAR_VFS_FILE_TYPE_REGULAR    = 0100000 >> 12,
+  THUNAR_VFS_FILE_TYPE_BLOCKDEV   = 0060000 >> 12,
+  THUNAR_VFS_FILE_TYPE_DIRECTORY  = 0040000 >> 12,
+  THUNAR_VFS_FILE_TYPE_CHARDEV    = 0020000 >> 12,
+  THUNAR_VFS_FILE_TYPE_FIFO       = 0010000 >> 12,
+  THUNAR_VFS_FILE_TYPE_UNKNOWN    = 0000000 >> 12,
+} ThunarVfsFileType;
+
+/**
+ * ThunarVfsFileMode:
+ * @THUNAR_VFS_FILE_MODE_SUID     : SUID bit.
+ * @THUNAR_VFS_FILE_MODE_SGID     : SGID bit.
+ * @THUNAR_VFS_FILE_MODE_STICKY   : Sticky bit.
+ * @THUNAR_VFS_FILE_MODE_USR_ALL  : Owner can do everything.
+ * @THUNAR_VFS_FILE_MODE_USR_READ : Owner can read the file.
+ * @THUNAR_VFS_FILE_MODE_USR_WRITE: Owner can write the file.
+ * @THUNAR_VFS_FILE_MODE_USR_EXEC : Owner can execute the file.
+ * @THUNAR_VFS_FILE_MODE_GRP_ALL  : Owner group can do everything.
+ * @THUNAR_VFS_FILE_MODE_GRP_READ : Owner group can read the file.
+ * @THUNAR_VFS_FILE_MODE_GRP_WRITE: Owner group can write the file.
+ * @THUNAR_VFS_FILE_MODE_GRP_EXEC : Owner group can execute the file.
+ * @THUNAR_VFS_FILE_MODE_OTH_ALL  : Others can do everything.
+ * @THUNAR_VFS_FILE_MODE_OTH_READ : Others can read the file.
+ * @THUNAR_VFS_FILE_MODE_OTH_WRITE: Others can write the file.
+ * @THUNAR_VFS_FILE_MODE_OTH_EXEC : Others can execute the file.
+ *
+ * Special flags and permissions of a filesystem entity.
+ **/
+typedef enum { /*< flags >*/
+  THUNAR_VFS_FILE_MODE_SUID       = 04000,
+  THUNAR_VFS_FILE_MODE_SGID       = 02000,
+  THUNAR_VFS_FILE_MODE_STICKY     = 01000,
+  THUNAR_VFS_FILE_MODE_USR_ALL    = 00700,
+  THUNAR_VFS_FILE_MODE_USR_READ   = 00400,
+  THUNAR_VFS_FILE_MODE_USR_WRITE  = 00200,
+  THUNAR_VFS_FILE_MODE_USR_EXEC   = 00100,
+  THUNAR_VFS_FILE_MODE_GRP_ALL    = 00070,
+  THUNAR_VFS_FILE_MODE_GRP_READ   = 00040,
+  THUNAR_VFS_FILE_MODE_GRP_WRITE  = 00020,
+  THUNAR_VFS_FILE_MODE_GRP_EXEC   = 00010,
+  THUNAR_VFS_FILE_MODE_OTH_ALL    = 00007,
+  THUNAR_VFS_FILE_MODE_OTH_READ   = 00004,
+  THUNAR_VFS_FILE_MODE_OTH_WRITE  = 00002,
+  THUNAR_VFS_FILE_MODE_OTH_EXEC   = 00001,
+} ThunarVfsFileMode;
+
+/**
+ * ThunarVfsFileFlags:
+ * @THUNAR_VFS_FILE_FLAGS_NONE       : No additional information available.
+ * @THUNAR_VFS_FILE_FLAGS_SYMLINK    : The file is a symlink. Whether or not
+ *                                     the info fields refer to the symlink
+ *                                     itself or the linked file, depends on 
+ *                                     whether the symlink is broken or not.
+ * @THUNAR_VFS_FILE_FLAGS_EXECUTABLE : The file can most probably be executed
+ *                                     by #thunar_vfs_info_execute().
+ *
+ * Flags providing additional information about the
+ * file system entity.
+ **/
+typedef enum { /*< flags >*/
+  THUNAR_VFS_FILE_FLAGS_NONE       = 0,
+  THUNAR_VFS_FILE_FLAGS_SYMLINK    = 1L << 0,
+  THUNAR_VFS_FILE_FLAGS_EXECUTABLE = 1L << 1,
+} ThunarVfsFileFlags;
+
+/**
+ * ThunarVfsFileDevice:
+ * Datatype to represent the device number of a file.
+ **/
+typedef dev_t ThunarVfsFileDevice;
+
+/**
+ * ThunarVfsFileInode:
+ * Datatype to represent the inode number of a file.
+ **/
+typedef ino_t ThunarVfsFileInode;
+
+/**
+ * ThunarVfsFileSize:
+ * Datatype to represent file sizes (in bytes).
+ **/
+typedef off_t ThunarVfsFileSize;
+
+/**
+ * ThunarVfsFileTime:
+ * Datatype to represent file times (in seconds).
+ **/
+typedef time_t ThunarVfsFileTime;
+
+/**
+ * ThunarVfsGroupId:
+ * Datatype to represent a group id.
+ **/
+typedef gid_t ThunarVfsGroupId;
+
+/**
+ * ThunarVfsUserId:
+ * Datatype to represent a user id.
+ **/
+typedef uid_t ThunarVfsUserId;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_TYPES_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,294 @@
+/* $Id: thunar-vfs-unlink-job.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-info.h>
+#include <thunar-vfs/thunar-vfs-scandir.h>
+#include <thunar-vfs/thunar-vfs-thumb.h>
+#include <thunar-vfs/thunar-vfs-unlink-job.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_remove(path) (remove ((path)))
+#define g_unlink(path) (unlink ((path)))
+#endif
+
+
+
+static void thunar_vfs_unlink_job_class_init (ThunarVfsJobClass   *klass);
+static void thunar_vfs_unlink_job_finalize   (GObject             *object);
+static void thunar_vfs_unlink_job_execute    (ThunarVfsJob        *job);
+static void thunar_vfs_unlink_job_remove     (ThunarVfsUnlinkJob  *unlink_job,
+                                              ThunarVfsPath       *path);
+
+
+
+struct _ThunarVfsUnlinkJobClass
+{
+  ThunarVfsInteractiveJobClass __parent__;
+};
+
+struct _ThunarVfsUnlinkJob
+{
+  ThunarVfsInteractiveJob __parent__;
+
+  GList                  *path_list;
+
+  gint                    total_items;
+  gint                    completed_items;
+};
+
+
+
+static GObjectClass *thunar_vfs_unlink_job_parent_class;
+
+
+
+GType
+thunar_vfs_unlink_job_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsUnlinkJobClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_unlink_job_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsUnlinkJob),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (THUNAR_VFS_TYPE_INTERACTIVE_JOB,
+                                     "ThunarVfsUnlinkJob", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_unlink_job_class_init (ThunarVfsJobClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_unlink_job_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_unlink_job_finalize;
+
+  klass->execute = thunar_vfs_unlink_job_execute;
+}
+
+
+
+static void
+thunar_vfs_unlink_job_finalize (GObject *object)
+{
+  ThunarVfsUnlinkJob *unlink_job = THUNAR_VFS_UNLINK_JOB (object);
+
+  /* free the path list */
+  thunar_vfs_path_list_free (unlink_job->path_list);
+
+  /* call the parents finalize method */
+  (*G_OBJECT_CLASS (thunar_vfs_unlink_job_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_unlink_job_execute (ThunarVfsJob *job)
+{
+  ThunarVfsUnlinkJob *unlink_job = THUNAR_VFS_UNLINK_JOB (job);
+  gdouble             percent;
+  GError             *error = NULL;
+  GList              *paths;
+  GList              *lp;
+  guint               n;
+
+  /* tell the user that we're preparing the unlink job */
+  thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (job), _("Preparing..."));
+
+  /* recursively collect the paths */
+  for (lp = unlink_job->path_list; lp != NULL && !thunar_vfs_job_cancelled (job); lp = lp->next)
+    {
+      /* scan the directory */
+      paths = thunar_vfs_scandir (lp->data, THUNAR_VFS_SCANDIR_RECURSIVE, NULL, &error);
+      if (G_UNLIKELY (error != NULL))
+        {
+          /* we can safely ignore ENOTDIR errors here */
+          if (error->domain != G_FILE_ERROR || error->code != G_FILE_ERROR_NOTDIR)
+            {
+              /* inform the user about the problem and abort the job */
+              thunar_vfs_job_error (job, error);
+              g_error_free (error);
+              return;
+            }
+
+          /* reset the error */
+          g_error_free (error);
+          error = NULL;
+        }
+
+      /* prepend the new paths to the existing list */
+      unlink_job->path_list = g_list_concat (paths, unlink_job->path_list);
+    }
+
+  /* determine the number of files to remove */
+  unlink_job->total_items = g_list_length (unlink_job->path_list);
+
+  /* perform the removal of the paths */
+  for (lp = unlink_job->path_list, n = 0; lp != NULL && !thunar_vfs_job_cancelled (job); lp = lp->next, ++n)
+    {
+      /* remove the file for the current path */
+      thunar_vfs_unlink_job_remove (unlink_job, lp->data);
+
+      /* increment the completed items count */
+      ++unlink_job->completed_items;
+
+      /* update the progress status */
+      if (G_UNLIKELY ((n % 8) == 0 || lp->next == NULL))
+        {
+          percent = (unlink_job->completed_items * 100.0) / unlink_job->total_items;
+          percent = CLAMP (percent, 0.0, 100.0);
+          thunar_vfs_interactive_job_percent (THUNAR_VFS_INTERACTIVE_JOB (job), percent);
+        }
+    }
+}
+
+
+
+static void
+thunar_vfs_unlink_job_remove (ThunarVfsUnlinkJob *unlink_job,
+                              ThunarVfsPath      *path)
+{
+  ThunarVfsInfo *info;
+  gchar         *message;
+  gchar         *absolute_path;
+  gchar         *thumbnail_path;
+
+  /* determine the absolute path to the file */
+  absolute_path = thunar_vfs_path_dup_string (path);
+
+  /* determine the info for the file */
+  info = _thunar_vfs_info_new_internal (path, absolute_path, NULL);
+  if (G_LIKELY (info != NULL))
+    {
+      /* update the progress message */
+      thunar_vfs_interactive_job_info_message (THUNAR_VFS_INTERACTIVE_JOB (unlink_job), info->display_name);
+
+      /* try to unlink the file */
+      if (G_UNLIKELY (g_remove (absolute_path) < 0 && errno != ENOENT))
+        {
+          message = g_strdup_printf (_("Unable to remove %s.\n\nDo you want to skip it?"), info->display_name);
+          thunar_vfs_interactive_job_skip (THUNAR_VFS_INTERACTIVE_JOB (unlink_job), message);
+          g_free (message);
+        }
+      else
+        {
+          /* feed a delete event to the vfs monitor */
+          thunar_vfs_monitor_feed (THUNAR_VFS_INTERACTIVE_JOB (unlink_job)->monitor,
+                                   THUNAR_VFS_MONITOR_EVENT_DELETED, info->path);
+
+          /* delete thumbnails for regular files */
+          if (G_LIKELY (info->type == THUNAR_VFS_FILE_TYPE_REGULAR))
+            {
+              /* ditch the normal thumbnail (if any) */
+              thumbnail_path = thunar_vfs_thumbnail_for_path (path, THUNAR_VFS_THUMB_SIZE_NORMAL);
+              g_unlink (thumbnail_path);
+              g_free (thumbnail_path);
+
+              /* ditch the large thumbnail (if any) */
+              thumbnail_path = thunar_vfs_thumbnail_for_path (path, THUNAR_VFS_THUMB_SIZE_LARGE);
+              g_unlink (thumbnail_path);
+              g_free (thumbnail_path);
+            }
+        }
+
+      /* release the info */
+      thunar_vfs_info_unref (info);
+    }
+
+  /* release the absolute path */
+  g_free (absolute_path);
+}
+
+
+
+/**
+ * thunar_vfs_unlink_job_new:
+ * @path_list : a list of #ThunarVfsPath<!---->s, that should be unlinked.
+ * @error     : return location for errors or %NULL.
+ *
+ * Tries to allocate a new #ThunarVfsUnlinkJob, which can be used to
+ * unlink the given @path_list.
+ *
+ * Return value: the newly allocated #ThunarVfsUnlinkJob or %NULL on error.
+ **/
+ThunarVfsJob*
+thunar_vfs_unlink_job_new (GList   *path_list,
+                           GError **error)
+{
+  ThunarVfsUnlinkJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate the job instance */
+  job = g_object_new (THUNAR_VFS_TYPE_UNLINK_JOB, NULL);
+  job->path_list = thunar_vfs_path_list_copy (path_list);
+
+  return THUNAR_VFS_JOB (job);
+}
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-unlink-job.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,46 @@
+/* $Id: thunar-vfs-unlink-job.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_UNLINK_JOB_H__
+#define __THUNAR_VFS_UNLINK_JOB_H__
+
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsUnlinkJobClass ThunarVfsUnlinkJobClass;
+typedef struct _ThunarVfsUnlinkJob      ThunarVfsUnlinkJob;
+
+#define THUNAR_VFS_TYPE_UNLINK_JOB            (thunar_vfs_unlink_job_get_type ())
+#define THUNAR_VFS_UNLINK_JOB(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_UNLINK_JOB, ThunarVfsUnlinkJob))
+#define THUNAR_VFS_UNLINK_JOB_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_UNLINK_JOB, ThunarVfsUnlinkJobClass))
+#define THUNAR_VFS_IS_UNLINK_JOB(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_UNLINK_JOB))
+#define THUNAR_VFS_IS_UNLINK_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_UNLINK_JOB))
+#define THUNAR_VFS_UNLINK_JOB_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_UNLINK_JOB, ThunarVfsUnlinkJobClass))
+
+GType         thunar_vfs_unlink_job_get_type  (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+ThunarVfsJob *thunar_vfs_unlink_job_new       (GList   *path_list,
+                                               GError **error) G_GNUC_INTERNAL G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_UNLINK_JOB_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,762 @@
+/* $Id: thunar-vfs-user.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-user.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/* the interval in which the user/group cache is flushed (in ms) */
+#define THUNAR_VFS_USER_MANAGER_FLUSH_INTERVAL (10 * 60 * 1000)
+
+
+
+
+static void            thunar_vfs_group_class_init (ThunarVfsGroupClass *klass);
+static void            thunar_vfs_group_finalize   (GObject             *object);
+static ThunarVfsGroup *thunar_vfs_group_new        (ThunarVfsGroupId     id);
+
+
+
+struct _ThunarVfsGroupClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsGroup
+{
+  GObject __parent__;
+
+  ThunarVfsGroupId id;
+  gchar           *name;
+};
+
+
+
+static GObjectClass *thunar_vfs_group_parent_class;
+
+
+
+GType
+thunar_vfs_group_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsGroupClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_group_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsGroup),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_OBJECT, "ThunarVfsGroup", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_group_class_init (ThunarVfsGroupClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_group_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_group_finalize;
+}
+
+
+
+static void
+thunar_vfs_group_finalize (GObject *object)
+{
+  ThunarVfsGroup *group = THUNAR_VFS_GROUP (object);
+
+  /* release the group's name */
+  g_free (group->name);
+
+  (*G_OBJECT_CLASS (thunar_vfs_group_parent_class)->finalize) (object);
+}
+
+
+
+static ThunarVfsGroup*
+thunar_vfs_group_new (ThunarVfsGroupId id)
+{
+  ThunarVfsGroup *group;
+
+  group = g_object_new (THUNAR_VFS_TYPE_GROUP, NULL);
+  group->id = id;
+
+  return group;
+}
+
+
+
+/**
+ * thunar_vfs_group_get_id:
+ * @group : a #ThunarVfsGroup.
+ *
+ * Returns the unique id of the given @group.
+ *
+ * Return value: the unique id of @group.
+ **/
+ThunarVfsGroupId
+thunar_vfs_group_get_id (ThunarVfsGroup *group)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_GROUP (group), 0);
+  return group->id;
+}
+
+
+
+/**
+ * thunar_vfs_group_get_name:
+ * @group : a #ThunarVfsGroup.
+ *
+ * Returns the name of the @group. If the system is
+ * unable to determine the name of @group, it'll
+ * return the group id as string.
+ *
+ * Return value: the name of @group.
+ **/
+const gchar*
+thunar_vfs_group_get_name (ThunarVfsGroup *group)
+{
+  struct group *grp;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_GROUP (group), NULL);
+
+  /* determine the name on-demand */
+  if (G_UNLIKELY (group->name == NULL))
+    {
+      grp = getgrgid (group->id);
+      if (G_LIKELY (grp != NULL))
+        group->name = g_strdup (grp->gr_name);
+      else
+        group->name = g_strdup_printf ("%u", (guint) group->id);
+    }
+
+  return group->name;
+}
+
+
+
+
+static void           thunar_vfs_user_class_init (ThunarVfsUserClass *klass);
+static void           thunar_vfs_user_finalize   (GObject            *object);
+static void           thunar_vfs_user_load       (ThunarVfsUser      *user);
+static ThunarVfsUser *thunar_vfs_user_new        (ThunarVfsUserId     id);
+
+
+
+struct _ThunarVfsUserClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsUser
+{
+  GObject __parent__;
+
+  GList          *groups;
+  ThunarVfsGroup *primary_group;
+  ThunarVfsUserId id;
+  gchar          *name;
+  gchar          *real_name;
+};
+
+
+
+static ThunarVfsUserId thunar_vfs_user_effective_uid;
+static GObjectClass   *thunar_vfs_user_parent_class;
+
+
+
+GType
+thunar_vfs_user_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsUserClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) thunar_vfs_user_class_init,
+        NULL,
+        NULL,
+        sizeof (ThunarVfsUser),
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_OBJECT, "ThunarVfsUser", &info, 0);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_user_class_init (ThunarVfsUserClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  /* determine the parent class */
+  thunar_vfs_user_parent_class = g_type_class_peek_parent (klass);
+
+  /* determine the current process' effective user id, we do
+   * this only once to avoid the syscall overhead on every
+   * is_me() invokation.
+   */
+  thunar_vfs_user_effective_uid = geteuid ();
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_user_finalize;
+}
+
+
+
+static void
+thunar_vfs_user_finalize (GObject *object)
+{
+  ThunarVfsUser *user = THUNAR_VFS_USER (object);
+
+  /* unref the associated groups */
+  g_list_foreach (user->groups, (GFunc) g_object_unref, NULL);
+  g_list_free (user->groups);
+
+  /* drop the reference on the primary group */
+  if (G_LIKELY (user->primary_group != NULL))
+    g_object_unref (G_OBJECT (user->primary_group));
+
+  /* release the names */
+  g_free (user->real_name);
+  g_free (user->name);
+
+  (*G_OBJECT_CLASS (thunar_vfs_user_parent_class)->finalize) (object);
+}
+
+
+
+static void
+thunar_vfs_user_load (ThunarVfsUser *user)
+{
+  ThunarVfsUserManager *manager;
+  struct passwd        *pw;
+  const gchar          *s;
+
+  g_return_if_fail (user->name == NULL);
+
+  pw = getpwuid (user->id);
+  if (G_LIKELY (pw != NULL))
+    {
+      manager = thunar_vfs_user_manager_get_default ();
+
+      /* query name and primary group */
+      user->name = g_strdup (pw->pw_name);
+      user->primary_group = thunar_vfs_user_manager_get_group_by_id (manager, pw->pw_gid);
+
+      /* try to figure out the real name */
+      s = strchr (pw->pw_gecos, ',');
+      if (s != NULL)
+        user->real_name = g_strndup (pw->pw_gecos, s - pw->pw_gecos);
+      else if (pw->pw_gecos[0] != '\0')
+        user->real_name = g_strdup (pw->pw_gecos);
+
+      g_object_unref (G_OBJECT (manager));
+    }
+  else
+    {
+      user->name = g_strdup_printf ("%u", (guint) user->id);
+    }
+}
+
+
+
+static ThunarVfsUser*
+thunar_vfs_user_new (ThunarVfsUserId id)
+{
+  ThunarVfsUser *user;
+
+  user = g_object_new (THUNAR_VFS_TYPE_USER, NULL);
+  user->id = id;
+
+  return user;
+}
+
+
+
+/**
+ * thunar_vfs_user_get_groups:
+ * @user : a #ThunarVfsUser.
+ *
+ * Returns all #ThunarVfsGroup<!---->s that @user
+ * belongs to. The returned list and the #ThunarVfsGroup<!---->s
+ * contained within the list are owned by @user and must not be
+ * freed or altered by the caller.
+ *
+ * Note that if @user has a primary group, this group will
+ * also be contained in the returned list.
+ *
+ * Return value: the groups that @user belongs to.
+ **/
+GList*
+thunar_vfs_user_get_groups (ThunarVfsUser *user)
+{
+  ThunarVfsUserManager *manager;
+  ThunarVfsGroup       *primary_group;
+  ThunarVfsGroup       *group;
+  gid_t                 gidset[NGROUPS_MAX];
+  gint                  gidsetlen;
+  gint                  n;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), NULL);
+
+  /* load the groups on-demand */
+  if (G_UNLIKELY (user->groups == NULL))
+    {
+      primary_group = thunar_vfs_user_get_primary_group (user);
+
+      /* we can only determine the groups list for the current
+       * process owner in a portable fashion, and in fact, we
+       * only need the list for the current user.
+       */
+      if (thunar_vfs_user_is_me (user))
+        {
+          manager = thunar_vfs_user_manager_get_default ();
+
+          /* add all supplementary groups */
+          gidsetlen = getgroups (G_N_ELEMENTS (gidset), gidset);
+          for (n = 0; n < gidsetlen; ++n)
+            if (primary_group == NULL || thunar_vfs_group_get_id (primary_group) != gidset[n])
+              {
+                group = thunar_vfs_user_manager_get_group_by_id (manager, gidset[n]);
+                if (G_LIKELY (group != NULL))
+                  user->groups = g_list_append (user->groups, group);
+              }
+
+          g_object_unref (G_OBJECT (manager));
+        }
+
+      /* prepend the primary group (if any) */
+      if (G_LIKELY (primary_group != NULL))
+        {
+          user->groups = g_list_prepend (user->groups, primary_group);
+          g_object_ref (G_OBJECT (primary_group));
+        }
+    }
+
+  return user->groups;
+}
+
+
+
+/**
+ * thunar_vfs_user_get_primary_group:
+ * @user : a #ThunarVfsUser.
+ *
+ * Returns the primary group of @user or %NULL if @user
+ * has no primary group.
+ *
+ * No reference is taken for the caller, so you must
+ * not call g_object_unref() on the returned object.
+ *
+ * Return value: the primary group of @user or %NULL.
+ **/
+ThunarVfsGroup*
+thunar_vfs_user_get_primary_group (ThunarVfsUser *user)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), NULL);
+
+  /* load the user data on-demand */
+  if (G_UNLIKELY (user->name == NULL))
+    thunar_vfs_user_load (user);
+
+  return user->primary_group;
+}
+
+
+
+/**
+ * thunar_vfs_user_get_id:
+ * @user : a #ThunarVfsUser.
+ *
+ * Returns the unique id of @user.
+ *
+ * Return value: the unique id of @user.
+ **/
+ThunarVfsUserId
+thunar_vfs_user_get_id (ThunarVfsUser *user)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), 0);
+  return user->id;
+}
+
+
+
+/**
+ * thunar_vfs_user_get_name:
+ * @user : a #ThunarVfsUser.
+ *
+ * Returns the name of @user. If the system is
+ * unable to determine the account name of @user,
+ * it'll return the user id as string.
+ *
+ * Return value: the name of @user.
+ **/
+const gchar*
+thunar_vfs_user_get_name (ThunarVfsUser *user)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), 0);
+
+  /* load the user's data on-demand */
+  if (G_UNLIKELY (user->name == NULL))
+    thunar_vfs_user_load (user);
+
+  return user->name;
+}
+
+
+
+/**
+ * thunar_vfs_user_get_real_name:
+ * @user : a #ThunarVfsUser.
+ *
+ * Returns the real name of @user or %NULL if the
+ * real name for @user is not known to the underlying
+ * system.
+ *
+ * Return value: the real name for @user or %NULL.
+ **/
+const gchar*
+thunar_vfs_user_get_real_name (ThunarVfsUser *user)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), 0);
+
+  /* load the user's data on-demand */
+  if (G_UNLIKELY (user->name == NULL))
+    thunar_vfs_user_load (user);
+
+  return user->real_name;
+}
+
+
+
+/**
+ * thunar_vfs_user_is_me:
+ * @user : a #ThunarVfsUser.
+ *
+ * Checks whether the owner of the current process is
+ * described by @user.
+ *
+ * Return value: %TRUE if @user is the owner of the current
+ *               process, else %FALSE.
+ **/
+gboolean
+thunar_vfs_user_is_me (ThunarVfsUser *user)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_USER (user), FALSE);
+  return (user->id == thunar_vfs_user_effective_uid);
+}
+
+
+
+
+static void     thunar_vfs_user_manager_class_init          (ThunarVfsUserManagerClass *klass);
+static void     thunar_vfs_user_manager_init                (ThunarVfsUserManager      *manager);
+static void     thunar_vfs_user_manager_finalize            (GObject                   *object);
+static gboolean thunar_vfs_user_manager_flush_timer         (gpointer                   user_data);
+static void     thunar_vfs_user_manager_flush_timer_destroy (gpointer                   user_data);
+
+
+
+struct _ThunarVfsUserManagerClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsUserManager
+{
+  GObject __parent__;
+
+  GHashTable *groups;
+  GHashTable *users;
+
+  gint        flush_timer_id;
+};
+
+
+
+G_DEFINE_TYPE (ThunarVfsUserManager, thunar_vfs_user_manager, G_TYPE_OBJECT);
+
+
+
+static void
+thunar_vfs_user_manager_class_init (ThunarVfsUserManagerClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_user_manager_finalize;
+}
+
+
+
+static void
+thunar_vfs_user_manager_init (ThunarVfsUserManager *manager)
+{
+  manager->groups = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
+  manager->users = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
+
+  /* keep the groups file in memory if possible */
+#ifdef HAVE_SETGROUPENT
+  setgroupent (TRUE);
+#endif
+
+  /* keep the passwd file in memory if possible */
+#ifdef HAVE_SETPASSENT
+  setpassent (TRUE);
+#endif
+
+  /* start the flush timer */
+  manager->flush_timer_id = g_timeout_add_full (G_PRIORITY_LOW, THUNAR_VFS_USER_MANAGER_FLUSH_INTERVAL,
+                                                thunar_vfs_user_manager_flush_timer, manager,
+                                                thunar_vfs_user_manager_flush_timer_destroy);
+}
+
+
+
+static void
+thunar_vfs_user_manager_finalize (GObject *object)
+{
+  ThunarVfsUserManager *manager = THUNAR_VFS_USER_MANAGER (object);
+
+  /* stop the flush timer */
+  if (G_LIKELY (manager->flush_timer_id >= 0))
+    g_source_remove (manager->flush_timer_id);
+
+  /* destroy the hash tables */
+  g_hash_table_destroy (manager->groups);
+  g_hash_table_destroy (manager->users);
+
+  /* unload the groups file */
+  endgrent ();
+
+  /* unload the passwd file */
+  endpwent ();
+
+  G_OBJECT_CLASS (thunar_vfs_user_manager_parent_class)->finalize (object);
+}
+
+
+
+static gboolean
+thunar_vfs_user_manager_flush_timer (gpointer user_data)
+{
+  ThunarVfsUserManager *manager = THUNAR_VFS_USER_MANAGER (user_data);
+  guint                 size = 0;
+
+  GDK_THREADS_ENTER ();
+
+  /* drop all cached groups */
+  size += g_hash_table_foreach_remove (manager->groups, (GHRFunc) gtk_true, NULL);
+
+  /* drop all cached users */
+  size += g_hash_table_foreach_remove (manager->users, (GHRFunc) gtk_true, NULL);
+
+  /* reload groups and passwd files if we had cached entities */
+  if (G_LIKELY (size > 0))
+    {
+      endgrent ();
+      endpwent ();
+
+#ifdef HAVE_SETGROUPENT
+      setgroupent (TRUE);
+#endif
+
+#ifdef HAVE_SETPASSENT
+      setpassent (TRUE);
+#endif
+    }
+
+  GDK_THREADS_LEAVE ();
+
+  return TRUE;
+}
+
+
+
+static void
+thunar_vfs_user_manager_flush_timer_destroy (gpointer user_data)
+{
+  THUNAR_VFS_USER_MANAGER (user_data)->flush_timer_id = -1;
+}
+
+
+
+/**
+ * thunar_vfs_user_manager_get_default:
+ *
+ * Returns the default #ThunarVfsUserManager instance, which is shared
+ * by all modules using the user module. Call g_object_unref() on the
+ * returned object when you are done with it.
+ *
+ * Return value: the default #ThunarVfsUserManager instance.
+ **/
+ThunarVfsUserManager*
+thunar_vfs_user_manager_get_default (void)
+{
+  static ThunarVfsUserManager *manager = NULL;
+
+  if (G_UNLIKELY (manager == NULL))
+    {
+      manager = g_object_new (THUNAR_VFS_TYPE_USER_MANAGER, NULL);
+      g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (manager));
+    }
+
+  return manager;
+}
+
+
+
+/**
+ * thunar_vfs_user_manager_get_group_by_id:
+ * @manager : a #ThunarVfsUserManager.
+ * @id      : the group id.
+ *
+ * Looks up the #ThunarVfsGroup corresponding to @id in @manager. Returns
+ * %NULL if @manager is unable to determine the #ThunarVfsGroup for @id,
+ * else a pointer to the corresponding #ThunarVfsGroup. The caller is
+ * responsible for freeing the returned object using g_object_unref().
+ *
+ * Return value: the #ThunarVfsGroup corresponding to @id or %NULL.
+ **/
+ThunarVfsGroup*
+thunar_vfs_user_manager_get_group_by_id (ThunarVfsUserManager *manager,
+                                         ThunarVfsGroupId      id)
+{
+  ThunarVfsGroup *group;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_USER_MANAGER (manager), NULL);
+
+  /* lookup/load the group corresponding to id */
+  group = g_hash_table_lookup (manager->groups, GINT_TO_POINTER (id));
+  if (group == NULL)
+    {
+      group = thunar_vfs_group_new (id);
+      g_hash_table_insert (manager->groups, GINT_TO_POINTER (id), group);
+    }
+
+  /* take a reference for the caller */
+  g_object_ref (G_OBJECT (group));
+
+  return group;
+}
+
+
+
+/**
+ * thunar_vfs_user_manager_get_user_by_id:
+ * @manager : a #ThunarVfsUserManager.
+ * @id      : the user id.
+ *
+ * Looks up the #ThunarVfsUser corresponding to @id in @manager. Returns
+ * %NULL if @manager is unable to determine the #ThunarVfsUser for @id,
+ * else a pointer to the corresponding #ThunarVfsUser. The caller is
+ * responsible for freeing the returned object using g_object_unref().
+ *
+ * Return value: the #ThunarVfsUser corresponding to @id or %NULL.
+ **/
+ThunarVfsUser*
+thunar_vfs_user_manager_get_user_by_id (ThunarVfsUserManager *manager,
+                                        ThunarVfsUserId       id)
+{
+  ThunarVfsUser *user;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_USER_MANAGER (manager), NULL);
+
+  /* lookup/load the user corresponding to id */
+  user = g_hash_table_lookup (manager->users, GINT_TO_POINTER (id));
+  if (user == NULL)
+    {
+      user = thunar_vfs_user_new (id);
+      g_hash_table_insert (manager->users, GINT_TO_POINTER (id), user);
+    }
+
+  /* take a reference for the caller */
+  g_object_ref (G_OBJECT (user));
+
+  return user;
+}
+
+
+
+#define __THUNAR_VFS_USER_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-user.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,85 @@
+/* $Id: thunar-vfs-user.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_USER_H__
+#define __THUNAR_VFS_USER_H__
+
+#include <thunar-vfs/thunar-vfs-info.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsGroupClass ThunarVfsGroupClass;
+typedef struct _ThunarVfsGroup      ThunarVfsGroup;
+
+#define THUNAR_VFS_TYPE_GROUP             (thunar_vfs_group_get_type ())
+#define THUNAR_VFS_GROUP(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_GROUP, ThunarVfsGroup))
+#define THUNAR_VFS_GROUP_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_GROUP, ThunarVfsGroupClass))
+#define THUNAR_VFS_IS_GROUP(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_GROUP))
+#define THUNAR_VFS_IS_GROUP_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_GROUP))
+#define THUNAR_VFS_GROUP_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_GROUP, ThunarVfsGroupClass))
+
+GType            thunar_vfs_group_get_type  (void) G_GNUC_CONST;
+
+ThunarVfsGroupId thunar_vfs_group_get_id    (ThunarVfsGroup *group);
+const gchar     *thunar_vfs_group_get_name  (ThunarVfsGroup *group);
+
+
+typedef struct _ThunarVfsUserClass ThunarVfsUserClass;
+typedef struct _ThunarVfsUser      ThunarVfsUser;
+
+#define THUNAR_VFS_TYPE_USER            (thunar_vfs_user_get_type ())
+#define THUNAR_VFS_USER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_USER, ThunarVfsUser))
+#define THUNAR_VFS_USER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_USER, ThunarVfsUserClass))
+#define THUNAR_VFS_IS_USER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_USER))
+#define THUNAR_VFS_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_USER))
+#define THUNAR_VFS_USER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_USER, ThunarVfsUserClass))
+
+GType            thunar_vfs_user_get_type          (void) G_GNUC_CONST;
+
+GList           *thunar_vfs_user_get_groups        (ThunarVfsUser *user);
+ThunarVfsGroup  *thunar_vfs_user_get_primary_group (ThunarVfsUser *user);
+ThunarVfsUserId  thunar_vfs_user_get_id            (ThunarVfsUser *user);
+const gchar     *thunar_vfs_user_get_name          (ThunarVfsUser *user);
+const gchar     *thunar_vfs_user_get_real_name     (ThunarVfsUser *user);
+gboolean         thunar_vfs_user_is_me             (ThunarVfsUser *user);
+
+
+typedef struct _ThunarVfsUserManagerClass ThunarVfsUserManagerClass;
+typedef struct _ThunarVfsUserManager      ThunarVfsUserManager;
+
+#define THUNAR_VFS_TYPE_USER_MANAGER            (thunar_vfs_user_manager_get_type ())
+#define THUNAR_VFS_USER_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_USER_MANAGER, ThunarVfsUserManager))
+#define THUNAR_VFS_USER_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_USER_MANAGER, ThunarVfsUserManagerClass))
+#define THUNAR_VFS_IS_USER_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_USER_MANAGER))
+#define THUNAR_VFS_IS_USER_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_USER_MANAGER))
+#define THUNAR_VFS_USER_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_USER_MANAGER, ThunarVfsUserManagerClass))
+
+GType                 thunar_vfs_user_manager_get_type        (void) G_GNUC_CONST;
+
+ThunarVfsUserManager *thunar_vfs_user_manager_get_default     (void);
+
+ThunarVfsGroup       *thunar_vfs_user_manager_get_group_by_id (ThunarVfsUserManager *manager,
+                                                               ThunarVfsGroupId      id);
+ThunarVfsUser        *thunar_vfs_user_manager_get_user_by_id  (ThunarVfsUserManager *manager,
+                                                               ThunarVfsUserId       id);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_USER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,68 @@
+/* $Id: thunar-vfs-util.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunar-vfs/thunar-vfs-util.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+/**
+ * thunar_vfs_humanize_size:
+ * @size   : size in bytes.
+ * @buffer : destination buffer or %NULL to dynamically allocate a buffer.
+ * @buflen : length of @buffer in bytes.
+ *
+ * The caller is responsible to free the returned string using g_free()
+ * if you pass %NULL for @buffer. Else the returned string will be a
+ * pointer to @buffer.
+ *
+ * Return value: a string containing a human readable description of @size.
+ **/
+gchar*
+thunar_vfs_humanize_size (ThunarVfsFileSize size,
+                          gchar            *buffer,
+                          gsize             buflen)
+{
+  if (buffer == NULL)
+    {
+      buffer = g_new (gchar, 32);
+      buflen = 32;
+    }
+
+  if (G_UNLIKELY (size > 1024ul * 1024ul * 1024ul))
+    g_snprintf (buffer, buflen, "%0.1f G", size / (1024.0 * 1024.0 * 1024.0));
+  else if (size > 1024ul * 1024ul)
+    g_snprintf (buffer, buflen, "%0.1f M", size / (1024.0 * 1024.0));
+  else if (size > 1024ul)
+    g_snprintf (buffer, buflen, "%0.1f K", size / 1024.0);
+  else
+    g_snprintf (buffer, buflen, "%lu B", (gulong) size);
+
+  return buffer;
+}
+
+
+
+#define __THUNAR_VFS_UTIL_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-util.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,36 @@
+/* $Id: thunar-vfs-util.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_UTIL_H__
+#define __THUNAR_VFS_UTIL_H__
+
+#include <glib.h>
+
+#include <thunar-vfs/thunar-vfs-types.h>
+
+G_BEGIN_DECLS;
+
+gchar *thunar_vfs_humanize_size (ThunarVfsFileSize size,
+                                 gchar            *buffer,
+                                 gsize             buflen);
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_UTIL_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,466 @@
+/* $Id: thunar-vfs-volume-bsd.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_CDIO_H
+#include <sys/cdio.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_FSTAB_H
+#include <fstab.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-volume-bsd.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+static void                  thunar_vfs_volume_bsd_class_init       (ThunarVfsVolumeBSDClass *klass);
+static void                  thunar_vfs_volume_bsd_volume_init      (ThunarVfsVolumeIface    *iface);
+static void                  thunar_vfs_volume_bsd_init             (ThunarVfsVolumeBSD      *volume_bsd);
+static void                  thunar_vfs_volume_bsd_finalize         (GObject                 *object);
+static ThunarVfsVolumeKind   thunar_vfs_volume_bsd_get_kind         (ThunarVfsVolume         *volume);
+static const gchar          *thunar_vfs_volume_bsd_get_name         (ThunarVfsVolume         *volume);
+static ThunarVfsVolumeStatus thunar_vfs_volume_bsd_get_status       (ThunarVfsVolume         *volume);
+static ThunarVfsPath        *thunar_vfs_volume_bsd_get_mount_point  (ThunarVfsVolume         *volume);
+static gboolean              thunar_vfs_volume_bsd_get_free_space   (ThunarVfsVolume         *volume,
+                                                                     ThunarVfsFileSize       *free_space_return);
+static gboolean              thunar_vfs_volume_bsd_update           (gpointer                 user_data);
+static ThunarVfsVolumeBSD   *thunar_vfs_volume_bsd_new              (const gchar             *device_path,
+                                                                     const gchar             *mount_path);
+
+
+
+struct _ThunarVfsVolumeBSDClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsVolumeBSD
+{
+  GObject __parent__;
+
+  gchar                *device_path;
+  const gchar          *device_name;
+  ThunarVfsFileDevice   device_id;
+
+  gchar                *label;
+
+  struct statfs         info;
+  ThunarVfsPath        *mount_point;
+
+  ThunarVfsVolumeKind   kind;
+  ThunarVfsVolumeStatus status;
+
+  gint                  update_timer_id;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarVfsVolumeBSD,
+                         thunar_vfs_volume_bsd,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_VFS_TYPE_VOLUME,
+                                                thunar_vfs_volume_bsd_volume_init));
+
+
+
+static void
+thunar_vfs_volume_bsd_class_init (ThunarVfsVolumeBSDClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_volume_bsd_finalize;
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_volume_init (ThunarVfsVolumeIface *iface)
+{
+  iface->get_kind = thunar_vfs_volume_bsd_get_kind;
+  iface->get_name = thunar_vfs_volume_bsd_get_name;
+  iface->get_status = thunar_vfs_volume_bsd_get_status;
+  iface->get_mount_point = thunar_vfs_volume_bsd_get_mount_point;
+  iface->get_free_space = thunar_vfs_volume_bsd_get_free_space;
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_init (ThunarVfsVolumeBSD *volume_bsd)
+{
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_finalize (GObject *object)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (object);
+
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_BSD (volume_bsd));
+
+  if (G_LIKELY (volume_bsd->update_timer_id >= 0))
+    g_source_remove (volume_bsd->update_timer_id);
+
+  if (G_LIKELY (volume_bsd->mount_point != NULL))
+    thunar_vfs_path_unref (volume_bsd->mount_point);
+
+  g_free (volume_bsd->device_path);
+  g_free (volume_bsd->label);
+
+  G_OBJECT_CLASS (thunar_vfs_volume_bsd_parent_class)->finalize (object);
+}
+
+
+
+static ThunarVfsVolumeKind
+thunar_vfs_volume_bsd_get_kind (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->kind;
+}
+
+
+
+static const gchar*
+thunar_vfs_volume_bsd_get_name (ThunarVfsVolume *volume)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (volume);
+
+  return (volume_bsd->label != NULL) ? volume_bsd->label : volume_bsd->device_name;
+}
+
+
+
+static ThunarVfsVolumeStatus
+thunar_vfs_volume_bsd_get_status (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->status;
+}
+
+
+
+static ThunarVfsPath*
+thunar_vfs_volume_bsd_get_mount_point (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->mount_point;
+}
+
+
+
+static gboolean
+thunar_vfs_volume_bsd_get_free_space (ThunarVfsVolume   *volume,
+                                      ThunarVfsFileSize *free_space_return)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (volume);
+  *free_space_return = volume_bsd->info.f_bavail * volume_bsd->info.f_bsize;
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_vfs_volume_bsd_update (gpointer user_data)
+{
+  ThunarVfsVolumeStatus status = 0;
+  struct ioc_toc_header ith;
+  ThunarVfsVolumeBSD   *volume_bsd = THUNAR_VFS_VOLUME_BSD (user_data);
+  struct stat           sb;
+  gchar                *label;
+  gchar                 buffer[THUNAR_VFS_PATH_MAXSTRLEN];
+  int                   fd;
+
+  if (volume_bsd->kind == THUNAR_VFS_VOLUME_KIND_CDROM)
+    {
+      /* try to read the table of contents from the CD-ROM,
+       * which will only succeed if a disc is present for
+       * the drive.
+       */
+      fd = open (volume_bsd->device_path, O_RDONLY);
+      if (fd >= 0)
+        {
+          if (ioctl (fd, CDIOREADTOCHEADER, &ith) >= 0)
+            {
+              status |= THUNAR_VFS_VOLUME_STATUS_PRESENT;
+
+              /* read the label of the disc */
+              if (volume_bsd->label == NULL && (volume_bsd->status & THUNAR_VFS_VOLUME_STATUS_PRESENT) == 0)
+                {
+                  /* skip to sector 16 and read it */
+                  if (lseek (fd, 16 * 2048, SEEK_SET) >= 0 && read (fd, buffer, 2048) >= 0)
+                    {
+                      /* offset 40 contains the volume identifier */
+                      label = buffer + 40;
+                      label[32] = '\0';
+                      g_strchomp (label);
+                      if (G_LIKELY (*label != '\0'))
+                        volume_bsd->label = g_strdup (label);
+                    }
+                }
+            }
+
+          close (fd);
+        }
+    }
+
+  /* determine the absolute path to the mount point */
+  if (thunar_vfs_path_to_string (volume_bsd->mount_point, buffer, sizeof (buffer), NULL) > 0)
+    {
+      /* query the file system information for the mount point */
+      if (statfs (buffer, &volume_bsd->info) >= 0)
+        {
+          /* if the device is mounted, it means that a medium is present */
+          if (exo_str_is_equal (volume_bsd->info.f_mntfromname, volume_bsd->device_path))
+            status |= THUNAR_VFS_VOLUME_STATUS_MOUNTED | THUNAR_VFS_VOLUME_STATUS_PRESENT;
+        }
+
+      /* free the volume label if no disc is present */
+      if ((status & THUNAR_VFS_VOLUME_STATUS_PRESENT) == 0)
+        {
+          g_free (volume_bsd->label);
+          volume_bsd->label = NULL;
+        }
+
+      /* determine the device id if mounted */
+      if ((status & THUNAR_VFS_VOLUME_STATUS_MOUNTED) != 0)
+        {
+          if (stat (buffer, &sb) < 0)
+            volume_bsd->device_id = (ThunarVfsFileDevice) -1;
+          else
+            volume_bsd->device_id = sb.st_dev;
+        }
+    }
+
+  /* update the status if necessary */
+  if (status != volume_bsd->status)
+    {
+      volume_bsd->status = status;
+      thunar_vfs_volume_changed (THUNAR_VFS_VOLUME (volume_bsd));
+    }
+
+  return TRUE;
+}
+
+
+
+static ThunarVfsVolumeBSD*
+thunar_vfs_volume_bsd_new (const gchar *device_path,
+                           const gchar *mount_path)
+{
+  ThunarVfsVolumeBSD *volume_bsd;
+  const gchar        *p;
+
+  g_return_val_if_fail (device_path != NULL, NULL);
+  g_return_val_if_fail (mount_path != NULL, NULL);
+
+  /* allocate the volume object */
+  volume_bsd = g_object_new (THUNAR_VFS_TYPE_VOLUME_BSD, NULL);
+  volume_bsd->device_path = g_strdup (device_path);
+  volume_bsd->mount_point = thunar_vfs_path_new (mount_path, NULL);
+
+  /* determine the device name */
+  for (p = volume_bsd->device_name = volume_bsd->device_path; *p != '\0'; ++p)
+    if (p[0] == '/' && (p[1] != '/' && p[1] != '\0'))
+      volume_bsd->device_name = p + 1;
+
+  /* determine the kind of the volume */
+  p = volume_bsd->device_name;
+  if (p[0] == 'c' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_CDROM;
+  else if (p[0] == 'f' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_FLOPPY;
+  else if ((p[0] == 'a' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+        || (p[0] == 'd' && p[1] == 'a' && g_ascii_isdigit (p[2])))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_HARDDISK;
+  else
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_UNKNOWN;
+
+  /* determine up-to-date status */
+  thunar_vfs_volume_bsd_update (volume_bsd);
+
+  /* start the update timer */
+  volume_bsd->update_timer_id = g_timeout_add (1000, thunar_vfs_volume_bsd_update, volume_bsd);
+
+  return volume_bsd;
+}
+
+
+
+
+static void             thunar_vfs_volume_manager_bsd_class_init         (ThunarVfsVolumeManagerBSDClass *klass);
+static void             thunar_vfs_volume_manager_bsd_manager_init       (ThunarVfsVolumeManagerIface    *iface);
+static void             thunar_vfs_volume_manager_bsd_init               (ThunarVfsVolumeManagerBSD      *manager_bsd);
+static void             thunar_vfs_volume_manager_bsd_finalize           (GObject                        *object);
+static ThunarVfsVolume *thunar_vfs_volume_manager_bsd_get_volume_by_info (ThunarVfsVolumeManager         *manager,
+                                                                          const ThunarVfsInfo            *info);
+static GList           *thunar_vfs_volume_manager_bsd_get_volumes        (ThunarVfsVolumeManager         *manager);
+
+
+
+struct _ThunarVfsVolumeManagerBSDClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsVolumeManagerBSD
+{
+  GObject __parent__;
+  GList  *volumes;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarVfsVolumeManagerBSD,
+                         thunar_vfs_volume_manager_bsd,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_VFS_TYPE_VOLUME_MANAGER,
+                                                thunar_vfs_volume_manager_bsd_manager_init));
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_class_init (ThunarVfsVolumeManagerBSDClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_volume_manager_bsd_finalize;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_manager_init (ThunarVfsVolumeManagerIface *iface)
+{
+  iface->get_volume_by_info = thunar_vfs_volume_manager_bsd_get_volume_by_info;
+  iface->get_volumes = thunar_vfs_volume_manager_bsd_get_volumes;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_init (ThunarVfsVolumeManagerBSD *manager_bsd)
+{
+  ThunarVfsVolumeBSD *volume_bsd;
+  struct fstab       *fs;
+
+  /* load the fstab database */
+  setfsent ();
+
+  /* process all fstab entries and generate volume objects */
+  for (;;)
+    {
+      /* query the next fstab entry */
+      fs = getfsent ();
+      if (G_UNLIKELY (fs == NULL))
+        break;
+
+      /* we only care for file systems */
+      if (!exo_str_is_equal (fs->fs_type, FSTAB_RW)
+          && !exo_str_is_equal (fs->fs_type, FSTAB_RQ)
+          && !exo_str_is_equal (fs->fs_type, FSTAB_RO))
+        continue;
+
+      volume_bsd = thunar_vfs_volume_bsd_new (fs->fs_spec, fs->fs_file);
+      if (G_LIKELY (volume_bsd != NULL))
+        manager_bsd->volumes = g_list_append (manager_bsd->volumes, volume_bsd);
+    }
+
+  /* unload the fstab database */
+  endfsent ();
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_finalize (GObject *object)
+{
+  ThunarVfsVolumeManagerBSD *manager_bsd = THUNAR_VFS_VOLUME_MANAGER_BSD (object);
+  GList                     *lp;
+
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager_bsd));
+
+  for (lp = manager_bsd->volumes; lp != NULL; lp = lp->next)
+    g_object_unref (G_OBJECT (lp->data));
+  g_list_free (manager_bsd->volumes);
+
+  G_OBJECT_CLASS (thunar_vfs_volume_manager_bsd_parent_class)->finalize (object);
+}
+
+
+
+static ThunarVfsVolume*
+thunar_vfs_volume_manager_bsd_get_volume_by_info (ThunarVfsVolumeManager *manager,
+                                                  const ThunarVfsInfo    *info)
+{
+  ThunarVfsVolumeManagerBSD *manager_bsd = THUNAR_VFS_VOLUME_MANAGER_BSD (manager);
+  ThunarVfsVolumeBSD        *volume_bsd = NULL;
+  GList                     *lp;
+
+  for (lp = manager_bsd->volumes; lp != NULL; lp = lp->next)
+    {
+      volume_bsd = THUNAR_VFS_VOLUME_BSD (lp->data);
+      if ((volume_bsd->status & THUNAR_VFS_VOLUME_STATUS_MOUNTED) != 0 && volume_bsd->device_id == info->device)
+        return THUNAR_VFS_VOLUME (volume_bsd);
+    }
+
+  return NULL;
+}
+
+
+
+static GList*
+thunar_vfs_volume_manager_bsd_get_volumes (ThunarVfsVolumeManager *manager)
+{
+  return THUNAR_VFS_VOLUME_MANAGER_BSD (manager)->volumes;
+}
+
+
+
+GType
+_thunar_vfs_volume_manager_impl_get_type (void)
+{
+  return THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-bsd.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,55 @@
+/* $Id: thunar-vfs-volume-bsd.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_VOLUME_BSD_H__
+#define __THUNAR_VFS_VOLUME_BSD_H__
+
+#include <thunar-vfs/thunar-vfs-volume.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsVolumeBSDClass ThunarVfsVolumeBSDClass;
+typedef struct _ThunarVfsVolumeBSD      ThunarVfsVolumeBSD;
+
+#define THUNAR_VFS_TYPE_VOLUME_BSD            (thunar_vfs_volume_bsd_get_type ())
+#define THUNAR_VFS_VOLUME_BSD(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSD))
+#define THUNAR_VFS_VOLUME_BSD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSDClass))
+#define THUNAR_VFS_IS_VOLUME_BSD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_BSD))
+#define THUNAR_VFS_IS_VOLUME_BSD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_BSD))
+#define THUNAR_VFS_VOLUME_BSD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSDClass))
+
+GType thunar_vfs_volume_bsd_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+
+typedef struct _ThunarVfsVolumeManagerBSDClass ThunarVfsVolumeManagerBSDClass;
+typedef struct _ThunarVfsVolumeManagerBSD      ThunarVfsVolumeManagerBSD;
+
+#define THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD            (thunar_vfs_volume_manager_bsd_get_type ())
+#define THUNAR_VFS_VOLUME_MANAGER_BSD(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSD))
+#define THUNAR_VFS_VOLUME_MANAGER_BSD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSDClass))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_BSD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_BSD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD))
+#define THUNAR_VFS_VOLUME_MANAGER_BSD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSDClass))
+
+GType thunar_vfs_volume_manager_bsd_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_VOLUME_BSD_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,466 @@
+/* $Id: thunar-vfs-volume-bsd.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_CDIO_H
+#include <sys/cdio.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_FSTAB_H
+#include <fstab.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-volume-bsd.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+static void                  thunar_vfs_volume_bsd_class_init       (ThunarVfsVolumeBSDClass *klass);
+static void                  thunar_vfs_volume_bsd_volume_init      (ThunarVfsVolumeIface    *iface);
+static void                  thunar_vfs_volume_bsd_init             (ThunarVfsVolumeBSD      *volume_bsd);
+static void                  thunar_vfs_volume_bsd_finalize         (GObject                 *object);
+static ThunarVfsVolumeKind   thunar_vfs_volume_bsd_get_kind         (ThunarVfsVolume         *volume);
+static const gchar          *thunar_vfs_volume_bsd_get_name         (ThunarVfsVolume         *volume);
+static ThunarVfsVolumeStatus thunar_vfs_volume_bsd_get_status       (ThunarVfsVolume         *volume);
+static ThunarVfsPath        *thunar_vfs_volume_bsd_get_mount_point  (ThunarVfsVolume         *volume);
+static gboolean              thunar_vfs_volume_bsd_get_free_space   (ThunarVfsVolume         *volume,
+                                                                     ThunarVfsFileSize       *free_space_return);
+static gboolean              thunar_vfs_volume_bsd_update           (gpointer                 user_data);
+static ThunarVfsVolumeBSD   *thunar_vfs_volume_bsd_new              (const gchar             *device_path,
+                                                                     const gchar             *mount_path);
+
+
+
+struct _ThunarVfsVolumeBSDClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsVolumeBSD
+{
+  GObject __parent__;
+
+  gchar                *device_path;
+  const gchar          *device_name;
+  ThunarVfsFileDevice   device_id;
+
+  gchar                *label;
+
+  struct statfs         info;
+  ThunarVfsPath        *mount_point;
+
+  ThunarVfsVolumeKind   kind;
+  ThunarVfsVolumeStatus status;
+
+  gint                  update_timer_id;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarVfsVolumeBSD,
+                         thunar_vfs_volume_bsd,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_VFS_TYPE_VOLUME,
+                                                thunar_vfs_volume_bsd_volume_init));
+
+
+
+static void
+thunar_vfs_volume_bsd_class_init (ThunarVfsVolumeBSDClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_volume_bsd_finalize;
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_volume_init (ThunarVfsVolumeIface *iface)
+{
+  iface->get_kind = thunar_vfs_volume_bsd_get_kind;
+  iface->get_name = thunar_vfs_volume_bsd_get_name;
+  iface->get_status = thunar_vfs_volume_bsd_get_status;
+  iface->get_mount_point = thunar_vfs_volume_bsd_get_mount_point;
+  iface->get_free_space = thunar_vfs_volume_bsd_get_free_space;
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_init (ThunarVfsVolumeBSD *volume_bsd)
+{
+}
+
+
+
+static void
+thunar_vfs_volume_bsd_finalize (GObject *object)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (object);
+
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_BSD (volume_bsd));
+
+  if (G_LIKELY (volume_bsd->update_timer_id >= 0))
+    g_source_remove (volume_bsd->update_timer_id);
+
+  if (G_LIKELY (volume_bsd->mount_point != NULL))
+    thunar_vfs_path_unref (volume_bsd->mount_point);
+
+  g_free (volume_bsd->device_path);
+  g_free (volume_bsd->label);
+
+  G_OBJECT_CLASS (thunar_vfs_volume_bsd_parent_class)->finalize (object);
+}
+
+
+
+static ThunarVfsVolumeKind
+thunar_vfs_volume_bsd_get_kind (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->kind;
+}
+
+
+
+static const gchar*
+thunar_vfs_volume_bsd_get_name (ThunarVfsVolume *volume)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (volume);
+
+  return (volume_bsd->label != NULL) ? volume_bsd->label : volume_bsd->device_name;
+}
+
+
+
+static ThunarVfsVolumeStatus
+thunar_vfs_volume_bsd_get_status (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->status;
+}
+
+
+
+static ThunarVfsPath*
+thunar_vfs_volume_bsd_get_mount_point (ThunarVfsVolume *volume)
+{
+  return THUNAR_VFS_VOLUME_BSD (volume)->mount_point;
+}
+
+
+
+static gboolean
+thunar_vfs_volume_bsd_get_free_space (ThunarVfsVolume   *volume,
+                                      ThunarVfsFileSize *free_space_return)
+{
+  ThunarVfsVolumeBSD *volume_bsd = THUNAR_VFS_VOLUME_BSD (volume);
+  *free_space_return = volume_bsd->info.f_bavail * volume_bsd->info.f_bsize;
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_vfs_volume_bsd_update (gpointer user_data)
+{
+  ThunarVfsVolumeStatus status = 0;
+  struct ioc_toc_header ith;
+  ThunarVfsVolumeBSD   *volume_bsd = THUNAR_VFS_VOLUME_BSD (user_data);
+  struct stat           sb;
+  gchar                *label;
+  gchar                 buffer[THUNAR_VFS_PATH_MAXSTRLEN];
+  int                   fd;
+
+  if (volume_bsd->kind == THUNAR_VFS_VOLUME_KIND_CDROM)
+    {
+      /* try to read the table of contents from the CD-ROM,
+       * which will only succeed if a disc is present for
+       * the drive.
+       */
+      fd = open (volume_bsd->device_path, O_RDONLY);
+      if (fd >= 0)
+        {
+          if (ioctl (fd, CDIOREADTOCHEADER, &ith) >= 0)
+            {
+              status |= THUNAR_VFS_VOLUME_STATUS_PRESENT;
+
+              /* read the label of the disc */
+              if (volume_bsd->label == NULL && (volume_bsd->status & THUNAR_VFS_VOLUME_STATUS_PRESENT) == 0)
+                {
+                  /* skip to sector 16 and read it */
+                  if (lseek (fd, 16 * 2048, SEEK_SET) >= 0 && read (fd, buffer, 2048) >= 0)
+                    {
+                      /* offset 40 contains the volume identifier */
+                      label = buffer + 40;
+                      label[32] = '\0';
+                      g_strchomp (label);
+                      if (G_LIKELY (*label != '\0'))
+                        volume_bsd->label = g_strdup (label);
+                    }
+                }
+            }
+
+          close (fd);
+        }
+    }
+
+  /* determine the absolute path to the mount point */
+  if (thunar_vfs_path_to_string (volume_bsd->mount_point, buffer, sizeof (buffer), NULL) > 0)
+    {
+      /* query the file system information for the mount point */
+      if (statfs (buffer, &volume_bsd->info) >= 0)
+        {
+          /* if the device is mounted, it means that a medium is present */
+          if (exo_str_is_equal (volume_bsd->info.f_mntfromname, volume_bsd->device_path))
+            status |= THUNAR_VFS_VOLUME_STATUS_MOUNTED | THUNAR_VFS_VOLUME_STATUS_PRESENT;
+        }
+
+      /* free the volume label if no disc is present */
+      if ((status & THUNAR_VFS_VOLUME_STATUS_PRESENT) == 0)
+        {
+          g_free (volume_bsd->label);
+          volume_bsd->label = NULL;
+        }
+
+      /* determine the device id if mounted */
+      if ((status & THUNAR_VFS_VOLUME_STATUS_MOUNTED) != 0)
+        {
+          if (stat (buffer, &sb) < 0)
+            volume_bsd->device_id = (ThunarVfsFileDevice) -1;
+          else
+            volume_bsd->device_id = sb.st_dev;
+        }
+    }
+
+  /* update the status if necessary */
+  if (status != volume_bsd->status)
+    {
+      volume_bsd->status = status;
+      thunar_vfs_volume_changed (THUNAR_VFS_VOLUME (volume_bsd));
+    }
+
+  return TRUE;
+}
+
+
+
+static ThunarVfsVolumeBSD*
+thunar_vfs_volume_bsd_new (const gchar *device_path,
+                           const gchar *mount_path)
+{
+  ThunarVfsVolumeBSD *volume_bsd;
+  const gchar        *p;
+
+  g_return_val_if_fail (device_path != NULL, NULL);
+  g_return_val_if_fail (mount_path != NULL, NULL);
+
+  /* allocate the volume object */
+  volume_bsd = g_object_new (THUNAR_VFS_TYPE_VOLUME_BSD, NULL);
+  volume_bsd->device_path = g_strdup (device_path);
+  volume_bsd->mount_point = thunar_vfs_path_new (mount_path, NULL);
+
+  /* determine the device name */
+  for (p = volume_bsd->device_name = volume_bsd->device_path; *p != '\0'; ++p)
+    if (p[0] == '/' && (p[1] != '/' && p[1] != '\0'))
+      volume_bsd->device_name = p + 1;
+
+  /* determine the kind of the volume */
+  p = volume_bsd->device_name;
+  if (p[0] == 'c' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_CDROM;
+  else if (p[0] == 'f' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_FLOPPY;
+  else if ((p[0] == 'a' && p[1] == 'd' && g_ascii_isdigit (p[2]))
+        || (p[0] == 'd' && p[1] == 'a' && g_ascii_isdigit (p[2])))
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_HARDDISK;
+  else
+    volume_bsd->kind = THUNAR_VFS_VOLUME_KIND_UNKNOWN;
+
+  /* determine up-to-date status */
+  thunar_vfs_volume_bsd_update (volume_bsd);
+
+  /* start the update timer */
+  volume_bsd->update_timer_id = g_timeout_add (1000, thunar_vfs_volume_bsd_update, volume_bsd);
+
+  return volume_bsd;
+}
+
+
+
+
+static void             thunar_vfs_volume_manager_bsd_class_init         (ThunarVfsVolumeManagerBSDClass *klass);
+static void             thunar_vfs_volume_manager_bsd_manager_init       (ThunarVfsVolumeManagerIface    *iface);
+static void             thunar_vfs_volume_manager_bsd_init               (ThunarVfsVolumeManagerBSD      *manager_bsd);
+static void             thunar_vfs_volume_manager_bsd_finalize           (GObject                        *object);
+static ThunarVfsVolume *thunar_vfs_volume_manager_bsd_get_volume_by_info (ThunarVfsVolumeManager         *manager,
+                                                                          const ThunarVfsInfo            *info);
+static GList           *thunar_vfs_volume_manager_bsd_get_volumes        (ThunarVfsVolumeManager         *manager);
+
+
+
+struct _ThunarVfsVolumeManagerBSDClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsVolumeManagerBSD
+{
+  GObject __parent__;
+  GList  *volumes;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarVfsVolumeManagerBSD,
+                         thunar_vfs_volume_manager_bsd,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_VFS_TYPE_VOLUME_MANAGER,
+                                                thunar_vfs_volume_manager_bsd_manager_init));
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_class_init (ThunarVfsVolumeManagerBSDClass *klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_vfs_volume_manager_bsd_finalize;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_manager_init (ThunarVfsVolumeManagerIface *iface)
+{
+  iface->get_volume_by_info = thunar_vfs_volume_manager_bsd_get_volume_by_info;
+  iface->get_volumes = thunar_vfs_volume_manager_bsd_get_volumes;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_init (ThunarVfsVolumeManagerBSD *manager_bsd)
+{
+  ThunarVfsVolumeBSD *volume_bsd;
+  struct fstab       *fs;
+
+  /* load the fstab database */
+  setfsent ();
+
+  /* process all fstab entries and generate volume objects */
+  for (;;)
+    {
+      /* query the next fstab entry */
+      fs = getfsent ();
+      if (G_UNLIKELY (fs == NULL))
+        break;
+
+      /* we only care for file systems */
+      if (!exo_str_is_equal (fs->fs_type, FSTAB_RW)
+          && !exo_str_is_equal (fs->fs_type, FSTAB_RQ)
+          && !exo_str_is_equal (fs->fs_type, FSTAB_RO))
+        continue;
+
+      volume_bsd = thunar_vfs_volume_bsd_new (fs->fs_spec, fs->fs_file);
+      if (G_LIKELY (volume_bsd != NULL))
+        manager_bsd->volumes = g_list_append (manager_bsd->volumes, volume_bsd);
+    }
+
+  /* unload the fstab database */
+  endfsent ();
+}
+
+
+
+static void
+thunar_vfs_volume_manager_bsd_finalize (GObject *object)
+{
+  ThunarVfsVolumeManagerBSD *manager_bsd = THUNAR_VFS_VOLUME_MANAGER_BSD (object);
+  GList                     *lp;
+
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager_bsd));
+
+  for (lp = manager_bsd->volumes; lp != NULL; lp = lp->next)
+    g_object_unref (G_OBJECT (lp->data));
+  g_list_free (manager_bsd->volumes);
+
+  G_OBJECT_CLASS (thunar_vfs_volume_manager_bsd_parent_class)->finalize (object);
+}
+
+
+
+static ThunarVfsVolume*
+thunar_vfs_volume_manager_bsd_get_volume_by_info (ThunarVfsVolumeManager *manager,
+                                                  const ThunarVfsInfo    *info)
+{
+  ThunarVfsVolumeManagerBSD *manager_bsd = THUNAR_VFS_VOLUME_MANAGER_BSD (manager);
+  ThunarVfsVolumeBSD        *volume_bsd = NULL;
+  GList                     *lp;
+
+  for (lp = manager_bsd->volumes; lp != NULL; lp = lp->next)
+    {
+      volume_bsd = THUNAR_VFS_VOLUME_BSD (lp->data);
+      if ((volume_bsd->status & THUNAR_VFS_VOLUME_STATUS_MOUNTED) != 0 && volume_bsd->device_id == info->device)
+        return THUNAR_VFS_VOLUME (volume_bsd);
+    }
+
+  return NULL;
+}
+
+
+
+static GList*
+thunar_vfs_volume_manager_bsd_get_volumes (ThunarVfsVolumeManager *manager)
+{
+  return THUNAR_VFS_VOLUME_MANAGER_BSD (manager)->volumes;
+}
+
+
+
+GType
+_thunar_vfs_volume_manager_impl_get_type (void)
+{
+  return THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-impl.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,55 @@
+/* $Id: thunar-vfs-volume-bsd.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_VOLUME_BSD_H__
+#define __THUNAR_VFS_VOLUME_BSD_H__
+
+#include <thunar-vfs/thunar-vfs-volume.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsVolumeBSDClass ThunarVfsVolumeBSDClass;
+typedef struct _ThunarVfsVolumeBSD      ThunarVfsVolumeBSD;
+
+#define THUNAR_VFS_TYPE_VOLUME_BSD            (thunar_vfs_volume_bsd_get_type ())
+#define THUNAR_VFS_VOLUME_BSD(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSD))
+#define THUNAR_VFS_VOLUME_BSD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSDClass))
+#define THUNAR_VFS_IS_VOLUME_BSD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_BSD))
+#define THUNAR_VFS_IS_VOLUME_BSD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_BSD))
+#define THUNAR_VFS_VOLUME_BSD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_BSD, ThunarVfsVolumeBSDClass))
+
+GType thunar_vfs_volume_bsd_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+
+typedef struct _ThunarVfsVolumeManagerBSDClass ThunarVfsVolumeManagerBSDClass;
+typedef struct _ThunarVfsVolumeManagerBSD      ThunarVfsVolumeManagerBSD;
+
+#define THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD            (thunar_vfs_volume_manager_bsd_get_type ())
+#define THUNAR_VFS_VOLUME_MANAGER_BSD(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSD))
+#define THUNAR_VFS_VOLUME_MANAGER_BSD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSDClass))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_BSD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_BSD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD))
+#define THUNAR_VFS_VOLUME_MANAGER_BSD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_BSD, ThunarVfsVolumeManagerBSDClass))
+
+GType thunar_vfs_volume_manager_bsd_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_VOLUME_BSD_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,105 @@
+/* $Id: thunar-vfs-volume-sysv.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunar-vfs/thunar-vfs-volume-sysv.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+static void             thunar_vfs_volume_manager_sysv_class_init         (ThunarVfsVolumeManagerSysVClass *klass);
+static void             thunar_vfs_volume_manager_sysv_manager_init       (ThunarVfsVolumeManagerIface     *iface);
+static void             thunar_vfs_volume_manager_sysv_init               (ThunarVfsVolumeManagerSysV      *manager_sysv);
+static ThunarVfsVolume *thunar_vfs_volume_manager_sysv_get_volume_by_info (ThunarVfsVolumeManager          *manager,
+                                                                           const ThunarVfsInfo             *info);
+static GList           *thunar_vfs_volume_manager_sysv_get_volumes        (ThunarVfsVolumeManager          *manager);
+
+
+
+struct _ThunarVfsVolumeManagerSysVClass
+{
+  GObjectClass __parent__;
+};
+
+struct _ThunarVfsVolumeManagerSysV
+{
+  GObject __parent__;
+};
+
+
+
+G_DEFINE_TYPE_WITH_CODE (ThunarVfsVolumeManagerSysV,
+                         thunar_vfs_volume_manager_sysv,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (THUNAR_VFS_TYPE_VOLUME_MANAGER,
+                                                thunar_vfs_volume_manager_sysv_manager_init));
+
+
+static void
+thunar_vfs_volume_manager_sysv_class_init (ThunarVfsVolumeManagerSysVClass *klass)
+{
+}
+
+
+
+static void
+thunar_vfs_volume_manager_sysv_manager_init (ThunarVfsVolumeManagerIface *iface)
+{
+  iface->get_volume_by_info = thunar_vfs_volume_manager_sysv_get_volume_by_info;
+  iface->get_volumes = thunar_vfs_volume_manager_sysv_get_volumes;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_sysv_init (ThunarVfsVolumeManagerSysV *manager_sysv)
+{
+}
+
+
+
+static ThunarVfsVolume*
+thunar_vfs_volume_manager_sysv_get_volume_by_info (ThunarVfsVolumeManager *manager,
+                                                   const ThunarVfsInfo    *info)
+{
+  return NULL;
+}
+
+
+
+static GList*
+thunar_vfs_volume_manager_sysv_get_volumes (ThunarVfsVolumeManager *manager)
+{
+  return NULL;
+}
+
+
+
+GType
+_thunar_vfs_volume_manager_impl_get_type (void)
+{
+  return THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV;
+}
+
+
+

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume-sysv.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,55 @@
+/* $Id: thunar-vfs-volume-sysv.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_VOLUME_SYSV_H__
+#define __THUNAR_VFS_VOLUME_SYSV_H__
+
+#include <thunar-vfs/thunar-vfs-volume.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsVolumeSysVClass ThunarVfsVolumeSysVClass;
+typedef struct _ThunarVfsVolumeSysV      ThunarVfsVolumeSysV;
+
+#define THUNAR_VFS_TYPE_VOLUME_SYSV            (thunar_vfs_volume_sysv_get_type ())
+#define THUNAR_VFS_VOLUME_SYSV(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_SYSV, ThunarVfsVolumeSYSV))
+#define THUNAR_VFS_VOLUME_SYSV_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_SYSV, ThunarVfsVolumeSYSVClass))
+#define THUNAR_VFS_IS_VOLUME_SYSV(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_SYSV))
+#define THUNAR_VFS_IS_VOLUME_SYSV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_SYSV))
+#define THUNAR_VFS_VOLUME_SYSV_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_SYSV, ThunarVfsVolumeSYSVClass))
+
+GType thunar_vfs_volume_sysv_get_type (void) G_GNUC_CONST;
+
+
+typedef struct _ThunarVfsVolumeManagerSysVClass ThunarVfsVolumeManagerSysVClass;
+typedef struct _ThunarVfsVolumeManagerSysV      ThunarVfsVolumeManagerSysV;
+
+#define THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV            (thunar_vfs_volume_manager_sysv_get_type ())
+#define THUNAR_VFS_VOLUME_MANAGER_SYSV(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV, ThunarVfsVolumeManagerSYSV))
+#define THUNAR_VFS_VOLUME_MANAGER_SYSV_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV, ThunarVfsVolumeManagerSYSVClass))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_SYSV(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV))
+#define THUNAR_VFS_IS_VOLUME_MANAGER_SYSV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV))
+#define THUNAR_VFS_VOLUME_MANAGER_SYSV_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER_SYSV, ThunarVfsVolumeManagerSYSVClass))
+
+GType thunar_vfs_volume_manager_sysv_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_VOLUME_SYSV_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,599 @@
+/* $Id: thunar-vfs-volume.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <exo/exo.h>
+
+#include <thunar-vfs/thunar-vfs-enum-types.h>
+#include <thunar-vfs/thunar-vfs-volume.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+enum
+{
+  THUNAR_VFS_VOLUME_CHANGED,
+  THUNAR_VFS_VOLUME_LAST_SIGNAL,
+};
+
+
+
+static void thunar_vfs_volume_base_init  (gpointer klass);
+
+
+
+static guint volume_signals[THUNAR_VFS_VOLUME_CHANGED];
+
+
+
+GType
+thunar_vfs_volume_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsVolumeIface),
+        (GBaseInitFunc) thunar_vfs_volume_base_init,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarVfsVolume",
+                                     &info, 0);
+
+      g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_volume_base_init (gpointer klass)
+{
+  static gboolean initialized = FALSE;
+
+  if (G_UNLIKELY (!initialized))
+    {
+      /**
+       * ThunarVfsVolume::changed:
+       * @volume : the #ThunarVfsVolume instance.
+       *
+       * Emitted whenever the state of @volume changed.
+       **/
+      volume_signals[THUNAR_VFS_VOLUME_CHANGED] =
+        g_signal_new ("changed",
+                      G_TYPE_FROM_INTERFACE (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ThunarVfsVolumeIface, changed),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__VOID,
+                      G_TYPE_NONE, 0);
+
+      initialized = TRUE;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_volume_get_kind:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Returns the kind of drive/device representd by @volume.
+ *
+ * Return value: the kind of @volume.
+ **/
+ThunarVfsVolumeKind
+thunar_vfs_volume_get_kind (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), THUNAR_VFS_VOLUME_KIND_UNKNOWN);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_kind) (volume);
+}
+
+
+
+/**
+ * thunar_vfs_volume_get_name;
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Returns the name of the @volume. This is usually the
+ * name of the device or the label of the medium, if a
+ * medium is present.
+ *
+ * Return value: the name of @volume.
+ **/
+const gchar*
+thunar_vfs_volume_get_name (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), NULL);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_name) (volume);
+}
+
+
+
+/**
+ * thunar_vfs_volume_get_status:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Determines the current status of the @volume, e.g. whether
+ * or not the @volume is currently mounted, or whether a
+ * medium is present.
+ *
+ * Return value: the status for @volume.
+ **/
+ThunarVfsVolumeStatus
+thunar_vfs_volume_get_status (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), 0);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_status) (volume);
+}
+
+
+
+/**
+ * thunar_vfs_volume_get_mount_point:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Return value: the path which identifies the path where
+ *               the volume will be mounted (or is already
+ *               mounted).
+ **/
+ThunarVfsPath*
+thunar_vfs_volume_get_mount_point (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), NULL);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_mount_point) (volume);
+}
+
+
+
+/**
+ * thunar_vfs_volume_is_mounted:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Determines whether @volume is currently mounted into the
+ * filesystem hierarchy.
+ *
+ * Return value: %TRUE if @volume is mounted, else %FALSE.
+ **/
+gboolean
+thunar_vfs_volume_is_mounted (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), FALSE);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_status) (volume) & THUNAR_VFS_VOLUME_STATUS_MOUNTED;
+}
+
+
+
+/**
+ * thunar_vfs_volume_is_present:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Determines whether a medium is currently inserted for
+ * @volume, e.g. for a CD-ROM drive, this will be %TRUE
+ * only if a disc is present in the slot.
+ *
+ * Return value: %TRUE if @volume is present, else %FALSE.
+ **/
+gboolean
+thunar_vfs_volume_is_present (ThunarVfsVolume *volume)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), FALSE);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_status) (volume) & THUNAR_VFS_VOLUME_STATUS_PRESENT;
+}
+
+
+
+/**
+ * thunar_vfs_volume_is_removable:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Determines whether @volume is a removable device, for example
+ * a CD-ROM or a floppy drive.
+ *
+ * Return value: %TRUE if @volume is a removable device, else %FALSE.
+ **/
+gboolean
+thunar_vfs_volume_is_removable (ThunarVfsVolume *volume)
+{
+  ThunarVfsVolumeKind kind;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), FALSE);
+
+  kind = thunar_vfs_volume_get_kind (volume);
+
+  switch (kind)
+    {
+    case THUNAR_VFS_VOLUME_KIND_CDROM:
+    case THUNAR_VFS_VOLUME_KIND_FLOPPY:
+      return TRUE;
+
+    case THUNAR_VFS_VOLUME_KIND_UNKNOWN:
+    case THUNAR_VFS_VOLUME_KIND_HARDDISK:
+      return FALSE;
+
+    default:
+      g_assert_not_reached ();
+      return FALSE;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_volume_get_free_space:
+ * @volume            : a #ThunarVfsVolume instance.
+ * @free_space_return : location to store the free space to.
+ *
+ * Tries to determine the number of available bytes on the specified
+ * @volume and places the result to the memory pointed to by
+ * @free_space_return. The returned amount of bytes represents the
+ * space available to the current user, which may be different from
+ * the total free amount.
+ *
+ * If @volume is unable to determine the free space, %FALSE will be
+ * returned and @free_space_return won't be set.
+ *
+ * Return value: %TRUE if the free amount was determined successfully,
+ *               else %FALSE.
+ **/
+gboolean
+thunar_vfs_volume_get_free_space (ThunarVfsVolume   *volume,
+                                  ThunarVfsFileSize *free_space_return)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), FALSE);
+  g_return_val_if_fail (free_space_return != NULL, FALSE);
+  return (*THUNAR_VFS_VOLUME_GET_IFACE (volume)->get_free_space) (volume, free_space_return);
+}
+
+
+
+/**
+ * thunar_vfs_volume_lookup_icon_name:
+ * @volume     : a #ThunarVfsVolume instance.
+ * @icon_theme : a #GtkIconTheme instance.
+ *
+ * Tries to find a suitable icon for @volume in the given @icon_theme and
+ * returns its name. If no suitable icon is found in @icon_theme, then
+ * a fallback icon name will be returned. This way you can always count
+ * on this method to return a valid string.
+ *
+ * Return value: the icon name.
+ **/
+const gchar*
+thunar_vfs_volume_lookup_icon_name (ThunarVfsVolume *volume,
+                                    GtkIconTheme    *icon_theme)
+{
+  ThunarVfsVolumeIface *iface;
+  ThunarVfsVolumeKind   kind;
+  const gchar          *icon_name;
+
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME (volume), NULL);
+  g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
+
+  /* allow the implementing class to provide a custom icon */
+  iface = THUNAR_VFS_VOLUME_GET_IFACE (volume);
+  if (iface->lookup_icon_name != NULL)
+    {
+      icon_name = (*iface->lookup_icon_name) (volume, icon_theme);
+      if (G_LIKELY (icon_name != NULL))
+        return icon_name;
+    }
+
+  kind = thunar_vfs_volume_get_kind (volume);
+  switch (kind)
+    {
+    case THUNAR_VFS_VOLUME_KIND_DVD:
+      if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-dvd"))
+        return "gnome-dev-dvd";
+      /* FALL-THROUGH */
+
+    case THUNAR_VFS_VOLUME_KIND_CDROM:
+      if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-cdrom"))
+        return "gnome-dev-cdrom";
+      break;
+
+    case THUNAR_VFS_VOLUME_KIND_FLOPPY:
+      if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-floppy"))
+        return "gnome-dev-floppy";
+      break;
+
+    case THUNAR_VFS_VOLUME_KIND_HARDDISK:
+      if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-harddisk"))
+        return "gnome-dev-harddisk";
+      break;
+
+    case THUNAR_VFS_VOLUME_KIND_USBSTICK:
+      if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-removable-usb"))
+        return "gnome-dev-removable-usb";
+      else if (gtk_icon_theme_has_icon (icon_theme, "gnome-dev-harddisk-usb"))
+        return "gnome-dev-harddisk-usb";
+      break;
+
+    default:
+      break;
+    }
+
+  return "gnome-fs-blockdev";
+}
+
+
+
+/**
+ * thunar_vfs_volume_changed:
+ * @volume : a #ThunarVfsVolume instance.
+ *
+ * Emits the "changed" signal on @volume. This function should
+ * only be used by implementations of the #ThunarVfsVolume
+ * interface.
+ **/
+void
+thunar_vfs_volume_changed (ThunarVfsVolume *volume)
+{
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME (volume));
+  g_signal_emit (G_OBJECT (volume), volume_signals[THUNAR_VFS_VOLUME_CHANGED], 0);
+}
+
+
+
+
+enum
+{
+  THUNAR_VFS_VOLUME_MANAGER_VOLUMES_ADDED,
+  THUNAR_VFS_VOLUME_MANAGER_VOLUMES_REMOVED,
+  THUNAR_VFS_VOLUME_MANAGER_LAST_SIGNAL,
+};
+
+
+
+static void thunar_vfs_volume_manager_base_init  (gpointer klass);
+
+
+
+static guint manager_signals[THUNAR_VFS_VOLUME_MANAGER_LAST_SIGNAL];
+
+
+
+GType
+thunar_vfs_volume_manager_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarVfsVolumeManagerIface),
+        (GBaseInitFunc) thunar_vfs_volume_manager_base_init,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE,
+                                     "ThunarVfsVolumeManager",
+                                     &info, 0);
+
+      g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+    }
+
+  return type;
+}
+
+
+
+static void
+thunar_vfs_volume_manager_base_init (gpointer klass)
+{
+  static gboolean initialized = FALSE;
+
+  if (G_UNLIKELY (!initialized))
+    {
+      /**
+       * ThunarVfsVolumeManager::volumes-added:
+       * @manager : a #ThunarVfsVolumeManager instance.
+       * @volumes : a list of #ThunarVfsVolume<!---->s.
+       *
+       * Invoked by the @manager whenever new volumes have been
+       * attached to the system or the administrator changes the
+       * /etc/fstab file, or some other condition, depending
+       * on the manager implementation.
+       *
+       * Note that the implementation should not invoke this
+       * method when a volume is mounted, as that's a completely
+       * different condition!
+       **/
+      manager_signals[THUNAR_VFS_VOLUME_MANAGER_VOLUMES_ADDED] =
+        g_signal_new ("volumes-added",
+                      G_TYPE_FROM_INTERFACE (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ThunarVfsVolumeManagerIface, volumes_added),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__POINTER,
+                      G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+      /**
+       * ThunarVfsVolumeManager::volumes-removed:
+       * @manager : a #ThunarVfsVolume instance.
+       * @volumes : a list of #ThunarVfsVolume<!---->s.
+       *
+       * Invoked whenever the @manager notices that @volumes have
+       * been detached from the system.
+       **/
+      manager_signals[THUNAR_VFS_VOLUME_MANAGER_VOLUMES_REMOVED] =
+        g_signal_new ("volumes-removed",
+                      G_TYPE_FROM_INTERFACE (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ThunarVfsVolumeManagerIface, volumes_removed),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__POINTER,
+                      G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+      initialized = TRUE;
+    }
+}
+
+
+
+/**
+ * thunar_vfs_volume_manager_get_default:
+ * 
+ * Returns the default, shared #ThunarVfsVolumeManager instance
+ * for this system. This function automatically determines, which
+ * implementation of #ThunarVfsVolumeManager should be used for
+ * the target system and returns an instance of that class, which
+ * is shared among all modules using the volume manager facility.
+ *
+ * Call g_object_unref() on the returned object when you are
+ * done with it.
+ *
+ * Return value: the shared #ThunarVfsVolumeManager instance.
+ **/
+ThunarVfsVolumeManager*
+thunar_vfs_volume_manager_get_default (void)
+{
+  extern GType _thunar_vfs_volume_manager_impl_get_type (void);
+  static ThunarVfsVolumeManager *manager = NULL;
+
+  if (G_UNLIKELY (manager == NULL))
+    {
+      manager = g_object_new (_thunar_vfs_volume_manager_impl_get_type (), NULL);
+      g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+    }
+  else
+    {
+      g_object_ref (G_OBJECT (manager));
+    }
+
+  return manager;
+}
+
+
+
+/**
+ * thunar_vfs_volume_manager_get_volume_by_info:
+ * @manager : a #ThunarVfsVolumeManager instance.
+ * @info    : a #ThunarVfsInfo.
+ *
+ * Tries to lookup the #ThunarVfsVolume on which @info is
+ * located. If @manager doesn't know a #ThunarVfsVolume
+ * for @info, %NULL will be returned.
+ *
+ * The returned #ThunarVfsVolume (if any) is owned by
+ * @manager and must not be freed by the caller.
+ *
+ * Return value: the #ThunarVfsVolume, on which @info is
+ *               located or %NULL.
+ **/
+ThunarVfsVolume*
+thunar_vfs_volume_manager_get_volume_by_info (ThunarVfsVolumeManager *manager,
+                                              const ThunarVfsInfo    *info)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager), NULL);
+  g_return_val_if_fail (info != NULL, NULL);
+  return (*THUNAR_VFS_VOLUME_MANAGER_GET_IFACE (manager)->get_volume_by_info) (manager, info);
+}
+
+
+
+/**
+ * thunar_vfs_volume_manager_get_volumes:
+ * @manager : a #ThunarVfsVolumeManager instance.
+ *
+ * Returns all #ThunarVfsVolume<!---->s currently known for
+ * @manager. The returned list is owned by @manager and should
+ * therefore considered constant in the caller.
+ *
+ * Return value: the list of volumes known for @manager.
+ **/
+GList*
+thunar_vfs_volume_manager_get_volumes (ThunarVfsVolumeManager *manager)
+{
+  g_return_val_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager), NULL);
+  return (*THUNAR_VFS_VOLUME_MANAGER_GET_IFACE (manager)->get_volumes) (manager);
+}
+
+
+
+/**
+ * thunar_vfs_volume_manager_volumes_added:
+ * @manager : a #ThunarVfsVolumeManager instance.
+ * @volumes : a list of #ThunarVfsVolume<!---->s.
+ *
+ * Emits the "volumes-added" signal on @manager using the
+ * given @volumes.
+ *
+ * This method should only be used by classes implementing
+ * the #ThunarVfsVolumeManager interface.
+ **/
+void
+thunar_vfs_volume_manager_volumes_added (ThunarVfsVolumeManager *manager,
+                                         GList                  *volumes)
+{
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager));
+  g_return_if_fail (g_list_length (volumes) > 0);
+  g_signal_emit (G_OBJECT (manager), manager_signals[THUNAR_VFS_VOLUME_MANAGER_VOLUMES_ADDED], 0, volumes);
+}
+
+
+
+/**
+ * thunar_vfs_volume_manager_volumes_removed:
+ * @manager : a #ThunarVfsVolumeManager instance.
+ * @volumes : a list of #ThunarVfsVolume<!---->s.
+ *
+ * Emits the "volumes-removed" signal on @manager using
+ * the given @volumes.
+ *
+ * This method should only be used by classes implementing
+ * the #ThunarVfsVolumeManager interface.
+ **/
+void
+thunar_vfs_volume_manager_volumes_removed (ThunarVfsVolumeManager *manager,
+                                           GList                  *volumes)
+{
+  g_return_if_fail (THUNAR_VFS_IS_VOLUME_MANAGER (manager));
+  g_return_if_fail (g_list_length (volumes) > 0);
+  g_signal_emit (G_OBJECT (manager), manager_signals[THUNAR_VFS_VOLUME_MANAGER_VOLUMES_REMOVED], 0, volumes);
+}
+
+
+
+#define __THUNAR_VFS_VOLUME_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-volume.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,149 @@
+/* $Id: thunar-vfs-volume.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_VOLUME_H__
+#define __THUNAR_VFS_VOLUME_H__
+
+#include <gtk/gtk.h>
+
+#include <thunar-vfs/thunar-vfs-info.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarVfsVolumeIface ThunarVfsVolumeIface;
+typedef struct _ThunarVfsVolume      ThunarVfsVolume;
+
+#define THUNAR_VFS_TYPE_VOLUME            (thunar_vfs_volume_get_type ())
+#define THUNAR_VFS_VOLUME(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME, ThunarVfsVolume))
+#define THUNAR_VFS_IS_VOLUME(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME))
+#define THUNAR_VFS_VOLUME_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_VFS_TYPE_VOLUME, ThunarVfsVolumeIface))
+
+/**
+ * ThunarVfsVolumeKind:
+ * @THUNAR_VFS_VOLUME_KIND_UNKNOWN  : Unknown volume.
+ * @THUNAR_VFS_VOLUME_KIND_CDROM    : CD drives.
+ * @THUNAR_VFS_VOLUME_KIND_DVD      : DVD drives.
+ * @THUNAR_VFS_VOLUME_KIND_FLOPPY   : Floppy drives.
+ * @THUNAR_VFS_VOLUME_KIND_HARDDISK : Hard disk drives.
+ * @THUNAR_VFS_VOLUME_KIND_USBSTICK : USB sticks.
+ *
+ * Describes the type of a VFS volume.
+ **/
+typedef enum
+{
+  THUNAR_VFS_VOLUME_KIND_UNKNOWN,
+  THUNAR_VFS_VOLUME_KIND_CDROM,
+  THUNAR_VFS_VOLUME_KIND_DVD,
+  THUNAR_VFS_VOLUME_KIND_FLOPPY,
+  THUNAR_VFS_VOLUME_KIND_HARDDISK,
+  THUNAR_VFS_VOLUME_KIND_USBSTICK,
+} ThunarVfsVolumeKind;
+
+/**
+ * ThunarVfsVolumeStatus:
+ * @THUNAR_VFS_VOLUME_STATUS_PRESENT : Whether or not a medium is present.
+ * @THUNAR_VFS_VOLUME_STATUS_MOUNTED : Whether or not the media is currently mounted.
+ *
+ * Describes the current status of a VFS volume.
+ **/
+typedef enum /*< flags >*/
+{
+  THUNAR_VFS_VOLUME_STATUS_MOUNTED = 1 << 0,
+  THUNAR_VFS_VOLUME_STATUS_PRESENT = 1 << 1,
+} ThunarVfsVolumeStatus;
+
+struct _ThunarVfsVolumeIface
+{
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolumeKind   (*get_kind)         (ThunarVfsVolume   *volume);
+  const gchar          *(*get_name)         (ThunarVfsVolume   *volume);
+  ThunarVfsVolumeStatus (*get_status)       (ThunarVfsVolume   *volume);
+  ThunarVfsPath        *(*get_mount_point)  (ThunarVfsVolume   *volume);
+  gboolean              (*get_free_space)   (ThunarVfsVolume   *volume,
+                                             ThunarVfsFileSize *free_space_return);
+  const gchar          *(*lookup_icon_name) (ThunarVfsVolume   *volume,
+                                             GtkIconTheme      *icon_theme);
+
+  /* signals */
+  void (*changed) (ThunarVfsVolume *volume);
+};
+
+GType                 thunar_vfs_volume_get_type          (void) G_GNUC_CONST;
+
+ThunarVfsVolumeKind   thunar_vfs_volume_get_kind          (ThunarVfsVolume   *volume);
+const gchar          *thunar_vfs_volume_get_name          (ThunarVfsVolume   *volume);
+ThunarVfsVolumeStatus thunar_vfs_volume_get_status        (ThunarVfsVolume   *volume);
+ThunarVfsPath        *thunar_vfs_volume_get_mount_point   (ThunarVfsVolume   *volume);
+
+gboolean              thunar_vfs_volume_is_mounted        (ThunarVfsVolume   *volume);
+gboolean              thunar_vfs_volume_is_present        (ThunarVfsVolume   *volume);
+gboolean              thunar_vfs_volume_is_removable      (ThunarVfsVolume   *volume);
+
+gboolean              thunar_vfs_volume_get_free_space    (ThunarVfsVolume   *volume,
+                                                           ThunarVfsFileSize *free_space_return);
+
+const gchar          *thunar_vfs_volume_lookup_icon_name  (ThunarVfsVolume   *volume,
+                                                           GtkIconTheme      *icon_theme);
+
+void                  thunar_vfs_volume_changed           (ThunarVfsVolume   *volume) G_GNUC_INTERNAL;
+
+
+typedef struct _ThunarVfsVolumeManagerIface ThunarVfsVolumeManagerIface;
+typedef struct _ThunarVfsVolumeManager      ThunarVfsVolumeManager;
+
+#define THUNAR_VFS_TYPE_VOLUME_MANAGER            (thunar_vfs_volume_manager_get_type ())
+#define THUNAR_VFS_VOLUME_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER, ThunarVfsVolumeManager))
+#define THUNAR_VFS_IS_VOLUME_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER))
+#define THUNAR_VFS_VOLUME_MANAGER_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNAR_VFS_TYPE_VOLUME_MANAGER, ThunarVfsVolumeManagerIface))
+
+struct _ThunarVfsVolumeManagerIface
+{
+  GTypeInterface __parent__;
+
+  /* methods */
+  ThunarVfsVolume *(*get_volume_by_info) (ThunarVfsVolumeManager *manager,
+                                          const ThunarVfsInfo    *info);
+  GList           *(*get_volumes)        (ThunarVfsVolumeManager *manager);
+
+  /* signals */
+  void (*volumes_added)   (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+  void (*volumes_removed) (ThunarVfsVolumeManager *manager,
+                           GList                  *volumes);
+};
+
+GType                   thunar_vfs_volume_manager_get_type            (void) G_GNUC_CONST;
+
+ThunarVfsVolumeManager *thunar_vfs_volume_manager_get_default         (void);
+
+ThunarVfsVolume        *thunar_vfs_volume_manager_get_volume_by_info  (ThunarVfsVolumeManager *manager,
+                                                                       const ThunarVfsInfo    *info);
+GList                  *thunar_vfs_volume_manager_get_volumes         (ThunarVfsVolumeManager *manager);
+
+void                    thunar_vfs_volume_manager_volumes_added       (ThunarVfsVolumeManager *manager,
+                                                                       GList                  *volumes) G_GNUC_INTERNAL;
+void                    thunar_vfs_volume_manager_volumes_removed     (ThunarVfsVolumeManager *manager,
+                                                                       GList                  *volumes) G_GNUC_INTERNAL;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_VOLUME_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,761 @@
+/* $Id: thunar-vfs-xfer.c 18850 2005-11-14 21:21:05Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <thunar-vfs/thunar-vfs-monitor.h>
+#include <thunar-vfs/thunar-vfs-xfer.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+#if GLIB_CHECK_VERSION(2,6,0)
+#include <glib/gstdio.h>
+#else
+#define g_lstat(path, buffer) (lstat ((path), (buffer)))
+#define g_mkdir(path, mode) (mkdir ((path), (mode)))
+#endif
+
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW 0
+#endif
+
+
+
+/* modes of xfer operation */
+typedef enum
+{
+  THUNAR_VFS_XFER_COPY,
+  THUNAR_VFS_XFER_LINK,
+} ThunarVfsXferMode;
+
+
+
+static void             tvxc_set_error_from_errno       (GError              **error,
+                                                         const gchar          *message,
+                                                         const gchar          *path);
+static ThunarVfsPath   *thunar_vfs_xfer_next_path       (const ThunarVfsPath  *source_path,
+                                                         ThunarVfsPath        *target_directory_path,
+                                                         guint                 n,
+                                                         ThunarVfsXferMode     mode,
+                                                         GError              **error);
+static inline gboolean  thunar_vfs_xfer_copy_directory  (const gchar          *source_absolute_path,
+                                                         const gchar          *target_absolute_path,
+                                                         const struct stat    *source_statb,
+                                                         ThunarVfsXferCallback callback,
+                                                         gpointer              user_data,
+                                                         gboolean              merge_directories,
+                                                         GError              **error);
+static inline gboolean  thunar_vfs_xfer_copy_fifo       (const gchar          *source_absolute_path,
+                                                         const gchar          *target_absolute_path,
+                                                         const struct stat    *source_statb,
+                                                         ThunarVfsXferCallback callback,
+                                                         gpointer              user_data,
+                                                         GError              **error);
+static inline gboolean  thunar_vfs_xfer_copy_regular    (const gchar          *source_absolute_path,
+                                                         const gchar          *target_absolute_path,
+                                                         const struct stat    *source_statb,
+                                                         ThunarVfsXferCallback callback,
+                                                         gpointer              user_data,
+                                                         GError              **error);
+static inline gboolean  thunar_vfs_xfer_copy_symlink    (const gchar          *source_absolute_path,
+                                                         const gchar          *target_absolute_path,
+                                                         const struct stat    *source_statb,
+                                                         ThunarVfsXferCallback callback,
+                                                         gpointer              user_data,
+                                                         GError              **error);
+static gboolean         thunar_vfs_xfer_copy_internal   (const ThunarVfsPath  *source_path,
+                                                         ThunarVfsPath        *target_path,
+                                                         ThunarVfsXferCallback callback,
+                                                         gpointer              user_data,
+                                                         gboolean              merge_directories,
+                                                         GError              **error);
+static inline gboolean  thunar_vfs_xfer_link_internal   (const ThunarVfsPath  *source_path,
+                                                         ThunarVfsPath        *target_path,
+                                                         GError              **error);
+
+
+
+/* reference to the global ThunarVfsMonitor instance */
+static ThunarVfsMonitor *thunar_vfs_xfer_monitor = NULL;
+
+
+
+static void
+tvxc_set_error_from_errno (GError     **error,
+                           const gchar *message,
+                           const gchar *path)
+{
+  gchar *display_name;
+  gchar *format;
+  gint   sverrno;
+
+  /* save the errno value, as it may be modified */
+  sverrno = errno;
+
+  /* determine the display name for the path */
+  display_name = g_filename_display_name (path);
+
+  /* setup the error */
+  format = g_strconcat (message, ": %s", NULL);
+  g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (sverrno),
+               format, display_name, g_strerror (sverrno));
+  g_free (format);
+
+  /* release the display name */
+  g_free (display_name);
+}
+
+
+
+/* generates the next duplicate/link name */
+static ThunarVfsPath*
+thunar_vfs_xfer_next_path (const ThunarVfsPath *source_path,
+                           ThunarVfsPath       *target_directory_path,
+                           guint                n,
+                           ThunarVfsXferMode    mode,
+                           GError             **error)
+{
+  static const gchar * const NAMES[3][2] =
+  {
+    {
+      N_ ("copy of %s"),
+      N_ ("link to %s"),
+    },
+    {
+      N_ ("another copy of %s"),
+      N_ ("another link to %s"),
+    },
+    {
+      N_ ("third copy of %s"),
+      N_ ("third link to %s"),
+    },
+  };
+
+  ThunarVfsPath *target_path;
+  const gchar   *source_name;
+  gchar         *source_display_name;
+  gchar         *target_display_name;
+  gchar         *target_name;
+  gchar         *swap_name;
+  gchar         *tmp_name;
+  guint          m;
+
+  g_return_val_if_fail (n > 0, NULL);
+
+  /* try to determine the display name for the source file (in UTF-8) */
+  source_name = thunar_vfs_path_get_name (source_path);
+  source_display_name = g_filename_to_utf8 (source_name, -1, NULL, NULL, error);
+  if (G_UNLIKELY (source_display_name == NULL))
+    return NULL;
+
+  /* check if the source display name matches one of the NAMES (when copying) */
+  if (G_LIKELY (mode == THUNAR_VFS_XFER_COPY))
+    {
+      /* allocate memory for the new name */
+      tmp_name = g_strdup (source_display_name);
+
+      /* try the NAMES */
+      for (m = 0; m < 3; ++m)
+        if (sscanf (source_display_name, gettext (NAMES[m][THUNAR_VFS_XFER_COPY]), tmp_name) == 1)
+          {
+            /* swap tmp and source display name */
+            swap_name = source_display_name;
+            source_display_name = tmp_name;
+            tmp_name = swap_name;
+            break;
+          }
+
+      /* if we had no match on the NAMES, try the "%uth copy of %s" pattern */
+      if (G_LIKELY (m == 3) && sscanf (source_display_name, _("%uth copy of %s"), &m, tmp_name) == 2)
+        {
+          /* swap tmp and source display name */
+          swap_name = source_display_name;
+          source_display_name = tmp_name;
+          tmp_name = swap_name;
+        }
+
+      /* cleanup */
+      g_free (tmp_name);
+    }
+
+  /* determine the target display name */
+  if (G_LIKELY (n <= 3))
+    target_display_name = g_strdup_printf (gettext (NAMES[n - 1][mode]), source_display_name);
+  else if (mode == THUNAR_VFS_XFER_COPY)
+    target_display_name = g_strdup_printf (ngettext ("%uth copy of %s", "%uth copy of %s", n), n, source_display_name);
+  else
+    target_display_name = g_strdup_printf (ngettext ("%uth link to %s", "%uth link to %s", n), n, source_display_name);
+
+  /* we don't need the source display name anymore */
+  g_free (source_display_name);
+
+  /* try to determine the real target name from the display name */
+  target_name = g_filename_from_utf8 (target_display_name, -1, NULL, NULL, error);
+
+  /* generate the target path */
+  target_path = (target_name != NULL) ? thunar_vfs_path_relative (target_directory_path, target_name) : NULL;
+  g_free (target_display_name);
+  g_free (target_name);
+  return target_path;
+}
+
+
+
+static inline gboolean
+thunar_vfs_xfer_copy_directory (const gchar          *source_absolute_path,
+                                const gchar          *target_absolute_path,
+                                const struct stat    *source_statb,
+                                ThunarVfsXferCallback callback,
+                                gpointer              user_data,
+                                gboolean              merge_directories,
+                                GError              **error)
+{
+  /* check if the directory exists */
+  if (g_file_test (target_absolute_path, G_FILE_TEST_IS_DIR))
+    {
+      /* return an error if we should not merge */
+      if (G_UNLIKELY (!merge_directories))
+        {
+          errno = EEXIST;
+          goto error;
+        }
+    }
+  else if (g_mkdir (target_absolute_path, source_statb->st_mode & ~S_IFMT) < 0)
+    {
+error:
+      /* setup the error return */
+      tvxc_set_error_from_errno (error, _("Failed to create directory `%s'"), target_absolute_path);
+      return FALSE;
+    }
+
+  /* invoke the callback */
+  (*callback) (source_statb->st_size, source_statb->st_size, user_data);
+
+  return TRUE;
+}
+
+
+
+static inline gboolean
+thunar_vfs_xfer_copy_fifo (const gchar          *source_absolute_path,
+                           const gchar          *target_absolute_path,
+                           const struct stat    *source_statb,
+                           ThunarVfsXferCallback callback,
+                           gpointer              user_data,
+                           GError              **error)
+{
+  /* try to create the named fifo */
+  if (mkfifo (target_absolute_path, source_statb->st_mode) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to create named fifo `%s'"), target_absolute_path);
+      return FALSE;
+    }
+
+  /* invoke the callback */
+  (*callback) (source_statb->st_size, source_statb->st_size, user_data);
+
+  return TRUE;
+}
+
+
+
+static inline gboolean
+thunar_vfs_xfer_copy_regular (const gchar          *source_absolute_path,
+                              const gchar          *target_absolute_path,
+                              const struct stat    *source_statb,
+                              ThunarVfsXferCallback callback,
+                              gpointer              user_data,
+                              GError              **error)
+{
+  gboolean succeed = FALSE;
+  gsize    done;
+  gsize    bufsize;
+  gchar   *buffer;
+  gint     source_fd;
+  gint     target_fd;
+  gint     n, m, l;
+
+  /* try to open the source file for reading */
+  source_fd = open (source_absolute_path, O_RDONLY);
+  if (G_UNLIKELY (source_fd < 0))
+    {
+      tvxc_set_error_from_errno (error, _("Failed to open `%s' for reading"), source_absolute_path);
+      goto end0;
+    }
+
+  /* try to open the target file for writing */
+  target_fd = open (target_absolute_path, O_CREAT | O_EXCL | O_NOFOLLOW | O_WRONLY, source_statb->st_mode);
+  if (G_UNLIKELY (target_fd < 0))
+    {
+      /* translate EISDIR, EMLINK and ETXTBSY to EEXIST */
+      if (G_UNLIKELY (errno == EISDIR || errno == EMLINK || errno == ETXTBSY))
+        errno = EEXIST;
+
+      tvxc_set_error_from_errno (error, _("Failed to open `%s' for writing"), target_absolute_path);
+      goto end1;
+    }
+
+  /* allocate the transfer buffer */
+  bufsize = 8 * source_statb->st_blksize;
+  buffer = g_new (gchar, bufsize);
+
+  /* copy the data from the source file to the target file */
+  for (done = 0; done < source_statb->st_size; )
+    {
+      /* read a chunk from the source file */
+      n = read (source_fd, buffer, bufsize);
+      if (G_UNLIKELY (n < 0))
+        {
+          /* just try again on EAGAIN/EINTR */
+          if (G_UNLIKELY (errno == EAGAIN || errno == EINTR))
+            continue;
+
+          tvxc_set_error_from_errno (error, _("Failed to read data from `%s'"), source_absolute_path);
+          goto end2;
+        }
+      else if (n == 0)
+        break;
+
+      /* write the data to the target file */
+      for (m = 0; m < n; )
+        {
+          l = write (target_fd, buffer + m, n - m);
+          if (G_UNLIKELY (l < 0))
+            {
+              /* just try again on EAGAIN/EINTR */
+              if (G_UNLIKELY (errno == EAGAIN || errno == EINTR))
+                continue;
+
+              tvxc_set_error_from_errno (error, _("Failed to write data to `%s'"), target_absolute_path);
+              goto end2;
+            }
+          else
+            {
+              /* advance the offset */
+              m += l;
+            }
+        }
+
+      /* advance the byte offset */
+      done += n;
+
+      /* invoke the callback (FALSE means cancel) */
+      if (!((*callback) (source_statb->st_size, done, user_data)))
+        {
+          /* unlink the not yet completely written target file */
+          if (done < source_statb->st_size && g_unlink (target_absolute_path) < 0)
+            {
+              tvxc_set_error_from_errno (error, _("Failed to remove `%s'"), target_absolute_path);
+              goto end2;
+            }
+
+          /* tell the caller that the job was cancelled */
+          g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INTR, _("Operation cancelled"));
+          goto end2;
+        }
+    }
+
+  /* invoke the callback with the fully written data */
+  (*callback) (done, done, user_data);
+
+  /* we did it */
+  succeed = TRUE;
+
+  /* release the transfer buffer */
+end2:
+  g_free (buffer);
+
+  /* close the file descriptors */
+  close (target_fd);
+end1:
+  close (source_fd);
+end0:
+  return succeed;
+}
+
+
+
+static inline gboolean
+thunar_vfs_xfer_copy_symlink (const gchar          *source_absolute_path,
+                              const gchar          *target_absolute_path,
+                              const struct stat    *source_statb,
+                              ThunarVfsXferCallback callback,
+                              gpointer              user_data,
+                              GError              **error)
+{
+  gchar link_target[THUNAR_VFS_PATH_MAXSTRLEN * 2 + 1];
+  gint  link_target_len;
+
+  /* try to read the link target */
+  link_target_len = readlink (source_absolute_path, link_target, sizeof (link_target) - 1);
+  if (G_UNLIKELY (link_target_len < 0))
+    {
+      tvxc_set_error_from_errno (error, _("Failed to read link target from `%s'"), source_absolute_path);
+      return FALSE;
+    }
+  link_target[link_target_len] = '\0';
+
+  /* try to create the symbolic link */
+  if (symlink (link_target, target_absolute_path) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to create symbolic link `%s'"), target_absolute_path);
+      return FALSE;
+    }
+
+#ifdef HAVE_LCHMOD
+  /* apply the file mode which was found for the source */
+  if (lchmod (target_absolute_path, source_statb->st_mode) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to change mode of `%s'"), target_absolute_path);
+      return FALSE;
+    }
+#endif
+
+  /* invoke the callback */
+  (*callback) (source_statb->st_size, source_statb->st_size, user_data);
+
+  return TRUE;
+}
+
+
+
+static gboolean
+thunar_vfs_xfer_copy_internal (const ThunarVfsPath   *source_path,
+                               ThunarVfsPath         *target_path,
+                               ThunarVfsXferCallback  callback,
+                               gpointer               user_data,
+                               gboolean               merge_directories,
+                               GError               **error)
+{
+  struct stat source_statb;
+  gboolean    succeed;
+  gchar      *display_name;
+  gchar       source_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+  gchar       target_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  /* determine the absolute path to the source file */
+  if (thunar_vfs_path_to_string (source_path, source_absolute_path, sizeof (source_absolute_path), error) < 0)
+    return FALSE;
+
+  /* stat the source path */
+  if (lstat (source_absolute_path, &source_statb) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to determine file info for `%s'"), source_absolute_path);
+      return FALSE;
+    }
+
+  /* determine the absolute path to the target file */
+  if (thunar_vfs_path_to_string (target_path, target_absolute_path, sizeof (target_absolute_path), error) < 0)
+    return FALSE;
+
+  /* perform the appropriate operation */
+  switch ((source_statb.st_mode & S_IFMT) >> 12)
+    {
+    case THUNAR_VFS_FILE_TYPE_DIRECTORY:
+      succeed = thunar_vfs_xfer_copy_directory (source_absolute_path, target_absolute_path, &source_statb, callback, user_data, merge_directories, error);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_FIFO:
+      succeed = thunar_vfs_xfer_copy_fifo (source_absolute_path, target_absolute_path, &source_statb, callback, user_data, error);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_REGULAR:
+      succeed = thunar_vfs_xfer_copy_regular (source_absolute_path, target_absolute_path, &source_statb, callback, user_data, error);
+      break;
+
+    case THUNAR_VFS_FILE_TYPE_SYMLINK:
+      succeed = thunar_vfs_xfer_copy_symlink (source_absolute_path, target_absolute_path, &source_statb, callback, user_data, error);
+      break;
+
+    default:
+      display_name = g_filename_display_name (source_absolute_path);
+      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Failed to copy special file `%s'"), display_name);
+      g_free (display_name);
+      return FALSE;
+    }
+
+  /* schedule a "created" event if the operation was successfull */
+  if (G_LIKELY (succeed))
+    thunar_vfs_monitor_feed (thunar_vfs_xfer_monitor, THUNAR_VFS_MONITOR_EVENT_CREATED, target_path);
+
+  /* and that's it */
+  return succeed;
+}
+
+
+
+static inline gboolean
+thunar_vfs_xfer_link_internal (const ThunarVfsPath *source_path,
+                               ThunarVfsPath       *target_path,
+                               GError             **error)
+{
+  struct stat source_statb;
+  gchar       source_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+  gchar       target_absolute_path[THUNAR_VFS_PATH_MAXSTRLEN];
+
+  /* determine the absolute path to the source file */
+  if (thunar_vfs_path_to_string (source_path, source_absolute_path, sizeof (source_absolute_path), error) < 0)
+    return FALSE;
+
+  /* stat the source path */
+  if (lstat (source_absolute_path, &source_statb) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to determine file info for `%s'"), source_absolute_path);
+      return FALSE;
+    }
+
+  /* determine the absolute path to the target file */
+  if (thunar_vfs_path_to_string (target_path, target_absolute_path, sizeof (target_absolute_path), error) < 0)
+    return FALSE;
+
+  /* try to create the symlink */
+  if (symlink (source_absolute_path, target_absolute_path) < 0)
+    {
+      tvxc_set_error_from_errno (error, _("Failed to create symbolic `%s'"), target_absolute_path);
+      return FALSE;
+    }
+
+  /* feed a "created" event for the target path */
+  thunar_vfs_monitor_feed (thunar_vfs_xfer_monitor, THUNAR_VFS_MONITOR_EVENT_CREATED, target_path);
+
+  return TRUE;
+}
+
+
+
+/**
+ * thunar_vfs_xfer_copy:
+ * @source_path        : the #ThunarVfsPath to the source file.
+ * @target_path        : the #ThunarVfsPath to the target file.
+ * @target_path_return : return location for the final target path or %NULL.
+ * @callback           : progress callback function.
+ * @user_data          : additional user data to pass to @callback.
+ * @error              : return location for errors or %NULL.
+ *
+ * If @target_path_return is not %NULL, the final target path, which
+ * may be different than @target_path, is placed in the location
+ * pointed to by @target_path_return. The caller is responsible to
+ * free the object using thunar_vfs_path_unref(). @target_path_return
+ * will only be set if %TRUE is returned.
+ *
+ * As a special case, if @callback returns %FALSE (which means the
+ * operation should be cancelled), this method returns %FALSE and
+ * @error is set to #G_FILE_ERROR_INTR.
+ *
+ * Return value: %FALSE if @error is set, else %TRUE.
+ **/
+gboolean
+thunar_vfs_xfer_copy (const ThunarVfsPath   *source_path,
+                      ThunarVfsPath         *target_path,
+                      ThunarVfsPath        **target_path_return,
+                      ThunarVfsXferCallback  callback,
+                      gpointer               user_data,
+                      GError               **error)
+{
+  ThunarVfsPath *target_directory_path;
+  ThunarVfsPath *path;
+  gboolean       succeed;
+  GError        *err = NULL;
+  guint          n;
+
+  g_return_val_if_fail (source_path != NULL, FALSE);
+  g_return_val_if_fail (target_path != NULL, FALSE);
+  g_return_val_if_fail (callback != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* check if source and target are the same */
+  if (G_LIKELY (!thunar_vfs_path_equal (source_path, target_path)))
+    {
+      succeed = thunar_vfs_xfer_copy_internal (source_path, target_path, callback, user_data, TRUE, error);
+      if (G_LIKELY (succeed && target_path_return != NULL))
+        *target_path_return = thunar_vfs_path_ref (target_path);
+      return succeed;
+    }
+
+  /* generate a duplicate name for the target path */
+  target_directory_path = thunar_vfs_path_get_parent (target_path);
+  for (n = 1;; ++n)
+    {
+      /* try to generate the next duplicate path */
+      path = thunar_vfs_xfer_next_path (source_path, target_directory_path, n, THUNAR_VFS_XFER_COPY, &err);
+      if (G_UNLIKELY (path == NULL))
+        {
+          g_propagate_error (error, err);
+          return FALSE;
+        }
+
+      /* try to copy to the duplicate file */
+      succeed = thunar_vfs_xfer_copy_internal (source_path, path, callback, user_data, FALSE, &err);
+
+      /* check if we succeed or cannot continue */
+      if (G_LIKELY (succeed || err->domain != G_FILE_ERROR || err->code != G_FILE_ERROR_EXIST))
+        {
+          if (G_LIKELY (succeed && target_path_return != NULL))
+            *target_path_return = path;
+          else
+            thunar_vfs_path_unref (path);
+
+          if (G_UNLIKELY (error == NULL))
+            g_clear_error (&err);
+          else
+            *error = err;
+          return succeed;
+        }
+
+      /* and once again... */
+      thunar_vfs_path_unref (path);
+      g_clear_error (&err);
+    }
+
+  /* we never get here */
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+
+
+/**
+ * thunar_vfs_xfer_link:
+ * @source_path        : the #ThunarVfsPath to the source file.
+ * @target_path        : the #ThunarVfsPath to the target file.
+ * @target_path_return : return location for the final target path or %NULL.
+ * @error              : return location for errors or %NULL.
+ *
+ * If @target_path_return is not %NULL, the final target path, which
+ * may be different than @target_path, is placed in the location
+ * pointed to by @target_path_return. The caller is responsible to
+ * free the object using thunar_vfs_path_unref(). @target_path_return
+ * will only be set if %TRUE is returned.
+ *
+ * Return value: %FALSE if @error is set, else %TRUE.
+ **/
+gboolean
+thunar_vfs_xfer_link (const ThunarVfsPath  *source_path,
+                      ThunarVfsPath        *target_path,
+                      ThunarVfsPath       **target_path_return,
+                      GError              **error)
+{
+  ThunarVfsPath *target_directory_path;
+  ThunarVfsPath *path;
+  gboolean       succeed;
+  GError        *err = NULL;
+  guint          n;
+
+  g_return_val_if_fail (source_path != NULL, FALSE);
+  g_return_val_if_fail (target_path != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+  /* check if source and target are the same */
+  if (G_LIKELY (!thunar_vfs_path_equal (source_path, target_path)))
+    {
+      succeed = thunar_vfs_xfer_link_internal (source_path, target_path, error);
+      if (G_LIKELY (succeed && target_path_return != NULL))
+        *target_path_return = thunar_vfs_path_ref (target_path);
+      return succeed;
+    }
+
+  /* generate a new link name for the target path */
+  target_directory_path = thunar_vfs_path_get_parent (target_path);
+  for (n = 1;; ++n)
+    {
+      /* try to generate the next link path */
+      path = thunar_vfs_xfer_next_path (source_path, target_directory_path, n, THUNAR_VFS_XFER_LINK, &err);
+      if (G_UNLIKELY (path == NULL))
+        {
+          g_propagate_error (error, err);
+          return FALSE;
+        }
+
+      /* try to symlink to the new file */
+      succeed = thunar_vfs_xfer_link_internal (source_path, path, &err);
+
+      /* check if we succeed or cannot continue */
+      if (G_LIKELY (succeed || err->domain != G_FILE_ERROR || err->code != G_FILE_ERROR_EXIST))
+        {
+          if (G_LIKELY (succeed && target_path_return != NULL))
+            *target_path_return = path;
+          else
+            thunar_vfs_path_unref (path);
+
+          if (G_UNLIKELY (error == NULL))
+            g_clear_error (&err);
+          else
+            *error = err;
+          return succeed;
+        }
+
+      /* and once again... */
+      thunar_vfs_path_unref (path);
+      g_clear_error (&err);
+    }
+
+  /* we never get here */
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+
+
+/**
+ * _thunar_vfs_xfer_init:
+ * Initializes the Thunar-VFS Transfer module.
+ **/
+void
+_thunar_vfs_xfer_init (void)
+{
+  thunar_vfs_xfer_monitor = thunar_vfs_monitor_get_default ();
+}
+
+
+
+/**
+ * _thunar_vfs_xfer_shutdown:
+ * Shuts down the Thunar-VFS Transfer module.
+ **/
+void
+_thunar_vfs_xfer_shutdown (void)
+{
+  g_object_unref (G_OBJECT (thunar_vfs_xfer_monitor));
+  thunar_vfs_xfer_monitor = NULL;
+}
+
+
+
+#define __THUNAR_VFS_XFER_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs-xfer.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,67 @@
+/* $Id: thunar-vfs-xfer.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined (THUNAR_VFS_INSIDE_THUNAR_VFS_H) && !defined (THUNAR_VFS_COMPILATION)
+#error "Only <thunar-vfs/thunar-vfs.h> can be included directly, this file may disappear or change contents."
+#endif
+
+#ifndef __THUNAR_VFS_XFER_H__
+#define __THUNAR_VFS_XFER_H__
+
+#include <thunar-vfs/thunar-vfs-path.h>
+#include <thunar-vfs/thunar-vfs-types.h>
+
+G_BEGIN_DECLS;
+
+/**
+ * ThunarVfsXferCallback:
+ * @total_size     : the total size of the file system entity.
+ * @completed_size : the completed size of the file system entity.
+ * @user_data      : the user data specified when thunar_vfs_xfer_copy()
+ *                   was called.
+ *
+ * Return value: %FALSE to cancel the transfer operation,
+ *               %TRUE to continue.
+ **/
+typedef gboolean (*ThunarVfsXferCallback) (ThunarVfsFileSize total_size,
+                                           ThunarVfsFileSize completed_size,
+                                           gpointer          user_data);
+
+gboolean thunar_vfs_xfer_copy (const ThunarVfsPath  *source_path,
+                               ThunarVfsPath        *target_path,
+                               ThunarVfsPath       **target_path_return,
+                               ThunarVfsXferCallback callback,
+                               gpointer              user_data,
+                               GError              **error) G_GNUC_INTERNAL;
+
+gboolean thunar_vfs_xfer_link (const ThunarVfsPath  *source_path,
+                               ThunarVfsPath        *target_path,
+                               ThunarVfsPath       **target_path_return,
+                               GError              **error) G_GNUC_INTERNAL;
+
+
+#if defined(THUNAR_VFS_COMPILATION)
+void _thunar_vfs_xfer_init     (void) G_GNUC_INTERNAL;
+void _thunar_vfs_xfer_shutdown (void) G_GNUC_INTERNAL;
+#endif
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_XFER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,523 @@
+/* $Id: thunar-vfs.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunar-vfs/thunar-vfs.h>
+#include <thunar-vfs/thunar-vfs-link-job.h>
+#include <thunar-vfs/thunar-vfs-listdir-job.h>
+#include <thunar-vfs/thunar-vfs-mkdir-job.h>
+#include <thunar-vfs/thunar-vfs-transfer-job.h>
+#include <thunar-vfs/thunar-vfs-unlink-job.h>
+#include <thunar-vfs/thunar-vfs-xfer.h>
+#include <thunar-vfs/thunar-vfs-alias.h>
+
+
+
+static gint thunar_vfs_ref_count = 0;
+
+
+
+/**
+ * thunar_vfs_init:
+ *
+ * Initializes the ThunarVFS library.
+ **/
+void
+thunar_vfs_init (void)
+{
+  if (g_atomic_int_exchange_and_add (&thunar_vfs_ref_count, 1) == 0)
+    {
+      /* initialize the path module */
+      _thunar_vfs_path_init ();
+
+      /* initialize the xfer module */
+      _thunar_vfs_xfer_init ();
+
+      /* initialize the info module */
+      _thunar_vfs_info_init ();
+
+      /* initialize the jobs framework */
+      _thunar_vfs_job_init ();
+    }
+}
+
+
+
+/**
+ * thunar_vfs_shutdown:
+ *
+ * Shuts down the ThunarVFS library.
+ **/
+void
+thunar_vfs_shutdown (void)
+{
+  if (g_atomic_int_dec_and_test (&thunar_vfs_ref_count))
+    {
+      /* shutdown the jobs framework */
+      _thunar_vfs_job_shutdown ();
+
+      /* release the info module */
+      _thunar_vfs_info_shutdown ();
+
+      /* shutdown the xfer module */
+      _thunar_vfs_xfer_shutdown ();
+
+      /* shutdown the path module */
+      _thunar_vfs_path_shutdown ();
+    }
+}
+
+
+
+/**
+ * thunar_vfs_listdir:
+ * @path  : the #ThunarVfsPath for the folder that should be listed.
+ * @error : return location for errors or %NULL.
+ *
+ * Generates a #ThunarVfsListdirJob, which can be used to list the
+ * contents of a directory (as specified by @path). If the creation
+ * of the job failes for some reason, %NULL will be returned and
+ * @error will be set to point to a #GError describing the cause.
+ * Else the newly allocated #ThunarVfsListdirJob will be returned
+ * and the caller is responsible to call g_object_unref().
+ *
+ * Note, that the returned job is launched right away, so you
+ * don't need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsListdirJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_listdir (ThunarVfsPath *path,
+                    GError       **error)
+{
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate the job */
+  return thunar_vfs_job_launch (thunar_vfs_listdir_job_new (path));
+}
+
+
+
+/**
+ * thunar_vfs_copy_file:
+ * @source_path : the source #ThunarVfsPath.
+ * @target_path : the target #ThunarVfsPath.
+ * @error       : return location for errors or %NULL.
+ *
+ * Allocates a new #ThunarVfsTransferJob, which copies the file
+ * from @source_path to @target_path. That said, the file or directory
+ * located at @source_path will be placed at @target_path, NOT INTO
+ * @target_path.
+ *
+ * The caller is responsible to free the returned job using
+ * g_object_unref() when no longer needed.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsTransferJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_copy_file (ThunarVfsPath *source_path,
+                      ThunarVfsPath *target_path,
+                      GError       **error)
+{
+  GList source_path_list;
+  GList target_path_list;
+
+  g_return_val_if_fail (source_path != NULL, NULL);
+  g_return_val_if_fail (target_path != NULL, NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* fake a source path list */
+  source_path_list.data = source_path;
+  source_path_list.next = NULL;
+  source_path_list.prev = NULL;
+
+  /* fake a target path list */
+  target_path_list.data = target_path;
+  target_path_list.next = NULL;
+  target_path_list.prev = NULL;
+
+  /* allocate the job */
+  return thunar_vfs_copy_files (&source_path_list, &target_path_list, error);
+}
+
+
+
+/**
+ * thunar_vfs_copy_files:
+ * @source_path_list : the list of #ThunarVfsPath<!---->s that should be copied.
+ * @target_path_list : the list of #ThunarVfsPath<!---->s for the targets.
+ * @error            : return location for errors or %NULL.
+ *
+ * Similar to thunar_vfs_copy_file(), but takes a bunch of files. The
+ * @source_path_list and @target_path_list must be of the same size.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it. The caller is responsible
+ * to free the returned object using g_object_unref() when no longer
+ * needed.
+ *
+ * Return value: the newly allocated #ThunarVfsTransferJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_copy_files (GList   *source_path_list,
+                       GList   *target_path_list,
+                       GError **error)
+{
+  ThunarVfsJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate/launch the job */
+  job = thunar_vfs_transfer_job_new (source_path_list, target_path_list, FALSE, error);
+  if (G_LIKELY (job != NULL))
+    thunar_vfs_job_launch (job);
+
+  return job;
+}
+
+
+
+/**
+ * thunar_vfs_link_file:
+ * @source_path : the source #ThunarVfsPath.
+ * @target_path : the target #ThunarVfsPath.
+ * @error       : return location for errors or %NULL.
+ *
+ * Allocates a new #ThunarVfsLinkJob, which creates a symbolic
+ * link from @source_path to @target_path.
+ *
+ * If @source_path and @target_path refer to the same file,
+ * a new unique target filename will be choosen automatically.
+ *
+ * The caller is responsible to free the returned job using
+ * g_object_unref() when no longer needed.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsLinkJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_link_file (ThunarVfsPath *source_path,
+                      ThunarVfsPath *target_path,
+                      GError       **error)
+{
+  GList source_path_list;
+  GList target_path_list;
+
+  g_return_val_if_fail (!thunar_vfs_path_is_root (source_path), NULL);
+  g_return_val_if_fail (!thunar_vfs_path_is_root (target_path), NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* fake a source path list */
+  source_path_list.data = source_path;
+  source_path_list.next = NULL;
+  source_path_list.prev = NULL;
+
+  /* fake a target path list */
+  target_path_list.data = target_path;
+  target_path_list.next = NULL;
+  target_path_list.prev = NULL;
+
+  return thunar_vfs_link_files (&source_path_list, &target_path_list, error);
+}
+
+
+
+/**
+ * thunar_vfs_link_files:
+ * @source_path_list : list of #ThunarVfsPath<!---->s to the source files.
+ * @target_path_list : list of #ThunarVfsPath<!---->s to the target files.
+ * @error            : return location for errors or %NULL.
+ *
+ * Like thunar_vfs_link_file(), but works on path lists, rather than
+ * a single path.
+ *
+ * The caller is responsible to free the returned job using
+ * g_object_unref() when no longer needed.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsLinkJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_link_files (GList   *source_path_list,
+                       GList   *target_path_list,
+                       GError **error)
+{
+  ThunarVfsJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate/launch the job */
+  job = thunar_vfs_link_job_new (source_path_list, target_path_list, error);
+  if (G_LIKELY (job != NULL))
+    thunar_vfs_job_launch (job);
+
+  return job;
+}
+
+
+
+/**
+ * thunar_vfs_move_file:
+ * @source_path : the source #ThunarVfsPath.
+ * @target_path : the target #ThunarVfsPath.
+ * @error       : return location for errors or %NULL.
+ *
+ * Allocates a new #ThunarVfsTransferJob, which moves the file
+ * from @source_path to @target_path. That said, the file or directory
+ * located at @source_path will be placed at @target_path, NOT INTO
+ * @target_path.
+ *
+ * The caller is responsible to free the returned job using
+ * g_object_unref() when no longer needed.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsTransferJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_move_file (ThunarVfsPath *source_path,
+                      ThunarVfsPath *target_path,
+                      GError       **error)
+{
+  GList source_path_list;
+  GList target_path_list;
+
+  g_return_val_if_fail (source_path != NULL, NULL);
+  g_return_val_if_fail (target_path != NULL, NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* fake a source path list */
+  source_path_list.data = source_path;
+  source_path_list.next = NULL;
+  source_path_list.prev = NULL;
+
+  /* fake a target path list */
+  target_path_list.data = target_path;
+  target_path_list.next = NULL;
+  target_path_list.prev = NULL;
+
+  /* allocate and launch the job */
+  return thunar_vfs_move_files (&source_path_list, &target_path_list, error);
+}
+
+
+
+/**
+ * thunar_vfs_move_into:
+ * @source_path_list : the list of #ThunarVfsPath<!---->s that should be moved.
+ * @target_path_list : the list of #ThunarVfsPath<!---->s to the targets.
+ * @error            : return location for errors or %NULL.
+ *
+ * Similar to thunar_vfs_move_file(), but takes a bunch of files. The
+ * @source_path_list and @target_path_list must be of the same size.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it. The caller is responsible
+ * to free the returned object using g_object_unref() when no longer
+ * needed.
+ *
+ * Return value: the newly allocated #ThunarVfsTransferJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_move_files (GList   *source_path_list,
+                       GList   *target_path_list,
+                       GError **error)
+{
+  ThunarVfsJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate/launch the job */
+  job = thunar_vfs_transfer_job_new (source_path_list, target_path_list, TRUE, error);
+  if (G_LIKELY (job != NULL))
+    thunar_vfs_job_launch (job);
+
+  return job;
+}
+
+
+
+/**
+ * thunar_vfs_unlink_file:
+ * @path  : a #ThunarVfsPath, that should be unlinked.
+ * @error : return location for errors or %NULL.
+ *
+ * Simple wrapper to thunar_vfs_unlink_files(), which takes
+ * only a single path.
+ *
+ * Note, that the returned job is launched right away, so you
+ * don't need to call thunar_vfs_job_launch() on it. The caller
+ * is responsible to free the returned object using g_object_unref()
+ * when no longer needed.
+ *
+ * Return value: the newly allocated #ThunarVfsUnlinkJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_unlink_file (ThunarVfsPath *path,
+                        GError       **error)
+{
+  GList path_list;
+
+  g_return_val_if_fail (path != NULL, NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* fake a path list */
+  path_list.data = path;
+  path_list.next = NULL;
+  path_list.prev = NULL;
+
+  /* allocate and launch the job */
+  return thunar_vfs_unlink_files (&path_list, error);
+}
+
+
+
+/**
+ * thunar_vfs_unlink_files:
+ * @path_list : a list of #ThunarVfsPath<!---->s, that should be unlinked.
+ * @error     : return location for errors or %NULL.
+ *
+ * Generates a #ThunarVfsInteractiveJob, which can be used to unlink
+ * all files referenced by the @path_list. If the creation of the job
+ * failes for some reason, %NULL will be returned and @error will
+ * be set to point to a #GError describing the cause. Else, the
+ * newly allocated #ThunarVfsUnlinkJob will be returned, and the
+ * caller is responsible to call g_object_unref().
+ *
+ * Note, that the returned job is launched right away, so you
+ * don't need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsUnlinkJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_unlink_files (GList   *path_list,
+                         GError **error)
+{
+  ThunarVfsJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* try to allocate the job */
+  job = thunar_vfs_unlink_job_new (path_list, error);
+  if (G_LIKELY (job != NULL))
+    thunar_vfs_job_launch (job);
+
+  return job;
+}
+
+
+
+/**
+ * thunar_vfs_make_directory:
+ * @path  : the #ThunarVfsPath to the directory to create.
+ * @error : return location for errors or %NULL.
+ *
+ * Generates a #ThunarVfsMkdirJob, which can be used to
+ * asynchronously create a new directory at the given @path. If
+ * the creation of the job fails for some reason, %NULL will be
+ * returned and @error will be set to point to a #GError
+ * describing the cause of the problem. Else the newly allocated
+ * #ThunarVfsMkdirJob will be returned, and the caller is responsible
+ * to call g_object_unref().
+ *
+ * Note, that the returned job is launched right away, so you
+ * don't need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsMkdirJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_make_directory (ThunarVfsPath *path,
+                           GError       **error)
+{
+  GList path_list;
+
+  g_return_val_if_fail (path != NULL, NULL);
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* fake a path list */
+  path_list.data = path;
+  path_list.next = NULL;
+  path_list.prev = NULL;
+
+  /* allocate and launch the job */
+  return thunar_vfs_make_directories (&path_list, error);
+}
+
+
+
+/**
+ * thunar_vfs_make_directories:
+ * @path_list : a list of #ThunarVfsPath<!--->s that contain the paths
+ *              to the directories which should be created.
+ * @error     : return location for errors or %NULL.
+ *
+ * Similar to thunar_vfs_make_directory(), but allows the creation
+ * of multiple directories using a single #ThunarVfsJob.
+ *
+ * The caller is responsible to free the returned job using
+ * g_object_unref() when no longer needed.
+ *
+ * Note, that the returned job is launched right away, so you don't
+ * need to call thunar_vfs_job_launch() on it.
+ *
+ * Return value: the newly allocated #ThunarVfsMkdirJob or %NULL
+ *               if an error occurs while creating the job.
+ **/
+ThunarVfsJob*
+thunar_vfs_make_directories (GList   *path_list,
+                             GError **error)
+{
+  ThunarVfsJob *job;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  /* allocate and launch the new job */
+  job = thunar_vfs_mkdir_job_new (path_list, error);
+  if (G_LIKELY (job != NULL))
+    thunar_vfs_job_launch (job);
+
+  return job;
+}
+
+
+
+#define __THUNAR_VFS_C__
+#include <thunar-vfs/thunar-vfs-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,83 @@
+/* $Id: thunar-vfs.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNAR_VFS_H__
+#define __THUNAR_VFS_H__
+
+#define THUNAR_VFS_INSIDE_THUNAR_VFS_H
+
+#include <thunar-vfs/thunar-vfs-enum-types.h>
+#include <thunar-vfs/thunar-vfs-info.h>
+#include <thunar-vfs/thunar-vfs-interactive-job.h>
+#include <thunar-vfs/thunar-vfs-job.h>
+#include <thunar-vfs/thunar-vfs-mime-application.h>
+#include <thunar-vfs/thunar-vfs-mime-database.h>
+#include <thunar-vfs/thunar-vfs-mime-info.h>
+#include <thunar-vfs/thunar-vfs-monitor.h>
+#include <thunar-vfs/thunar-vfs-path.h>
+#include <thunar-vfs/thunar-vfs-thumb.h>
+#include <thunar-vfs/thunar-vfs-user.h>
+#include <thunar-vfs/thunar-vfs-util.h>
+#include <thunar-vfs/thunar-vfs-volume.h>
+
+#undef THUNAR_VFS_INSIDE_THUNAR_VFS_H
+
+G_BEGIN_DECLS;
+
+void          thunar_vfs_init             (void);
+void          thunar_vfs_shutdown         (void);
+
+ThunarVfsJob *thunar_vfs_listdir          (ThunarVfsPath *path,
+                                           GError       **error) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_vfs_copy_file        (ThunarVfsPath *source_path,
+                                           ThunarVfsPath *target_path,
+                                           GError       **error) G_GNUC_MALLOC;
+ThunarVfsJob *thunar_vfs_copy_files       (GList         *source_path_list,
+                                           GList         *target_path_list,
+                                           GError       **error) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_vfs_link_file        (ThunarVfsPath *source_path,
+                                           ThunarVfsPath *target_path,
+                                           GError       **error) G_GNUC_MALLOC;
+ThunarVfsJob *thunar_vfs_link_files       (GList         *source_path_list,
+                                           GList         *target_path_list,
+                                           GError       **error) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_vfs_move_file        (ThunarVfsPath *source_path,
+                                           ThunarVfsPath *target_path,
+                                           GError       **error) G_GNUC_MALLOC;
+ThunarVfsJob *thunar_vfs_move_files       (GList         *source_path_list,
+                                           GList         *target_path_list,
+                                           GError       **error) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_vfs_unlink_file      (ThunarVfsPath *path,
+                                           GError       **error) G_GNUC_MALLOC;
+ThunarVfsJob *thunar_vfs_unlink_files     (GList         *path_list,
+                                           GError       **error) G_GNUC_MALLOC;
+
+ThunarVfsJob *thunar_vfs_make_directory   (ThunarVfsPath *path,
+                                           GError       **error) G_GNUC_MALLOC;
+ThunarVfsJob *thunar_vfs_make_directories (GList         *path_list,
+                                           GError       **error) G_GNUC_MALLOC;
+
+G_END_DECLS;
+
+#endif /* !__THUNAR_VFS_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.symbols
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.symbols	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunar-vfs/thunar-vfs.symbols	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,301 @@
+/* $Id: thunar-vfs.symbols 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* This file lists all exported symbols. It is used to generate
+ * the gobject.def file used to control exports on Windows and the
+ * thunar-vfs-alias.h/thunar-vfs-aliasdef.c files used to avoid PLT
+ * entries for * internal uses of exported functions (see
+ * make-thunar-vfs-alias.pl).
+ * 
+ * Every symbol must be included in the right
+ * #ifdef IN_HEADER(sym) #endif and
+ * #ifdef IN_SOURCE(sym) #endif sections. 
+ */
+
+#ifdef ALL_FILES
+#define IN_SOURCE(x) 1
+#define IN_HEADER(x) 1
+#endif
+
+/* thunar-vfs functions */
+#if IN_HEADER(__THUNAR_VFS_H__)
+#if IN_SOURCE(__THUNAR_VFS_C__)
+thunar_vfs_init
+thunar_vfs_shutdown
+thunar_vfs_listdir G_GNUC_MALLOC
+thunar_vfs_copy_file G_GNUC_MALLOC
+thunar_vfs_copy_files G_GNUC_MALLOC
+thunar_vfs_link_file G_GNUC_MALLOC
+thunar_vfs_link_files G_GNUC_MALLOC
+thunar_vfs_move_file G_GNUC_MALLOC
+thunar_vfs_move_files G_GNUC_MALLOC
+thunar_vfs_unlink_file G_GNUC_MALLOC
+thunar_vfs_unlink_files G_GNUC_MALLOC
+thunar_vfs_make_directory G_GNUC_MALLOC
+thunar_vfs_make_directories G_GNUC_MALLOC
+#endif
+#endif
+
+/* thunar-vfs-config symbols */
+#if IN_HEADER(__THUNAR_VFS_CONFIG_H__)
+#if IN_SOURCE(__THUNAR_VFS_CONFIG_C__)
+thunar_vfs_major_version
+thunar_vfs_minor_version
+thunar_vfs_micro_version
+thunar_vfs_check_version
+#endif
+#endif
+
+/* ThunarVfsInfo methods */
+#if IN_HEADER(__THUNAR_VFS_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_INFO_C__)
+thunar_vfs_info_get_type
+thunar_vfs_info_new_for_path G_GNUC_MALLOC
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_info_ref
+#endif
+thunar_vfs_info_unref
+thunar_vfs_info_copy
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_info_get_custom_icon
+#endif
+thunar_vfs_info_execute
+thunar_vfs_info_rename
+thunar_vfs_info_matches
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_info_list_free
+#endif
+#endif
+#endif
+
+/* thunar-vfs-enum-types functions */
+#if IN_HEADER(__THUNAR_VFS_ENUM_TYPES_H__)
+#if IN_SOURCE(__THUNAR_VFS_ENUM_TYPES_C__)
+thunar_vfs_file_flags_get_type G_GNUC_CONST
+thunar_vfs_file_mode_get_type G_GNUC_CONST
+thunar_vfs_file_type_get_type G_GNUC_CONST
+thunar_vfs_interactive_job_response_get_type G_GNUC_CONST
+thunar_vfs_mime_application_error_get_type G_GNUC_CONST
+thunar_vfs_mime_application_flags_get_type G_GNUC_CONST
+thunar_vfs_monitor_event_get_type G_GNUC_CONST
+thunar_vfs_thumb_size_get_type G_GNUC_CONST
+thunar_vfs_volume_kind_get_type G_GNUC_CONST
+thunar_vfs_volume_status_get_type G_GNUC_CONST
+#endif
+#endif
+
+/* ThunarVfsInteractiveJob methods */
+#if IN_HEADER(__THUNAR_VFS_INTERACTIVE_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_INTERACTIVE_JOB_C__)
+thunar_vfs_interactive_job_get_type G_GNUC_CONST
+#endif
+#endif
+
+/* ThunarVfsJob methods */
+#if IN_HEADER(__THUNAR_VFS_JOB_H__)
+#if IN_SOURCE(__THUNAR_VFS_JOB_C__)
+thunar_vfs_job_get_type G_GNUC_CONST
+thunar_vfs_job_launch
+thunar_vfs_job_cancel
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_job_cancelled
+#endif
+#endif
+#endif
+
+/* ThunarVfsMimeApplication methods */
+#if IN_HEADER(__THUNAR_VFS_MIME_APPLICATION_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_APPLICATION_C__)
+thunar_vfs_mime_application_error_quark G_GNUC_CONST
+thunar_vfs_mime_application_get_type G_GNUC_CONST
+thunar_vfs_mime_application_new_from_desktop_id G_GNUC_MALLOC
+thunar_vfs_mime_application_new_from_file G_GNUC_MALLOC
+thunar_vfs_mime_application_ref
+thunar_vfs_mime_application_unref
+thunar_vfs_mime_application_get_command
+thunar_vfs_mime_application_get_desktop_id
+thunar_vfs_mime_application_get_flags
+thunar_vfs_mime_application_get_name
+thunar_vfs_mime_application_get_mime_types
+thunar_vfs_mime_application_exec
+thunar_vfs_mime_application_exec_with_env
+thunar_vfs_mime_application_lookup_icon_name
+thunar_vfs_mime_application_hash
+thunar_vfs_mime_application_equal
+#endif
+#endif
+
+/* ThunarVfsMimeDatabase methods */
+#if IN_HEADER(__THUNAR_VFS_MIME_DATABASE_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_DATABASE_C__)
+thunar_vfs_mime_database_get_type G_GNUC_CONST
+thunar_vfs_mime_database_get_default
+thunar_vfs_mime_database_get_info
+thunar_vfs_mime_database_get_info_for_data
+thunar_vfs_mime_database_get_info_for_name
+thunar_vfs_mime_database_get_info_for_file
+thunar_vfs_mime_database_get_infos_for_info
+thunar_vfs_mime_database_get_applications
+thunar_vfs_mime_database_get_default_application
+thunar_vfs_mime_database_set_default_application
+thunar_vfs_mime_database_add_application
+#endif
+#endif
+
+/* ThunarVfsMimeInfo methods */
+#if IN_HEADER(__THUNAR_VFS_MIME_INFO_H__)
+#if IN_SOURCE(__THUNAR_VFS_MIME_INFO_C__)
+thunar_vfs_mime_info_get_type G_GNUC_CONST
+thunar_vfs_mime_info_new G_GNUC_MALLOC
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_mime_info_ref
+#endif
+thunar_vfs_mime_info_unref
+thunar_vfs_mime_info_get_comment
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_mime_info_get_name
+#endif
+thunar_vfs_mime_info_get_media G_GNUC_MALLOC
+thunar_vfs_mime_info_get_subtype G_GNUC_MALLOC
+thunar_vfs_mime_info_hash
+thunar_vfs_mime_info_equal
+thunar_vfs_mime_info_lookup_icon_name
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_mime_info_list_free
+#endif
+#endif
+#endif
+
+/* ThunarVfsMonitor methods */
+#if IN_HEADER(__THUNAR_VFS_MONITOR_H__)
+#if IN_SOURCE(__THUNAR_VFS_MONITOR_C__)
+thunar_vfs_monitor_get_type G_GNUC_CONST
+thunar_vfs_monitor_get_default
+thunar_vfs_monitor_add_directory
+thunar_vfs_monitor_add_file
+thunar_vfs_monitor_remove
+thunar_vfs_monitor_feed
+thunar_vfs_monitor_wait
+#endif
+#endif
+
+/* ThunarVfsPath methods */
+#if IN_HEADER(__THUNAR_VFS_PATH_H__)
+#if IN_SOURCE(__THUNAR_VFS_PATH_C__)
+thunar_vfs_path_get_type G_GNUC_CONST
+thunar_vfs_path_new G_GNUC_MALLOC
+thunar_vfs_path_get_for_home
+thunar_vfs_path_get_for_root
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_path_ref
+#endif
+thunar_vfs_path_unref
+thunar_vfs_path_hash
+thunar_vfs_path_equal
+thunar_vfs_path_relative G_GNUC_MALLOC
+thunar_vfs_path_is_home
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_path_is_root
+thunar_vfs_path_get_name
+thunar_vfs_path_get_parent
+#endif
+thunar_vfs_path_dup_string G_GNUC_MALLOC
+thunar_vfs_path_to_string
+thunar_vfs_path_dup_uri G_GNUC_MALLOC
+thunar_vfs_path_to_uri
+thunar_vfs_path_list_from_string G_GNUC_MALLOC
+thunar_vfs_path_list_to_string G_GNUC_MALLOC
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+thunar_vfs_path_list_append
+thunar_vfs_path_list_prepend
+thunar_vfs_path_list_copy G_GNUC_MALLOC
+thunar_vfs_path_list_free
+#endif
+#endif
+#endif
+
+/* ThunarVfsThumbFactory methods */
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+thunar_vfs_thumb_factory_get_type G_GNUC_CONST
+thunar_vfs_thumb_factory_new G_GNUC_MALLOC
+thunar_vfs_thumb_factory_lookup_thumbnail G_GNUC_MALLOC
+thunar_vfs_thumb_factory_can_thumbnail
+thunar_vfs_thumb_factory_has_failed_thumbnail
+thunar_vfs_thumb_factory_generate_thumbnail G_GNUC_MALLOC
+thunar_vfs_thumb_factory_store_thumbnail
+#endif
+#endif
+
+/* thunar-vfs-thumbnail functions */
+#if IN_HEADER(__THUNAR_VFS_THUMB_H__)
+#if IN_SOURCE(__THUNAR_VFS_THUMB_C__)
+thunar_vfs_thumbnail_for_path G_GNUC_MALLOC
+thunar_vfs_thumbnail_is_valid
+#endif
+#endif
+
+/* ThunarVfsGroup/ThunarVfsUser/ThunarVfsUserManager methods */
+#if IN_HEADER(__THUNAR_VFS_USER_H__)
+#if IN_SOURCE(__THUNAR_VFS_USER_C__)
+thunar_vfs_group_get_type G_GNUC_CONST
+thunar_vfs_group_get_id
+thunar_vfs_group_get_name
+thunar_vfs_user_get_type G_GNUC_CONST
+thunar_vfs_user_get_groups
+thunar_vfs_user_get_primary_group
+thunar_vfs_user_get_id
+thunar_vfs_user_get_name
+thunar_vfs_user_get_real_name
+thunar_vfs_user_is_me
+thunar_vfs_user_manager_get_type
+thunar_vfs_user_manager_get_default
+thunar_vfs_user_manager_get_group_by_id
+thunar_vfs_user_manager_get_user_by_id
+#endif
+#endif
+
+/* thunar-vfs-util functions */
+#if IN_HEADER(__THUNAR_VFS_UTIL_H__)
+#if IN_SOURCE(__THUNAR_VFS_UTIL_C__)
+thunar_vfs_humanize_size
+#endif
+#endif
+
+/* ThunarVfsVolume/ThunarVfsVolumeManager methods */
+#if IN_HEADER(__THUNAR_VFS_VOLUME_H__)
+#if IN_SOURCE(__THUNAR_VFS_VOLUME_C__)
+thunar_vfs_volume_get_type G_GNUC_CONST
+thunar_vfs_volume_get_kind
+thunar_vfs_volume_get_name
+thunar_vfs_volume_get_status
+thunar_vfs_volume_get_mount_point
+thunar_vfs_volume_is_mounted
+thunar_vfs_volume_is_present
+thunar_vfs_volume_is_removable
+thunar_vfs_volume_get_free_space
+thunar_vfs_volume_lookup_icon_name
+thunar_vfs_volume_manager_get_type G_GNUC_CONST
+thunar_vfs_volume_manager_get_default
+thunar_vfs_volume_manager_get_volume_by_info
+thunar_vfs_volume_manager_get_volumes
+#endif
+#endif
+

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.am
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.am	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.am	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,97 @@
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+INCLUDES =								\
+	-I$(top_srcdir)							\
+	-DG_LOG_DOMAIN=\"thunarx\"					\
+	-DTHUNARX_COMPILATION						\
+	$(PLATFORM_CPPFLAGS)
+
+libthunarx_built_sources =						\
+	thunarx-alias.h							\
+	thunarx-aliasdef.c
+
+libthunarx_headers =							\
+	thunarx.h							\
+	thunarx-config.h						\
+	thunarx-file-info.h						\
+	thunarx-menu-provider.h						\
+	thunarx-property-page.h						\
+	thunarx-property-page-provider.h
+
+libthunarx_includedir =							\
+	$(includedir)/thunarx-$(THUNAR_VERSION_API)/thunarx
+
+libthunarx_include_HEADERS =						\
+	$(libthunarx_headers)
+
+lib_LTLIBRARIES =							\
+	libthunarx-1.la
+
+libthunarx_1_la_SOURCES =						\
+	$(libthunarx_built_sources)					\
+	$(libthunarx_headers)						\
+	thunarx-config.c						\
+	thunarx-file-info.c						\
+	thunarx-menu-provider.c						\
+	thunarx-property-page.c						\
+	thunarx-property-page-provider.c
+
+libthunarx_1_la_CFLAGS =						\
+	$(GTK_CFLAGS)							\
+	$(PLATFORM_CFLAGS)
+
+libthunarx_1_la_LDFLAGS =						\
+	-export-dynamic							\
+	-export-symbols-regex "^[^_].*"					\
+	-version-info $(THUNAR_VERINFO)					\
+	$(PLATFORM_LDFLAGS)
+
+libthunarx_1_la_LIBADD =						\
+	$(GTK_LIBS)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = thunarx-1.pc
+
+EXTRA_DIST =								\
+	abicheck.sh							\
+	make-thunarx-alias.pl						\
+	thunarx.symbols							\
+	thunarx-alias.h							\
+	thunarx-aliasdef.c
+
+##
+## Rules to auto-generate built sources
+##
+## This is a bit tricky with automake, and non-trivial to implement. The
+## rules below seem to work fine and don't seem to break the build, but
+## they are only enabled in maintainer mode, so arbitrary users don't get
+## trapped in automake's oddities. Therefore we ship the autogenerated
+## files as part of the dist tarball.
+##
+if MAINTAINER_MODE
+CLEANFILES =								\
+	actual-abi							\
+	expected-abi
+
+DISTCLEANFILES =							\
+	$(libthunarx_built_sources)
+
+BUILT_SOURCES =								\
+	$(libthunarx_built_sources)
+
+if HAVE_GNUC_VISIBILITY
+TESTS =									\
+	abicheck.sh
+endif
+
+thunarx-alias.h: make-thunarx-alias.pl thunarx.symbols
+	$(PERL) $(srcdir)/make-thunarx-alias.pl < $(srcdir)/thunarx.symbols > thunarx-alias.h
+
+thunarx-aliasdef.c: make-thunarx-alias.pl thunarx.symbols
+	$(PERL) $(srcdir)/make-thunarx-alias.pl -def < $(srcdir)/thunarx.symbols > thunarx-aliasdef.c
+endif
+
+# required for gtk-doc
+dist-hook: all
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/Makefile.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,835 @@
+# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  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.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 18843 2005-11-14 14:25:58Z benny $
+
+
+
+SOURCES = $(libthunarx_1_la_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+target_triplet = @target@
+subdir = thunarx
+DIST_COMMON = $(libthunarx_include_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/thunarx-1.pc.in \
+	$(srcdir)/thunarx-config.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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 = thunarx-1.pc thunarx-config.h
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+	"$(DESTDIR)$(libthunarx_includedir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libthunarx_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_1 = libthunarx_1_la-thunarx-aliasdef.lo
+am__objects_2 =
+am_libthunarx_1_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+	libthunarx_1_la-thunarx-config.lo \
+	libthunarx_1_la-thunarx-file-info.lo \
+	libthunarx_1_la-thunarx-menu-provider.lo \
+	libthunarx_1_la-thunarx-property-page.lo \
+	libthunarx_1_la-thunarx-property-page-provider.lo
+libthunarx_1_la_OBJECTS = $(am_libthunarx_1_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libthunarx_1_la_SOURCES)
+DIST_SOURCES = $(libthunarx_1_la_SOURCES)
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
+libthunarx_includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(libthunarx_include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_REQUIRED_VERSION = @CAIRO_REQUIRED_VERSION@
+CAIRO_VERSION = @CAIRO_VERSION@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+EXEEXT = @EXEEXT@
+EXO_CFLAGS = @EXO_CFLAGS@
+EXO_LIBS = @EXO_LIBS@
+EXO_REQUIRED_VERSION = @EXO_REQUIRED_VERSION@
+EXO_VERSION = @EXO_VERSION@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GCONF_CFLAGS = @GCONF_CFLAGS@
+GCONF_LIBS = @GCONF_LIBS@
+GCONF_REQUIRED_VERSION = @GCONF_REQUIRED_VERSION@
+GCONF_VERSION = @GCONF_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_REQUIRED_VERSION = @GLIB_REQUIRED_VERSION@
+GLIB_VERSION = @GLIB_VERSION@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@
+GTHREAD_LIBS = @GTHREAD_LIBS@
+GTHREAD_REQUIRED_VERSION = @GTHREAD_REQUIRED_VERSION@
+GTHREAD_VERSION = @GTHREAD_VERSION@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+GTK_LIBS = @GTK_LIBS@
+GTK_REQUIRED_VERSION = @GTK_REQUIRED_VERSION@
+GTK_VERSION = @GTK_VERSION@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_GCONF_FALSE = @HAVE_GCONF_FALSE@
+HAVE_GCONF_TRUE = @HAVE_GCONF_TRUE@
+HAVE_GNUC_VISIBILITY_FALSE = @HAVE_GNUC_VISIBILITY_FALSE@
+HAVE_GNUC_VISIBILITY_TRUE = @HAVE_GNUC_VISIBILITY_TRUE@
+HAVE_LIBSTARTUP_NOTIFICATION_FALSE = @HAVE_LIBSTARTUP_NOTIFICATION_FALSE@
+HAVE_LIBSTARTUP_NOTIFICATION_TRUE = @HAVE_LIBSTARTUP_NOTIFICATION_TRUE@
+HTML_DIR = @HTML_DIR@
+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_ICONV = @INTLTOOL_ICONV@
+INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
+INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
+INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
+INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+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_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_XGETTEXT = @INTLTOOL_XGETTEXT@
+INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
+INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
+LDFLAGS = @LDFLAGS@
+LIBFAM_CFLAGS = @LIBFAM_CFLAGS@
+LIBFAM_LIBS = @LIBFAM_LIBS@
+LIBFAM_REQUIRED_VERSION = @LIBFAM_REQUIRED_VERSION@
+LIBFAM_VERSION = @LIBFAM_VERSION@
+LIBJPEG_CFLAGS = @LIBJPEG_CFLAGS@
+LIBJPEG_LIBS = @LIBJPEG_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBPNG_REQUIRED_VERSION = @LIBPNG_REQUIRED_VERSION@
+LIBPNG_VERSION = @LIBPNG_VERSION@
+LIBS = @LIBS@
+LIBSTARTUP_NOTIFICATION_CFLAGS = @LIBSTARTUP_NOTIFICATION_CFLAGS@
+LIBSTARTUP_NOTIFICATION_LIBS = @LIBSTARTUP_NOTIFICATION_LIBS@
+LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION = @LIBSTARTUP_NOTIFICATION_REQUIRED_VERSION@
+LIBSTARTUP_NOTIFICATION_VERSION = @LIBSTARTUP_NOTIFICATION_VERSION@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_CFLAGS = @PLATFORM_CFLAGS@
+PLATFORM_CPPFLAGS = @PLATFORM_CPPFLAGS@
+PLATFORM_LDFLAGS = @PLATFORM_LDFLAGS@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TDB_U32_TYPE = @TDB_U32_TYPE@
+THUNAR_VERINFO = @THUNAR_VERINFO@
+THUNAR_VERSION_API = @THUNAR_VERSION_API@
+THUNAR_VERSION_MAJOR = @THUNAR_VERSION_MAJOR@
+THUNAR_VERSION_MICRO = @THUNAR_VERSION_MICRO@
+THUNAR_VERSION_MINOR = @THUNAR_VERSION_MINOR@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_ARGS = @XGETTEXT_ARGS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+INCLUDES = \
+	-I$(top_srcdir)							\
+	-DG_LOG_DOMAIN=\"thunarx\"					\
+	-DTHUNARX_COMPILATION						\
+	$(PLATFORM_CPPFLAGS)
+
+libthunarx_built_sources = \
+	thunarx-alias.h							\
+	thunarx-aliasdef.c
+
+libthunarx_headers = \
+	thunarx.h							\
+	thunarx-config.h						\
+	thunarx-file-info.h						\
+	thunarx-menu-provider.h						\
+	thunarx-property-page.h						\
+	thunarx-property-page-provider.h
+
+libthunarx_includedir = \
+	$(includedir)/thunarx-$(THUNAR_VERSION_API)/thunarx
+
+libthunarx_include_HEADERS = \
+	$(libthunarx_headers)
+
+lib_LTLIBRARIES = \
+	libthunarx-1.la
+
+libthunarx_1_la_SOURCES = \
+	$(libthunarx_built_sources)					\
+	$(libthunarx_headers)						\
+	thunarx-config.c						\
+	thunarx-file-info.c						\
+	thunarx-menu-provider.c						\
+	thunarx-property-page.c						\
+	thunarx-property-page-provider.c
+
+libthunarx_1_la_CFLAGS = \
+	$(GTK_CFLAGS)							\
+	$(PLATFORM_CFLAGS)
+
+libthunarx_1_la_LDFLAGS = \
+	-export-dynamic							\
+	-export-symbols-regex "^[^_].*"					\
+	-version-info $(THUNAR_VERINFO)					\
+	$(PLATFORM_LDFLAGS)
+
+libthunarx_1_la_LIBADD = \
+	$(GTK_LIBS)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = thunarx-1.pc
+EXTRA_DIST = \
+	abicheck.sh							\
+	make-thunarx-alias.pl						\
+	thunarx.symbols							\
+	thunarx-alias.h							\
+	thunarx-aliasdef.c
+
+ at MAINTAINER_MODE_TRUE@CLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	actual-abi							\
+ at MAINTAINER_MODE_TRUE@	expected-abi
+
+ at MAINTAINER_MODE_TRUE@DISTCLEANFILES = \
+ at MAINTAINER_MODE_TRUE@	$(libthunarx_built_sources)
+
+ at MAINTAINER_MODE_TRUE@BUILT_SOURCES = \
+ at MAINTAINER_MODE_TRUE@	$(libthunarx_built_sources)
+
+ at HAVE_GNUC_VISIBILITY_TRUE@@MAINTAINER_MODE_TRUE at TESTS = \
+ at HAVE_GNUC_VISIBILITY_TRUE@@MAINTAINER_MODE_TRUE@	abicheck.sh
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .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  thunarx/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  thunarx/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
+thunarx-1.pc: $(top_builddir)/config.status $(srcdir)/thunarx-1.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+thunarx-config.h: $(top_builddir)/config.status $(srcdir)/thunarx-config.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libthunarx-1.la: $(libthunarx_1_la_OBJECTS) $(libthunarx_1_la_DEPENDENCIES) 
+	$(LINK) -rpath $(libdir) $(libthunarx_1_la_LDFLAGS) $(libthunarx_1_la_OBJECTS) $(libthunarx_1_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-aliasdef.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-config.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-file-info.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-menu-provider.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-property-page-provider.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libthunarx_1_la-thunarx-property-page.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libthunarx_1_la-thunarx-aliasdef.lo: thunarx-aliasdef.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-aliasdef.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-aliasdef.Tpo" -c -o libthunarx_1_la-thunarx-aliasdef.lo `test -f 'thunarx-aliasdef.c' || echo '$(srcdir)/'`thunarx-aliasdef.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-aliasdef.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-aliasdef.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-aliasdef.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-aliasdef.c' object='libthunarx_1_la-thunarx-aliasdef.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-aliasdef.lo `test -f 'thunarx-aliasdef.c' || echo '$(srcdir)/'`thunarx-aliasdef.c
+
+libthunarx_1_la-thunarx-config.lo: thunarx-config.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-config.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-config.Tpo" -c -o libthunarx_1_la-thunarx-config.lo `test -f 'thunarx-config.c' || echo '$(srcdir)/'`thunarx-config.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-config.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-config.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-config.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-config.c' object='libthunarx_1_la-thunarx-config.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-config.lo `test -f 'thunarx-config.c' || echo '$(srcdir)/'`thunarx-config.c
+
+libthunarx_1_la-thunarx-file-info.lo: thunarx-file-info.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-file-info.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-file-info.Tpo" -c -o libthunarx_1_la-thunarx-file-info.lo `test -f 'thunarx-file-info.c' || echo '$(srcdir)/'`thunarx-file-info.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-file-info.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-file-info.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-file-info.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-file-info.c' object='libthunarx_1_la-thunarx-file-info.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-file-info.lo `test -f 'thunarx-file-info.c' || echo '$(srcdir)/'`thunarx-file-info.c
+
+libthunarx_1_la-thunarx-menu-provider.lo: thunarx-menu-provider.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-menu-provider.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-menu-provider.Tpo" -c -o libthunarx_1_la-thunarx-menu-provider.lo `test -f 'thunarx-menu-provider.c' || echo '$(srcdir)/'`thunarx-menu-provider.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-menu-provider.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-menu-provider.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-menu-provider.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-menu-provider.c' object='libthunarx_1_la-thunarx-menu-provider.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-menu-provider.lo `test -f 'thunarx-menu-provider.c' || echo '$(srcdir)/'`thunarx-menu-provider.c
+
+libthunarx_1_la-thunarx-property-page.lo: thunarx-property-page.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-property-page.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-property-page.Tpo" -c -o libthunarx_1_la-thunarx-property-page.lo `test -f 'thunarx-property-page.c' || echo '$(srcdir)/'`thunarx-property-page.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-property-page.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-property-page.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-property-page.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-property-page.c' object='libthunarx_1_la-thunarx-property-page.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-property-page.lo `test -f 'thunarx-property-page.c' || echo '$(srcdir)/'`thunarx-property-page.c
+
+libthunarx_1_la-thunarx-property-page-provider.lo: thunarx-property-page-provider.c
+ at am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -MT libthunarx_1_la-thunarx-property-page-provider.lo -MD -MP -MF "$(DEPDIR)/libthunarx_1_la-thunarx-property-page-provider.Tpo" -c -o libthunarx_1_la-thunarx-property-page-provider.lo `test -f 'thunarx-property-page-provider.c' || echo '$(srcdir)/'`thunarx-property-page-provider.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/libthunarx_1_la-thunarx-property-page-provider.Tpo" "$(DEPDIR)/libthunarx_1_la-thunarx-property-page-provider.Plo"; else rm -f "$(DEPDIR)/libthunarx_1_la-thunarx-property-page-provider.Tpo"; exit 1; fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='thunarx-property-page-provider.c' object='libthunarx_1_la-thunarx-property-page-provider.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libthunarx_1_la_CFLAGS) $(CFLAGS) -c -o libthunarx_1_la-thunarx-property-page-provider.lo `test -f 'thunarx-property-page-provider.c' || echo '$(srcdir)/'`thunarx-property-page-provider.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+	  $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+	done
+install-libthunarx_includeHEADERS: $(libthunarx_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libthunarx_includedir)" || $(mkdir_p) "$(DESTDIR)$(libthunarx_includedir)"
+	@list='$(libthunarx_include_HEADERS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(libthunarx_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libthunarx_includedir)/$$f'"; \
+	  $(libthunarx_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libthunarx_includedir)/$$f"; \
+	done
+
+uninstall-libthunarx_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libthunarx_include_HEADERS)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(libthunarx_includedir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(libthunarx_includedir)/$$f"; \
+	done
+
+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
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkdir_p) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libthunarx_includedir)"; do \
+	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) 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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libthunarx_includeHEADERS \
+	install-pkgconfigDATA
+
+install-exec-am: install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+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 \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
+	uninstall-libthunarx_includeHEADERS uninstall-pkgconfigDATA
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-generic clean-libLTLIBRARIES clean-libtool ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-libLTLIBRARIES \
+	install-libthunarx_includeHEADERS install-man \
+	install-pkgconfigDATA install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-info-am \
+	uninstall-libLTLIBRARIES uninstall-libthunarx_includeHEADERS \
+	uninstall-pkgconfigDATA
+
+
+ at MAINTAINER_MODE_TRUE@thunarx-alias.h: make-thunarx-alias.pl thunarx.symbols
+ at MAINTAINER_MODE_TRUE@	$(PERL) $(srcdir)/make-thunarx-alias.pl < $(srcdir)/thunarx.symbols > thunarx-alias.h
+
+ at MAINTAINER_MODE_TRUE@thunarx-aliasdef.c: make-thunarx-alias.pl thunarx.symbols
+ at MAINTAINER_MODE_TRUE@	$(PERL) $(srcdir)/make-thunarx-alias.pl -def < $(srcdir)/thunarx.symbols > thunarx-aliasdef.c
+
+# required for gtk-doc
+dist-hook: all
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
+# 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:

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/abicheck.sh
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/abicheck.sh	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/abicheck.sh	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Copyright (c) 2004 The GLib Development Team.
+# Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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 Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+cpp -P -DALL_FILES ${srcdir:-.}/thunarx.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE//' | sort > expected-abi
+nm -D .libs/libthunarx-1.so | grep " T\|R " | cut -d ' ' -f 3 | grep -v '^_.*' | sort > actual-abi
+diff -u expected-abi actual-abi && rm expected-abi actual-abi


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunarx/abicheck.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/make-thunarx-alias.pl
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/make-thunarx-alias.pl	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/make-thunarx-alias.pl	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,155 @@
+#!/usr/bin/env perl -w
+#
+# Copyright (c) 2004 The GLib Development Team.
+# Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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 Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+my $option_def = 0;
+
+if (($#ARGV >= 0) && ($ARGV[0] eq "-def"))
+  {
+    shift;
+    $option_def = 1;
+  }
+
+print <<EOF;
+/* Generated by make-thunarx-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+EOF
+
+if ($option_def)
+  {
+    print <<EOF
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#undef IN_SOURCE
+#define IN_SOURCE defined
+
+EOF
+  }
+else
+  {
+    print <<EOF
+#define IN_HEADER defined
+#define IN_SOURCE(x) 1
+
+EOF
+  }
+
+my $in_comment = 0;
+my $in_skipped_section = 0;
+
+while (<>)
+  {
+    # ignore empty lines
+    next if /^\s*$/;
+
+    # skip comments
+    if ($_ =~ /^\s*\/\*/)
+      {
+        $in_comment = 1;
+      }
+    
+    if ($in_comment)
+      {
+        if ($_ =~  /\*\/\s$/)
+          {
+            $in_comment = 0;
+          }
+        next;
+      }
+
+    # handle ifdefs
+    if ($_ =~ /^\#endif/)
+      {
+        if (!$in_skipped_section)
+          {
+            print $_;
+          }
+
+        $in_skipped_section = 0;
+        next;
+      }
+
+    if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
+      {
+        $in_skipped_section = 1;
+      }
+
+    if ($in_skipped_section)
+      {
+        next;
+      }
+
+    if ($_ =~ /^\#ifn?def\s+G/)
+      {
+        print $_;
+        next;
+      }
+   
+    if ($_ =~ /^\#if.*(IN_SOURCE|IN_HEADER)/)
+      {
+        print $_;
+        next;
+      }
+
+    chop;
+    my $line = $_;
+    my @words;
+    my $attributes = "";
+
+    @words = split (/ /, $line);
+    my $symbol = shift (@words);
+    chomp ($symbol);
+    my $alias = "IA__".$symbol;
+    
+    # Drop any Win32 specific .def file syntax,  but keep attributes
+    foreach $word (@words)
+      {
+        $attributes = "$attributes $word" unless $word eq "PRIVATE";
+      }
+    
+    if (!$option_def)
+      {
+        print <<EOF
+extern __typeof ($symbol) $alias __attribute((visibility("hidden")))$attributes;
+\#define $symbol $alias
+
+EOF
+      }
+    else
+      {
+        print <<EOF
+\#undef $symbol 
+extern __typeof ($symbol) $symbol __attribute((alias("$alias"), visibility("default")));
+
+EOF
+      }
+  }
+
+print <<EOF;
+
+#endif /* HAVE_GNUC_VISIBILITY */
+EOF
+
+


Property changes on: desktop/trunk/thunar/branches/upstream/current/thunarx/make-thunarx-alias.pl
___________________________________________________________________
Name: svn:executable
   + 

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-1.pc.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-1.pc.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-1.pc.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+extensionsdir=${libdir}/thunarx- at THUNAR_VERSION_API@
+
+Name: thunarx
+Description: A library to create Thunar extensions
+Requires: gtk+-2.0
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lthunarx- at THUNAR_VERSION_API@
+Cflags: -I${includedir}/thunarx- at THUNAR_VERSION_API@

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-alias.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-alias.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-alias.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,109 @@
+/* Generated by make-thunarx-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+#define IN_HEADER defined
+#define IN_SOURCE(x) 1
+
+#if IN_HEADER(__THUNARX_CONFIG_H__)
+#if IN_SOURCE(__THUNARX_CONFIG_C__)
+extern __typeof (thunarx_major_version) IA__thunarx_major_version __attribute((visibility("hidden")));
+#define thunarx_major_version IA__thunarx_major_version
+
+extern __typeof (thunarx_minor_version) IA__thunarx_minor_version __attribute((visibility("hidden")));
+#define thunarx_minor_version IA__thunarx_minor_version
+
+extern __typeof (thunarx_micro_version) IA__thunarx_micro_version __attribute((visibility("hidden")));
+#define thunarx_micro_version IA__thunarx_micro_version
+
+extern __typeof (thunarx_check_version) IA__thunarx_check_version __attribute((visibility("hidden")));
+#define thunarx_check_version IA__thunarx_check_version
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_FILE_INFO_H__)
+#if IN_SOURCE(__THUNARX_FILE_INFO_C__)
+extern __typeof (thunarx_file_info_get_type) IA__thunarx_file_info_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunarx_file_info_get_type IA__thunarx_file_info_get_type
+
+extern __typeof (thunarx_file_info_get_name) IA__thunarx_file_info_get_name __attribute((visibility("hidden")));
+#define thunarx_file_info_get_name IA__thunarx_file_info_get_name
+
+extern __typeof (thunarx_file_info_get_uri) IA__thunarx_file_info_get_uri __attribute((visibility("hidden")));
+#define thunarx_file_info_get_uri IA__thunarx_file_info_get_uri
+
+extern __typeof (thunarx_file_info_get_parent_uri) IA__thunarx_file_info_get_parent_uri __attribute((visibility("hidden")));
+#define thunarx_file_info_get_parent_uri IA__thunarx_file_info_get_parent_uri
+
+extern __typeof (thunarx_file_info_get_uri_scheme) IA__thunarx_file_info_get_uri_scheme __attribute((visibility("hidden")));
+#define thunarx_file_info_get_uri_scheme IA__thunarx_file_info_get_uri_scheme
+
+extern __typeof (thunarx_file_info_get_mime_type) IA__thunarx_file_info_get_mime_type __attribute((visibility("hidden")));
+#define thunarx_file_info_get_mime_type IA__thunarx_file_info_get_mime_type
+
+extern __typeof (thunarx_file_info_has_mime_type) IA__thunarx_file_info_has_mime_type __attribute((visibility("hidden")));
+#define thunarx_file_info_has_mime_type IA__thunarx_file_info_has_mime_type
+
+extern __typeof (thunarx_file_info_is_directory) IA__thunarx_file_info_is_directory __attribute((visibility("hidden")));
+#define thunarx_file_info_is_directory IA__thunarx_file_info_is_directory
+
+extern __typeof (thunarx_file_info_list_copy) IA__thunarx_file_info_list_copy __attribute((visibility("hidden")));
+#define thunarx_file_info_list_copy IA__thunarx_file_info_list_copy
+
+extern __typeof (thunarx_file_info_list_free) IA__thunarx_file_info_list_free __attribute((visibility("hidden")));
+#define thunarx_file_info_list_free IA__thunarx_file_info_list_free
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_MENU_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_MENU_PROVIDER_C__)
+extern __typeof (thunarx_menu_provider_get_type) IA__thunarx_menu_provider_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunarx_menu_provider_get_type IA__thunarx_menu_provider_get_type
+
+extern __typeof (thunarx_menu_provider_get_file_actions) IA__thunarx_menu_provider_get_file_actions __attribute((visibility("hidden")));
+#define thunarx_menu_provider_get_file_actions IA__thunarx_menu_provider_get_file_actions
+
+extern __typeof (thunarx_menu_provider_get_folder_actions) IA__thunarx_menu_provider_get_folder_actions __attribute((visibility("hidden")));
+#define thunarx_menu_provider_get_folder_actions IA__thunarx_menu_provider_get_folder_actions
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_C__)
+extern __typeof (thunarx_property_page_get_type) IA__thunarx_property_page_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunarx_property_page_get_type IA__thunarx_property_page_get_type
+
+extern __typeof (thunarx_property_page_new) IA__thunarx_property_page_new __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunarx_property_page_new IA__thunarx_property_page_new
+
+extern __typeof (thunarx_property_page_new_with_label_widget) IA__thunarx_property_page_new_with_label_widget __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define thunarx_property_page_new_with_label_widget IA__thunarx_property_page_new_with_label_widget
+
+extern __typeof (thunarx_property_page_get_label) IA__thunarx_property_page_get_label __attribute((visibility("hidden")));
+#define thunarx_property_page_get_label IA__thunarx_property_page_get_label
+
+extern __typeof (thunarx_property_page_set_label) IA__thunarx_property_page_set_label __attribute((visibility("hidden")));
+#define thunarx_property_page_set_label IA__thunarx_property_page_set_label
+
+extern __typeof (thunarx_property_page_get_label_widget) IA__thunarx_property_page_get_label_widget __attribute((visibility("hidden")));
+#define thunarx_property_page_get_label_widget IA__thunarx_property_page_get_label_widget
+
+extern __typeof (thunarx_property_page_set_label_widget) IA__thunarx_property_page_set_label_widget __attribute((visibility("hidden")));
+#define thunarx_property_page_set_label_widget IA__thunarx_property_page_set_label_widget
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_PROVIDER_C__)
+extern __typeof (thunarx_property_page_provider_get_type) IA__thunarx_property_page_provider_get_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define thunarx_property_page_provider_get_type IA__thunarx_property_page_provider_get_type
+
+extern __typeof (thunarx_property_page_provider_get_pages) IA__thunarx_property_page_provider_get_pages __attribute((visibility("hidden")));
+#define thunarx_property_page_provider_get_pages IA__thunarx_property_page_provider_get_pages
+
+#endif
+#endif
+
+#endif /* HAVE_GNUC_VISIBILITY */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-aliasdef.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-aliasdef.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-aliasdef.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,112 @@
+/* Generated by make-thunarx-alias.pl. Do not edit this file. */
+
+#ifdef HAVE_GNUC_VISIBILITY
+
+#include <glib.h>
+
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#undef IN_SOURCE
+#define IN_SOURCE defined
+
+#if IN_HEADER(__THUNARX_CONFIG_H__)
+#if IN_SOURCE(__THUNARX_CONFIG_C__)
+#undef thunarx_major_version 
+extern __typeof (thunarx_major_version) thunarx_major_version __attribute((alias("IA__thunarx_major_version"), visibility("default")));
+
+#undef thunarx_minor_version 
+extern __typeof (thunarx_minor_version) thunarx_minor_version __attribute((alias("IA__thunarx_minor_version"), visibility("default")));
+
+#undef thunarx_micro_version 
+extern __typeof (thunarx_micro_version) thunarx_micro_version __attribute((alias("IA__thunarx_micro_version"), visibility("default")));
+
+#undef thunarx_check_version 
+extern __typeof (thunarx_check_version) thunarx_check_version __attribute((alias("IA__thunarx_check_version"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_FILE_INFO_H__)
+#if IN_SOURCE(__THUNARX_FILE_INFO_C__)
+#undef thunarx_file_info_get_type 
+extern __typeof (thunarx_file_info_get_type) thunarx_file_info_get_type __attribute((alias("IA__thunarx_file_info_get_type"), visibility("default")));
+
+#undef thunarx_file_info_get_name 
+extern __typeof (thunarx_file_info_get_name) thunarx_file_info_get_name __attribute((alias("IA__thunarx_file_info_get_name"), visibility("default")));
+
+#undef thunarx_file_info_get_uri 
+extern __typeof (thunarx_file_info_get_uri) thunarx_file_info_get_uri __attribute((alias("IA__thunarx_file_info_get_uri"), visibility("default")));
+
+#undef thunarx_file_info_get_parent_uri 
+extern __typeof (thunarx_file_info_get_parent_uri) thunarx_file_info_get_parent_uri __attribute((alias("IA__thunarx_file_info_get_parent_uri"), visibility("default")));
+
+#undef thunarx_file_info_get_uri_scheme 
+extern __typeof (thunarx_file_info_get_uri_scheme) thunarx_file_info_get_uri_scheme __attribute((alias("IA__thunarx_file_info_get_uri_scheme"), visibility("default")));
+
+#undef thunarx_file_info_get_mime_type 
+extern __typeof (thunarx_file_info_get_mime_type) thunarx_file_info_get_mime_type __attribute((alias("IA__thunarx_file_info_get_mime_type"), visibility("default")));
+
+#undef thunarx_file_info_has_mime_type 
+extern __typeof (thunarx_file_info_has_mime_type) thunarx_file_info_has_mime_type __attribute((alias("IA__thunarx_file_info_has_mime_type"), visibility("default")));
+
+#undef thunarx_file_info_is_directory 
+extern __typeof (thunarx_file_info_is_directory) thunarx_file_info_is_directory __attribute((alias("IA__thunarx_file_info_is_directory"), visibility("default")));
+
+#undef thunarx_file_info_list_copy 
+extern __typeof (thunarx_file_info_list_copy) thunarx_file_info_list_copy __attribute((alias("IA__thunarx_file_info_list_copy"), visibility("default")));
+
+#undef thunarx_file_info_list_free 
+extern __typeof (thunarx_file_info_list_free) thunarx_file_info_list_free __attribute((alias("IA__thunarx_file_info_list_free"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_MENU_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_MENU_PROVIDER_C__)
+#undef thunarx_menu_provider_get_type 
+extern __typeof (thunarx_menu_provider_get_type) thunarx_menu_provider_get_type __attribute((alias("IA__thunarx_menu_provider_get_type"), visibility("default")));
+
+#undef thunarx_menu_provider_get_file_actions 
+extern __typeof (thunarx_menu_provider_get_file_actions) thunarx_menu_provider_get_file_actions __attribute((alias("IA__thunarx_menu_provider_get_file_actions"), visibility("default")));
+
+#undef thunarx_menu_provider_get_folder_actions 
+extern __typeof (thunarx_menu_provider_get_folder_actions) thunarx_menu_provider_get_folder_actions __attribute((alias("IA__thunarx_menu_provider_get_folder_actions"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_C__)
+#undef thunarx_property_page_get_type 
+extern __typeof (thunarx_property_page_get_type) thunarx_property_page_get_type __attribute((alias("IA__thunarx_property_page_get_type"), visibility("default")));
+
+#undef thunarx_property_page_new 
+extern __typeof (thunarx_property_page_new) thunarx_property_page_new __attribute((alias("IA__thunarx_property_page_new"), visibility("default")));
+
+#undef thunarx_property_page_new_with_label_widget 
+extern __typeof (thunarx_property_page_new_with_label_widget) thunarx_property_page_new_with_label_widget __attribute((alias("IA__thunarx_property_page_new_with_label_widget"), visibility("default")));
+
+#undef thunarx_property_page_get_label 
+extern __typeof (thunarx_property_page_get_label) thunarx_property_page_get_label __attribute((alias("IA__thunarx_property_page_get_label"), visibility("default")));
+
+#undef thunarx_property_page_set_label 
+extern __typeof (thunarx_property_page_set_label) thunarx_property_page_set_label __attribute((alias("IA__thunarx_property_page_set_label"), visibility("default")));
+
+#undef thunarx_property_page_get_label_widget 
+extern __typeof (thunarx_property_page_get_label_widget) thunarx_property_page_get_label_widget __attribute((alias("IA__thunarx_property_page_get_label_widget"), visibility("default")));
+
+#undef thunarx_property_page_set_label_widget 
+extern __typeof (thunarx_property_page_set_label_widget) thunarx_property_page_set_label_widget __attribute((alias("IA__thunarx_property_page_set_label_widget"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_PROVIDER_C__)
+#undef thunarx_property_page_provider_get_type 
+extern __typeof (thunarx_property_page_provider_get_type) thunarx_property_page_provider_get_type __attribute((alias("IA__thunarx_property_page_provider_get_type"), visibility("default")));
+
+#undef thunarx_property_page_provider_get_pages 
+extern __typeof (thunarx_property_page_provider_get_pages) thunarx_property_page_provider_get_pages __attribute((alias("IA__thunarx_property_page_provider_get_pages"), visibility("default")));
+
+#endif
+#endif
+
+#endif /* HAVE_GNUC_VISIBILITY */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,131 @@
+/* $Id: thunarx-config.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunarx/thunarx-config.h>
+#include <thunarx/thunarx-alias.h>
+
+
+
+/**
+ * thunarx_major_version:
+ *
+ * The major version number of the
+ * <systemitem class="library">thunarx</systemitem> library (e.g. in
+ * version 0.5.1 this is 0).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunarx</systemitem> library you have
+ * linked against. Contrast with the #THUNARX_MAJOR_VERSION macro, which
+ * represents the major version of the
+ * <systemitem class="library">thunarx</systemitem> headers you have
+ * included.
+ **/
+const guint thunarx_major_version = THUNARX_MAJOR_VERSION;
+
+
+
+/**
+ * thunarx_minor_version:
+ *
+ * The minor version number of the
+ * <systemitem class="library">thunarx</systemitem> library (e.g. in
+ * version 0.5.1 this is 5).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunarx</systemitem> library you have
+ * linked against. Contrast with the #THUNARX_MINOR_VERSION macro, which
+ * represents the minor version of the
+ * <systemitem class="library">thunarx</systemitem> headers you have
+ * included.
+ **/
+const guint thunarx_minor_version = THUNARX_MINOR_VERSION;
+
+
+
+/**
+ * thunarx_micro_version:
+ *
+ * The micro version number of the
+ * <systemitem class="library">thunarx</systemitem> library (e.g. in
+ * version 0.5.1 this is 1).
+ *
+ * This variable is in the library, so represents the
+ * <systemitem class="library">thunarx</systemitem> library you have
+ * linked against. Contrast with the #THUNARX_MICRO_VERSION macro, which
+ * represents the micro version of the
+ * <systemitem class="library">thunarx</systemitem> headers you have
+ * included.
+ **/
+const guint thunarx_micro_version = THUNARX_MICRO_VERSION;
+
+
+
+/**
+ * thunarx_check_version:
+ * @required_major : the required major version.
+ * @required_minor : the required minor version.
+ * @required_micro : the required micro version.
+ *
+ * Checks that the <systemitem class="library">thunarx</systemitem> library
+ * in use is compatible with the given version. Generally you would pass in
+ * the constants #THUNARX_MAJOR_VERSION, #THUNARX_MINOR_VERSION and
+ * #THUNARX_VERSION_MICRO as the three arguments to this function; that produces
+ * a check that the library in use is compatible with the version of
+ * <systemitem class="library">thunarx</systemitem> the extension was
+ * compiled against.
+ *
+ * This function should be called by extensions in the
+ * thunar_extension_initialize() method to verify that the <systemitem
+ * class="library">thunarx</systemitem> library used by file manager is
+ * compatible with the version the extension was compiled with.
+ *
+ * <example>
+ * <title>Checking the runtime version of the Thunar Extension library</title>
+ * <programlisting>
+ * const gchar *mismatch;
+ * mismatch = thunarx_check_version (THUNARX_VERSION_MAJOR,
+ *                                   THUNARX_VERSION_MINOR,
+ *                                   THUNARX_VERSION_MICRO);
+ * if (G_UNLIKELY (mismatch != NULL))
+ *   g_error ("Version mismatch: %<!---->s", mismatch);
+ * </programlisting>
+ * </example>
+ *
+ * Return value: %NULL if the library is compatible with the given version,
+ *               or a string describing the version mismatch. The returned
+ *               string is owned by the library and must not be freed or
+ *               modified by the caller.
+ **/
+const gchar*
+thunarx_check_version (guint required_major,
+                       guint required_minor,
+                       guint required_micro)
+{
+  return NULL;
+}
+
+
+
+#define __THUNARX_CONFIG_C__
+#include <thunarx/thunarx-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,54 @@
+/* $Id: thunarx-config.h.in 17553 2005-09-11 00:07:08Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_CONFIG_H__
+#define __THUNARX_CONFIG_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS;
+
+#define THUNARX_MAJOR_VERSION 0
+#define THUNARX_MINOR_VERSION 1
+#define THUNARX_MICRO_VERSION 4
+
+#define THUNARX_CHECK_VERSION(major,minor,micro) \
+  (THUNARX_MAJOR_VERSION > (major) \
+   || (THUNARX_MAJOR_VERSION == (major) \
+       && THUNARX_MINOR_VERSION > (minor)) \
+   || (THUNARX_MAJOR_VERSION == (major) \
+       && THUNARX_MINOR_VERSION == (minor) \
+       && THUNARX_MICRO_VERSION >= (micro)))
+
+extern const guint thunarx_major_version;
+extern const guint thunarx_minor_version;
+extern const guint thunarx_micro_version;
+
+const gchar *thunarx_check_version (guint required_major,
+                                    guint required_minor,
+                                    guint required_micro);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_CONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h.in
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h.in	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-config.h.in	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,54 @@
+/* $Id: thunarx-config.h.in 17553 2005-09-11 00:07:08Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_CONFIG_H__
+#define __THUNARX_CONFIG_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS;
+
+#define THUNARX_MAJOR_VERSION @THUNAR_VERSION_MAJOR@
+#define THUNARX_MINOR_VERSION @THUNAR_VERSION_MINOR@
+#define THUNARX_MICRO_VERSION @THUNAR_VERSION_MICRO@
+
+#define THUNARX_CHECK_VERSION(major,minor,micro) \
+  (THUNARX_MAJOR_VERSION > (major) \
+   || (THUNARX_MAJOR_VERSION == (major) \
+       && THUNARX_MINOR_VERSION > (minor)) \
+   || (THUNARX_MAJOR_VERSION == (major) \
+       && THUNARX_MINOR_VERSION == (minor) \
+       && THUNARX_MICRO_VERSION >= (micro)))
+
+extern const guint thunarx_major_version;
+extern const guint thunarx_minor_version;
+extern const guint thunarx_micro_version;
+
+const gchar *thunarx_check_version (guint required_major,
+                                    guint required_minor,
+                                    guint required_micro);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_CONFIG_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,277 @@
+/* $Id: thunarx-file-info.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunarx/thunarx-file-info.h>
+#include <thunarx/thunarx-alias.h>
+
+
+
+GType
+thunarx_file_info_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarxFileInfoIface),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+        NULL,
+      };
+
+      type = g_type_register_static (G_TYPE_INTERFACE, "ThunarxFileInfo", &info, 0);
+
+      g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunarx_file_info_get_name:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Returns the real name of the file represented
+ * by @file_info in the local file system encoding.
+ * You can use g_filename_display_name() or similar
+ * functions to generate an UTF-8 version of the
+ * name, which is suitable for use in the user
+ * interface.
+ *
+ * The caller is responsible to free the returned
+ * string using g_free() when no longer needed.
+ *
+ * Return value: the real name of the file represented
+ *               by @file_info.
+ **/
+gchar*
+thunarx_file_info_get_name (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), NULL);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->get_name) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_get_uri:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Returns the escaped, fully qualified URI
+ * of the file object represented by @file_info.
+ * You may use g_filename_from_uri() and similar
+ * functions to work with the returned URI.
+ *
+ * The caller is responsible to free the returned
+ * string using g_free() when no longer needed.
+ *
+ * Return value: the fully qualified URI of @file_info.
+ **/
+gchar*
+thunarx_file_info_get_uri (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), NULL);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->get_uri) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_get_parent_uri:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Returns the URI to the parent file of
+ * @file_info or %NULL if @file_info has
+ * no parent. Note that the parent URI
+ * may be of a different type than the
+ * URI of @file_info. For example, the
+ * parent of "file:///" is "computer:///".
+ *
+ * The caller is responsible to free the
+ * returned string using g_free() when no
+ * longer needed.
+ *
+ * Return value: the parent URI for @file_info
+ *               or %NULL.
+ **/
+gchar*
+thunarx_file_info_get_parent_uri (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), NULL);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->get_parent_uri) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_get_uri_scheme:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Returns the URI scheme of the file represented
+ * by @file_info. E.g. if @file_info refers to the
+ * file "file:///usr/home", the return value will
+ * be "file".
+ *
+ * The caller is responsible to free the returned
+ * string using g_free() when no longer needed.
+ *
+ * Return value: the URI scheme for @file_info.
+ **/
+gchar*
+thunarx_file_info_get_uri_scheme (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), NULL);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->get_uri_scheme) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_get_mime_type:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Returns the MIME-type of the file represented by
+ * @file_info or %NULL if no MIME-type is known for
+ * @file_info.
+ *
+ * The caller is responsible to free the returned
+ * string using g_free() when no longer needed.
+ *
+ * Return value: the MIME-type for @file_info or
+ *               %NULL.
+ **/
+gchar*
+thunarx_file_info_get_mime_type (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), NULL);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->get_mime_type) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_has_mime_type:
+ * @file_info : a #ThunarxFileInfo.
+ * @mime_type : a MIME-type (e.g. "text/plain").
+ *
+ * Checks whether @file_info is of the given @mime_type
+ * or whether the MIME-type of @file_info is a subclass
+ * of @mime_type.
+ *
+ * This is the preferred way for most extensions to check
+ * whether they support a given file or not, and you should
+ * consider using this method rather than
+ * thunarx_file_info_get_mime_type(). A simple example would
+ * be a menu extension that performs a certain action on
+ * text files. In this case you want to check whether a given
+ * #ThunarxFileInfo refers to any kind of text file, not only
+ * to "text/plain" (e.g. this also includes "text/xml" and
+ * "application/x-desktop").
+ *
+ * But you should be aware that this method may take some
+ * time to test whether @mime_type is valid for @file_info,
+ * so don't call it too often.
+ *
+ * Return value: %TRUE if @mime_type is valid for @file_info,
+ *               else %FALSE.
+ **/
+gboolean
+thunarx_file_info_has_mime_type (ThunarxFileInfo *file_info,
+                                 const gchar     *mime_type)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), FALSE);
+  g_return_val_if_fail (mime_type != NULL, FALSE);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->has_mime_type) (file_info, mime_type);
+}
+
+
+
+/**
+ * thunarx_file_info_is_directory:
+ * @file_info : a #ThunarxFileInfo.
+ *
+ * Checks whether @file_info refers to a directory.
+ *
+ * Return value: %TRUE if @file_info is a directory.
+ **/
+gboolean
+thunarx_file_info_is_directory (ThunarxFileInfo *file_info)
+{
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (file_info), FALSE);
+  return (*THUNARX_FILE_INFO_GET_IFACE (file_info)->is_directory) (file_info);
+}
+
+
+
+/**
+ * thunarx_file_info_list_copy:
+ * @file_infos : a #GList of #ThunarxFileInfo<!---->s.
+ *
+ * Does a deep copy of @file_infos and returns the
+ * new list.
+ *
+ * Return value: a copy of @file_infos.
+ **/
+GList*
+thunarx_file_info_list_copy (GList *file_infos)
+{
+  GList *list;
+
+  list = g_list_copy (file_infos);
+  g_list_foreach (list, (GFunc) g_object_ref, NULL);
+
+  return list;
+}
+
+
+
+/**
+ * thunarx_file_info_list_free:
+ * @file_infos : a #GList of #ThunarxFileInfo<!---->s.
+ *
+ * Frees the resources allocated for the @file_infos
+ * list and decreases the reference count on the
+ * #ThunarxFileInfo<!---->s contained within.
+ **/
+void
+thunarx_file_info_list_free (GList *file_infos)
+{
+  g_list_foreach (file_infos, (GFunc) g_object_unref, NULL);
+  g_list_free (file_infos);
+}
+
+
+
+#define __THUNARX_FILE_INFO_C__
+#include <thunarx/thunarx-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-file-info.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,86 @@
+/* $Id: thunarx-file-info.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_FILE_INFO_H__
+#define __THUNARX_FILE_INFO_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarxFileInfoIface ThunarxFileInfoIface;
+typedef struct _ThunarxFileInfo      ThunarxFileInfo;
+
+#define THUNARX_TYPE_FILE_INFO            (thunarx_file_info_get_type ())
+#define THUNARX_FILE_INFO(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNARX_TYPE_FILE_INFO, ThunarxFileInfo))
+#define THUNARX_IS_FILE_INFO(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNARX_TYPE_FILE_INFO))
+#define THUNARX_FILE_INFO_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNARX_TYPE_FILE_INFO, ThunarxFileInfoIface))
+
+struct _ThunarxFileInfoIface
+{
+  /*< private >*/
+  GTypeInterface __parent__;
+
+  /*< public >*/
+  gchar     *(*get_name)        (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_uri)         (ThunarxFileInfo *file_info);
+  gchar     *(*get_parent_uri)  (ThunarxFileInfo *file_info);
+  gchar     *(*get_uri_scheme)  (ThunarxFileInfo *file_info);
+
+  gchar     *(*get_mime_type)   (ThunarxFileInfo *file_info);
+  gboolean   (*has_mime_type)   (ThunarxFileInfo *file_info,
+                                 const gchar     *mime_type);
+
+  gboolean   (*is_directory)    (ThunarxFileInfo *file_info);
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+  void (*reserved5) (void);
+  void (*reserved6) (void);
+  void (*reserved7) (void);
+};
+
+GType      thunarx_file_info_get_type       (void) G_GNUC_CONST;
+
+gchar     *thunarx_file_info_get_name       (ThunarxFileInfo *file_info);
+gchar     *thunarx_file_info_get_uri        (ThunarxFileInfo *file_info);
+gchar     *thunarx_file_info_get_parent_uri (ThunarxFileInfo *file_info);
+gchar     *thunarx_file_info_get_uri_scheme (ThunarxFileInfo *file_info);
+
+gchar     *thunarx_file_info_get_mime_type  (ThunarxFileInfo *file_info);
+gboolean   thunarx_file_info_has_mime_type  (ThunarxFileInfo *file_info,
+                                             const gchar     *mime_type);
+
+gboolean   thunarx_file_info_is_directory   (ThunarxFileInfo *file_info);
+
+GList     *thunarx_file_info_list_copy      (GList           *file_infos);
+void       thunarx_file_info_list_free      (GList           *file_infos);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_FILE_INFO_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,188 @@
+/* $Id: thunarx-menu-provider.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunarx/thunarx-menu-provider.h>
+#include <thunarx/thunarx-alias.h>
+
+
+
+static GQuark thunarx_menu_provider_action_quark;
+
+
+
+GType
+thunarx_menu_provider_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarxMenuProviderIface),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+        NULL,
+      };
+
+      /* register the menu provider interface */
+      type = g_type_register_static (G_TYPE_INTERFACE, "ThunarxMenuProvider", &info, 0);
+      g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+
+      /* allocate the thunarx-menu-provider-action quark */
+      thunarx_menu_provider_action_quark = g_quark_from_static_string ("thunarx-menu-provider-action");
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunarx_menu_provider_get_file_actions:
+ * @provider : a #ThunarxMenuProvider.
+ * @window   : the #GtkWindow within which the actions will be used.
+ * @files    : the list of #ThunarxFileInfo<!---->s to which the actions will be applied.
+ *
+ * Returns the list of #GtkAction<!---->s that @provider has to offer for
+ * @files.
+ *
+ * As a special note, this method automatically takes a reference on the
+ * @provider for every #GtkAction object returned from the real implementation
+ * of this method in @provider. This is to make sure that the extension stays
+ * in memory for atleast the time that the actions are used. If the extension
+ * wants to stay in memory for a longer time, it'll need to take care of this
+ * itself (e.g. by taking an additional reference on the @provider itself,
+ * that's released at a later time).
+ *
+ * The caller is responsible to free the returned list of actions using
+ * something like this when no longer needed:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #GtkAction<!---->s that @provider has to offer
+ *               for @files.
+ **/
+GList*
+thunarx_menu_provider_get_file_actions (ThunarxMenuProvider *provider,
+                                        GtkWidget           *window,
+                                        GList               *files)
+{
+  GList *actions;
+  GList *lp;
+
+  g_return_val_if_fail (THUNARX_IS_MENU_PROVIDER (provider), NULL);
+  g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
+  g_return_val_if_fail (files != NULL, NULL);
+
+  if (THUNARX_MENU_PROVIDER_GET_IFACE (provider)->get_file_actions != NULL)
+    {
+      /* query the actions and take a reference on the provider for each action */
+      actions = (*THUNARX_MENU_PROVIDER_GET_IFACE (provider)->get_file_actions) (provider, window, files);
+      for (lp = actions; lp != NULL; lp = lp->next)
+        {
+          g_object_set_qdata_full (G_OBJECT (lp->data), thunarx_menu_provider_action_quark, provider, g_object_unref);
+          g_object_ref (G_OBJECT (provider));
+        }
+    }
+  else
+    {
+      actions = NULL;
+    }
+
+  return actions;
+}
+
+
+
+/**
+ * thunarx_menu_provider_get_folder_actions:
+ * @provider : a #ThunarxMenuProvider.
+ * @window   : the #GtkWindow within which the actions will be used.
+ * @folder   : the folder to which the actions should will be applied.
+ *
+ * Returns the list of #GtkAction<!---->s that @provider has to offer for
+ * @folder.
+ *
+ * As a special note, this method automatically takes a reference on the
+ * @provider for every #GtkAction object returned from the real implementation
+ * of this method in @provider. This is to make sure that the extension stays
+ * in memory for atleast the time that the actions are used. If the extension
+ * wants to stay in memory for a longer time, it'll need to take care of this
+ * itself (e.g. by taking an additional reference on the @provider itself,
+ * that's released at a later time).
+ *
+ * The caller is responsible to free the returned list of actions using
+ * something like this when no longer needed:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #GtkAction<!---->s that @provider has to offer
+ *               for @folder.
+ **/
+GList*
+thunarx_menu_provider_get_folder_actions (ThunarxMenuProvider *provider,
+                                          GtkWidget           *window,
+                                          ThunarxFileInfo     *folder)
+{
+  GList *actions;
+  GList *lp;
+
+  g_return_val_if_fail (THUNARX_IS_MENU_PROVIDER (provider), NULL);
+  g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
+  g_return_val_if_fail (THUNARX_IS_FILE_INFO (folder), NULL);
+  g_return_val_if_fail (thunarx_file_info_is_directory (folder), NULL);
+
+  if (THUNARX_MENU_PROVIDER_GET_IFACE (provider)->get_folder_actions != NULL)
+    {
+      /* query the actions and take a reference on the provider for each action */
+      actions = (*THUNARX_MENU_PROVIDER_GET_IFACE (provider)->get_folder_actions) (provider, window, folder);
+      for (lp = actions; lp != NULL; lp = lp->next)
+        {
+          g_object_set_qdata_full (G_OBJECT (lp->data), thunarx_menu_provider_action_quark, provider, g_object_unref);
+          g_object_ref (G_OBJECT (provider));
+        }
+    }
+  else
+    {
+      actions = NULL;
+    }
+
+  return actions;
+}
+
+
+
+#define __THUNARX_MENU_PROVIDER_C__
+#include <thunarx/thunarx-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-menu-provider.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,75 @@
+/* $Id: thunarx-menu-provider.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_MENU_PROVIDER_H__
+#define __THUNARX_MENU_PROVIDER_H__
+
+#include <gtk/gtk.h>
+
+#include <thunarx/thunarx-file-info.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarxMenuProviderIface ThunarxMenuProviderIface;
+typedef struct _ThunarxMenuProvider      ThunarxMenuProvider;
+
+#define THUNARX_TYPE_MENU_PROVIDER           (thunarx_menu_provider_get_type ())
+#define THUNARX_MENU_PROVIDER(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNARX_TYPE_MENU_PROVIDER, ThunarxMenuProvider))
+#define THUNARX_IS_MENU_PROVIDER(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNARX_TYPE_MENU_PROVIDER))
+#define THUNARX_MENU_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNARX_TYPE_MENU_PROVIDER, ThunarxMenuProviderIface))
+
+struct _ThunarxMenuProviderIface
+{
+  /*< private >*/
+  GTypeInterface __parent__;
+
+  /*< public >*/
+  GList *(*get_file_actions)    (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 GList               *files);
+
+  GList *(*get_folder_actions)  (ThunarxMenuProvider *provider,
+                                 GtkWidget           *window,
+                                 ThunarxFileInfo     *folder);
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+};
+
+GType  thunarx_menu_provider_get_type           (void) G_GNUC_CONST;
+
+GList *thunarx_menu_provider_get_file_actions   (ThunarxMenuProvider *provider,
+                                                 GtkWidget           *window,
+                                                 GList               *files);
+
+GList *thunarx_menu_provider_get_folder_actions (ThunarxMenuProvider *provider,
+                                                 GtkWidget           *window,
+                                                 ThunarxFileInfo     *folder);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_MENU_PROVIDER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,126 @@
+/* $Id: thunarx-property-page-provider.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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 <thunarx/thunarx-property-page-provider.h>
+#include <thunarx/thunarx-alias.h>
+
+
+
+static GQuark thunarx_property_page_quark;
+
+
+
+GType
+thunarx_property_page_provider_get_type (void)
+{
+  static GType type = G_TYPE_INVALID;
+
+  if (G_UNLIKELY (type == G_TYPE_INVALID))
+    {
+      static const GTypeInfo info =
+      {
+        sizeof (ThunarxPropertyPageProviderIface),
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        0,
+        0,
+        NULL,
+        NULL,
+      };
+
+      /* register the property page provider interface */
+      type = g_type_register_static (G_TYPE_INTERFACE, "ThunarxPropertyPageProvider", &info, 0);
+      g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+
+      /* allocate the thunarx-property-page quark */
+      thunarx_property_page_quark = g_quark_from_static_string ("thunarx-property-page");
+    }
+
+  return type;
+}
+
+
+
+/**
+ * thunarx_property_page_provider_get_pages:
+ * @provider : a #ThunarxPropertyPageProvider.
+ * @files    : the list of #ThunarxFileInfo<!---->s for which a properties dialog will be displayed.
+ *
+ * Returns the list of #ThunarxPropertyPage<!---->s that @provider has to offer for @files.
+ *
+ * As a special note, this method automatically takes a reference on the
+ * @provider for every #ThunarxPropertyPage object returned from the real implementation
+ * of this method in @provider. This is to make sure that the extension stays
+ * in memory for atleast the time that the pages are used. If the extension
+ * wants to stay in memory for a longer time, it'll need to take care of this
+ * itself (e.g. by taking an additional reference on the @provider itself,
+ * that's released at a later time).
+ *
+ * The caller is responsible to free the returned list of pages using
+ * something like this when no longer needed:
+ * <informalexample><programlisting>
+ * g_list_foreach (list, (GFunc) g_object_ref, NULL);
+ * g_list_foreach (list, (GFunc) gtk_object_sink, NULL);
+ * g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ * g_list_free (list);
+ * </programlisting></informalexample>
+ *
+ * Return value: the list of #ThunarxPropertyPage<!---->s that @provider has to offer
+ *               for @files.
+ **/
+GList*
+thunarx_property_page_provider_get_pages (ThunarxPropertyPageProvider *provider,
+                                          GList                       *files)
+{
+  GList *pages;
+  GList *lp;
+
+  g_return_val_if_fail (THUNARX_IS_PROPERTY_PAGE_PROVIDER (provider), NULL);
+  g_return_val_if_fail (files != NULL, NULL);
+
+  if (THUNARX_PROPERTY_PAGE_PROVIDER_GET_IFACE (provider)->get_pages != NULL)
+    {
+      /* query the property pages and take a reference on the provider for each page */
+      pages = (*THUNARX_PROPERTY_PAGE_PROVIDER_GET_IFACE (provider)->get_pages) (provider, files);
+      for (lp = pages; lp != NULL; lp = lp->next)
+        {
+          g_object_set_qdata_full (G_OBJECT (lp->data), thunarx_property_page_quark, provider, g_object_unref);
+          g_object_ref (G_OBJECT (provider));
+        }
+    }
+  else
+    {
+      pages = NULL;
+    }
+
+  return pages;
+}
+
+
+
+#define __THUNARX_PROPERTY_PAGE_PROVIDER_C__
+#include <thunarx/thunarx-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page-provider.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,64 @@
+/* $Id: thunarx-property-page-provider.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_PROPERTY_PAGE_PROVIDER_H__
+#define __THUNARX_PROPERTY_PAGE_PROVIDER_H__
+
+#include <thunarx/thunarx-property-page.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarxPropertyPageProviderIface ThunarxPropertyPageProviderIface;
+typedef struct _ThunarxPropertyPageProvider      ThunarxPropertyPageProvider;
+
+#define THUNARX_TYPE_PROPERTY_PAGE_PROVIDER           (thunarx_property_page_provider_get_type ())
+#define THUNARX_PROPERTY_PAGE_PROVIDER(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNARX_TYPE_PROPERTY_PAGE_PROVIDER, ThunarxPropertyPageProvider))
+#define THUNARX_IS_PROPERTY_PAGE_PROVIDER(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNARX_TYPE_PROPERTY_PAGE_PROVIDER))
+#define THUNARX_PROPERTY_PAGE_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), THUNARX_TYPE_PROPERTY_PAGE_PROVIDER, ThunarxPropertyPageProviderIface))
+
+struct _ThunarxPropertyPageProviderIface
+{
+  /*< private >*/
+  GTypeInterface __parent__;
+
+  /*< public >*/
+  GList *(*get_pages) (ThunarxPropertyPageProvider *provider,
+                       GList                       *files);
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+  void (*reserved5) (void);
+};
+
+GType  thunarx_property_page_provider_get_type  (void) G_GNUC_CONST;
+
+GList *thunarx_property_page_provider_get_pages (ThunarxPropertyPageProvider *provider,
+                                                 GList                       *files);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_PROPERTY_PAGE_PROVIDER_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.c
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.c	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.c	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,401 @@
+/* $Id: thunarx-property-page.c 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; 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-lib.h>
+
+#include <thunarx/thunarx-property-page.h>
+#include <thunarx/thunarx-alias.h>
+
+
+
+#define THUNARX_PROPERTY_PAGE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), THUNARX_TYPE_PROPERTY_PAGE, ThunarxPropertyPagePrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+  PROP_0,
+  PROP_LABEL,
+  PROP_LABEL_WIDGET,
+};
+
+
+
+static void thunarx_property_page_class_init    (ThunarxPropertyPageClass *klass);
+static void thunarx_property_page_init          (ThunarxPropertyPage      *property_page);
+static void thunarx_property_page_get_property  (GObject                  *object,
+                                                 guint                     prop_id,
+                                                 GValue                   *value,
+                                                 GParamSpec               *pspec);
+static void thunarx_property_page_set_property  (GObject                  *object,
+                                                 guint                     prop_id,
+                                                 const GValue             *value,
+                                                 GParamSpec               *pspec);
+static void thunarx_property_page_destroy       (GtkObject                *object);
+static void thunarx_property_page_size_request  (GtkWidget                *widget,
+                                                 GtkRequisition           *requisition);
+static void thunarx_property_page_size_allocate (GtkWidget                *widget,
+                                                 GtkAllocation            *allocation);
+
+
+
+struct _ThunarxPropertyPagePrivate
+{
+  GtkWidget *label_widget;
+};
+
+
+
+G_DEFINE_TYPE (ThunarxPropertyPage, thunarx_property_page, GTK_TYPE_BIN);
+
+
+
+static void
+thunarx_property_page_class_init (ThunarxPropertyPageClass *klass)
+{
+  GtkObjectClass *gtkobject_class;
+  GtkWidgetClass *gtkwidget_class;
+  GObjectClass   *gobject_class;
+
+  /* add our private data to the class type */
+  g_type_class_add_private (klass, sizeof (ThunarxPropertyPagePrivate));
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->get_property = thunarx_property_page_get_property;
+  gobject_class->set_property = thunarx_property_page_set_property;
+
+  gtkobject_class = GTK_OBJECT_CLASS (klass);
+  gtkobject_class->destroy = thunarx_property_page_destroy;
+
+  gtkwidget_class = GTK_WIDGET_CLASS (klass);
+  gtkwidget_class->size_request = thunarx_property_page_size_request;
+  gtkwidget_class->size_allocate = thunarx_property_page_size_allocate;
+
+  /**
+   * ThunarxPropertyPage::label:
+   *
+   * Text of the page's label.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LABEL,
+                                   g_param_spec_string ("label",
+                                                        _("Label"),
+                                                        _("Text of the page's label"),
+                                                        NULL,
+                                                        G_PARAM_READWRITE));
+
+  /**
+   * ThunarxPropertyPage::label-widget:
+   *
+   * A widget to display in place of the usual page label.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_LABEL_WIDGET,
+                                   g_param_spec_object ("label-widget",
+                                                        _("Label widget"),
+                                                        _("A widget to display in place of the usual page label"),
+                                                        GTK_TYPE_WIDGET,
+                                                        G_PARAM_READWRITE));
+}
+
+
+
+static void
+thunarx_property_page_init (ThunarxPropertyPage *property_page)
+{
+  property_page->priv = THUNARX_PROPERTY_PAGE_GET_PRIVATE (property_page);
+}
+
+
+
+static void
+thunarx_property_page_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  ThunarxPropertyPage *property_page = THUNARX_PROPERTY_PAGE (object);
+
+  switch (prop_id)
+    {
+    case PROP_LABEL:
+      g_value_set_string (value, thunarx_property_page_get_label (property_page));
+      break;
+
+    case PROP_LABEL_WIDGET:
+      g_value_set_object (value, thunarx_property_page_get_label_widget (property_page));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunarx_property_page_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  ThunarxPropertyPage *property_page = THUNARX_PROPERTY_PAGE (object);
+
+  switch (prop_id)
+    {
+    case PROP_LABEL:
+      thunarx_property_page_set_label (property_page, g_value_get_string (value));
+      break;
+
+    case PROP_LABEL_WIDGET:
+      thunarx_property_page_set_label_widget (property_page, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+
+static void
+thunarx_property_page_destroy (GtkObject *object)
+{
+  ThunarxPropertyPage *property_page = THUNARX_PROPERTY_PAGE (object);
+
+  /* destroy the label widget (if any) */
+  if (G_LIKELY (property_page->priv->label_widget != NULL))
+    {
+      gtk_object_destroy (GTK_OBJECT (property_page->priv->label_widget));
+      g_object_unref (G_OBJECT (property_page->priv->label_widget));
+      property_page->priv->label_widget = NULL;
+    }
+
+  (*GTK_OBJECT_CLASS (thunarx_property_page_parent_class)->destroy) (object);
+}
+
+
+
+static void
+thunarx_property_page_size_request (GtkWidget      *widget,
+                                    GtkRequisition *requisition)
+{
+  GtkBin *bin = GTK_BIN (widget);
+
+  if (G_LIKELY (bin->child != NULL && GTK_WIDGET_VISIBLE (bin->child)))
+    {
+      gtk_widget_size_request (bin->child, requisition);
+    }
+  else
+    {
+      requisition->width = 0;
+      requisition->height = 0;
+    }
+
+  requisition->width += 2 * (GTK_CONTAINER (bin)->border_width + widget->style->xthickness);
+  requisition->height += 2 * (GTK_CONTAINER (bin)->border_width + widget->style->ythickness);
+}
+
+
+
+static void
+thunarx_property_page_size_allocate (GtkWidget     *widget,
+                                     GtkAllocation *allocation)
+{
+  GtkAllocation child_allocation;
+  GtkBin       *bin = GTK_BIN (widget);
+
+  /* apply the allocation to the property page */
+  widget->allocation = *allocation;
+
+  /* apply the child allocation if we have a child */
+  if (G_LIKELY (bin->child != NULL && GTK_WIDGET_VISIBLE (bin->child)))
+    {
+      /* calculate the allocation for the child widget */
+      child_allocation.x = allocation->x + GTK_CONTAINER (bin)->border_width + widget->style->xthickness;
+      child_allocation.y = allocation->y + GTK_CONTAINER (bin)->border_width + widget->style->ythickness;
+      child_allocation.width = allocation->width - 2 * (GTK_CONTAINER (bin)->border_width + widget->style->xthickness);
+      child_allocation.height = allocation->height - 2 * (GTK_CONTAINER (bin)->border_width + widget->style->ythickness);
+
+      /* apply the child allocation */
+      gtk_widget_size_allocate (bin->child, &child_allocation);
+    }
+}
+
+
+
+/**
+ * thunarx_property_page_new:
+ * @label : the text to use as the label of the page.
+ *
+ * Allocates a new #ThunarxPropertyPage widget and sets its label to the
+ * specified @label. If @label is %NULL, the label is omitted.
+ *
+ * Return value: the newly allocated #ThunarxPropertyPage
+ *               widget.
+ **/
+GtkWidget*
+thunarx_property_page_new (const gchar *label)
+{
+  return g_object_new (THUNARX_TYPE_PROPERTY_PAGE, "label", label, NULL);
+}
+
+
+
+/**
+ * thunarx_property_page_new_with_label_widget:
+ * @label_widget : a #GtkWidget, which should be used as label.
+ *
+ * Allocates a new #ThunarxPropertyPage widget and sets its label to
+ * the specified @label_widget.
+ *
+ * Return value: the newly allocated #ThunarxPropertyPage widget.
+ **/
+GtkWidget*
+thunarx_property_page_new_with_label_widget (GtkWidget *label_widget)
+{
+  return g_object_new (THUNARX_TYPE_PROPERTY_PAGE, "label-widget", label_widget, NULL);
+}
+
+
+
+/**
+ * thunarx_property_page_get_label:
+ * @property_page : a #ThunarxPropertyPage.
+ *
+ * If the @property_page's label widget is a #GtkLabel, returns the text
+ * in the label widget (the @property_page will have a #GtkLabel for the
+ * label widget if a non-%NULL argument was passed to thunarx_property_page_new()).
+ *
+ * Return value: the text in the label or %NULL if there was no label widget or
+ *               the label widget was not a #GtkLabel. The returned string is
+ *               owned by the @property_page and must not be modified or freed.
+ **/
+const gchar*
+thunarx_property_page_get_label (ThunarxPropertyPage *property_page)
+{
+  g_return_val_if_fail (THUNARX_IS_PROPERTY_PAGE (property_page), NULL);
+
+  if (property_page->priv->label_widget != NULL && GTK_IS_LABEL (property_page->priv->label_widget))
+    return gtk_label_get_text (GTK_LABEL (property_page->priv->label_widget));
+  else
+    return NULL;
+}
+
+
+
+/**
+ * thunarx_property_page_set_label:
+ * @property_page : a #ThunarxPropertyPage.
+ * @label         : the text to use as the label of the page.
+ *
+ * Sets the text of the label. If @label is %NULL, the current label is
+ * removed.
+ **/
+void
+thunarx_property_page_set_label (ThunarxPropertyPage *property_page,
+                                 const gchar         *label)
+{
+  GtkWidget *widget;
+
+  g_return_if_fail (THUNARX_IS_PROPERTY_PAGE (property_page));
+
+  if (label == NULL)
+    {
+      thunarx_property_page_set_label_widget (property_page, NULL);
+    }
+  else
+    {
+      widget = gtk_label_new (label);
+      thunarx_property_page_set_label_widget (property_page, widget);
+      gtk_widget_show (widget);
+    }
+}
+
+
+
+/**
+ * thunarx_property_page_get_label_widget:
+ * @property_page : a #ThunarxPropertyPage.
+ *
+ * Returns the label widget for the @property_page. See
+ * thunarx_property_page_set_label_widget().
+ *
+ * return value: the label widget or %NULL if there is none.
+ **/
+GtkWidget*
+thunarx_property_page_get_label_widget (ThunarxPropertyPage *property_page)
+{
+  g_return_val_if_fail (THUNARX_IS_PROPERTY_PAGE (property_page), NULL);
+  return property_page->priv->label_widget;
+}
+
+
+
+/**
+ * thunarx_property_page_set_label_widget:
+ * @property_page : a #ThunarxPropertyPage.
+ * @label_widget  : the new label widget.
+ *
+ * Sets the label widget for the @property_page. This is the widget
+ * that will appear in the notebook header for the @property_page.
+ **/
+void
+thunarx_property_page_set_label_widget (ThunarxPropertyPage *property_page,
+                                        GtkWidget           *label_widget)
+{
+  g_return_if_fail (THUNARX_IS_PROPERTY_PAGE (property_page));
+  g_return_if_fail (label_widget == NULL || (GTK_IS_WIDGET (label_widget) && label_widget->parent == NULL));
+
+  if (G_UNLIKELY (label_widget == property_page->priv->label_widget))
+    return;
+
+  /* disconnect from the previous label widget */
+  if (G_LIKELY (property_page->priv->label_widget != NULL))
+    g_object_unref (G_OBJECT (property_page->priv->label_widget));
+
+  /* activate the new label widget */
+  property_page->priv->label_widget = label_widget;
+
+  /* connect to the new label widget */
+  if (G_LIKELY (label_widget != NULL))
+    {
+      g_object_ref (G_OBJECT (label_widget));
+      gtk_object_sink (GTK_OBJECT (label_widget));
+    }
+
+  /* notify listeners */
+  g_object_freeze_notify (G_OBJECT (property_page));
+  g_object_notify (G_OBJECT (property_page), "label");
+  g_object_notify (G_OBJECT (property_page), "label-widget");
+  g_object_thaw_notify (G_OBJECT (property_page));
+}
+
+
+
+#define __THUNARX_PROPERTY_PAGE_C__
+#include <thunarx/thunarx-aliasdef.c>

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx-property-page.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,77 @@
+/* $Id: thunarx-property-page.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if !defined(THUNARX_INSIDE_THUNARX_H) && !defined(THUNARX_COMPILATION)
+#error "Only <thunarx/thunarx.h> can be included directly, this file may disappear or change contents"
+#endif
+
+#ifndef __THUNARX_PROPERTY_PAGE_H__
+#define __THUNARX_PROPERTY_PAGE_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS;
+
+typedef struct _ThunarxPropertyPagePrivate ThunarxPropertyPagePrivate;
+typedef struct _ThunarxPropertyPageClass   ThunarxPropertyPageClass;
+typedef struct _ThunarxPropertyPage        ThunarxPropertyPage;
+
+#define THUNARX_TYPE_PROPERTY_PAGE            (thunarx_property_page_get_type ())
+#define THUNARX_PROPERTY_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNARX_TYPE_PROPERTY_PAGE, ThunarxPropertyPage))
+#define THUNARX_PROPERTY_PAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), THUNARX_TYPE_PROPERTY_PAGE, ThunarxPropertyPageClass))
+#define THUNARX_IS_PROPERTY_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), THUNARX_TYPE_PROPERTY_PAGE))
+#define THUNARX_IS_PROPERTY_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), THUNARX_TYPE_PROPERTY_PAGE))
+#define THUNARX_PROPERTY_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), THUNARX_TYPE_PROPERTY_PAGE))
+
+struct _ThunarxPropertyPageClass
+{
+  GtkBinClass __parent__;
+
+  /*< private >*/
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+};
+
+struct _ThunarxPropertyPage
+{
+  GtkBin __parent__;
+
+  /*< private >*/
+  ThunarxPropertyPagePrivate *priv;
+};
+
+GType        thunarx_property_page_get_type              (void) G_GNUC_CONST;
+
+GtkWidget   *thunarx_property_page_new                   (const gchar         *label) G_GNUC_MALLOC;
+GtkWidget   *thunarx_property_page_new_with_label_widget (GtkWidget           *label_widget) G_GNUC_MALLOC;
+
+const gchar *thunarx_property_page_get_label             (ThunarxPropertyPage *property_page);
+void         thunarx_property_page_set_label             (ThunarxPropertyPage *property_page,
+                                                          const gchar         *label);
+
+GtkWidget   *thunarx_property_page_get_label_widget      (ThunarxPropertyPage *property_page);
+void         thunarx_property_page_set_label_widget      (ThunarxPropertyPage *property_page,
+                                                          GtkWidget           *label_widget);
+
+G_END_DECLS;
+
+#endif /* !__THUNARX_PROPERTY_PAGE_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.h
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.h	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.h	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,34 @@
+/* $Id: thunarx.h 18843 2005-11-14 14:25:58Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THUNARX_H__
+#define __THUNARX_H__
+
+#define THUNARX_INSIDE_THUNARX_H
+
+#include <thunarx/thunarx-config.h>
+#include <thunarx/thunarx-file-info.h>
+#include <thunarx/thunarx-menu-provider.h>
+#include <thunarx/thunarx-property-page.h>
+#include <thunarx/thunarx-property-page-provider.h>
+
+#undef THUNARX_INSIDE_THUNARX_H
+
+#endif /* !__THUNARX_H__ */

Added: desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.symbols
===================================================================
--- desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.symbols	2005-11-17 13:36:21 UTC (rev 305)
+++ desktop/trunk/thunar/branches/upstream/current/thunarx/thunarx.symbols	2005-11-17 13:47:07 UTC (rev 306)
@@ -0,0 +1,92 @@
+/* $Id: thunarx.symbols 17553 2005-09-11 00:07:08Z benny $ */
+/*-
+ * Copyright (c) 2005 Benedikt Meurer <benny at xfce.org>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* This file lists all exported symbols. It is used to generate
+ * the thunarx.def file used to control exports on Windows and the
+ * thunarx-alias.h/thunarx-aliasdef.c files used to avoid PLT
+ * entries for * internal uses of exported functions (see
+ * make-thunarx-alias.pl).
+ * 
+ * Every symbol must be included in the right
+ * #ifdef IN_HEADER(sym) #endif and
+ * #ifdef IN_SOURCE(sym) #endif sections. 
+ */
+
+#ifdef ALL_FILES
+#define IN_SOURCE(x) 1
+#define IN_HEADER(x) 1
+#endif
+
+/* thunarx-config symbols */
+#if IN_HEADER(__THUNARX_CONFIG_H__)
+#if IN_SOURCE(__THUNARX_CONFIG_C__)
+thunarx_major_version
+thunarx_minor_version
+thunarx_micro_version
+thunarx_check_version
+#endif
+#endif
+
+/* ThunarxFileInfo methods */
+#if IN_HEADER(__THUNARX_FILE_INFO_H__)
+#if IN_SOURCE(__THUNARX_FILE_INFO_C__)
+thunarx_file_info_get_type G_GNUC_CONST
+thunarx_file_info_get_name
+thunarx_file_info_get_uri
+thunarx_file_info_get_parent_uri
+thunarx_file_info_get_uri_scheme
+thunarx_file_info_get_mime_type
+thunarx_file_info_has_mime_type
+thunarx_file_info_is_directory
+thunarx_file_info_list_copy
+thunarx_file_info_list_free
+#endif
+#endif
+
+/* ThunarxMenuProvider methods */
+#if IN_HEADER(__THUNARX_MENU_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_MENU_PROVIDER_C__)
+thunarx_menu_provider_get_type G_GNUC_CONST
+thunarx_menu_provider_get_file_actions
+thunarx_menu_provider_get_folder_actions
+#endif
+#endif
+
+/* ThunarxPropertyPage methods */
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_C__)
+thunarx_property_page_get_type G_GNUC_CONST
+thunarx_property_page_new G_GNUC_MALLOC
+thunarx_property_page_new_with_label_widget G_GNUC_MALLOC
+thunarx_property_page_get_label
+thunarx_property_page_set_label
+thunarx_property_page_get_label_widget
+thunarx_property_page_set_label_widget
+#endif
+#endif
+
+/* ThunarxPropertyPageProvider methods */
+#if IN_HEADER(__THUNARX_PROPERTY_PAGE_PROVIDER_H__)
+#if IN_SOURCE(__THUNARX_PROPERTY_PAGE_PROVIDER_C__)
+thunarx_property_page_provider_get_type G_GNUC_CONST
+thunarx_property_page_provider_get_pages
+#endif
+#endif
+




More information about the Pkg-xfce-commits mailing list